From ed34994f452a87f72aada6192c680ea5e0478699 Mon Sep 17 00:00:00 2001 From: zhw <627622230@qq.com> Date: Mon, 29 Apr 2024 15:35:04 +0800 Subject: [PATCH] update to 6.8.37 --- BT-Panel | 51 +- BTPanel/__init__.py | 1601 +- BTPanel/static/amd/config.js | 1171 + BTPanel/static/amd/configMixin.js | 101 + BTPanel/static/amd/main.js | 68 + BTPanel/static/amd/noticeConfig.js | 372 + BTPanel/static/amd/panelConfig.js | 564 + BTPanel/static/amd/public.js | 0 BTPanel/static/amd/require.min.js | 5 + BTPanel/static/amd/safeConfig.js | 992 + BTPanel/static/amd/utils.min.js | 3227 +++ .../bootstrap-3.3.5/css/bootstrap.min.css | 2 +- .../fonts/glyphicons-halflings-regular.woff2 | Bin 18028 -> 17848 bytes BTPanel/static/css/files_style.css | 209 +- BTPanel/static/css/site.css | 7259 ++++-- .../static/images/firewall/intrusion/1.png | Bin 0 -> 66396 bytes .../static/images/firewall/intrusion/2.png | Bin 0 -> 25326 bytes .../static/images/firewall/intrusion/3.png | Bin 0 -> 23124 bytes .../static/images/firewall/intrusion/4.png | Bin 0 -> 51658 bytes BTPanel/static/images/firewall/logAudit/1.png | Bin 0 -> 87282 bytes BTPanel/static/images/firewall/ssh/1.png | Bin 0 -> 81599 bytes BTPanel/static/images/firewall/system/1.png | Bin 0 -> 61670 bytes BTPanel/static/images/firewall/system/2.png | Bin 0 -> 33937 bytes BTPanel/static/images/firewall/system/3.png | Bin 0 -> 50814 bytes BTPanel/static/images/loading-2.gif | Bin 0 -> 1787 bytes BTPanel/static/images/pro.svg | 27 + BTPanel/static/images/pro_pay.svg | 27 + BTPanel/static/images/recommend/disk.png | Bin 0 -> 27660 bytes BTPanel/static/img/config_alert.png | Bin 0 -> 24202 bytes BTPanel/static/img/feedback.svg | 7 + BTPanel/static/img/feedback/QA_banner.png | Bin 0 -> 5279 bytes BTPanel/static/img/feedback/QA_close.png | Bin 0 -> 246 bytes BTPanel/static/img/feedback/QA_emoj.png | Bin 0 -> 13376 bytes BTPanel/static/img/feedback/QA_like.png | Bin 0 -> 789 bytes BTPanel/static/img/feedback/QA_logo.png | Bin 0 -> 10235 bytes BTPanel/static/img/feedback/demand.svg | 1 + BTPanel/static/img/feedback_2.svg | 7 + BTPanel/static/img/ftp/ftp-logs.png | Bin 0 -> 19056 bytes BTPanel/static/img/hint-confirm-icon.svg | 1 + BTPanel/static/img/ico/icon-text-hint.svg | 7 + BTPanel/static/img/icon-ssl-service.png | Bin 0 -> 304 bytes BTPanel/static/img/logAudit/logAudit.png | Bin 0 -> 30851 bytes BTPanel/static/img/nginx_firewall/1.png | Bin 0 -> 119273 bytes BTPanel/static/img/nginx_firewall/2.png | Bin 0 -> 99028 bytes BTPanel/static/img/nginx_firewall/3.png | Bin 0 -> 84181 bytes BTPanel/static/img/nginx_firewall/4.png | Bin 0 -> 62933 bytes BTPanel/static/img/nginx_firewall/5.png | Bin 0 -> 85537 bytes BTPanel/static/img/nginx_firewall/6.png | Bin 0 -> 90006 bytes BTPanel/static/img/nginx_firewall/7.png | Bin 0 -> 64813 bytes .../static/img/scrollbar/scroll-bar-block.png | Bin 0 -> 662 bytes .../static/img/scrollbar/scroll-bar-down.png | Bin 0 -> 224 bytes .../static/img/scrollbar/scroll-bar-up.png | Bin 0 -> 215 bytes BTPanel/static/img/soft_ico/ico-anti_spam.png | Bin 0 -> 1009 bytes BTPanel/static/img/soft_ico/ico-apache.png | Bin 1790 -> 1417 bytes BTPanel/static/img/soft_ico/ico-app.png | Bin 1917 -> 2149 bytes BTPanel/static/img/soft_ico/ico-aws_s3.png | Bin 0 -> 3120 bytes BTPanel/static/img/soft_ico/ico-backup.png | Bin 1761 -> 2743 bytes BTPanel/static/img/soft_ico/ico-boot.png | Bin 0 -> 1280 bytes BTPanel/static/img/soft_ico/ico-bt_boce.png | Bin 0 -> 3134 bytes BTPanel/static/img/soft_ico/ico-bt_hids.png | Bin 0 -> 698 bytes .../static/img/soft_ico/ico-bt_security.png | Bin 0 -> 417 bytes .../static/img/soft_ico/ico-bt_ssh_auth.png | Bin 0 -> 1459 bytes BTPanel/static/img/soft_ico/ico-bt_vsftpd.png | Bin 0 -> 1060 bytes BTPanel/static/img/soft_ico/ico-btapibot.png | Bin 0 -> 902 bytes BTPanel/static/img/soft_ico/ico-btapp.png | Bin 0 -> 1472 bytes BTPanel/static/img/soft_ico/ico-btwaf.png | Bin 2004 -> 2501 bytes .../static/img/soft_ico/ico-btwaf_httpd.png | Bin 2004 -> 2445 bytes .../static/img/soft_ico/ico-cf_ipchange.png | Bin 0 -> 557 bytes BTPanel/static/img/soft_ico/ico-clear.png | Bin 1896 -> 3157 bytes .../static/img/soft_ico/ico-cloud_db_diff.png | Bin 0 -> 3313 bytes .../static/img/soft_ico/ico-cloudflare.png | Bin 0 -> 971 bytes .../static/img/soft_ico/ico-coll_admin.png | Bin 0 -> 1102 bytes BTPanel/static/img/soft_ico/ico-cosfs.png | Bin 0 -> 2985 bytes .../img/soft_ico/ico-database_mater.png | Bin 0 -> 2662 bytes BTPanel/static/img/soft_ico/ico-dbcache.png | Bin 0 -> 1510 bytes .../static/img/soft_ico/ico-deployment.png | Bin 1947 -> 553 bytes .../static/img/soft_ico/ico-disk_analysis.png | Bin 0 -> 2386 bytes BTPanel/static/img/soft_ico/ico-diskquota.png | Bin 0 -> 2254 bytes .../static/img/soft_ico/ico-dns_manager.png | Bin 0 -> 1505 bytes BTPanel/static/img/soft_ico/ico-dnspod.png | Bin 0 -> 3728 bytes BTPanel/static/img/soft_ico/ico-docker.png | Bin 2294 -> 1987 bytes BTPanel/static/img/soft_ico/ico-ehost.png | Bin 0 -> 1055 bytes .../img/soft_ico/ico-enterprise_backup.png | Bin 0 -> 1844 bytes BTPanel/static/img/soft_ico/ico-fail2ban.png | Bin 0 -> 4213 bytes .../img/soft_ico/ico-file_hash_check.png | Bin 0 -> 881 bytes .../img/soft_ico/ico-file_real_time_log.png | Bin 0 -> 658 bytes BTPanel/static/img/soft_ico/ico-firewall.png | Bin 0 -> 930 bytes BTPanel/static/img/soft_ico/ico-free_waf.png | Bin 0 -> 2501 bytes BTPanel/static/img/soft_ico/ico-freefrpc.png | Bin 0 -> 313 bytes BTPanel/static/img/soft_ico/ico-frps.png | Bin 0 -> 313 bytes BTPanel/static/img/soft_ico/ico-ftp.png | Bin 1646 -> 1531 bytes .../img/soft_ico/ico-gcloud_storage.png | Bin 0 -> 3141 bytes BTPanel/static/img/soft_ico/ico-gdrive.png | Bin 0 -> 2946 bytes .../static/img/soft_ico/ico-hm_shell_san.png | Bin 0 -> 2479 bytes BTPanel/static/img/soft_ico/ico-hxsquota.png | Bin 0 -> 2971 bytes .../img/soft_ico/ico-ip_configuration.png | Bin 0 -> 1709 bytes .../static/img/soft_ico/ico-java_manager.png | Bin 0 -> 2974 bytes .../static/img/soft_ico/ico-jumpserver.png | Bin 0 -> 2474 bytes .../static/img/soft_ico/ico-linksforbt.png | Bin 0 -> 2088 bytes BTPanel/static/img/soft_ico/ico-linuxsys.png | Bin 1887 -> 1623 bytes .../static/img/soft_ico/ico-load_balance.png | Bin 0 -> 1137 bytes .../static/img/soft_ico/ico-load_leveling.png | Bin 1137 -> 621 bytes BTPanel/static/img/soft_ico/ico-mail_sys.png | Bin 0 -> 1144 bytes .../static/img/soft_ico/ico-masterslave.png | Bin 2061 -> 1075 bytes BTPanel/static/img/soft_ico/ico-memcached.png | Bin 1678 -> 1705 bytes BTPanel/static/img/soft_ico/ico-modbtywaf.png | Bin 0 -> 2501 bytes BTPanel/static/img/soft_ico/ico-mongodb.png | Bin 2067 -> 1464 bytes BTPanel/static/img/soft_ico/ico-msg_push.png | Bin 1384 -> 1819 bytes .../static/img/soft_ico/ico-msonedrive.png | Bin 0 -> 1336 bytes .../static/img/soft_ico/ico-my_toolbox.png | Bin 0 -> 2380 bytes BTPanel/static/img/soft_ico/ico-mysql.png | Bin 1453 -> 1545 bytes .../img/soft_ico/ico-mysql_replicate.png | Bin 0 -> 1095 bytes BTPanel/static/img/soft_ico/ico-nfs_tools.png | Bin 0 -> 932 bytes BTPanel/static/img/soft_ico/ico-nginx.png | Bin 1749 -> 1618 bytes .../static/img/soft_ico/ico-node_admin.png | Bin 0 -> 2069 bytes BTPanel/static/img/soft_ico/ico-nodejs.png | Bin 0 -> 1017 bytes BTPanel/static/img/soft_ico/ico-oneav.png | Bin 0 -> 1848 bytes BTPanel/static/img/soft_ico/ico-oos.png | Bin 0 -> 1678 bytes .../static/img/soft_ico/ico-openlitespeed.png | Bin 3200 -> 3885 bytes BTPanel/static/img/soft_ico/ico-ossfs.png | Bin 3801 -> 646 bytes .../static/img/soft_ico/ico-pgsql_manager.png | Bin 3294 -> 2701 bytes BTPanel/static/img/soft_ico/ico-php.png | Bin 1537 -> 1635 bytes .../static/img/soft_ico/ico-php_encoder.png | Bin 0 -> 1193 bytes .../static/img/soft_ico/ico-php_filter.png | Bin 0 -> 2668 bytes .../static/img/soft_ico/ico-phpencoder.png | Bin 0 -> 1193 bytes BTPanel/static/img/soft_ico/ico-phpguard.png | Bin 2241 -> 2256 bytes .../static/img/soft_ico/ico-phpmyadmin.png | Bin 2691 -> 2786 bytes BTPanel/static/img/soft_ico/ico-phpok.png | Bin 0 -> 2069 bytes BTPanel/static/img/soft_ico/ico-pm2.png | Bin 2259 -> 1017 bytes BTPanel/static/img/soft_ico/ico-psync_api.png | Bin 0 -> 705 bytes BTPanel/static/img/soft_ico/ico-pureftpd.png | Bin 1210 -> 1227 bytes .../static/img/soft_ico/ico-pythonmamager.png | Bin 1660 -> 1612 bytes BTPanel/static/img/soft_ico/ico-redis.png | Bin 2877 -> 2852 bytes .../img/soft_ico/ico-resource_manager.png | Bin 0 -> 2091 bytes BTPanel/static/img/soft_ico/ico-rsync.png | Bin 1133 -> 996 bytes BTPanel/static/img/soft_ico/ico-safelogin.png | Bin 0 -> 715 bytes .../static/img/soft_ico/ico-san_security.png | Bin 0 -> 3611 bytes BTPanel/static/img/soft_ico/ico-score.png | Bin 2017 -> 2072 bytes .../static/img/soft_ico/ico-sdetection.svg | 10 + .../img/soft_ico/ico-security_notice.png | Bin 0 -> 1511 bytes .../img/soft_ico/ico-site_optimization.png | Bin 0 -> 2976 bytes .../static/img/soft_ico/ico-site_speed.png | Bin 0 -> 1353 bytes .../static/img/soft_ico/ico-ssh_manager.png | Bin 0 -> 771 bytes BTPanel/static/img/soft_ico/ico-sshkey.png | Bin 2912 -> 3131 bytes .../static/img/soft_ico/ico-ssl_verify.png | Bin 0 -> 886 bytes .../static/img/soft_ico/ico-static_cdn.png | Bin 0 -> 1788 bytes .../static/img/soft_ico/ico-supervisor.png | Bin 0 -> 2808 bytes BTPanel/static/img/soft_ico/ico-syssafe.png | Bin 1721 -> 1007 bytes .../static/img/soft_ico/ico-system_scan.png | Bin 0 -> 3611 bytes .../static/img/soft_ico/ico-tamper_core.png | Bin 0 -> 556 bytes .../static/img/soft_ico/ico-tamper_drive.png | Bin 0 -> 556 bytes .../static/img/soft_ico/ico-tamper_proof.png | Bin 1245 -> 556 bytes .../static/img/soft_ico/ico-task_manager.png | Bin 1031 -> 455 bytes BTPanel/static/img/soft_ico/ico-tomcat.png | Bin 2436 -> 2508 bytes BTPanel/static/img/soft_ico/ico-tomcat2.png | Bin 2733 -> 2974 bytes BTPanel/static/img/soft_ico/ico-txcdn.png | Bin 0 -> 2899 bytes BTPanel/static/img/soft_ico/ico-upyun.png | Bin 2126 -> 2137 bytes BTPanel/static/img/soft_ico/ico-users.png | Bin 0 -> 3429 bytes .../static/img/soft_ico/ico-w7assistant.png | Bin 0 -> 1173 bytes BTPanel/static/img/soft_ico/ico-webhook.png | Bin 2018 -> 805 bytes .../img/soft_ico/ico-webshell_check.png | Bin 0 -> 3611 bytes BTPanel/static/img/soft_ico/ico-webssh.png | Bin 1459 -> 659 bytes BTPanel/static/img/soft_ico/ico-word.svg | 12 + .../static/img/soft_ico/ico-y6w_speedtest.png | Bin 0 -> 2644 bytes .../soft_ico/soft_icoico-docker_project_m.png | Bin 0 -> 2324 bytes .../img/soft_ico/soft_icoico-vuln_push.png | Bin 0 -> 4085 bytes BTPanel/static/img/ssh/login-logs.png | Bin 0 -> 21678 bytes BTPanel/static/img/update-icon.png | Bin 0 -> 12587 bytes BTPanel/static/img/update_1.png | Bin 0 -> 46578 bytes BTPanel/static/img/update_back.png | Bin 0 -> 17636 bytes BTPanel/static/img/update_bg.png | Bin 0 -> 64351 bytes BTPanel/static/js/bootstrap-select.min.js | 1 - BTPanel/static/js/control.js | 2323 +- BTPanel/static/js/countryCode.json | 1346 ++ BTPanel/static/js/crontab.js | 2872 +-- BTPanel/static/js/database.js | 4453 +++- BTPanel/static/js/docker.js | 3452 +++ BTPanel/static/js/files.js | 18 +- BTPanel/static/js/firewall.js | 3365 +++ BTPanel/static/js/index.js | 4631 +++- BTPanel/static/js/jquery-2.2.4.min.js | 4 + BTPanel/static/js/jsencrypt.min.js | 5454 +++++ BTPanel/static/js/logs.js | 1102 + BTPanel/static/js/md5.js | 1 - BTPanel/static/js/public.js | 10620 ++++---- BTPanel/static/js/public_backup.js | 16277 +++++++------ BTPanel/static/js/qrcode.min.js | 1 + BTPanel/static/js/site.js | 20050 ++++++++++------ BTPanel/static/js/soft.js | 91 +- BTPanel/static/js/tools.js | 5605 +++-- BTPanel/static/js/upload-drog.js | 907 + BTPanel/static/jsonTree/jsonTree.css | 107 + BTPanel/static/jsonTree/jsonTree.js | 819 + BTPanel/static/language/English/lan.js | 640 +- BTPanel/static/language/English/public.json | 4 +- BTPanel/static/language/English/template.json | 146 +- BTPanel/static/language/en/LC_MESSAGES/en.mo | Bin 0 -> 154785 bytes BTPanel/static/language/en/LC_MESSAGES/en.po | 5095 ++++ BTPanel/templates/default/autherr.html | 166 +- BTPanel/templates/default/config.html | 1225 +- BTPanel/templates/default/control.html | 622 +- BTPanel/templates/default/crontab.html | 311 +- BTPanel/templates/default/database.html | 297 +- BTPanel/templates/default/docker.html | 427 + BTPanel/templates/default/error2.html | 145 +- BTPanel/templates/default/files.html | 2 +- BTPanel/templates/default/firewall.html | 1562 +- BTPanel/templates/default/ftp.html | 21 +- BTPanel/templates/default/index.html | 11 +- BTPanel/templates/default/layout.html | 492 + BTPanel/templates/default/login.html | 23 +- BTPanel/templates/default/logs.html | 902 + .../templates/default/modify_password.html | 117 + BTPanel/templates/default/movie.html | 5 + BTPanel/templates/default/site.html | 4 + BTPanel/templates/default/soft.html | 16 +- class/PluginLoader.aarch64.Python3.7.so | Bin 0 -> 421816 bytes class/PluginLoader.i686.Python3.7.so | Bin 0 -> 437004 bytes class/PluginLoader.loongarch64.Python3.7.so | Bin 0 -> 628880 bytes class/PluginLoader.x86_64.Python3.7.so | Bin 0 -> 344408 bytes .../PluginLoader.x86_64.glibc214.Python3.7.so | Bin 0 -> 479316 bytes class/acme_v2.py | 736 +- class/ajax.py | 535 +- class/cachelib/__init__.py | 2 + class/cachelib/session_simpile.py | 196 + class/cachelib/simple.py | 38 +- class/common.py | 66 +- class/config.py | 1337 +- class/crontab.py | 101 +- class/data.py | 340 +- class/database.py | 1249 +- class/databaseModel/__init__.py | 0 class/databaseModel/base.py | 461 + class/databaseModel/mongodbModel.py | 777 + class/databaseModel/pgsqlModel.py | 668 + class/databaseModel/redisModel.py | 425 + class/databaseModel/sqliteModel.py | 22 + class/databaseModel/sqlserverModel.py | 495 + class/datatool.py | 1 + class/db.py | 101 +- class/db_mysql.py | 71 +- class/file_execute_deny.py | 9 +- class/files.py | 548 +- class/filesModel/base.py | 104 + class/filesModel/downModel.py | 46 + class/filesModel/gzModel.py | 342 + class/filesModel/logsModel.py | 289 + class/filesModel/rarModel.py | 243 + class/filesModel/searchModel.py | 307 + class/filesModel/sizeModel.py | 287 + class/filesModel/uploadModel.py | 170 + class/filesModel/zipModel.py | 327 + class/firewall_new.py | 2 +- class/firewalls.py | 63 +- class/flask_compress.py | 21 +- class/ftp.py | 23 +- class/ftplog.py | 539 + class/http_requests.py | 137 +- class/jobs.py | 451 +- class/log_analysis.py | 260 + class/logsModel/base.py | 141 + class/logsModel/ftpModel.py | 469 + class/logsModel/panelModel.py | 321 + class/logsModel/siteModel.py | 110 + class/monitorModel/base.py | 14 + class/monitorModel/process_managementModel.py | 556 + class/msg/dingding.html | 143 + class/msg/dingding_msg.py | 224 + class/msg/feishu.html | 142 + class/msg/feishu_msg.py | 214 + class/msg/mail.html | 253 + class/msg/mail_msg.py | 229 + class/msg/sms.html | 104 + class/msg/sms_msg.py | 217 + class/msg/tg.html | 149 + class/msg/tg_msg.py | 282 + class/msg/weixin.html | 75 + class/msg/weixin_msg.py | 268 + class/msg/wx_account.html | 258 + class/msg/wx_account_msg.py | 281 + class/one_key_wp.py | 1463 ++ class/panelAes.py | 61 +- class/panelApi.py | 3 + class/panelAuth.py | 157 +- class/panelBackup.py | 1043 +- class/panelController.py | 99 + class/panelDatabaseController.py | 103 + class/panelDefense.py | 87 + class/panelDnsapi.py | 5 +- class/panelHttpProxy.py | 277 + class/panelMessage.py | 169 +- class/panelModel/backupModel.py | 83 + class/panelModel/base.py | 21 + class/panelMssql.py | 107 + class/panelPHP.py | 4 +- class/panelPlugin.py | 332 +- class/panelProjectController.py | 49 +- class/panelPush.py | 703 + class/panelRedirect.py | 410 +- class/panelSSL.py | 1498 +- class/panelSafeController.py | 93 + class/panelSearch.py | 117 +- class/panelSite.py | 636 +- class/panelTask.py | 96 +- class/panelVideo.py | 2 +- class/panelWarning.py | 1536 +- class/panel_search.py | 260 + class/panel_telegram_bot.py | 14 +- class/plugin_deployment.py | 6 +- class/process_task.py | 719 + class/projectModel/bt_docker/__init__.py | 0 class/projectModel/bt_docker/dk_compose.py | 337 + class/projectModel/bt_docker/dk_container.py | 473 + class/projectModel/bt_docker/dk_host.py | 42 + class/projectModel/bt_docker/dk_image.py | 226 + class/projectModel/bt_docker/dk_monitor.py | 92 + class/projectModel/bt_docker/dk_network.py | 69 + class/projectModel/bt_docker/dk_public.py | 135 + class/projectModel/bt_docker/dk_registry.py | 81 + class/projectModel/bt_docker/dk_screen.py | 67 + class/projectModel/bt_docker/dk_setup.py | 155 + class/projectModel/bt_docker/dk_status.py | 160 + class/projectModel/bt_docker/dk_volume.py | 73 + class/projectModel/dockerModel.py | 58 + class/projectModel/nodejsModel.py | 22 +- class/projectModel/quotaModel.py | 304 + class/public.py | 2262 +- class/push/base_push.py | 59 + class/push/panel_push.html | 402 + class/push/panel_push.py | 358 + class/push/push_list.json | 11 + class/push/scripts/panel_login.json | 11 + class/push/scripts/panel_pwd_endtime.json | 9 + class/push/scripts/site_endtime.json | 10 + class/push/scripts/ssl.json | 10 + class/push/site_push.py | 842 + class/push/tamper_push.py | 312 + class/safeModel/base.py | 92 + class/safeModel/firewallModel.py | 3861 +++ class/safeModel/freeipModel.py | 97 + class/safeModel/ipsModel.py | 118 + class/safeModel/sshModel.py | 187 + class/safeModel/syslogModel.py | 939 + class/safe_warning.py | 0 class/safe_warning/sw_alias_ls_rm.py | 42 + class/safe_warning/sw_audit_docker.py | 34 + class/safe_warning/sw_audit_log_keep.py | 31 + class/safe_warning/sw_bashrc.py | 46 + class/safe_warning/sw_chmod_stickybit.py | 36 + class/safe_warning/sw_cshrc.py | 47 + class/safe_warning/sw_cve_2019_5736.py | 45 + class/safe_warning/sw_cve_2021_4034.py | 92 + class/safe_warning/sw_cve_2022_2068.py | 55 + class/safe_warning/sw_cve_2023_0386.py | 100 + class/safe_warning/sw_database_backup.py | 13 +- class/safe_warning/sw_database_priv.py | 10 +- class/safe_warning/sw_debug_mode.py | 2 +- class/safe_warning/sw_docker_api.py | 60 + class/safe_warning/sw_file_lock.py | 44 + class/safe_warning/sw_file_mod.py | 66 + class/safe_warning/sw_files_recycle_bin.py | 2 +- class/safe_warning/sw_firewall_open.py | 23 +- class/safe_warning/sw_ftp_login.py | 30 + class/safe_warning/sw_ftp_pass.py | 96 +- class/safe_warning/sw_ftp_root.py | 33 + class/safe_warning/sw_httpd_version_leak.py | 39 + class/safe_warning/sw_kernel_space.py | 40 + class/safe_warning/sw_login_fail_limit.py | 37 + class/safe_warning/sw_memcached_port.py | 2 +- class/safe_warning/sw_mongodb_auth.py | 33 + class/safe_warning/sw_mysql_pass.py | 46 + class/safe_warning/sw_mysql_port.py | 2 +- class/safe_warning/sw_mysql_priv.py | 2 +- class/safe_warning/sw_nginx_server.py | 45 + class/safe_warning/sw_panel_control.py | 40 + class/safe_warning/sw_panel_pass.py | 2 +- class/safe_warning/sw_panel_path.py | 2 +- class/safe_warning/sw_panel_port.py | 4 +- class/safe_warning/sw_panel_swing.py | 42 + class/safe_warning/sw_passwd_repeat.py | 36 + .../safe_warning/sw_php_disable_functions.py | 67 + class/safe_warning/sw_php_expose.py | 62 + class/safe_warning/sw_ping.py | 2 +- class/safe_warning/sw_pingin.py | 47 + class/safe_warning/sw_pip_poison.py | 29 + class/safe_warning/sw_redis_pass.py | 48 + class/safe_warning/sw_redis_port.py | 5 +- class/safe_warning/sw_risk_file.py | 40 + class/safe_warning/sw_site_spath.py | 2 +- class/safe_warning/sw_site_ssl.py | 1 + class/safe_warning/sw_site_ssl_expire.py | 2 +- class/safe_warning/sw_ssh_clientalive.py | 63 + class/safe_warning/sw_ssh_forward.py | 30 + class/safe_warning/sw_ssh_maxauth.py | 64 + class/safe_warning/sw_ssh_minclass.py | 44 + class/safe_warning/sw_ssh_notpass.py | 49 + class/safe_warning/sw_ssh_passmax.py | 46 + class/safe_warning/sw_ssh_passmin.py | 45 + class/safe_warning/sw_ssh_port.py | 31 +- class/safe_warning/sw_ssh_root.py | 46 + class/safe_warning/sw_ssh_security.py | 46 + class/safe_warning/sw_strace_backdoor.py | 32 + class/safe_warning/sw_system_user.py | 36 + class/safe_warning/sw_telnet_server.py | 24 + class/safe_warning/sw_umask.py | 45 + class/safe_warning/sw_waf_install.py | 67 + class/send_to_user.py | 3 + class/setPanelLets.py | 13 +- class/sewer/aa.py | 3 - class/simple_websocket/__init__.py | 1 + class/simple_websocket/ws.py | 448 + class/site_dir_auth.py | 6 +- class/sites.py | 2 +- class/ssh_authentication.py | 2 +- class/ssh_security.py | 602 +- class/ssh_terminal.py | 94 +- class/ssl_manage.py | 642 + class/system.py | 104 +- class/test.py | 518 - class/tools.py | 2 +- class/userlogin.py | 247 +- config/abort.json | 1 + config/{dns_api.json => dns_api_init.json} | 0 config/domain_root.txt | 2102 ++ config/index.json | 2 +- config/menu.json | 7 + data/404.html | 79 +- data/502.html | 74 + data/default.db | Bin 17408 -> 17408 bytes data/defaultDoc.html | 68 +- data/firewall/country.txt | 946 + data/firewall/ips.txt | 1 + data/firewall/whitelist.txt | 1 + data/libList.conf | 2 +- data/list.json | 665 +- data/msg.json | 44 + data/node.json | 12 + data/pay_type.json | 204 + data/softList.conf | 2 +- data/type.json | 2 +- init.sh | 6 +- install/install_soft.sh | 40 +- install/public.sh | 88 +- logs/access.log | 0 logs/done.log | 0 logs/error.log | 0 logs/task.log | 0 rewrite/apache/ShopWind.conf | 19 + rewrite/apache/pbootcms.conf | 9 + rewrite/nginx/EduSoho.conf | 8 + rewrite/nginx/ShopWind.conf | 14 + rewrite/nginx/crmeb.conf | 6 + rewrite/nginx/pbootcms.conf | 6 + script/backup.py | 50 +- script/bt-ipfilter | Bin 0 -> 22648 bytes script/check_msg.py | 35 + script/ftplogs_cut.py | 25 + script/mysql_quota.py | 9 + script/polkit_upgrade.py | 114 + script/process_network_total.py | 46 +- script/push_msg.py | 19 + script/scan_log.py | 26 + script/upgrade_flask.sh | 15 + script/upgrade_gevent.sh | 20 + script/upgrade_telegram.sh | 18 + script/warning_list.py | 8 + ssl/certificate.pem | 29 + ssl/privateKey.pem | 51 + ssl_init/baota_root.pfx | Bin 0 -> 6813 bytes ssl_init/certificate.pem | 30 + ssl_init/privateKey.pem | 51 + ssl_init/root_password.pl | 1 + task.py | 661 +- tools.py | 102 +- 474 files changed, 125711 insertions(+), 34665 deletions(-) mode change 100644 => 100755 BTPanel/__init__.py create mode 100644 BTPanel/static/amd/config.js create mode 100644 BTPanel/static/amd/configMixin.js create mode 100644 BTPanel/static/amd/main.js create mode 100644 BTPanel/static/amd/noticeConfig.js create mode 100644 BTPanel/static/amd/panelConfig.js create mode 100644 BTPanel/static/amd/public.js create mode 100644 BTPanel/static/amd/require.min.js create mode 100644 BTPanel/static/amd/safeConfig.js create mode 100644 BTPanel/static/amd/utils.min.js create mode 100644 BTPanel/static/images/firewall/intrusion/1.png create mode 100644 BTPanel/static/images/firewall/intrusion/2.png create mode 100644 BTPanel/static/images/firewall/intrusion/3.png create mode 100644 BTPanel/static/images/firewall/intrusion/4.png create mode 100644 BTPanel/static/images/firewall/logAudit/1.png create mode 100644 BTPanel/static/images/firewall/ssh/1.png create mode 100644 BTPanel/static/images/firewall/system/1.png create mode 100644 BTPanel/static/images/firewall/system/2.png create mode 100644 BTPanel/static/images/firewall/system/3.png create mode 100644 BTPanel/static/images/loading-2.gif create mode 100644 BTPanel/static/images/pro.svg create mode 100644 BTPanel/static/images/pro_pay.svg create mode 100644 BTPanel/static/images/recommend/disk.png create mode 100644 BTPanel/static/img/config_alert.png create mode 100644 BTPanel/static/img/feedback.svg create mode 100644 BTPanel/static/img/feedback/QA_banner.png create mode 100644 BTPanel/static/img/feedback/QA_close.png create mode 100644 BTPanel/static/img/feedback/QA_emoj.png create mode 100644 BTPanel/static/img/feedback/QA_like.png create mode 100644 BTPanel/static/img/feedback/QA_logo.png create mode 100644 BTPanel/static/img/feedback/demand.svg create mode 100644 BTPanel/static/img/feedback_2.svg create mode 100644 BTPanel/static/img/ftp/ftp-logs.png create mode 100644 BTPanel/static/img/hint-confirm-icon.svg create mode 100644 BTPanel/static/img/ico/icon-text-hint.svg create mode 100644 BTPanel/static/img/icon-ssl-service.png create mode 100644 BTPanel/static/img/logAudit/logAudit.png create mode 100644 BTPanel/static/img/nginx_firewall/1.png create mode 100644 BTPanel/static/img/nginx_firewall/2.png create mode 100644 BTPanel/static/img/nginx_firewall/3.png create mode 100644 BTPanel/static/img/nginx_firewall/4.png create mode 100644 BTPanel/static/img/nginx_firewall/5.png create mode 100644 BTPanel/static/img/nginx_firewall/6.png create mode 100644 BTPanel/static/img/nginx_firewall/7.png create mode 100644 BTPanel/static/img/scrollbar/scroll-bar-block.png create mode 100644 BTPanel/static/img/scrollbar/scroll-bar-down.png create mode 100644 BTPanel/static/img/scrollbar/scroll-bar-up.png create mode 100644 BTPanel/static/img/soft_ico/ico-anti_spam.png create mode 100644 BTPanel/static/img/soft_ico/ico-aws_s3.png create mode 100644 BTPanel/static/img/soft_ico/ico-boot.png create mode 100644 BTPanel/static/img/soft_ico/ico-bt_boce.png create mode 100644 BTPanel/static/img/soft_ico/ico-bt_hids.png create mode 100644 BTPanel/static/img/soft_ico/ico-bt_security.png create mode 100644 BTPanel/static/img/soft_ico/ico-bt_ssh_auth.png create mode 100644 BTPanel/static/img/soft_ico/ico-bt_vsftpd.png create mode 100644 BTPanel/static/img/soft_ico/ico-btapibot.png create mode 100644 BTPanel/static/img/soft_ico/ico-btapp.png create mode 100644 BTPanel/static/img/soft_ico/ico-cf_ipchange.png create mode 100644 BTPanel/static/img/soft_ico/ico-cloud_db_diff.png create mode 100644 BTPanel/static/img/soft_ico/ico-cloudflare.png create mode 100644 BTPanel/static/img/soft_ico/ico-coll_admin.png create mode 100644 BTPanel/static/img/soft_ico/ico-cosfs.png create mode 100644 BTPanel/static/img/soft_ico/ico-database_mater.png create mode 100644 BTPanel/static/img/soft_ico/ico-dbcache.png create mode 100644 BTPanel/static/img/soft_ico/ico-disk_analysis.png create mode 100644 BTPanel/static/img/soft_ico/ico-diskquota.png create mode 100644 BTPanel/static/img/soft_ico/ico-dns_manager.png create mode 100644 BTPanel/static/img/soft_ico/ico-dnspod.png create mode 100644 BTPanel/static/img/soft_ico/ico-ehost.png create mode 100644 BTPanel/static/img/soft_ico/ico-enterprise_backup.png create mode 100644 BTPanel/static/img/soft_ico/ico-fail2ban.png create mode 100644 BTPanel/static/img/soft_ico/ico-file_hash_check.png create mode 100644 BTPanel/static/img/soft_ico/ico-file_real_time_log.png create mode 100644 BTPanel/static/img/soft_ico/ico-firewall.png create mode 100644 BTPanel/static/img/soft_ico/ico-free_waf.png create mode 100644 BTPanel/static/img/soft_ico/ico-freefrpc.png create mode 100644 BTPanel/static/img/soft_ico/ico-frps.png create mode 100644 BTPanel/static/img/soft_ico/ico-gcloud_storage.png create mode 100644 BTPanel/static/img/soft_ico/ico-gdrive.png create mode 100644 BTPanel/static/img/soft_ico/ico-hm_shell_san.png create mode 100644 BTPanel/static/img/soft_ico/ico-hxsquota.png create mode 100644 BTPanel/static/img/soft_ico/ico-ip_configuration.png create mode 100644 BTPanel/static/img/soft_ico/ico-java_manager.png create mode 100644 BTPanel/static/img/soft_ico/ico-jumpserver.png create mode 100644 BTPanel/static/img/soft_ico/ico-linksforbt.png create mode 100644 BTPanel/static/img/soft_ico/ico-load_balance.png create mode 100644 BTPanel/static/img/soft_ico/ico-mail_sys.png create mode 100644 BTPanel/static/img/soft_ico/ico-modbtywaf.png create mode 100644 BTPanel/static/img/soft_ico/ico-msonedrive.png create mode 100644 BTPanel/static/img/soft_ico/ico-my_toolbox.png create mode 100644 BTPanel/static/img/soft_ico/ico-mysql_replicate.png create mode 100644 BTPanel/static/img/soft_ico/ico-nfs_tools.png create mode 100644 BTPanel/static/img/soft_ico/ico-node_admin.png create mode 100644 BTPanel/static/img/soft_ico/ico-nodejs.png create mode 100644 BTPanel/static/img/soft_ico/ico-oneav.png create mode 100644 BTPanel/static/img/soft_ico/ico-oos.png create mode 100644 BTPanel/static/img/soft_ico/ico-php_encoder.png create mode 100644 BTPanel/static/img/soft_ico/ico-php_filter.png create mode 100644 BTPanel/static/img/soft_ico/ico-phpencoder.png create mode 100644 BTPanel/static/img/soft_ico/ico-phpok.png create mode 100644 BTPanel/static/img/soft_ico/ico-psync_api.png create mode 100644 BTPanel/static/img/soft_ico/ico-resource_manager.png create mode 100644 BTPanel/static/img/soft_ico/ico-safelogin.png create mode 100644 BTPanel/static/img/soft_ico/ico-san_security.png create mode 100644 BTPanel/static/img/soft_ico/ico-sdetection.svg create mode 100644 BTPanel/static/img/soft_ico/ico-security_notice.png create mode 100644 BTPanel/static/img/soft_ico/ico-site_optimization.png create mode 100644 BTPanel/static/img/soft_ico/ico-site_speed.png create mode 100644 BTPanel/static/img/soft_ico/ico-ssh_manager.png create mode 100644 BTPanel/static/img/soft_ico/ico-ssl_verify.png create mode 100644 BTPanel/static/img/soft_ico/ico-static_cdn.png create mode 100644 BTPanel/static/img/soft_ico/ico-supervisor.png create mode 100644 BTPanel/static/img/soft_ico/ico-system_scan.png create mode 100644 BTPanel/static/img/soft_ico/ico-tamper_core.png create mode 100644 BTPanel/static/img/soft_ico/ico-tamper_drive.png create mode 100644 BTPanel/static/img/soft_ico/ico-txcdn.png create mode 100644 BTPanel/static/img/soft_ico/ico-users.png create mode 100644 BTPanel/static/img/soft_ico/ico-w7assistant.png create mode 100644 BTPanel/static/img/soft_ico/ico-webshell_check.png create mode 100644 BTPanel/static/img/soft_ico/ico-word.svg create mode 100644 BTPanel/static/img/soft_ico/ico-y6w_speedtest.png create mode 100644 BTPanel/static/img/soft_ico/soft_icoico-docker_project_m.png create mode 100644 BTPanel/static/img/soft_ico/soft_icoico-vuln_push.png create mode 100644 BTPanel/static/img/ssh/login-logs.png create mode 100644 BTPanel/static/img/update-icon.png create mode 100644 BTPanel/static/img/update_1.png create mode 100644 BTPanel/static/img/update_back.png create mode 100644 BTPanel/static/img/update_bg.png create mode 100644 BTPanel/static/js/countryCode.json create mode 100644 BTPanel/static/js/docker.js create mode 100644 BTPanel/static/js/firewall.js create mode 100644 BTPanel/static/js/jquery-2.2.4.min.js create mode 100644 BTPanel/static/js/jsencrypt.min.js create mode 100644 BTPanel/static/js/logs.js create mode 100644 BTPanel/static/js/qrcode.min.js create mode 100644 BTPanel/static/js/upload-drog.js create mode 100644 BTPanel/static/jsonTree/jsonTree.css create mode 100644 BTPanel/static/jsonTree/jsonTree.js create mode 100644 BTPanel/static/language/en/LC_MESSAGES/en.mo create mode 100644 BTPanel/static/language/en/LC_MESSAGES/en.po create mode 100644 BTPanel/templates/default/docker.html create mode 100644 BTPanel/templates/default/logs.html create mode 100644 BTPanel/templates/default/modify_password.html create mode 100644 BTPanel/templates/default/movie.html create mode 100755 class/PluginLoader.aarch64.Python3.7.so create mode 100755 class/PluginLoader.i686.Python3.7.so create mode 100755 class/PluginLoader.loongarch64.Python3.7.so create mode 100755 class/PluginLoader.x86_64.Python3.7.so create mode 100755 class/PluginLoader.x86_64.glibc214.Python3.7.so mode change 100644 => 100755 class/acme_v2.py mode change 100644 => 100755 class/ajax.py create mode 100644 class/cachelib/session_simpile.py mode change 100644 => 100755 class/common.py mode change 100644 => 100755 class/config.py create mode 100644 class/databaseModel/__init__.py create mode 100644 class/databaseModel/base.py create mode 100644 class/databaseModel/mongodbModel.py create mode 100644 class/databaseModel/pgsqlModel.py create mode 100644 class/databaseModel/redisModel.py create mode 100644 class/databaseModel/sqliteModel.py create mode 100644 class/databaseModel/sqlserverModel.py create mode 100644 class/filesModel/base.py create mode 100644 class/filesModel/downModel.py create mode 100644 class/filesModel/gzModel.py create mode 100644 class/filesModel/logsModel.py create mode 100644 class/filesModel/rarModel.py create mode 100644 class/filesModel/searchModel.py create mode 100644 class/filesModel/sizeModel.py create mode 100644 class/filesModel/uploadModel.py create mode 100644 class/filesModel/zipModel.py create mode 100644 class/ftplog.py mode change 100644 => 100755 class/jobs.py create mode 100644 class/log_analysis.py create mode 100644 class/logsModel/base.py create mode 100644 class/logsModel/ftpModel.py create mode 100644 class/logsModel/panelModel.py create mode 100644 class/logsModel/siteModel.py create mode 100644 class/monitorModel/base.py create mode 100644 class/monitorModel/process_managementModel.py create mode 100644 class/msg/dingding.html create mode 100644 class/msg/dingding_msg.py create mode 100644 class/msg/feishu.html create mode 100644 class/msg/feishu_msg.py create mode 100644 class/msg/mail.html create mode 100644 class/msg/mail_msg.py create mode 100644 class/msg/sms.html create mode 100644 class/msg/sms_msg.py create mode 100644 class/msg/tg.html create mode 100644 class/msg/tg_msg.py create mode 100644 class/msg/weixin.html create mode 100644 class/msg/weixin_msg.py create mode 100644 class/msg/wx_account.html create mode 100644 class/msg/wx_account_msg.py create mode 100644 class/one_key_wp.py create mode 100755 class/panelController.py create mode 100644 class/panelDatabaseController.py create mode 100644 class/panelDefense.py create mode 100644 class/panelHttpProxy.py create mode 100644 class/panelModel/backupModel.py create mode 100644 class/panelModel/base.py create mode 100644 class/panelMssql.py create mode 100644 class/panelPush.py create mode 100644 class/panelSafeController.py create mode 100644 class/panel_search.py create mode 100644 class/process_task.py create mode 100644 class/projectModel/bt_docker/__init__.py create mode 100644 class/projectModel/bt_docker/dk_compose.py create mode 100644 class/projectModel/bt_docker/dk_container.py create mode 100644 class/projectModel/bt_docker/dk_host.py create mode 100644 class/projectModel/bt_docker/dk_image.py create mode 100644 class/projectModel/bt_docker/dk_monitor.py create mode 100644 class/projectModel/bt_docker/dk_network.py create mode 100644 class/projectModel/bt_docker/dk_public.py create mode 100644 class/projectModel/bt_docker/dk_registry.py create mode 100644 class/projectModel/bt_docker/dk_screen.py create mode 100644 class/projectModel/bt_docker/dk_setup.py create mode 100644 class/projectModel/bt_docker/dk_status.py create mode 100644 class/projectModel/bt_docker/dk_volume.py create mode 100644 class/projectModel/dockerModel.py create mode 100644 class/projectModel/quotaModel.py mode change 100644 => 100755 class/public.py create mode 100644 class/push/base_push.py create mode 100644 class/push/panel_push.html create mode 100644 class/push/panel_push.py create mode 100644 class/push/push_list.json create mode 100644 class/push/scripts/panel_login.json create mode 100644 class/push/scripts/panel_pwd_endtime.json create mode 100644 class/push/scripts/site_endtime.json create mode 100644 class/push/scripts/ssl.json create mode 100644 class/push/site_push.py create mode 100644 class/push/tamper_push.py create mode 100644 class/safeModel/base.py create mode 100644 class/safeModel/firewallModel.py create mode 100644 class/safeModel/freeipModel.py create mode 100644 class/safeModel/ipsModel.py create mode 100644 class/safeModel/sshModel.py create mode 100644 class/safeModel/syslogModel.py create mode 100644 class/safe_warning.py create mode 100644 class/safe_warning/sw_alias_ls_rm.py create mode 100644 class/safe_warning/sw_audit_docker.py create mode 100644 class/safe_warning/sw_audit_log_keep.py create mode 100644 class/safe_warning/sw_bashrc.py create mode 100644 class/safe_warning/sw_chmod_stickybit.py create mode 100644 class/safe_warning/sw_cshrc.py create mode 100644 class/safe_warning/sw_cve_2019_5736.py create mode 100644 class/safe_warning/sw_cve_2021_4034.py create mode 100644 class/safe_warning/sw_cve_2022_2068.py create mode 100644 class/safe_warning/sw_cve_2023_0386.py create mode 100644 class/safe_warning/sw_docker_api.py create mode 100644 class/safe_warning/sw_file_lock.py create mode 100644 class/safe_warning/sw_file_mod.py create mode 100644 class/safe_warning/sw_ftp_login.py create mode 100644 class/safe_warning/sw_ftp_root.py create mode 100644 class/safe_warning/sw_httpd_version_leak.py create mode 100644 class/safe_warning/sw_kernel_space.py create mode 100644 class/safe_warning/sw_login_fail_limit.py create mode 100644 class/safe_warning/sw_mongodb_auth.py create mode 100644 class/safe_warning/sw_mysql_pass.py create mode 100644 class/safe_warning/sw_nginx_server.py create mode 100644 class/safe_warning/sw_panel_control.py create mode 100644 class/safe_warning/sw_panel_swing.py create mode 100644 class/safe_warning/sw_passwd_repeat.py create mode 100644 class/safe_warning/sw_php_disable_functions.py create mode 100644 class/safe_warning/sw_php_expose.py create mode 100644 class/safe_warning/sw_pingin.py create mode 100644 class/safe_warning/sw_pip_poison.py create mode 100644 class/safe_warning/sw_redis_pass.py create mode 100644 class/safe_warning/sw_risk_file.py create mode 100644 class/safe_warning/sw_ssh_clientalive.py create mode 100644 class/safe_warning/sw_ssh_forward.py create mode 100644 class/safe_warning/sw_ssh_maxauth.py create mode 100644 class/safe_warning/sw_ssh_minclass.py create mode 100644 class/safe_warning/sw_ssh_notpass.py create mode 100644 class/safe_warning/sw_ssh_passmax.py create mode 100644 class/safe_warning/sw_ssh_passmin.py create mode 100644 class/safe_warning/sw_ssh_root.py create mode 100644 class/safe_warning/sw_ssh_security.py create mode 100644 class/safe_warning/sw_strace_backdoor.py create mode 100644 class/safe_warning/sw_system_user.py create mode 100644 class/safe_warning/sw_telnet_server.py create mode 100644 class/safe_warning/sw_umask.py create mode 100644 class/safe_warning/sw_waf_install.py delete mode 100644 class/sewer/aa.py create mode 100644 class/simple_websocket/__init__.py create mode 100644 class/simple_websocket/ws.py create mode 100644 class/ssl_manage.py delete mode 100644 class/test.py mode change 100644 => 100755 class/userlogin.py create mode 100644 config/abort.json rename config/{dns_api.json => dns_api_init.json} (100%) create mode 100644 config/domain_root.txt create mode 100644 data/502.html create mode 100644 data/firewall/country.txt create mode 100644 data/firewall/ips.txt create mode 100644 data/firewall/whitelist.txt create mode 100644 data/msg.json create mode 100644 data/pay_type.json create mode 100644 logs/access.log create mode 100644 logs/done.log create mode 100644 logs/error.log create mode 100644 logs/task.log create mode 100644 rewrite/apache/ShopWind.conf create mode 100644 rewrite/apache/pbootcms.conf create mode 100644 rewrite/nginx/EduSoho.conf create mode 100644 rewrite/nginx/ShopWind.conf create mode 100644 rewrite/nginx/crmeb.conf create mode 100644 rewrite/nginx/pbootcms.conf create mode 100644 script/bt-ipfilter create mode 100644 script/check_msg.py create mode 100644 script/ftplogs_cut.py create mode 100644 script/mysql_quota.py create mode 100644 script/polkit_upgrade.py create mode 100644 script/push_msg.py create mode 100644 script/scan_log.py create mode 100644 script/upgrade_flask.sh create mode 100644 script/upgrade_gevent.sh create mode 100644 script/upgrade_telegram.sh create mode 100644 script/warning_list.py create mode 100644 ssl/certificate.pem create mode 100644 ssl/privateKey.pem create mode 100644 ssl_init/baota_root.pfx create mode 100644 ssl_init/certificate.pem create mode 100644 ssl_init/privateKey.pem create mode 100644 ssl_init/root_password.pl diff --git a/BT-Panel b/BT-Panel index 3659648f..2188b694 100644 --- a/BT-Panel +++ b/BT-Panel @@ -1,7 +1,7 @@ #!/www/server/panel/pyenv/bin/python #coding: utf-8 # +------------------------------------------------------------------- -# | 宝塔Linux面板 +# | 宝塔Linux面板 # +------------------------------------------------------------------- # | Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved. # +------------------------------------------------------------------- @@ -18,6 +18,14 @@ upgrade_file = 'script/upgrade_flask.sh' if os.path.exists(upgrade_file): os.system("nohup bash {} &>/dev/null &".format(upgrade_file)) +upgrade_file = 'script/upgrade_gevent.sh' +if os.path.exists(upgrade_file): + os.system("nohup bash {} &>/dev/null &".format(upgrade_file)) + +upgrade_file = 'script/upgrade_telegram.sh' +if os.path.exists(upgrade_file): + os.system("nohup bash {} &>/dev/null &".format(upgrade_file)) + if os.path.exists('class/flask'): os.system('rm -rf class/flask') @@ -28,23 +36,23 @@ from BTPanel import app,sys,public is_debug = os.path.exists('data/debug.pl') -# # 检查加载器 -# def check_plugin_loader(): -# plugin_loader_file = 'class/PluginLoader.so' -# machine = 'x86_64' -# try: -# machine = os.uname().machine -# except: -# pass -# plugin_loader_src_file = "class/PluginLoader.{}.Python3.7.so".format(machine) -# if machine == 'x86_64': -# glibc_version = public.get_glibc_version() -# if glibc_version in ['2.14','2.13','2.12','2.11','2.10']: -# plugin_loader_src_file = "class/PluginLoader.{}.glibc214.Python3.7.so".format(machine) -# if os.path.exists(plugin_loader_src_file): -# os.system("\cp -f {} {}".format(plugin_loader_src_file, plugin_loader_file)) +# 检查加载器 +def check_plugin_loader(): + plugin_loader_file = 'class/PluginLoader.so' + machine = 'x86_64' + try: + machine = os.uname().machine + except: + pass + plugin_loader_src_file = "class/PluginLoader.{}.Python3.7.so".format(machine) + if machine == 'x86_64': + glibc_version = public.get_glibc_version() + if glibc_version in ['2.14','2.13','2.12','2.11','2.10']: + plugin_loader_src_file = "class/PluginLoader.{}.glibc214.Python3.7.so".format(machine) + if os.path.exists(plugin_loader_src_file): + os.system("\cp -f {} {}".format(plugin_loader_src_file, plugin_loader_file)) -# check_plugin_loader() +check_plugin_loader() if is_debug: @@ -103,8 +111,7 @@ if is_debug: def process_IN_MOVED_TO(self,event): if not self.is_ext(event.pathname): return - self.panel_reload(event.pathname,'[覆盖]') - + self.panel_reload(event.pathname,'[Cover]') def debug_event(): logger.debug('Launch the panel in debug mode') logger.debug('Listening port:0.0.0.0:{}'.format(public.readFile('data/port.pl'))) @@ -248,7 +255,11 @@ if __name__ == '__main__': is_process = os.path.exists('data/is_process.pl') if not is_process: - http_server.serve_forever() + try: + http_server.serve_forever() + except: + pass + app.run(host=HOST, port=PORT, threaded=True) else: http_server.start() from multiprocessing import Process diff --git a/BTPanel/__init__.py b/BTPanel/__init__.py old mode 100644 new mode 100755 index 3c8e4947..527deba4 --- a/BTPanel/__init__.py +++ b/BTPanel/__init__.py @@ -1,6 +1,6 @@ -#coding: utf-8 +# coding: utf-8 # +------------------------------------------------------------------- -# | 宝塔Linux面板 +# | 宝塔Linux面板 # +------------------------------------------------------------------- # | Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved. # +------------------------------------------------------------------- @@ -15,20 +15,20 @@ import time import re import uuid import psutil + panel_path = '/www/server/panel' if not os.name in ['nt']: os.chdir(panel_path) if not 'class/' in sys.path: - sys.path.insert(0,'class/') + sys.path.insert(0, 'class/') from flask import Flask, session, render_template, send_file, request, redirect, g, make_response, \ - render_template_string, abort,stream_with_context, Response as Resp -from cachelib import SimpleCache + render_template_string, abort, stream_with_context, Response as Resp +from cachelib import SimpleCache, SimpleCacheSession from werkzeug.wrappers import Response from flask_session import Session from flask_compress import Compress - cache = SimpleCache(5000) import public @@ -62,10 +62,10 @@ if os.path.exists(basic_auth_conf): pass # 初始化SESSION服务 -app.secret_key = public.md5(str(os.uname()) + str(psutil.boot_time())) # uuid.UUID(int=uuid.getnode()).hex[-12:] +app.secret_key = public.md5(str(os.uname()) + str(psutil.boot_time())) # uuid.UUID(int=uuid.getnode()).hex[-12:] local_ip = None my_terms = {} -app.config['SESSION_MEMCACHED'] = SimpleCache(1000,86400) +app.config['SESSION_MEMCACHED'] = SimpleCacheSession(1000, 86400) app.config['SESSION_TYPE'] = 'memcached' app.config['SESSION_PERMANENT'] = True app.config['SESSION_USE_SIGNER'] = True @@ -82,9 +82,9 @@ Session(app) import common -#初始化路由 +# 初始化路由 comm = common.panelAdmin() -method_all = ['GET','POST'] +method_all = ['GET', 'POST'] method_get = ['GET'] method_post = ['POST'] json_header = {'Content-Type': 'application/json; charset=utf-8'} @@ -138,18 +138,23 @@ admin_path_checks = [ '/api', '/tips', '/message', - '/warning' + '/warning', + '/userRegister', + ] if admin_path in admin_path_checks: admin_path = '/bt' -uri_match = re.compile(r"(^/static/[\w_\./\-]+\.(js|css|png|jpg|gif|ico|svg|woff|woff2|ttf|otf|eot|map)$|^/[\w_\./\-]*$)") +if admin_path[-1] == '/': admin_path = admin_path[:-1] +uri_match = re.compile( + r"(^/static/[\w_\./\-]+\.(js|css|png|jpg|gif|ico|svg|woff|woff2|ttf|otf|eot|map)$|^/[\w_\./\-]*$)") session_id_match = re.compile(r"^[\w\.\-]+$") + # ===================================Flask HOOK========================# # Flask请求勾子 @app.before_request def request_check(): - if request.method not in ['GET','POST']:return abort(404) + if request.method not in ['GET', 'POST']: return abort(404) g.request_time = time.time() # 路由和URI长度过滤 if len(request.path) > 256: return abort(403) @@ -157,14 +162,22 @@ def request_check(): # URI过滤 if not uri_match.match(request.path): return abort(403) # POST参数过滤 - if request.path in ['/login', '/safe', '/hook', '/public', '/down', '/get_app_bind_status', '/check_bind']: + if request.path in ['/login', + '/safe', + '/hook', + '/public', + '/down', + '/get_app_bind_status', + '/check_bind', + '/userRegister', + + ]: pdata = request.form.to_dict() for k in pdata.keys(): if len(k) > 48: return abort(403) if len(pdata[k]) > 256: return abort(403) - # SESSIONID过滤 - session_id = request.cookies.get(app.config['SESSION_COOKIE_NAME'],'') + session_id = request.cookies.get(app.config['SESSION_COOKIE_NAME'], '') if session_id and not session_id_match.match(session_id): return abort(403) # 请求头过滤 @@ -174,7 +187,6 @@ def request_check(): if session.get('debug') == 1: return g.get_csrf_html_token_key = public.get_csrf_html_token_key() - if app.config['BASIC_AUTH_OPEN']: if request.path in ['/public', '/download', '/mail_sys', '/hook', '/down', '/check_bind', '/get_app_bind_status']: return @@ -190,28 +202,28 @@ def request_check(): ip_check = public.check_ip_panel() if ip_check: return ip_check - if request.path.find('/static/') != -1 or request.path == '/code': + if request.path.startswith('/static/') or request.path == '/code': if not 'login' in session and not 'admin_auth' in session and not 'down' in session: return abort(401) domain_check = public.check_domain_panel() if domain_check: return domain_check if public.is_local(): - not_networks = ['uninstall_plugin','install_plugin','UpdatePanel'] + not_networks = ['uninstall_plugin', 'install_plugin', 'UpdatePanel'] if request.args.get('action') in not_networks: - return public.returnJson(False,'This feature cannot be used in offline mode!'),json_header + return public.returnJson(False, 'This feature cannot be used in offline mode!'), json_header - if request.path in ['/site','/ftp','/database','/soft','/control','/firewall','/files','/xterm','/crontab','/config']: + if request.path in ['/site', '/ftp', '/database', '/soft', '/control', '/firewall', '/files', '/xterm', '/crontab', + '/config']: if public.is_error_path(): - return redirect('/error',302) + return redirect('/error', 302) if not request.path in ['/config']: - if session.get('password_expire',False): - return redirect('/modify_password',302) - + if session.get('password_expire', False): + return redirect('/modify_password', 302) # Flask 请求结束勾子 @app.teardown_request def request_end(reques=None): - if request.method not in ['GET','POST']:return + if request.method not in ['GET', 'POST']: return if not request.path.startswith('/static/'): public.write_request_log(reques) if 'api_request' in g: @@ -222,8 +234,8 @@ def request_end(reques=None): # Flask 404页面勾子 @app.errorhandler(404) def error_404(e): - if request.method not in ['GET','POST']:return - if not session.get('login',None): + if request.method not in ['GET', 'POST']: return + if not session.get('login', None): g.auth_error = True return public.error_not_login() errorStr = ''' @@ -233,17 +245,17 @@ def error_404(e):
nginx
''' - headers={ - "Content-Type":"text/html" + headers = { + "Content-Type": "text/html" } - return Response(errorStr,status=404,headers=headers) + return Response(errorStr, status=404, headers=headers) # Flask 403页面勾子 @app.errorhandler(403) def error_403(e): - if request.method not in ['GET','POST']:return - if not session.get('login',None): + if request.method not in ['GET', 'POST']: return + if not session.get('login', None): g.auth_error = True return public.error_not_login() errorStr = ''' @@ -262,8 +274,8 @@ def error_403(e): # Flask 500页面勾子 @app.errorhandler(500) def error_500(e): - if request.method not in ['GET','POST']:return - if not session.get('login',None): + if request.method not in ['GET', 'POST']: return + if not session.get('login', None): g.auth_error = True return public.error_not_login() ss = '''404 Not Found: The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again. @@ -281,18 +293,117 @@ During handling of the above exception, another exception occurred:''' REQUEST_URI: {method} {full_path} REQUEST_FORM: {request_form} USER_AGENT: {user_agent}'''.format( - request_date = public.getDate(), - remote_addr = public.GetClientIp(), - method = request.method, - full_path = public.xsssec(request.full_path), - request_form = _form, - user_agent = public.xsssec(request.headers.get('User-Agent')), - panel_version = public.version(), - os_version = public.get_os_version() -) + request_date=public.getDate(), + remote_addr=public.GetClientIp(), + method=request.method, + full_path=public.xsssec(request.full_path), + request_form=public.xsssec(str(_form)), + user_agent=public.xsssec(request.headers.get('User-Agent')), + panel_version=public.version(), + os_version=public.get_os_version() + ) + + result = public.readFile(public.get_panel_path() + '/BTPanel/templates/default/panel_error.html').format( + error_title=error_info.split("\n")[-1], request_info=request_info, error_msg=error_info) + return Resp(result, 500) +# # 错误收集适配 +# @app.errorhandler(Exception) +# def error_500(e): +# if request.method not in ['GET', 'POST']: return Response(status=500) +# if not session.get('login', None): +# g.auth_error = True +# return public.error_not_login() +# ss = '''404 Not Found: The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again. +# +# During handling of the above exception, another exception occurred:''' +# error_info = public.get_error_info().strip().split(ss)[-1].strip() +# +# nn = 'During handling of the above exception, another exception occurred:' +# if error_info.find(nn) != -1 and error_info.find('public.error_conn_cloud') != -1: +# error_info = error_info.split(nn)[0].strip() +# +# _form = request.form.to_dict() +# if 'username' in _form: _form['username'] = '******' +# if 'password' in _form: _form['password'] = '******' +# if 'phone' in _form: _form['phone'] = '******' +# if 'pem' in _form: _form['pem'] = '******' +# if 'pwd' in _form: _form['pwd'] = '******' +# if 'key' in _form: _form['key'] = '******' +# if 'csr' in _form: _form['csr'] = '******' +# if 'db_user' in _form: _form['db_user'] = '******' +# if 'db_password' in _form: _form['db_pwd'] = '******' +# +# request_info = '''REQUEST_DATE: {request_date} +# VERSION: {os_version} - {panel_version} +# REMOTE_ADDR: {remote_addr} +# REQUEST_URI: {method} {full_path} +# REQUEST_FORM: {request_form} +# USER_AGENT: {user_agent}'''.format( +# request_date=public.getDate(), +# remote_addr=public.GetClientIp(), +# method=request.method, +# full_path=public.xsssec(request.full_path), +# request_form=public.xsssec(str(_form)), +# user_agent=public.xsssec(request.headers.get('User-Agent')), +# panel_version=public.version(), +# os_version=public.get_os_version()) +# error_title = error_info.split("\n")[-1].replace('public.PanelError: ', +# '').strip() +# if error_info.find('连接云端服务器失败') != -1: +# error_title = "连接云端服务器失败!" +# +# result = public.readFile( +# public.get_panel_path() + +# '/BTPanel/templates/default/panel_error.html').format( +# error_title=error_title, +# request_info=request_info, +# error_msg=error_info) +# +# # 用户信息 +# # if not public.cache_get("infos"): +# # user_info = json.loads(public.ReadFile("{}/data/userInfo.json".format(public.get_panel_path()))) +# # public.cache_set("infos", user_info, 1800) +# # else: +# # user_info = public.cache_get("infos") +# try: +# if "import panelSSL" in error_info: +# result = public.ExecShell("btpip list|grep pyOpenSSL")[0] +# error_info = "{}\n版本信息:{}".format(error_info, result.strip()) +# except: +# error_info = "{}\n版本信息: 获取失败".format(error_info) +# +# +# # 错误信息 +# error_infos = { +# # "UID": user_info['uid'], # 用户ID +# # 'ACCESS_KEY': user_info['access_key'], # 用户密钥 +# # 'SERVER_ID': user_info['serverid'], # 服务器ID +# "REQUEST_DATE": public.getDate(), # 请求时间 +# "PANEL_VERSION": public.version(), # 面板版本 +# "OS_VERSION": public.get_os_version(), # 操作系统版本 +# "REMOTE_ADDR": public.GetClientIp(), # 请求IP +# "REQUEST_URI": request.method + request.full_path, # 请求URI +# "REQUEST_FORM": public.xsssec(str(_form)), # 请求表单 +# "USER_AGENT": public.xsssec(request.headers.get('User-Agent')), # 客户端连接信息 +# "ERROR_INFO": error_info, # 错误信息 +# "PACK_TIME": public.readFile("/www/server/panel/config/update_time.pl") if os.path.exists("/www/server/panel/config/update_time.pl") else public.getDate(), # 打包时间 +# "TYPE": 0, +# "ERROR_ID": str(e) +# } +# pkey = public.Md5(error_infos["ERROR_ID"]) +# +# # 提交异常报告 +# if not public.cache_get(pkey): +# try: +# public.run_thread(public.httpPost, ("https://api.bt.cn/bt_error/index.php", error_infos)) +# public.cache_set(pkey, 1, 1800) +# except Exception as e: +# pass +# +# return Resp(result, 500) + + - result = public.readFile(public.get_panel_path() + '/BTPanel/templates/default/panel_error.html').format(error_title=error_info.split("\n")[-1],request_info = request_info,error_msg=error_info) - return Resp(result,500) # ===================================Flask HOOK========================# @@ -300,20 +411,19 @@ REQUEST_FORM: {request_form} # ===================================普通路由区========================# @app.route('/', methods=method_all) def home(): - #面板首页 + # 面板首页 comReturn = comm.local() if comReturn: return comReturn data = {} - data[public.to_string([112, 100])],data['pro_end'],data['ltd_end'] = get_pd() + data[public.to_string([112, 100])], data['pro_end'], data['ltd_end'] = get_pd() data['siteCount'] = public.M('sites').count() data['ftpCount'] = public.M('ftps').count() data['databaseCount'] = public.M('databases').count() data['lan'] = public.GetLan('index') data['js_random'] = get_js_random() - public.run_thread(public.auto_backup_panel) - return render_template( 'index.html',data = data) + return render_template('index.html', data=data) -@app.route('/xterm',methods = method_all) +@app.route('/xterm', methods=method_all) def xterm(): # 宝塔终端管理 comReturn = comm.local() @@ -325,8 +435,8 @@ def xterm(): import ssh_terminal ssh_host_admin = ssh_terminal.ssh_host_admin() defs = ( - 'get_host_list', 'get_host_find', 'modify_host', 'create_host', 'remove_host', 'set_sort', 'get_command_list', - 'create_command', 'get_command_find', 'modify_command', 'remove_command') + 'get_host_list', 'get_host_find', 'modify_host', 'create_host', 'remove_host', 'set_sort', 'get_command_list', + 'create_command', 'get_command_find', 'modify_command', 'remove_command') return publicObject(ssh_host_admin, defs, None) @app.route('/modify_password', methods=method_get) @@ -338,64 +448,86 @@ def modify_password(): g.title = public.get_msg_gettext('The password has expired, please change it!') return render_template('modify_password.html', data=data) -@app.route('/site',methods=method_all) -def site(pdata = None): - #网站管理 + +@app.route('/site', methods=method_all) +def site(pdata=None): + # 网站管理 comReturn = comm.local() if comReturn: return comReturn if request.method == method_get[0] and not pdata: + # data = {} import system data = system.system().GetConcifInfo() data['isSetup'] = True data['lan'] = public.getLan('site') data['js_random'] = get_js_random() - if os.path.exists(public.GetConfigValue('setup_path')+'/nginx') == False \ - and os.path.exists(public.GetConfigValue('setup_path')+'/apache') == False \ - and os.path.exists(public.GetConfigValue('openlitespeed_path')+'/lsws/bin/lswsctrl') == False: + if os.path.exists(public.GetConfigValue('setup_path') + '/nginx') == False \ + and os.path.exists(public.GetConfigValue('setup_path') + '/apache') == False \ + and os.path.exists('/usr/local/lsws/bin/lswsctrl') == False: data['isSetup'] = False - return render_template( 'site.html',data=data) + return render_template('site.html', data=data) import panelSite siteObject = panelSite.panelSite() - defs = ('get_auto_restart_rph','remove_auto_restart_rph','auto_restart_rph','check_del_data','upload_csv','create_website_multiple','del_redirect_multiple','del_proxy_multiple','delete_dir_auth_multiple', - 'delete_dir_bind_multiple','delete_domain_multiple','set_site_etime_multiple','set_site_php_version_multiple', - 'delete_website_multiple','set_site_status_multiple','get_site_err_log','get_site_domains','GetRedirectFile', - 'SaveRedirectFile','DeleteRedirect','GetRedirectList','CreateRedirect','ModifyRedirect', - 'set_dir_auth','delete_dir_auth','get_dir_auth','modify_dir_auth_pass','reset_wp_db', - 'GetSiteLogs','GetSiteDomains','GetSecurity','SetSecurity','ProxyCache','CloseToHttps','HttpToHttps','SetEdate', - 'SetRewriteTel','GetCheckSafe','CheckSafe','GetDefaultSite','SetDefaultSite','CloseTomcat','SetTomcat','apacheAddPort', - 'AddSite','GetPHPVersion','SetPHPVersion','DeleteSite','AddDomain','DelDomain','GetDirBinding','AddDirBinding','GetDirRewrite', - 'DelDirBinding','get_site_types','add_site_type','remove_site_type','modify_site_type_name','set_site_type','UpdateRulelist', - 'SetSiteRunPath','GetSiteRunPath','SetPath','SetIndex','GetIndex','GetDirUserINI','SetDirUserINI','GetRewriteList','SetSSL', - 'SetSSLConf','CreateLet','CloseSSLConf','GetSSL','SiteStart','SiteStop','Set301Status','Get301Status','CloseLimitNet','SetLimitNet', - 'GetLimitNet','RemoveProxy','GetProxyList','GetProxyDetals','CreateProxy','ModifyProxy','GetProxyFile','SaveProxyFile','ToBackup', - 'DelBackup','GetSitePHPVersion','logsOpen','GetLogsStatus','CloseHasPwd','SetHasPwd','GetHasPwd','GetDnsApi','SetDnsApi', - 'reset_wp_password','is_update','purge_all_cache','set_fastcgi_cache','update_wp','get_wp_username', - 'get_language','deploy_wp') - return publicObject(siteObject,defs,None,pdata) + defs = ('get_auto_restart_rph', 'remove_auto_restart_rph', 'auto_restart_rph', 'check_del_data', 'upload_csv', + 'create_website_multiple', 'del_redirect_multiple', 'del_proxy_multiple', 'delete_dir_auth_multiple', + 'delete_dir_bind_multiple', 'delete_domain_multiple', 'set_site_etime_multiple', + 'set_site_php_version_multiple', + 'delete_website_multiple', 'set_site_status_multiple', 'get_site_err_log', 'get_site_domains', + 'GetRedirectFile', + 'SaveRedirectFile', 'DeleteRedirect', 'GetRedirectList', 'CreateRedirect', 'ModifyRedirect', + "set_error_redirect", + 'set_dir_auth', 'delete_dir_auth', 'get_dir_auth', 'modify_dir_auth_pass', 'reset_wp_db', 'export_domains', + 'import_domains', + 'GetSiteLogs', 'GetSiteDomains', 'GetSecurity', 'SetSecurity', 'ProxyCache', 'CloseToHttps', 'HttpToHttps', + 'SetEdate', + 'SetRewriteTel', 'GetCheckSafe', 'CheckSafe', 'GetDefaultSite', 'SetDefaultSite', 'CloseTomcat', + 'SetTomcat', 'apacheAddPort', + 'AddSite', 'GetPHPVersion', 'SetPHPVersion', 'DeleteSite', 'AddDomain', 'DelDomain', 'GetDirBinding', + 'AddDirBinding', 'GetDirRewrite', + 'DelDirBinding', 'get_site_types', 'add_site_type', 'remove_site_type', 'modify_site_type_name', + 'set_site_type', 'UpdateRulelist', + 'SetSiteRunPath', 'GetSiteRunPath', 'SetPath', 'SetIndex', 'GetIndex', 'GetDirUserINI', 'SetDirUserINI', + 'GetRewriteList', 'SetSSL', + 'SetSSLConf', 'CreateLet', 'CloseSSLConf', 'GetSSL', 'SiteStart', 'SiteStop', 'Set301Status', + 'Get301Status', 'CloseLimitNet', 'SetLimitNet', + 'GetLimitNet', 'RemoveProxy', 'GetProxyList', 'GetProxyDetals', 'CreateProxy', 'ModifyProxy', + 'GetProxyFile', 'SaveProxyFile', 'ToBackup', + 'DelBackup', 'GetSitePHPVersion', 'logsOpen', 'GetLogsStatus', 'CloseHasPwd', 'SetHasPwd', 'GetHasPwd', + 'GetDnsApi', 'SetDnsApi', + 'reset_wp_password', 'is_update', 'purge_all_cache', 'set_fastcgi_cache', 'update_wp', 'get_wp_username', + 'get_language', 'deploy_wp', + # 网站管理新增 + 'test_domains_api', 'site_rname', -@app.route('/ftp',methods=method_all) -def ftp(pdata = None): - #FTP管理 + ) + return publicObject(siteObject, defs, None, pdata) + + +@app.route('/ftp', methods=method_all) +def ftp(pdata=None): + # FTP管理 comReturn = comm.local() if comReturn: return comReturn if request.method == method_get[0] and not pdata: FtpPort() - data = {} + import system + data = system.system().GetConcifInfo() data['isSetup'] = True data['js_random'] = get_js_random() if os.path.exists(public.GetConfigValue('setup_path') + '/pure-ftpd') == False: data['isSetup'] = False data['lan'] = public.GetLan('ftp') - return render_template('ftp.html',data=data) + return render_template('ftp.html', data=data) import ftp ftpObject = ftp.ftp() - defs = ('AddUser','DeleteUser','SetUserPassword','SetStatus','setPort','set_user_home') - return publicObject(ftpObject,defs,None,pdata) + defs = ('AddUser', 'DeleteUser', 'SetUserPassword', 'SetStatus', 'setPort', 'set_user_home', 'get_login_logs', + 'get_action_logs', 'set_ftp_logs') + return publicObject(ftpObject, defs, None, pdata) -@app.route('/database',methods=method_all) -def database(pdata = None): - #数据库管理 +@app.route('/database', methods=method_all) +def database(pdata=None): + # 数据库管理 comReturn = comm.local() if comReturn: return comReturn if request.method == method_get[0] and not pdata: @@ -410,23 +542,28 @@ def database(pdata = None): import system data = system.system().GetConcifInfo() data['isSetup'] = os.path.exists(public.GetConfigValue('setup_path') + '/mysql/bin') - data['mysql_root'] = public.M('config').where('id=?',(1,)).getField('mysql_root') + data['mysql_root'] = public.M('config').where('id=?', (1,)).getField('mysql_root') data['lan'] = public.GetLan('database') data['js_random'] = get_js_random() - return render_template('database.html',data=data) + return render_template('database.html', data=data) import database databaseObject = database.database() - defs = ('GetdataInfo','check_del_data','get_database_size', 'GetInfo', 'ReTable', 'OpTable', 'AlTable', 'GetSlowLogs', 'GetRunStatus', - 'SetDbConf', 'GetDbStatus', 'BinLog', 'GetErrorLog', 'GetMySQLInfo', 'SetDataDir', 'SetMySQLPort','AddCloudDatabase', - 'AddDatabase', 'DeleteDatabase', 'SetupPassword', 'ResDatabasePassword', 'ToBackup', 'DelBackup','AddCloudServer','GetCloudServer','RemoveCloudServer','ModifyCloudServer', - 'InputSql', 'SyncToDatabases', 'SyncGetDatabases', 'GetDatabaseAccess', 'SetDatabaseAccess', - 'get_mysql_user','check_mysql_ssl_status','write_ssl_to_mysql','GetdataInfo') + defs = ( + 'GetdataInfo', 'check_del_data', 'get_database_size', 'GetInfo', 'ReTable', 'OpTable', 'AlTable', 'GetSlowLogs', + 'GetRunStatus', + 'SetDbConf', 'GetDbStatus', 'BinLog', 'GetErrorLog', 'GetMySQLInfo', 'SetDataDir', 'SetMySQLPort', + 'AddCloudDatabase', + 'AddDatabase', 'DeleteDatabase', 'SetupPassword', 'ResDatabasePassword', 'ToBackup', 'DelBackup', + 'AddCloudServer', + 'GetCloudServer', 'RemoveCloudServer', 'ModifyCloudServer', + 'InputSql', 'SyncToDatabases', 'SyncGetDatabases', 'GetDatabaseAccess', 'SetDatabaseAccess', + 'get_mysql_user', 'check_mysql_ssl_status', 'write_ssl_to_mysql', 'GetdataInfo') return publicObject(databaseObject, defs, None, pdata) -@app.route('/acme',methods=method_all) -def acme(pdata = None): - #Let's 证书管理 +@app.route('/acme', methods=method_all) +def acme(pdata=None): + # Let's 证书管理 comReturn = comm.local() if comReturn: return comReturn import acme_v2 @@ -437,18 +574,19 @@ def acme(pdata = None): 'apply_cert_api', 'apply_dns_auth') return publicObject(acme_v2_object, defs, None, pdata) -@app.route('/message/',methods=method_all) -def message(action = None): - #提示消息管理 - comReturn = comm.local() - if comReturn: return comReturn - import panelMessage - message_object = panelMessage.panelMessage() - defs = ( - 'get_messages', 'get_message_find', 'create_message', 'status_message', 'remove_message', 'get_messages_all') - return publicObject(message_object, defs, action, None) - +# import panelMessage +# message_object = panelMessage.panelMessage() +# @app.route('/message/', methods=method_all) +# def message(action=None): +# # 提示消息管理 +# comReturn = comm.local() +# if comReturn: return comReturn +# import panelMessage +# message_object = panelMessage.panelMessage() +# defs = ( +# 'get_messages', 'get_message_find', 'create_message', 'status_message', 'remove_message', 'get_messages_all') +# return publicObject(message_object, defs, action, None) @app.route('/api', methods=method_all) @@ -462,20 +600,33 @@ def api(pdata=None): 'get_tmp_token', 'get_app_bind_status', 'login_for_app') return publicObject(api_object, defs, None, pdata) -@app.route('/control',methods=method_all) -def control(pdata = None): - #监控页面 + +@app.route('/control', methods=method_all) +def control(pdata=None): + # 监控页面 comReturn = comm.local() if comReturn: return comReturn import system data = system.system().GetConcifInfo() data['lan'] = public.GetLan('control') data['js_random'] = get_js_random() - return render_template( 'control.html',data=data) + return render_template('control.html', data=data) -@app.route('/firewall',methods=method_all) -def firewall(pdata = None): - #安全页面 + +@app.route('/logs', methods=method_all) +def logs(pdata=None): + comReturn = comm.local() + if comReturn: return comReturn + if request.method == method_get[0] and not pdata: + data = {} + data['lan'] = public.GetLan('soft') + data['show_workorder'] = not os.path.exists('data/not_workorder.pl') + return render_template('logs.html', data=data) + + +@app.route('/firewall', methods=method_all) +def firewall(pdata=None): + # 安全页面 comReturn = comm.local() if comReturn: return comReturn if request.method == method_get[0] and not pdata: @@ -483,11 +634,12 @@ def firewall(pdata = None): data = system.system().GetConcifInfo() data['lan'] = public.GetLan('firewall') data['js_random'] = get_js_random() - return render_template( 'firewall.html',data=data) + return render_template('firewall.html', data=data) import firewalls firewallObject = firewalls.firewalls() defs = ('GetList', 'AddDropAddress', 'DelDropAddress', 'FirewallReload', 'SetFirewallStatus', - 'AddAcceptPort', 'DelAcceptPort', 'SetSshStatus', 'SetPing', 'SetSshPort', 'GetSshInfo','SetFirewallStatus') + 'AddAcceptPort', 'DelAcceptPort', 'SetSshStatus', 'SetPing', 'SetSshPort', 'GetSshInfo', + 'SetFirewallStatus') return publicObject(firewallObject, defs, None, pdata) @@ -496,22 +648,26 @@ def ssh_security(pdata=None): # SSH安全 comReturn = comm.local() if comReturn: return comReturn - if request.method == method_get[0] and not pdata: + if request.method == method_get[0] and not pdata and not request.args.get('action', '') in ['download_key']: data = {} data['lan'] = public.GetLan('firewall') data['js_random'] = get_js_random() return render_template('firewall.html', data=data) import ssh_security firewallObject = ssh_security.ssh_security() - defs = ('san_ssh_security', 'set_password', 'set_sshkey', 'stop_key', 'get_config', + is_csrf = True + if request.args.get('action', '') in ['download_key']: is_csrf = False + defs = ('san_ssh_security', 'set_password', 'set_sshkey', 'stop_key', 'get_config', 'download_key', 'stop_password', 'get_key', 'return_ip', 'add_return_ip', 'del_return_ip', 'start_jian', 'stop_jian', - 'get_jian', 'get_logs','set_root','stop_root','start_auth_method','stop_auth_method','get_auth_method','check_so_file','get_so_file','get_pin') - return publicObject(firewallObject, defs, None, pdata) + 'get_jian', 'get_logs', 'set_root', 'stop_root', 'start_auth_method', 'stop_auth_method', 'get_auth_method', + 'check_so_file', 'get_so_file', 'get_pin', 'set_login_send', 'get_login_send', 'get_msg_push_list', + 'clear_login_send') + return publicObject(firewallObject, defs, None, pdata, is_csrf) @app.route('/monitor', methods=method_all) def panel_monitor(pdata=None): - #云控统计信息 + # 云控统计信息 comReturn = comm.local() if comReturn: return comReturn import monitor @@ -522,74 +678,79 @@ def panel_monitor(pdata=None): @app.route('/san', methods=method_all) def san_baseline(pdata=None): - #云控安全扫描 + # 云控安全扫描 comReturn = comm.local() if comReturn: return comReturn import san_baseline dataObject = san_baseline.san_baseline() - defs = ('start', 'get_api_log', 'get_resut', 'get_ssh_errorlogin','repair','repair_all') + defs = ('start', 'get_api_log', 'get_resut', 'get_ssh_errorlogin', 'repair', 'repair_all') return publicObject(dataObject, defs, None, pdata) + @app.route('/password', methods=method_all) def panel_password(pdata=None): - #云控密码管理 + # 云控密码管理 comReturn = comm.local() if comReturn: return comReturn import password dataObject = password.password() defs = ('set_root_password', 'get_mysql_root', 'set_mysql_password', 'set_panel_password', - 'SetPassword', 'SetSshKey','StopKey','GetConfig','StopPassword','GetKey', - 'get_databses','rem_mysql_pass','set_mysql_access',"get_panel_username" + 'SetPassword', 'SetSshKey', 'StopKey', 'GetConfig', 'StopPassword', 'GetKey', + 'get_databses', 'rem_mysql_pass', 'set_mysql_access', "get_panel_username" ) return publicObject(dataObject, defs, None, pdata) @app.route('/warning', methods=method_all) def panel_warning(pdata=None): - #首页安全警告 + # 首页安全警告 comReturn = comm.local() if comReturn: return comReturn - if 'request_token' in session and 'login' in session: + if public.get_csrf_html_token_key() in session and 'login' in session: if not check_csrf(): return public.ReturnJson(False, 'INIT_CSRF_ERR'), json_header get = get_input() ikey = 'warning_list' + import panelWarning + dataObject = panelWarning.panelWarning() if get.action == 'get_list': result = cache.get(ikey) if not result or 'force' in get: - if 'force' in get: - public.set_module_logs('panelWarning', 'get_list', 1) - result = public.ExecShell("{} {}/script/warning_list.py".format(public.get_python_bin(),public.get_panel_path()))[0] + result = json.loads('{"ignore":[],"risk":[],"security":[]}') try: - json.loads(result) + defs = ("get_list",) + result = publicObject(dataObject, defs, None, pdata) cache.set(ikey, result, 3600) + return result except: - result = '{"ignore":[],"risk":[],"security":[]}' - return result,json_header - import panelWarning - dataObject = panelWarning.panelWarning() - defs = ('get_list', 'set_ignore', 'check_find') - if get.action in ['set_ignore','check_find']: + pass + return result + + defs = ('get_list', 'set_ignore', 'check_find', 'check_cve', 'set_vuln_ignore', 'get_scan_bar', 'get_tmp_result', + 'kill_get_list') + + if get.action in ['set_ignore', 'check_find', 'set_vuln_ignore']: cache.delete(ikey) return publicObject(dataObject, defs, None, pdata) @app.route('/bak', methods=method_all) def backup_bak(pdata=None): - #云控备份服务 + # 云控备份服务 comReturn = comm.local() if comReturn: return comReturn import backup_bak dataObject = backup_bak.backup_bak() defs = ('get_sites', 'get_databases', 'backup_database', 'backup_site', 'backup_path', 'get_database_progress', - 'get_site_progress', 'down','get_down_progress','download_path','backup_site_all','get_all_site_progress', - 'backup_date_all','get_all_date_progress' + 'get_site_progress', 'down', 'get_down_progress', 'download_path', 'backup_site_all', + 'get_all_site_progress', + 'backup_date_all', 'get_all_date_progress' ) return publicObject(dataObject, defs, None, pdata) @app.route('/abnormal', methods=method_all) def abnormal(pdata=None): - #云控系统统计 + # 云控系统统计 comReturn = comm.local() if comReturn: return comReturn import abnormal @@ -599,8 +760,9 @@ def abnormal(pdata=None): ) return publicObject(dataObject, defs, None, pdata) -@app.route('/project//', methods=method_all) -def project(mod_name,def_name): + +@app.route('/project///', methods=method_all) +def project(mod_name, def_name, stype=None): comReturn = comm.local() if comReturn: return comReturn from panelProjectController import ProjectController @@ -610,7 +772,25 @@ def project(mod_name,def_name): get.action = 'model' get.mod_name = mod_name get.def_name = def_name - return publicObject(project_obj,defs,None,get) + get.stype = stype + if stype == "html": + return project_obj.model(get) + return publicObject(project_obj, defs, None, get) + + +@app.route('/msg//', methods=method_all) +def msgcontroller(mod_name, def_name): + comReturn = comm.local() + if comReturn: return comReturn + from MsgController import MsgController + project_obj = MsgController() + defs = ('model',) + get = get_input() + get.action = 'model' + get.mod_name = mod_name + get.def_name = def_name + return publicObject(project_obj, defs, None, get) + @app.route('/docker', methods=method_all) def docker(pdata=None): @@ -623,8 +803,9 @@ def docker(pdata=None): data['lan'] = public.GetLan('files') return render_template('docker.html', data=data) + @app.route('/dbmodel//', methods=method_all) -def dbmodel(mod_name,def_name): +def dbmodel(mod_name, def_name): comReturn = comm.local() if comReturn: return comReturn from panelDatabaseController import DatabaseController @@ -635,8 +816,7 @@ def dbmodel(mod_name,def_name): get.mod_name = mod_name get.def_name = def_name - return publicObject(database_obj,defs,None,get) - + return publicObject(database_obj, defs, None, get) @app.route('/files', methods=method_all) @@ -650,28 +830,37 @@ def files(pdata=None): data['recycle_bin'] = os.path.exists('data/recycle_bin.pl') data['lan'] = public.GetLan('files') data['js_random'] = get_js_random() - return render_template('files.html',data=data) + return render_template('files.html', data=data) import files filesObject = files.files() - defs = ('files_search','files_replace','get_replace_logs','get_images_resize','add_files_rsync', - 'get_file_attribute','get_file_hash','CreateLink','get_progress','restore_website','fix_permissions','get_all_back', - 'restore_path_permissions','del_path_premissions','get_path_premissions','back_path_permissions','upload_file_exists', - 'CheckExistsFiles','GetExecLog','GetSearch','ExecShell','GetExecShellMsg','exec_git','exec_composer','create_download_url', - 'UploadFile','GetDir','CreateFile','CreateDir','DeleteDir','DeleteFile','get_download_url_list','remove_download_url','modify_download_url', - 'CopyFile','CopyDir','MvFile','GetFileBody','SaveFileBody','Zip','UnZip','get_download_url_find','set_file_ps', - 'SearchFiles','upload','read_history','re_history','auto_save_temp','get_auto_save_body','get_videos', - 'GetFileAccess','SetFileAccess','GetDirSize','SetBatchData','BatchPaste','install_rar','get_path_size', - 'DownloadFile','GetTaskSpeed','CloseLogs','InstallSoft','UninstallSoft','SaveTmpFile','get_composer_version','exec_composer','update_composer', - 'GetTmpFile','del_files_store','add_files_store','get_files_store','del_files_store_types','add_files_store_types','exec_git', - 'RemoveTask','ActionTask','Re_Recycle_bin','Get_Recycle_bin','Del_Recycle_bin','Close_Recycle_bin','Recycle_bin','file_webshell_check','dir_webshell_check', + defs = ('files_search', 'files_replace', 'get_replace_logs', 'get_images_resize', 'add_files_rsync', + 'get_file_attribute', 'get_file_hash', 'CreateLink', 'get_progress', 'restore_website', 'fix_permissions', + 'get_all_back', + 'restore_path_permissions', 'del_path_premissions', 'get_path_premissions', 'back_path_permissions', + 'upload_file_exists', + 'CheckExistsFiles', 'GetExecLog', 'GetSearch', 'ExecShell', 'GetExecShellMsg', 'exec_git', 'exec_composer', + 'create_download_url', + 'UploadFile', 'GetDir', 'CreateFile', 'CreateDir', 'DeleteDir', 'DeleteFile', 'get_download_url_list', + 'remove_download_url', 'modify_download_url', + 'CopyFile', 'CopyDir', 'MvFile', 'GetFileBody', 'SaveFileBody', 'Zip', 'UnZip', 'get_download_url_find', + 'set_file_ps', + 'SearchFiles', 'upload', 'read_history', 're_history', 'auto_save_temp', 'get_auto_save_body', 'get_videos', + 'GetFileAccess', 'SetFileAccess', 'GetDirSize', 'SetBatchData', 'BatchPaste', 'install_rar', + 'get_path_size', + 'DownloadFile', 'GetTaskSpeed', 'CloseLogs', 'InstallSoft', 'UninstallSoft', 'SaveTmpFile', + 'get_composer_version', 'exec_composer', 'update_composer', + 'GetTmpFile', 'del_files_store', 'add_files_store', 'get_files_store', 'del_files_store_types', + 'add_files_store_types', 'exec_git', + 'RemoveTask', 'ActionTask', 'Re_Recycle_bin', 'Get_Recycle_bin', 'Del_Recycle_bin', 'Close_Recycle_bin', + 'Recycle_bin', 'file_webshell_check', 'dir_webshell_check', 'files_search', 'files_replace', 'get_replace_logs' ) - return publicObject(filesObject,defs,None,pdata) + return publicObject(filesObject, defs, None, pdata) -@app.route('/crontab',methods=method_all) -def crontab(pdata = None): - #计划任务 +@app.route('/crontab', methods=method_all) +def crontab(pdata=None): + # 计划任务 comReturn = comm.local() if comReturn: return comReturn if request.method == method_get[0] and not pdata: @@ -679,32 +868,35 @@ def crontab(pdata = None): data = system.system().GetConcifInfo() data['lan'] = public.GetLan('crontab') data['js_random'] = get_js_random() - return render_template( 'crontab.html',data=data) + return render_template('crontab.html', data=data) import crontab crontabObject = crontab.crontab() - defs = ('GetCrontab','AddCrontab','GetDataList','GetLogs','DelLogs','DelCrontab', - 'StartTask','set_cron_status','get_crond_find','modify_crond' + defs = ('GetCrontab', 'AddCrontab', 'GetDataList', 'GetLogs', 'DelLogs', 'DelCrontab', + 'StartTask', 'set_cron_status', 'get_crond_find', 'modify_crond', 'get_backup_list' ) - return publicObject(crontabObject,defs,None,pdata) + return publicObject(crontabObject, defs, None, pdata) -@app.route('/soft',methods=method_all) -def soft(pdata = None): - #软件商店页面 + +@app.route('/soft', methods=method_all) +def soft(pdata=None): + # 软件商店页面 comReturn = comm.local() if comReturn: return comReturn - if request.method == method_get[0] and not pdata: - data={} - data['lan'] = public.GetLan('soft') - data['js_random'] = get_js_random() - return render_template( 'soft.html',data=data) + import system + data = system.system().GetConcifInfo() + data['lan'] = public.GetLan('soft') + data['js_random'] = get_js_random() + return render_template('soft.html', data=data) -@app.route('/config',methods=method_all) -def config(pdata = None): - #面板设置页面 + +@app.route('/config', methods=method_all) +def config(pdata=None): + # 面板设置页面 comReturn = comm.local() if comReturn: return comReturn + if request.method == method_get[0] and not pdata: - import system,wxapp,config + import system, wxapp, config c_obj = config.config() data = system.system().GetConcifInfo() data['lan'] = public.GetLan('config') @@ -715,7 +907,7 @@ def config(pdata = None): data['api'] = '' data['ipv6'] = '' sess_out_path = 'data/session_timeout.pl' - if not os.path.exists(sess_out_path): public.writeFile(sess_out_path,'86400') + if not os.path.exists(sess_out_path): public.writeFile(sess_out_path, '86400') s_time_tmp = public.readFile(sess_out_path) if not s_time_tmp: s_time_tmp = '0' data['session_timeout'] = int(s_time_tmp) @@ -730,108 +922,151 @@ def config(pdata = None): if app.config['DEBUG']: data['debug'] = 'checked' data['is_local'] = '' if public.is_local(): data['is_local'] = 'checked' - return render_template( 'config.html',data=data) + data['public_key'] = public.get_rsa_public_key().replace("\n", "") + return render_template('config.html', data=data) import config defs = ( - 'send_by_telegram','set_empty','set_backup_notification','get_panel_ssl_status','set_file_deny', 'del_file_deny', 'get_file_deny', - 'get_httpd_access_log_format_parameter','set_httpd_format_log_to_website','get_httpd_access_log_format', - 'del_httpd_access_log_format','add_httpd_access_log_format','get_nginx_access_log_format_parameter', - 'set_format_log_to_website','get_nginx_access_log_format','del_nginx_access_log_format','set_click_logs','get_node_config', - 'add_nginx_access_log_format','get_ols_private_cache_status','get_ols_value','set_ols_value','set_node_config', - 'get_ols_private_cache','get_ols_static_cache','set_ols_static_cache','switch_ols_private_cache','set_ols_private_cache', - 'set_coll_open','get_qrcode_data','check_two_step','set_two_step_auth','create_user','remove_user','modify_user', - 'get_key','get_php_session_path','set_php_session_path','get_cert_source','get_users','set_request_iptype', - 'set_local','set_debug','get_panel_error_logs','clean_panel_error_logs','get_menu_list','set_hide_menu_list', - 'get_basic_auth_stat','set_basic_auth','get_cli_php_version','get_tmp_token','get_temp_login','set_temp_login','remove_temp_login','clear_temp_login','get_temp_login_logs', - 'set_cli_php_version','DelOldSession', 'GetSessionCount', 'SetSessionConf','set_not_auth_status', - 'GetSessionConf','get_ipv6_listen','set_ipv6_status','GetApacheValue','SetApacheValue', - 'GetNginxValue','SetNginxValue','get_token','set_token','set_admin_path','is_pro', - 'get_php_config','get_config','SavePanelSSL','GetPanelSSL','GetPHPConf','SetPHPConf', - 'GetPanelList','AddPanelInfo','SetPanelInfo','DelPanelInfo','ClickPanelInfo','SetPanelSSL', - 'SetTemplates','Set502','setPassword','setUsername','setPanel','setPathInfo','setPHPMaxSize', - 'getFpmConfig','setFpmConfig','setPHPMaxTime','syncDate','setPHPDisable','SetControl','get_settings2','del_tg_info','set_tg_bot', - 'ClosePanel','AutoUpdatePanel','SetPanelLock','return_mail_list','del_mail_list','add_mail_address','user_mail_send','get_user_mail','set_dingding','get_dingding', - 'get_settings','user_stmp_mail_send','user_dingding_send','get_login_send','set_login_send','clear_login_send','get_login_log','login_ipwhite', - 'set_ssl_verify', 'get_ssl_verify', 'get_password_config', 'set_password_expire', 'set_password_safe' - ) - return publicObject(config.config(),defs,None,pdata) + 'send_by_telegram', 'set_empty', 'set_backup_notification', 'get_panel_ssl_status', 'set_file_deny', + 'del_file_deny', 'get_file_deny', 'set_improvement', + 'get_httpd_access_log_format_parameter', 'set_httpd_format_log_to_website', 'get_httpd_access_log_format', + 'del_httpd_access_log_format', 'add_httpd_access_log_format', 'get_nginx_access_log_format_parameter', + 'set_format_log_to_website', 'get_nginx_access_log_format', 'del_nginx_access_log_format', 'set_click_logs', + 'get_node_config', + 'add_nginx_access_log_format', 'get_ols_private_cache_status', 'get_ols_value', 'set_ols_value', + 'set_node_config', + 'get_ols_private_cache', 'get_ols_static_cache', 'set_ols_static_cache', 'switch_ols_private_cache', + 'set_ols_private_cache', + 'set_coll_open', 'get_qrcode_data', 'check_two_step', 'set_two_step_auth', 'create_user', 'remove_user', + 'modify_user', + 'get_key', 'get_php_session_path', 'set_php_session_path', 'get_cert_source', 'get_users', 'set_request_iptype', + 'set_local', 'set_debug', 'get_panel_error_logs', 'clean_panel_error_logs', 'get_menu_list', + 'set_hide_menu_list', + 'get_basic_auth_stat', 'set_basic_auth', 'get_cli_php_version', 'get_tmp_token', 'get_temp_login', + 'set_temp_login', 'remove_temp_login', 'clear_temp_login', 'get_temp_login_logs', + 'set_cli_php_version', 'DelOldSession', 'GetSessionCount', 'SetSessionConf', 'set_not_auth_status', + 'GetSessionConf', 'get_ipv6_listen', 'set_ipv6_status', 'GetApacheValue', 'SetApacheValue', + 'install_msg_module', + 'GetNginxValue', 'SetNginxValue', 'get_token', 'set_token', 'set_admin_path', 'is_pro', 'set_msg_config', + 'get_php_config', 'get_config', 'SavePanelSSL', 'GetPanelSSL', 'GetPHPConf', 'SetPHPConf', + 'uninstall_msg_module', + 'GetPanelList', 'AddPanelInfo', 'SetPanelInfo', 'DelPanelInfo', 'ClickPanelInfo', 'SetPanelSSL', + 'get_msg_configs', + 'SetTemplates', 'Set502', 'setPassword', 'setUsername', 'setPanel', 'setPathInfo', 'setPHPMaxSize', + 'get_msg_fun', + 'getFpmConfig', 'setFpmConfig', 'setPHPMaxTime', 'syncDate', 'setPHPDisable', 'SetControl', 'get_settings2', + 'del_tg_info', 'set_tg_bot', + 'ClosePanel', 'AutoUpdatePanel', 'SetPanelLock', 'return_mail_list', 'del_mail_list', 'add_mail_address', + 'user_mail_send', 'get_user_mail', 'set_dingding', 'get_dingding', + 'get_settings', 'user_stmp_mail_send', 'user_dingding_send', 'get_login_send', 'set_login_send', + 'clear_login_send', 'get_login_log', 'login_ipwhite', + 'set_ssl_verify', 'get_ssl_verify', 'get_password_config', 'set_password_expire', 'set_password_safe', + 'get_module_template', + # 新增nps评分 + 'write_nps_new', 'get_nps_new', "check_nps", + # 提交报错信息 # 错误收集 + 'err_collection' + ) + return publicObject(config.config(), defs, None, pdata) -@app.route('/ajax',methods=method_all) -def ajax(pdata = None): - #面板系统服务状态接口 + +@app.route('/ajax', methods=method_all) +def ajax(pdata=None): + # 面板系统服务状态接口 comReturn = comm.local() if comReturn: return comReturn import ajax ajaxObject = ajax.ajax() - defs = ('get_lines','php_info','change_phpmyadmin_ssl_port','set_phpmyadmin_ssl','get_phpmyadmin_ssl','get_pd', - 'check_user_auth','to_not_beta','get_beta_logs','apple_beta','GetApacheStatus','GetCloudHtml','get_pay_type', - 'get_load_average','GetOpeLogs','GetFpmLogs','GetFpmSlowLogs','SetMemcachedCache','GetMemcachedStatus', - 'GetRedisStatus','GetWarning','SetWarning','CheckLogin','GetSpeed','GetAd','phpSort','ToPunycode', - 'GetBetaStatus','SetBeta','setPHPMyAdmin','delClose','KillProcess','GetPHPInfo','GetQiniuFileList','get_process_tops','get_process_cpu_high', - 'UninstallLib','InstallLib','SetQiniuAS','GetQiniuAS','GetLibList','GetProcessList','GetNetWorkList', - 'GetNginxStatus','GetPHPStatus','GetTaskCount','GetSoftList','GetNetWorkIo','GetDiskIo','GetCpuIo', - 'CheckInstalled','UpdatePanel','GetInstalled','GetPHPConfig','SetPHPConfig','log_analysis','speed_log','get_result','get_detailed') + defs = ('get_lines', 'php_info', 'change_phpmyadmin_ssl_port', 'set_phpmyadmin_ssl', 'get_phpmyadmin_ssl', 'get_pd', + 'check_user_auth', 'to_not_beta', 'get_beta_logs', 'apple_beta', 'GetApacheStatus', 'GetCloudHtml', + 'get_pay_type', + 'get_load_average', 'GetOpeLogs', 'GetFpmLogs', 'GetFpmSlowLogs', 'SetMemcachedCache', 'GetMemcachedStatus', + 'GetRedisStatus', 'GetWarning', 'SetWarning', 'CheckLogin', 'GetSpeed', 'GetAd', 'phpSort', 'ToPunycode', + 'GetBetaStatus', 'SetBeta', 'setPHPMyAdmin', 'delClose', 'KillProcess', 'GetPHPInfo', 'GetQiniuFileList', + 'get_process_tops', 'get_process_cpu_high', + 'UninstallLib', 'InstallLib', 'SetQiniuAS', 'GetQiniuAS', 'GetLibList', 'GetProcessList', 'GetNetWorkList', + 'GetNginxStatus', 'GetPHPStatus', 'GetTaskCount', 'GetSoftList', 'GetNetWorkIo', 'GetDiskIo', 'GetCpuIo', + 'CheckInstalled', 'UpdatePanel', 'GetInstalled', 'GetPHPConfig', 'SetPHPConfig', 'log_analysis', + 'speed_log', + 'get_result', 'get_detailed', 'ignore_version') - return publicObject(ajaxObject,defs,None,pdata) + return publicObject(ajaxObject, defs, None, pdata) -@app.route('/system',methods=method_all) -def system(pdata = None): - #面板系统状态接口 + +@app.route('/system', methods=method_all) +def system(pdata=None): + # 面板系统状态接口 comReturn = comm.local() if comReturn: return comReturn import system sysObject = system.system() - defs = ('get_io_info','UpdatePro','GetAllInfo','GetNetWorkApi','GetLoadAverage','ClearSystem', - 'GetNetWorkOld','GetNetWork','GetDiskInfo','GetCpuInfo','GetBootTime','GetSystemVersion', - 'GetMemInfo','GetSystemTotal','GetConcifInfo','ServiceAdmin','ReWeb','RestartServer','ReMemory','RepPanel') - return publicObject(sysObject,defs,None,pdata) + defs = ('get_io_info', 'UpdatePro', 'GetAllInfo', 'GetNetWorkApi', 'GetLoadAverage', 'ClearSystem', + 'GetNetWorkOld', 'GetNetWork', 'GetDiskInfo', 'GetCpuInfo', 'GetBootTime', 'GetSystemVersion', + 'GetMemInfo', 'GetSystemTotal', 'GetConcifInfo', 'ServiceAdmin', 'ReWeb', 'RestartServer', 'ReMemory', + 'RepPanel') + return publicObject(sysObject, defs, None, pdata) -@app.route('/deployment',methods=method_all) -def deployment(pdata = None): - #一键部署接口 + +@app.route('/deployment', methods=method_all) +def deployment(pdata=None): + # 一键部署接口 comReturn = comm.local() if comReturn: return comReturn import plugin_deployment sysObject = plugin_deployment.plugin_deployment() - defs = ('GetList','AddPackage','DelPackage','SetupPackage','GetSpeed','GetPackageOther') - return publicObject(sysObject,defs,None,pdata) + defs = ('GetList', 'AddPackage', 'DelPackage', 'SetupPackage', 'GetSpeed', 'GetPackageOther') + return publicObject(sysObject, defs, None, pdata) -@app.route('/data',methods=method_all) -@app.route('/panel_data',methods=method_all) -def panel_data(pdata = None): - #从数据库获取数据接口 + +@app.route('/data', methods=method_all) +@app.route('/panel_data', methods=method_all) +def panel_data(pdata=None): + # 从数据库获取数据接口 comReturn = comm.local() if comReturn: return comReturn import data dataObject = data.data() - defs = ('setPs','getData','getFind','getKey') - return publicObject(dataObject,defs,None,pdata) + defs = ('setPs', 'getData', 'getFind', 'getKey') + return publicObject(dataObject, defs, None, pdata) -@app.route('/ssl',methods=method_all) -def ssl(pdata = None): - #商业SSL证书申请接口 + +@app.route('/ssl', methods=method_all) +def ssl(pdata=None): + # 商业SSL证书申请接口 comReturn = comm.local() if comReturn: return comReturn import panelSSL toObject = panelSSL.panelSSL() - defs = ('check_url_txt','RemoveCert','renew_lets_ssl','SetCertToSite','GetCertList','SaveCert','GetCert','GetCertName','again_verify', - 'DelToken','GetToken','GetUserInfo','GetOrderList','GetDVSSL','Completed','SyncOrder','download_cert','set_cert','cancel_cert_order', - 'get_order_list','get_order_find','apply_order_pay','get_pay_status','apply_order','get_verify_info','get_verify_result','get_product_list','set_verify_info', - 'GetSSLInfo','downloadCRT','GetSSLProduct','Renew_SSL','Get_Renew_SSL') + defs = ('check_url_txt', 'RemoveCert', 'renew_lets_ssl', 'SetCertToSite', 'GetCertList', 'SaveCert', 'GetCert', + 'GetCertName', 'again_verify', + 'DelToken', 'GetToken', 'GetUserInfo', 'GetOrderList', 'GetDVSSL', 'Completed', 'SyncOrder', + 'download_cert', 'set_cert', 'cancel_cert_order', + 'get_order_list', 'get_order_find', 'apply_order_pay', 'get_pay_status', 'apply_order', 'get_verify_info', + 'get_verify_result', 'get_product_list', 'set_verify_info', + 'GetSSLInfo', 'downloadCRT', 'GetSSLProduct', 'Renew_SSL', 'Get_Renew_SSL', + # 新增 购买证书对接接口 + 'get_product_list_v2', 'apply_cert_order_pay', 'get_cert_admin', 'apply_order_ca', 'apply_cert_install_pay', + + # 'pay_test' + + ) get = get_input() if get.action == 'download_cert': from io import BytesIO import base64 result = toObject.download_cert(get) - fp = BytesIO(base64.b64decode(result['data'])) - return send_file(fp,attachment_filename=result['filename'],as_attachment=True,mimetype='application/zip') - result = publicObject(toObject,defs,get.action,get) + # public.print_log("@@@@@@@@@@@@@@@@@@@@@@@@@@@@1111111111111111 result: {}".format(result)) + # {'success': False, 'res': '[code: 0] no data [file: /www/wwwroot/192.168.1.139/app/Api/Cert/controllers/Cert.php] [line: 955]', 'nonce': 1706498844} + + fp = BytesIO(base64.b64decode(result['res']['data'])) + return send_file(fp, download_name=result['res']['filename'], as_attachment=True, mimetype='application/zip') + result = publicObject(toObject, defs, get.action, get) return result -@app.route('/task',methods=method_all) -def task(pdata = None): - #后台任务接口 + +@app.route('/task', methods=method_all) +def task(pdata=None): + # 后台任务接口 comReturn = comm.local() if comReturn: return comReturn import panelTask @@ -840,62 +1075,70 @@ def task(pdata = None): result = publicObject(toObject, defs, None, pdata) return result -@app.route('/plugin',methods=method_all) -def plugin(pdata = None): - #插件系统接口 + +@app.route('/plugin', methods=method_all) +def plugin(pdata=None): + # 插件系统接口 comReturn = comm.local() if comReturn: return comReturn import panelPlugin pluginObject = panelPlugin.panelPlugin() - defs = ('get_usually_plugin','check_install_limit','set_score','get_score','update_zip','input_zip','export_zip','add_index','remove_index','sort_index', - 'install_plugin','uninstall_plugin','get_soft_find','get_index_list','get_soft_list','get_cloud_list', - 'check_deps','flush_cache','GetCloudWarning','install','unInstall','getPluginList','getPluginInfo','get_make_args','add_make_args', - 'getPluginStatus','setPluginStatus','a','getCloudPlugin','getConfigHtml','savePluginSort','del_make_args','set_make_args') - return publicObject(pluginObject,defs,None,pdata) + defs = ( + 'get_usually_plugin', 'check_install_limit', 'set_score', 'get_score', 'update_zip', 'input_zip', 'export_zip', + 'add_index', 'remove_index', 'sort_index', + 'install_plugin', 'uninstall_plugin', 'get_soft_find', 'get_index_list', 'get_soft_list', 'get_cloud_list', + 'check_deps', 'flush_cache', 'GetCloudWarning', 'install', 'unInstall', 'getPluginList', 'getPluginInfo', + 'get_make_args', 'add_make_args', + 'getPluginStatus', 'setPluginStatus', 'a', 'getCloudPlugin', 'getConfigHtml', 'savePluginSort', 'del_make_args', + 'set_make_args') + return publicObject(pluginObject, defs, None, pdata) -@app.route('/wxapp',methods=method_all) -@app.route('/panel_wxapp',methods=method_all) -def panel_wxapp(pdata = None): - #微信小程序绑定接口 +@app.route('/wxapp', methods=method_all) +@app.route('/panel_wxapp', methods=method_all) +def panel_wxapp(pdata=None): + # 微信小程序绑定接口 comReturn = comm.local() if comReturn: return comReturn import wxapp toObject = wxapp.wxapp() - defs = ('blind','get_safe_log','blind_result','get_user_info','blind_del','blind_qrcode') - result = publicObject(toObject,defs,None,pdata) + defs = ('blind', 'get_safe_log', 'blind_result', 'get_user_info', 'blind_del', 'blind_qrcode') + result = publicObject(toObject, defs, None, pdata) return result -@app.route('/auth',methods=method_all) -def auth(pdata = None): - #面板认证接口 +@app.route('/auth', methods=method_all) +def auth(pdata=None): + # 面板认证接口 comReturn = comm.local() if comReturn: return comReturn import panelAuth toObject = panelAuth.panelAuth() - defs = ('free_trial','renew_product_auth','auth_activate','get_product_auth','get_stripe_session_id','get_re_order_status_plugin','create_plugin_other_order','get_order_stat', - 'get_voucher_plugin','create_order_voucher_plugin','get_product_discount_by', - 'get_re_order_status','create_order_voucher','create_order','get_order_status', - 'get_voucher','flush_pay_status','create_serverid','check_serverid', - 'get_plugin_list','check_plugin','get_buy_code','check_pay_status', - 'get_renew_code','check_renew_code','get_business_plugin', - 'get_ad_list','check_plugin_end','get_plugin_price') - result = publicObject(toObject,defs,None,pdata) + defs = ('free_trial', 'renew_product_auth', 'auth_activate', 'get_product_auth', 'get_stripe_session_id', + 'get_re_order_status_plugin', 'create_plugin_other_order', 'get_order_stat', + 'get_voucher_plugin', 'create_order_voucher_plugin', 'get_product_discount_by', + 'get_re_order_status', 'create_order_voucher', 'create_order', 'get_order_status', + 'get_voucher', 'flush_pay_status', 'create_serverid', 'check_serverid', + 'get_plugin_list', 'check_plugin', 'get_buy_code', 'check_pay_status', + 'get_renew_code', 'check_renew_code', 'get_business_plugin', + 'get_ad_list', 'check_plugin_end', 'get_plugin_price', 'get_plugin_remarks', + 'get_paypal_session_id', 'check_paypal_status', + ) + result = publicObject(toObject, defs, None, pdata) return result -@app.route('/download',methods=method_get) +@app.route('/download', methods=method_get) def download(): - #文件下载接口 + # 文件下载接口 comReturn = comm.local() if comReturn: return comReturn filename = request.args.get('filename') if filename.find('|') != -1: - filename = filename.split('|')[0] #改为获取本地备份 - if not filename: return public.ReturnJson(False,"INIT_ARGS_ERR"),json_header + filename = filename.split('|')[0] # 改为获取本地备份 + if not filename: return public.ReturnJson(False, "INIT_ARGS_ERR"), json_header # if filename in ['alioss','qiniu','upyun','txcos','ftp','msonedrive','gcloud_storage', 'gdrive', 'aws_s3']: return panel_cloud() - if not os.path.exists(filename): return public.ReturnJson(False,"FILE_NOT_EXISTS"),json_header + if not os.path.exists(filename): return public.ReturnJson(False, "FILE_NOT_EXISTS"), json_header if request.args.get('play') == 'true': import panelVideo @@ -904,28 +1147,23 @@ def download(): else: mimetype = "application/octet-stream" extName = filename.split('.')[-1] - if extName in ['png','gif','jpeg','jpg']: mimetype = None - import flask - if flask.__version__ < "2.1.0": - return send_file(filename,mimetype=mimetype, - as_attachment=True, - add_etags=True, - conditional=True, - attachment_filename=os.path.basename(filename), - cache_timeout=0) - else: - return send_file(filename, mimetype=mimetype, + if extName in ['png', 'gif', 'jpeg', 'jpg']: mimetype = None + public.WriteLog("TYPE_FILE", 'FILE_DOWNLOAD', (filename, public.GetClientIp())) + return send_file(filename, mimetype=mimetype, as_attachment=True, etag=True, conditional=True, download_name=os.path.basename(filename), max_age=0) -''' -@app.route('/cloud',methods=method_all) -def panel_cloud(): - #从对像存储下载备份文件接口 + + +@app.route('/cloud', methods=method_all) +def panel_cloud(is_csrf=True): + # 从对像存储下载备份文件接口 comReturn = comm.local() if comReturn: return comReturn + if is_csrf: + if not check_csrf(): return public.ReturnJson(False, 'INIT_CSRF_ERR'), json_header get = get_input() _filename = get.filename plugin_name = "" @@ -934,20 +1172,21 @@ def panel_cloud(): else: plugin_name = get.filename - if not os.path.exists('plugin/' + plugin_name + '/' + plugin_name+'_main.py'): - return public.returnJson(False,'The specified plugin does not exist!'),json_header + if not os.path.exists('plugin/' + plugin_name + '/' + plugin_name + '_main.py'): + return public.returnJson(False, 'The specified plugin does not exist!'), json_header public.package_path_append('plugin/' + plugin_name) - plugin_main = __import__(plugin_name+'_main') + plugin_main = __import__(plugin_name + '_main') public.mod_reload(plugin_main) tmp = eval("plugin_main.%s_main()" % plugin_name) - if not hasattr(tmp,'download_file'): return public.returnJson(False,'Specified plugin has no file download function!'),json_header + if not hasattr(tmp, 'download_file'): return public.returnJson(False, + 'Specified plugin has no file download function!'), json_header download_url = tmp.download_file(get.name) if plugin_name == 'ftp': - if download_url.find("ftp") != 0:download_url = "ftp://" + download_url + if download_url.find("ftp") != 0: download_url = "ftp://" + download_url else: if download_url.find('http') != 0: download_url = 'http://' + download_url - if "toserver" in get and get.toserver=="true": + if "toserver" in get and get.toserver == "true": download_dir = "/tmp/" if "download_dir" in get: download_dir = get.download_dir @@ -976,14 +1215,78 @@ def panel_cloud(): } return redirect(download_url) -''' - -#======================普通路由区============================# +@app.route('/btwaf_error', methods=method_get) +def btwaf_error(): + # 图标 + comReturn = comm.local() + if comReturn: return comReturn + get = get_input() + p_path = os.path.join('/www/server/panel/plugin/', "btwaf") + if not os.path.exists(p_path): + if get.name == 'btwaf' and get.fun == 'index': + return render_template('error3.html', data={}) + return render_template('error3.html', data={}) -#======================严格排查区域============================# +@app.route('/favicon.ico', methods=method_get) +def send_favicon(): + # 图标 + comReturn = comm.local() + if comReturn: return abort(404) + s_file = '/www/server/panel/BTPanel/static/favicon.ico' + if not os.path.exists(s_file): return abort(404) + return send_file(s_file, conditional=True, etag=True) + + +@app.route('/rspamd', defaults={'path': ''}, methods=method_all) +@app.route('/rspamd/', methods=method_all) +def proxy_rspamd_requests(path): + comReturn = comm.local() + if comReturn: return comReturn + param = str(request.url).split('?') + param = "" if len(param) < 2 else param[-1] + import requests + headers = {} + for h in request.headers.keys(): + headers[h] = request.headers[h] + if request.method == "GET": + if re.search("\.(js|css)$", path): + return send_file('/usr/share/rspamd/www/rspamd/' + path, conditional=True, etag=True) + if path == "/": + return send_file('/usr/share/rspamd/www/rspamd/', conditional=True, etag=True) + url = "http://127.0.0.1:11334/rspamd/" + path + "?" + param + for i in ['stat', 'auth', 'neighbours', 'list_extractors', 'list_transforms', 'graph', 'maps', 'actions', + 'symbols', 'history', 'errors', 'check_selector', 'saveactions', 'savesymbols', 'getmap']: + if i in path: + url = "http://127.0.0.1:11334/" + path + "?" + param + req = requests.get(url, headers=headers, stream=True) + return Resp(stream_with_context(req.iter_content()), content_type=req.headers['content-type']) + else: + url = "http://127.0.0.1:11334/" + path + for i in request.form.keys(): + data = '{}='.format(i) + # public.writeFile('/tmp/2',data+"\n","a+") + req = requests.post(url, data=data, headers=headers, stream=True) + + return Resp(stream_with_context(req.iter_content()), content_type=req.headers['content-type']) + + +@app.route('/tips', methods=method_get) +def tips(): + # 提示页面 + comReturn = comm.local() + if comReturn: return abort(404) + get = get_input() + if len(get.__dict__.keys()) > 1: return abort(404) + return render_template('tips.html') + + +# ======================普通路由区============================# + + +# ======================严格排查区域============================# route_path = os.path.join(admin_path, '') @@ -997,7 +1300,6 @@ if route_path[0] != '/': route_path = '/' + route_path @app.route(route_path + '/', methods=method_all) def login(): # 面板登录接口 - if public.is_spider(): return abort(404) if os.path.exists('install.pl'): return redirect('/install') global admin_check_auth, admin_path, route_path is_auth_path = False @@ -1010,10 +1312,12 @@ def login(): return public.error_not_login(None) v_list = ['username', 'password', 'code', 'vcode', 'cdn_url'] for v in v_list: - pv = request.form.get(v,'').strip() + if v in ['username', 'password']: continue + pv = request.form.get(v, '').strip() if v == 'cdn_url': - if len(pv) > 32: return public.return_msg_gettext(False,'Wrong parameter length!'),json_header - if not re.match(r"^[\w\.-]+$",pv): public.return_msg_gettext(False,'Wrong parameter format!'),json_header + if len(pv) > 32: return public.return_msg_gettext(False, 'Wrong parameter length!'), json_header + if not re.match(r"^[\w\.-]+$", pv): public.return_msg_gettext(False, + 'Wrong parameter format!'), json_header continue if not pv: continue @@ -1021,36 +1325,38 @@ def login(): if v == 'code': p_len = 4 if v == 'vcode': p_len = 6 if len(pv) != p_len: - if v == 'code': return public.returnJson(False,'Verification code length error!'),json_header - return public.returnJson(False,'Wrong parameter length!'),json_header - if not re.match(r"^\w+$",pv): - return public.returnJson(False,'Wrong parameter format!'),json_header + if v == 'code': return public.returnJson(False, 'Verification code length error!'), json_header + return public.returnJson(False, 'Wrong parameter length!'), json_header + if not re.match(r"^\w+$", pv): + return public.returnJson(False, 'Wrong parameter format!'), json_header for n in request.form.keys(): if not n in v_list: - return public.returnJson(False,'There can be no extra parameters in the login parameters'),json_header + return public.returnJson(False, 'There can be no extra parameters in the login parameters'), json_header get = get_input() import userlogin - if hasattr(get,'tmp_token'): + if hasattr(get, 'tmp_token'): result = userlogin.userlogin().request_tmp(get) return is_login(result) - - if hasattr(get,'dologin'): + # 过滤爬虫 + if public.is_spider(): return abort(404) + if hasattr(get, 'dologin'): login_path = '/login' if not 'login' in session: return redirect(login_path) if os.path.exists(admin_path_file): login_path = route_path if session['login'] != False: session['login'] = False - cache.set('dologin',True) - public.write_log_gettext('Logout','Client: {}, has manually exited the panel',(public.GetClientIp()+ ":" + str(request.environ.get('REMOTE_PORT')),)) + cache.set('dologin', True) + public.write_log_gettext('Logout', 'Client: {}, has manually exited the panel', + (public.GetClientIp() + ":" + str(request.environ.get('REMOTE_PORT')),)) if 'tmp_login_expire' in session: s_file = 'data/session/{}'.format(session['tmp_login_id']) if os.path.exists(s_file): os.remove(s_file) token_key = public.get_csrf_html_token_key() if token_key in session: - del(session[token_key]) + del (session[token_key]) session.clear() sess_file = 'data/sess_files/' + public.get_sess_key() if os.path.exists(sess_file): @@ -1098,57 +1404,91 @@ def login(): else: data['hosts'] = json.dumps(data['hosts']) data['app_login'] = os.path.exists('data/app_login.pl') - public.cache_set(public.Md5(uuid.UUID(int=uuid.getnode()).hex[-12:]+public.GetClientIp()),'check',360) - last_key = 'last_login_token' - session[last_key] = public.GetRandomString(32) - data[last_key] = session[last_key] - return render_template('login.html',data=data) + public.cache_set(public.Md5(uuid.UUID(int=uuid.getnode()).hex[-12:] + public.GetClientIp()), 'check', 360) -@app.route('/close',methods=method_get) + # 生成登录token + last_key = 'last_login_token' + # ----------- + last_time_key = 'last_login_token_time' + s_time = int(time.time()) + if last_key in session and last_time_key in session: + # 10秒内不重复生成token + if s_time - session[last_time_key] > 10: + session[last_key] = public.GetRandomString(32) + session[last_time_key] = s_time + else: + session[last_key] = public.GetRandomString(32) + session[last_time_key] = s_time + + data[last_key] = session[last_key] + data['public_key'] = public.get_rsa_public_key() + return render_template('login.html', data=data) + # ----------- + + # rsa_key = 'public_key' + # session[last_key] = public.GetRandomString(32) + # data[last_key] = session[last_key] + # data[rsa_key] = public.get_rsa_public_key().replace("\n", "") + # return render_template('login.html', data=data) + + +@app.route('/userRegister', methods=method_all) +def userRegister(): + comReturn = comm.local() + if comReturn: return comReturn + # from panelSafeController import SafeController + # project_obj = SafeController() + import userRegister + reg = userRegister.userRegister() + defs = ('toRegister', ) + # get = get_input() + # get.action = 'model' + # get.mod_name = mod_name + # get.def_name = def_name + + return publicObject(reg, defs, None, None) + + +@app.route('/close', methods=method_get) def close(): - #面板已关闭页面 + # 面板已关闭页面 if not os.path.exists('data/close.pl'): return redirect('/') data = {} data['lan'] = public.getLan('close') - return render_template('close.html',data=data) - -# @app.route('/tips',methods=method_get) -# def tips(): -# #提示页面 -# return render_template('tips.html') + return render_template('close.html', data=data) @app.route('/get_app_bind_status', methods=method_all) def get_app_bind_status(pdata=None): # APP绑定状态查询 - if not public.check_app('app_bind'):return abort(404) + if not public.check_app('app_bind'): return abort(404) get = get_input() if len(get.__dict__.keys()) > 2: return 'There are meaningless parameters!' - v_list = ['bind_token','data'] + v_list = ['bind_token', 'data'] for n in get.__dict__.keys(): if not n in v_list: return public.returnJson(False, 'There can be no redundant parameters'), json_header import panelApi api_object = panelApi.panelApi() - return json.dumps(api_object.get_app_bind_status(get_input())),json_header + return json.dumps(api_object.get_app_bind_status(get_input())), json_header @app.route('/check_bind', methods=method_all) def check_bind(pdata=None): # APP绑定查询 - if not public.check_app('app_bind'):return abort(404) + if not public.check_app('app_bind'): return abort(404) get = get_input() if len(get.__dict__.keys()) > 4: return 'There are meaningless parameters!' - v_list = ['bind_token','client_brand','client_model','data'] + v_list = ['bind_token', 'client_brand', 'client_model', 'data'] for n in get.__dict__.keys(): if not n in v_list: return public.returnJson(False, 'There can be no redundant parameters'), json_header import panelApi api_object = panelApi.panelApi() - return json.dumps(api_object.check_bind(get_input())),json_header + return json.dumps(api_object.check_bind(get_input())), json_header -@app.route('/code',methods=method_get) +@app.route('/code', methods=method_get) def code(): if not 'code' in session: return '' if not session['code']: return '' @@ -1156,7 +1496,7 @@ def code(): try: import vilidate except: - public.ExecShell("pip install Pillow -I") + public.ExecShell("btpip install Pillow -I") return "Pillow not install!" vie = vilidate.vieCode() codeImage = vie.GetCodeImage(80, 4) @@ -1180,20 +1520,20 @@ def code(): def down(token=None, fname=None): # 文件分享对外接口 try: - if public.M('download_token').count()==0:return abort(404) + if public.M('download_token').count() == 0: return abort(404) fname = request.args.get('fname') if fname: if (len(fname) > 256): return abort(404) if fname: fname = fname.strip('/') if not token: return abort(404) - if len(token) >48: return abort(404) - char_list = ['\\', '/', ':', '*', '?', '"', '<', '>', '|',';','&','`'] + if len(token) > 48: return abort(404) + char_list = ['\\', '/', ':', '*', '?', '"', '<', '>', '|', ';', '&', '`'] for char in char_list: if char in token: return abort(404) if not request.args.get('play') in ['true', None, '']: return abort(404) args = get_input() - v_list = ['fname', 'play', 'file_password','data'] + v_list = ['fname', 'play', 'file_password', 'data'] for n in args.__dict__.keys(): if not n in v_list: return public.returnJson(False, 'There can be no redundant parameters'), json_header @@ -1206,13 +1546,13 @@ def down(token=None, fname=None): if not os.path.exists(find['filename']): return abort(404) if find['password'] and not token in session: if 'file_password' in args: - if not re.match(r"^\w+$",args.file_password): - return public.ReturnJson(False,'Wrong password!'),json_header - if re.match(r"^\d+$",args.file_password): + if not re.match(r"^\w+$", args.file_password): + return public.ReturnJson(False, 'Wrong password!'), json_header + if re.match(r"^\d+$", args.file_password): args.file_password = str(int(args.file_password)) args.file_password += ".0" if args.file_password != str(find['password']): - return public.ReturnJson(False,'Wrong password!'),json_header + return public.ReturnJson(False, 'Wrong password!'), json_header session[token] = 1 session['down'] = True else: @@ -1263,31 +1603,83 @@ def down(token=None, fname=None): return abort(404) +@app.route('/database//', methods=method_all) +def databaseModel(mod_name, def_name): + comReturn = comm.local() + if comReturn: return comReturn + from panelDatabaseController import DatabaseController + project_obj = DatabaseController() + defs = ('model',) + get = get_input() + get.action = 'model' + get.mod_name = mod_name + get.def_name = def_name + + return publicObject(project_obj, defs, None, get) + + +# 系统安全模型页面 +@app.route('/safe//', methods=method_all) +def safeModel(mod_name, def_name): + comReturn = comm.local() + if comReturn: return comReturn + from panelSafeController import SafeController + project_obj = SafeController() + defs = ('model',) + get = get_input() + get.action = 'model' + get.mod_name = mod_name + get.def_name = def_name + + return publicObject(project_obj, defs, None, get) + + +# 通用模型路由 +@app.route('///', methods=method_all) +def allModule(index, mod_name, def_name): + comReturn = comm.local() + if comReturn: return comReturn + p_path = public.get_plugin_path() + '/' + index + if os.path.exists(p_path): + return panel_other(index, mod_name, def_name) + + from panelController import Controller + controller_obj = Controller() + defs = ('model',) + get = get_input() + get.model_index = index + get.action = 'model' + get.mod_name = mod_name + get.def_name = def_name + return publicObject(controller_obj, defs, None, get) + + @app.route('/public', methods=method_all) def panel_public(): get = get_input() if len("{}".format(get.__dict__)) > 1024 * 32: return 'ERROR' - #获取ping测试 + # 获取ping测试 if 'get_ping' in get: try: import panelPing p = panelPing.Test() get = p.check(get) if not get: return 'ERROR' - result = getattr(p,get['act'])(get) + result = getattr(p, get['act'])(get) result_type = type(result) if str(result_type).find('Response') != -1: return result - return public.getJson(result),json_header + return public.getJson(result), json_header except: return abort(404) - if public.cache_get(public.Md5(uuid.UUID(int=uuid.getnode()).hex[-12:]+public.GetClientIp()))!='check':return abort(404) + if public.cache_get( + public.Md5(uuid.UUID(int=uuid.getnode()).hex[-12:] + public.GetClientIp())) != 'check': return abort(404) global admin_check_auth, admin_path, route_path, admin_path_file if admin_path != '/bt' and os.path.exists(admin_path_file) and not 'admin_auth' in session: return abort(404) - v_list = ['fun', 'name','filename', 'data','secret_key'] + v_list = ['fun', 'name', 'filename', 'data', 'secret_key'] for n in get.__dict__.keys(): if not n in v_list: return abort(404) @@ -1299,12 +1691,12 @@ def panel_public(): if not hasattr(get, 'name'): get.name = '' if not hasattr(get, 'fun'): return abort(404) if not public.path_safe_check("%s/%s" % (get.name, get.fun)): return abort(404) - if get.fun in ['login_qrcode', 'is_scan_ok','set_login']: + if get.fun in ['login_qrcode', 'is_scan_ok', 'set_login']: # 检查是否验证过安全入口 if admin_path != '/bt' and os.path.exists(admin_path_file) and not 'admin_auth' in session: return abort(404) - #验证是否绑定了设备 - if not public.check_app('app'):return public.return_msg_gettext(False,'Unbound user') + # 验证是否绑定了设备 + if not public.check_app('app'): return public.return_msg_gettext(False, 'Unbound user') import wxapp pluwx = wxapp.wxapp() checks = pluwx._check(get) @@ -1317,14 +1709,12 @@ def panel_public(): return abort(404) -@app.route('/coll', methods=method_all) -@app.route('/coll/', methods=method_all) @app.route('//', methods=method_all) @app.route('///', methods=method_all) def panel_other(name=None, fun=None, stype=None): # 插件接口 if public.is_error_path(): - return redirect('/error',302) + return redirect('/error', 302) if not name: return abort(404) if not re.match(r"^[\w\-]+$", name): return abort(404) if fun and not re.match(r"^[\w\-\.]+$", fun): return abort(404) @@ -1337,23 +1727,24 @@ def panel_other(name=None, fun=None, stype=None): if len(tmp) == 1: tmp.append('') stype = tmp[1] if fun: - if name=='btwaf' and fun=='index': + if name == 'btwaf' and fun == 'index': pass - elif name=='firewall' and fun=='get_file': + elif name == 'firewall' and fun == 'get_file': pass - elif fun=='static': + elif fun == 'static': pass - elif stype=='html': + elif stype == 'html': pass else: if public.get_csrf_cookie_token_key() in session and 'login' in session: - if not check_csrf(): return public.ReturnJson(False, 'CSRF calibration failed, please login again'), json_header + if not check_csrf(): return public.ReturnJson(False, + 'CSRF calibration failed, please login again'), json_header args = None else: p_path = public.get_plugin_path() + '/' + name if not os.path.exists(p_path): return abort(404) args = get_input() - args_list = ['mail_from','password','mail_to','subject','content','subtype','data'] + args_list = ['mail_from', 'password', 'mail_to', 'subject', 'content', 'subtype', 'data'] for k in args.__dict__: if not k in args_list: return abort(404) @@ -1366,9 +1757,9 @@ def panel_other(name=None, fun=None, stype=None): stype = tmp[1] if not name: name = 'coll' - if not public.path_safe_check("%s/%s/%s" % (name,fun,stype)): return abort(404) - if name.find('./') != -1 or not re.match(r"^[\w-]+$",name): return abort(404) - if not name: return public.returnJson(False,'Please pass in the plug-in name!'),json_header + if not public.path_safe_check("%s/%s/%s" % (name, fun, stype)): return abort(404) + if name.find('./') != -1 or not re.match(r"^[\w-]+$", name): return abort(404) + if not name: return public.returnJson(False, 'Please pass in the plug-in name!'), json_header p_path = public.get_plugin_path() + '/' + name if not os.path.exists(p_path): if name == 'btwaf' and fun == 'index': @@ -1382,29 +1773,25 @@ def panel_other(name=None, fun=None, stype=None): if p['endtime'] != 0 and p['endtime'] < time.time(): pdata['error_msg'] = 1 break - return render_template('error3.html',data=pdata) + return render_template('error3.html', data=pdata) return abort(404) - #是否响插件应静态文件 + # 是否响插件应静态文件 if fun == 'static': if stype.find('./') != -1 or not os.path.exists(p_path + '/static'): return abort(404) s_file = p_path + '/static/' + stype if s_file.find('..') != -1: return abort(404) - if not re.match(r"^[\w\./-]+$",s_file): return abort(404) + if not re.match(r"^[\w\./-]+$", s_file): return abort(404) if not public.path_safe_check(s_file): return abort(404) if not os.path.exists(s_file): return abort(404) - import flask - if flask.__version__ < "2.1.0": - return send_file(s_file,conditional=True,add_etags=True) - else: - return send_file(s_file,conditional=True,etag=True) + return send_file(s_file, conditional=True, etag=True) - #准备参数 + # 准备参数 if not args: args = get_input() args.client_ip = public.GetClientIp() args.fun = fun - #初始化插件对象 + # 初始化插件对象 try: is_php = os.path.exists(p_path + '/index.php') if not is_php: @@ -1419,7 +1806,7 @@ def panel_other(name=None, fun=None, stype=None): waf = -1 try: public.package_path_append(p_path) - plugin_main = __import__(name+'_main') + plugin_main = __import__(name + '_main') if name == 'btwaf' and fun == 'index' and waf == -1 and plugin_list['pro'] == -1: return render_template('error3.html', data={}) except: @@ -1433,18 +1820,32 @@ def panel_other(name=None, fun=None, stype=None): else: from imp import reload reload(plugin_main) - except:pass - plu = eval('plugin_main.' + name + '_main()') - if not hasattr(plu,fun): - return public.returnJson(False,'Plugin does not exist'),json_header + except: + pass + # public.print_log("plugin_main22222: {}".format(plugin_main)) - #执行插件方法 + plu = eval('plugin_main.' + name + '_main()') + + # methods = dir(plu) + # # 遍历列表并打印每个方法的名称 + # for method in methods: + # # 排除以双下划线开头和结尾的特殊属性和方法 + # if not method.startswith("__") and not method.endswith("__"): + # public.print_log(method) + + if not hasattr(plu, fun): + # public.print_log("333333: {}".format(plu)) + # public.print_log("444444: {}".format(fun)) + return public.returnJson(False, 'Plugin does not exist'), json_header + # public.print_log("aaaa plu: {}".format(plu)) + # public.print_log("bbbbb fun: {}".format(fun)) + # 执行插件方法 if not is_php: if is_accept: checks = plu._check(args) if type(checks) != bool or not checks: - return public.getJson(checks),json_header - data = eval('plu.'+fun+'(args)') + return public.getJson(checks), json_header + data = eval('plu.' + fun + '(args)') else: comReturn = comm.local() if comReturn: return comReturn @@ -1454,45 +1855,45 @@ def panel_other(name=None, fun=None, stype=None): data = panelPHP.panelPHP(name).exec_php_script(args) r_type = type(data) - if r_type in [Response,Resp]: + if r_type in [Response, Resp]: return data - #处理响应 - if stype == 'json': #响应JSON - return public.getJson(data),json_header - elif stype == 'html': #使用模板 + # 处理响应 + if stype == 'json': # 响应JSON + return public.getJson(data), json_header + elif stype == 'html': # 使用模板 t_path_root = p_path + '/templates/' t_path = t_path_root + fun + '.html' if not os.path.exists(t_path): - return public.returnJson(False,'The specified template does not exist!'),json_header + return public.returnJson(False, 'The specified template does not exist!'), json_header t_body = public.readFile(t_path) - #处理模板包含 - rep = '{%\s?include\s"(.+)"\s?%}' - includes = re.findall(rep,t_body) + # 处理模板包含 + rep = r'{%\s?include\s"(.+)"\s?%}' + includes = re.findall(rep, t_body) for i_file in includes: filename = p_path + '/templates/' + i_file - i_body = 'ERROR: File '+filename+' does not exists.' + i_body = 'ERROR: File ' + filename + ' does not exists.' if os.path.exists(filename): i_body = public.readFile(filename) - t_body = re.sub(rep.replace('(.+)',i_file),i_body,t_body) + t_body = re.sub(rep.replace('(.+)', i_file), i_body, t_body) - return render_template_string(t_body,data = data) - else: #直接响应插件返回值,可以是任意flask支持的响应类型 + return render_template_string(t_body, data=data) + else: # 直接响应插件返回值,可以是任意flask支持的响应类型 r_type = type(data) if r_type == dict: if name == 'btwaf' and 'msg' in data: - return render_template('error3.html',data={"error_msg":data['msg']}) - return public.returnJson(False,public.getMsg('Bad return type [{}]').format(r_type)),json_header + return render_template('error3.html', data={"error_msg": data['msg']}) + return public.returnJson(False, public.getMsg('Bad return type [{}]').format(r_type)), json_header return data except: return public.get_error_info() return public.get_error_object(None, plugin_name=name) -@app.route('/hook',methods=method_all) +@app.route('/hook', methods=method_all) def panel_hook(): - #webhook接口 + # webhook接口 get = get_input() if not os.path.exists('plugin/webhook'): return abort(404) @@ -1500,16 +1901,17 @@ def panel_hook(): import webhook_main return public.getJson(webhook_main.webhook_main().RunHook(get)) -@app.route('/install',methods=method_all) + +@app.route('/install', methods=method_all) def install(): # 初始化面板接口 - if not session.get('login',None): return public.error_not_login() + if public.is_spider(): return abort(404) if not os.path.exists('install.pl'): return redirect('/login') - if public.M('config').where("id=?",('1',)).getField('status') == 1: + if public.M('config').where("id=?", ('1',)).getField('status') == 1: if os.path.exists('install.pl'): os.remove('install.pl') session.clear() return redirect('/login') - ret_login = os.path.join('/',admin_path) + ret_login = os.path.join('/', admin_path) if admin_path == '/' or admin_path == '/bt': ret_login = '/login' session['admin_path'] = False session['login'] = False @@ -1518,86 +1920,38 @@ def install(): data = {} data['status'] = os.path.exists('install.pl') data['username'] = public.GetRandomString(8).lower() - return render_template( 'install.html',data = data) + return render_template('install.html', data=data) elif request.method == method_post[0]: if not os.path.exists('install.pl'): return redirect(ret_login) get = get_input() - if not hasattr(get,'bt_username'): return public.get_msg_gettext('The user name cannot be empty!') + if not hasattr(get, 'bt_username'): return public.get_msg_gettext('The user name cannot be empty!') if not get.bt_username: return public.get_msg_gettext('The user name cannot be empty!') - if not hasattr(get,'bt_password1'): return public.get_msg_gettext('Password can not be blank!') + if not hasattr(get, 'bt_password1'): return public.get_msg_gettext('Password can not be blank!') if not get.bt_password1: return public.get_msg_gettext('Password can not be blank!') - if get.bt_password1 != get.bt_password2: return public.get_msg_gettext('The passwords entered twice do not match, please re-enter!') - public.M('users').where("id=?",(1,)).save('username,password', - (get.bt_username, - public.password_salt(public.md5(get.bt_password1.strip()),uid=1) + if get.bt_password1 != get.bt_password2: return public.get_msg_gettext( + 'The passwords entered twice do not match, please re-enter!') + public.M('users').where("id=?", (1,)).save('username,password', + (get.bt_username, + public.password_salt(public.md5(get.bt_password1.strip()), uid=1) + ) ) - ) os.remove('install.pl') - public.M('config').where("id=?",('1',)).setField('status',1) + public.M('config').where("id=?", ('1',)).setField('status', 1) data = {} data['status'] = os.path.exists('install.pl') data['username'] = get.bt_username - return render_template( 'install.html',data = data) - -# @app.route('/robots.txt',methods=method_all) -# def panel_robots(): -# # 爬虫规则响应接口 -# get = get_input() -# if len(get.__dict__.keys()) > 1: return abort(404) -# robots = '''User-agent: * -# Disallow: / -# ''' -# return robots,{'Content-Type':'text/plain'} + return render_template('install.html', data=data) -@app.route('/rspamd', defaults={'path': ''},methods=method_all) -@app.route('/rspamd/',methods=method_all) -def proxy_rspamd_requests(path): - comReturn = comm.local() - if comReturn: return comReturn - param = str(request.url).split('?') - param = "" if len(param) < 2 else param[-1] - import requests - headers = {} - for h in request.headers.keys(): - headers[h] = request.headers[h] - if request.method == "GET": - import flask - if re.search("\.(js|css)$",path): - if flask.__version__ < "2.1.0": - return send_file('/usr/share/rspamd/www/rspamd/'+path,conditional=True,add_etags=True) - else: - return send_file('/usr/share/rspamd/www/rspamd/'+path,conditional=True,etag=True) - if path == "/": - if flask.__version__ < "2.1.0": - return send_file('/usr/share/rspamd/www/rspamd/',conditional=True,add_etags=True) - else: - return send_file('/usr/share/rspamd/www/rspamd/',conditional=True,etag=True) - url = "http://127.0.0.1:11334/rspamd/" + path + "?" +param - for i in ['stat','auth','neighbours','list_extractors','list_transforms','graph','maps','actions','symbols','history','errors','check_selector','saveactions','savesymbols','getmap']: - if i in path: - url = "http://127.0.0.1:11334/" + path + "?" +param - req = requests.get(url, headers=headers,stream = True) - return Resp(stream_with_context(req.iter_content()), content_type = req.headers['content-type']) - else: - url = "http://127.0.0.1:11334/" + path - for i in request.form.keys(): - data = '{}='.format(i) - # public.writeFile('/tmp/2',data+"\n","a+") - req = requests.post(url,data=data,headers=headers,stream = True) - - return Resp(stream_with_context(req.iter_content()), content_type = req.headers['content-type']) - -#==================================================# +# ==================================================# - -#======================公共方法区域START============================# +# ======================公共方法区域START============================# -def get_dir_down(filename,token,find): - #获取分享目录信息 +def get_dir_down(filename, token, find): + # 获取分享目录信息 import files args = public.dict_obj() args.path = filename @@ -1606,9 +1960,8 @@ def get_dir_down(filename,token,find): if request.args.get('play') == 'true': pdata = files.files().get_videos(args) - return public.GetJson(pdata),json_header + return public.GetJson(pdata), json_header else: - pdata = files.files().GetDir(args) pdata['token'] = token pdata['ps'] = find['ps'] @@ -1619,35 +1972,36 @@ def get_dir_down(filename,token,find): else: pdata['expire'] = public.get_msg_gettext('Never Expires') pdata['filename'] = (find['filename'].split('/')[-1] + '/' + to_path).strip('/') - return render_template('down.html',data = pdata,to_size=public.to_size) + return render_template('down.html', data=pdata, to_size=public.to_size) + def get_phpmyadmin_dir(): - #获取phpmyadmin目录 + # 获取phpmyadmin目录 path = public.GetConfigValue('setup_path') + '/phpmyadmin' if not os.path.exists(path): return None phpport = '888' try: import re if session['webserver'] == 'nginx': - filename =public.GetConfigValue('setup_path') + '/nginx/conf/nginx.conf' + filename = public.GetConfigValue('setup_path') + '/nginx/conf/nginx.conf' conf = public.readFile(filename) rep = r"listen\s+([0-9]+)\s*;" - rtmp = re.search(rep,conf) + rtmp = re.search(rep, conf) if rtmp: phpport = rtmp.groups()[0] if session['webserver'] == 'apache': filename = public.GetConfigValue('setup_path') + '/apache/conf/extra/httpd-vhosts.conf' conf = public.readFile(filename) rep = r"Listen\s+([0-9]+)\s*\n" - rtmp = re.search(rep,conf) + rtmp = re.search(rep, conf) if rtmp: phpport = rtmp.groups()[0] if session['webserver'] == 'openlitespeed': filename = public.GetConfigValue('setup_path') + '/panel/vhost/openlitespeed/listen/888.conf' - public.writeFile('/tmp/2',filename) + public.writeFile('/tmp/2', filename) conf = public.readFile(filename) rep = r"address\s*\*\:\s*(\d+)" - rtmp = re.search(rep,conf) + rtmp = re.search(rep, conf) if rtmp: phpport = rtmp.groups()[0] except: @@ -1657,7 +2011,7 @@ def get_phpmyadmin_dir(): filepath = path + '/' + filename if os.path.isdir(filepath): if filename[0:10] == 'phpmyadmin': - return str(filename),phpport + return str(filename), phpport return None @@ -1665,11 +2019,16 @@ class run_exec: # 模块访问对像 def run(self, toObject, defs, get): result = None - if not get.action in defs: return public.ReturnJson(False, 'Specific parameters are invalid!'), json_header - result = getattr(toObject,get.action)(get) - if not hasattr(get, 'html') and not hasattr(get, 's_module'): + # public.print_log("OOOOOOOOOOOO))))))))))))))))))000000000000000000000000000000000run_exec: ") + # public.print_log("defs----: {}".format(defs)) + # public.print_log("get ----: {}".format(get)) + + if not get.action in defs: + return public.ReturnJson(False, 'Specific parameters are invalid!'), json_header + result = getattr(toObject, get.action)(get) + if not hasattr(get, 'html') and not hasattr(get, 's_module'): r_type = type(result) - if r_type in [Response,Resp]: return result + if r_type in [Response, Resp]: return result result = public.GetJson(result), json_header if g.is_aes: @@ -1686,11 +2045,11 @@ def check_csrf(): return True -def publicObject(toObject, defs, action=None, get=None,is_csrf=True): +def publicObject(toObject, defs, action=None, get=None, is_csrf=True): try: # 模块访问前置检查 - if is_csrf and public.get_csrf_sess_html_token_value() and session.get('login',None): - if not check_csrf(): return public.ReturnJson(False, 'CSRF calibration failed, please login again'), json_header + if is_csrf and public.get_csrf_sess_html_token_value() and session.get('login', None): + if not check_csrf(): return public.ReturnJson(False, 'INIT_CSRF_ERR'), json_header if not get: get = get_input() if action: get.action = action @@ -1711,16 +2070,16 @@ def publicObject(toObject, defs, action=None, get=None,is_csrf=True): get.dfile = get.dfile.replace('//', '/').replace('\\', '/') get.dfile = public.xssdecode(get.dfile) - if hasattr(toObject, 'site_path_check'): - if not toObject.site_path_check(get): return public.ReturnJson(False, "Overstepping one authority!"), json_header + if not toObject.site_path_check(get): return public.ReturnJson(False, + "Overstepping one authority!"), json_header return run_exec().run(toObject, defs, get) except: return error_500(None) def check_login(http_token=None): - #检查是否登录面板 + # 检查是否登录面板 if cache.get('dologin'): return False if 'login' in session: loginStatus = session['login'] @@ -1731,7 +2090,7 @@ def check_login(http_token=None): def get_pd(): - #获取授权信息 + # 获取授权信息 tmp = -1 # try: # import panelPlugin @@ -1741,110 +2100,121 @@ def get_pd(): # except: tmp1 = None if tmp1: - tmp = tmp1[public.to_string([112,114,111])] + tmp = tmp1[public.to_string([112, 114, 111])] ltd = tmp1.get('ltd', -1) else: ltd = -1 tmp4 = cache.get(public.to_string([112, 95, 116, 111, 107, 101, 110])) if tmp4: tmp_f = public.to_string([47, 116, 109, 112, 47]) + tmp4 - if not os.path.exists(tmp_f): public.writeFile(tmp_f,'-1') + if not os.path.exists(tmp_f): public.writeFile(tmp_f, '-1') tmp = public.readFile(tmp_f) if tmp: tmp = int(tmp) if ltd < 1: if ltd == -2: tmp3 = public.to_string([60, 115, 112, 97, 110, 32, 99, 108, 97, 115, 115, 61, 34, 98, 116, 108, 116, 100, - 45, 103, 114, 97, 121, 34, 62, 60, 115, 112, 97, 110, 32, 115, 116, 121, 108, 101, - 61, 34, 99, 111, 108, 111, 114, 58, 32, 35, 102, 99, 54, 100, 50, 54, 59, 102, 111, - 110, 116, 45, 119, 101, 105, 103, 104, 116, 58, 32, 98, 111, 108, 100, 59, 109, 97, - 114, 103, 105, 110, 45, 114, 105, 103, 104, 116, 58, 53, 112, 120, 34, 62, 24050, 36807, - 26399, 60, 47, 115, 112, 97, 110, 62, 60, 97, 32, 99, 108, 97, 115, 115, 61, 34, 98, 116, - 108, 105, 110, 107, 34, 32, 111, 110, 99, 108, 105, 99, 107, 61, 34, 98, 116, 46, 115, 111, - 102, 116, 46, 117, 112, 100, 97, 116, 97, 95, 108, 116, 100, 40, 41, 34, 62, 82, 69, 78, 69, 87, 60, 47, 97, - 62, 60, 47, 115, 112, 97, 110, 62]) + 45, 103, 114, 97, 121, 34, 62, 60, 115, 112, 97, 110, 32, 115, 116, 121, 108, 101, + 61, 34, 99, 111, 108, 111, 114, 58, 32, 35, 102, 99, 54, 100, 50, 54, 59, 102, 111, + 110, 116, 45, 119, 101, 105, 103, 104, 116, 58, 32, 98, 111, 108, 100, 59, 109, 97, + 114, 103, 105, 110, 45, 114, 105, 103, 104, 116, 58, 53, 112, 120, 34, 62, 24050, + 36807, + 26399, 60, 47, 115, 112, 97, 110, 62, 60, 97, 32, 99, 108, 97, 115, 115, 61, 34, + 98, 116, + 108, 105, 110, 107, 34, 32, 111, 110, 99, 108, 105, 99, 107, 61, 34, 98, 116, 46, + 115, 111, + 102, 116, 46, 117, 112, 100, 97, 116, 97, 95, 108, 116, 100, 40, 41, 34, 62, 82, + 69, 78, 69, 87, 60, 47, 97, + 62, 60, 47, 115, 112, 97, 110, 62]) elif tmp == -1: tmp3 = public.to_string([60, 115, 112, 97, 110, 32, 99, 108, 97, 115, 115, 61, 34, 98, - 116, 112, 114, 111, 45, 102, 114, 101, 101, 34, 32, 111, 110, 99, 108, 105, 99, 107, - 61, 34, 98, 116, 46, 115, 111, 102, 116, 46, 114, 101, 110, 101, 119, 95, 112, 114, - 111, 40, 41, 34, 32, 116, 105, 116, 108, 101, 61, 34, 67,108,105,99,107,32,116,111,32, - 103,101,116,32,80,82,79, 34, 62, 20813, 36153, 29256, 60, 47, 115, 112, 97, 110, 62]) + 116, 112, 114, 111, 45, 102, 114, 101, 101, 34, 32, 111, 110, 99, 108, 105, 99, + 107, + 61, 34, 98, 116, 46, 115, 111, 102, 116, 46, 114, 101, 110, 101, 119, 95, 112, 114, + 111, 40, 41, 34, 32, 116, 105, 116, 108, 101, 61, 34, 67, 108, 105, 99, 107, 32, + 116, 111, 32, + 103, 101, 116, 32, 80, 82, 79, 34, 62, 20813, 36153, 29256, 60, 47, 115, 112, 97, + 110, 62]) elif tmp == -2: tmp3 = public.to_string([60, 115, 112, 97, 110, 32, 99, 108, 97, 115, 115, 61, 34, 98, 116, - 112, 114, 111, 45, 103, 114, 97, 121, 34, 62, 60, 115, 112, 97, 110, 32, - 115, 116, 121, 108, 101, 61, 34, 99, 111, 108, 111, 114, 58, 32, 35, - 102, 99, 54, 100, 50, 54, 59, 102, 111, 110, 116, 45, 119, 101, 105, 103, - 104, 116, 58, 32, 98, 111, 108, 100, 59, 109, 97, 114, 103, 105, 110, 45, - 114, 105, 103, 104, 116, 58, 53, 112, 120, 34, 62, 24050, 36807, 26399, - 60, 47, 115, 112, 97, 110, 62, 60, 97, 32, 99, 108, 97, 115, 115, 61, 34, - 98, 116, 108, 105, 110, 107, 34, 32, 111, 110, 99, 108, 105, 99, 107, 61, - 34, 98, 116, 46, 115, 111, 102, 116, 46, 114, 101, 110, 101, 119, 95, 112, 114, - 111, 40, 41, 34, 62, 82, 69, 78, 69, 87, 60, 47, 97, 62, 60, 47, 115, 112, 97, 110, 62]) - if tmp >= 0 and ltd in [-1,-2]: + 112, 114, 111, 45, 103, 114, 97, 121, 34, 62, 60, 115, 112, 97, 110, 32, + 115, 116, 121, 108, 101, 61, 34, 99, 111, 108, 111, 114, 58, 32, 35, + 102, 99, 54, 100, 50, 54, 59, 102, 111, 110, 116, 45, 119, 101, 105, 103, + 104, 116, 58, 32, 98, 111, 108, 100, 59, 109, 97, 114, 103, 105, 110, 45, + 114, 105, 103, 104, 116, 58, 53, 112, 120, 34, 62, 24050, 36807, 26399, + 60, 47, 115, 112, 97, 110, 62, 60, 97, 32, 99, 108, 97, 115, 115, 61, 34, + 98, 116, 108, 105, 110, 107, 34, 32, 111, 110, 99, 108, 105, 99, 107, 61, + 34, 98, 116, 46, 115, 111, 102, 116, 46, 114, 101, 110, 101, 119, 95, 112, 114, + 111, 40, 41, 34, 62, 82, 69, 78, 69, 87, 60, 47, 97, 62, 60, 47, 115, 112, 97, 110, + 62]) + if tmp >= 0 and ltd in [-1, -2]: if tmp == 0: - tmp2 = public.to_string([27704,20037,25480,26435]) - tmp3 = public.to_string([60, 115, 112, 97, 110, 32, 99, 108, 97, 115, 115, 61, 34, 98, 116, - 112, 114, 111, 34, 62, 123, 48, 125, 60, 115, 112, 97, 110, 32, 115, 116, - 121, 108, 101, 61, 34, 99, 111, 108, 111, 114, 58, 32, 35, 102, 99, 54, 100, - 50, 54, 59, 102, 111, 110, 116, 45, 119, 101, 105, 103, 104, 116, - 58, 32, 98, 111, 108, 100, 59, 34, 62, 123, 49, 125, 60, 47, 115, - 112, 97, 110, 62, 60, 47, 115, 112, 97, 110, 62]).format( - public.to_string([21040,26399,26102,38388,65306]),tmp2) + tmp2 = public.to_string([76, 105, 102, 101, 116, 105, 109, 101]) + + tmp3 = public.to_string([60, 115, 112, 97, 110, 32, 99, 108, 97, 115, 115, 61, 34, 98, 116, 112, 114, + 111, 34, 62, 69, 120, 112, 105, 114, 101, 58, 60, 115, 112, 97, 110, 32, 115, + 116, 121, 108, 101, 61, 34, 99, 111, 108, 111, 114, 58, 32, 35, 102, 99, 54, + 100, 50, 54, 59, 102, 111, 110, 116, 45, 119, 101, 105, 103, 104, 116, 58, 32, + 98, 111, 108, 100, 59, 34, 62, 123, 48, 125, 60, 47, 115, 112, 97, 110, 62, 60, + 47, 115, 112, 97, 110, 62]).format(tmp2) + else: - tmp2 = time.strftime(public.to_string([37, 89, 45, 37, 109, 45, 37, 100]),time.localtime(tmp)) + tmp2 = time.strftime(public.to_string([37, 89, 45, 37, 109, 45, 37, 100]), time.localtime(tmp)) tmp3 = public.to_string([60, 115, 112, 97, 110, 32, 99, 108, 97, 115, 115, 61, 34, 98, 116, - 112, 114, 111, 34, 62, 69, 120, 112, 105, 114,101,58,32, 60, 115, 112, - 97, 110, 32, 115, 116, 121, 108, 101, 61, 34, 99, 111, 108, 111, 114, - 58, 32, 35, 102, 99, 54, 100, 50, 54, 59, 102, 111, 110, 116, 45, 119, - 101, 105, 103, 104, 116, 58, 32, 98, 111, 108, 100, 59, 109, 97, 114, - 103, 105, 110, 45, 114, 105, 103, 104, 116, 58, 53, 112, 120, 34, 62, 123, - 48, 125, 60, 47, 115, 112, 97, 110, 62, 60, 97, 32, 99, 108, 97, 115, - 115, 61, 34, 98, 116, 108, 105, 110, 107, 34, 32, 111, 110, 99, 108, 105, 99, - 107, 61, 34, 98, 116, 46, 115, 111, 102, 116, 46, 114, 101, 110, 101, 119, 95, - 112, 114, 111, 40, 41, 34, 62, 82, 69,78,69,87, 60, 47, 97, 62, 60, - 47, 115, 112, 97, 110, 62]).format(tmp2) + 112, 114, 111, 34, 62, 69, 120, 112, 105, 114, 101, 58, 32, 60, 115, 112, + 97, 110, 32, 115, 116, 121, 108, 101, 61, 34, 99, 111, 108, 111, 114, + 58, 32, 35, 102, 99, 54, 100, 50, 54, 59, 102, 111, 110, 116, 45, 119, + 101, 105, 103, 104, 116, 58, 32, 98, 111, 108, 100, 59, 109, 97, 114, + 103, 105, 110, 45, 114, 105, 103, 104, 116, 58, 53, 112, 120, 34, 62, 123, + 48, 125, 60, 47, 115, 112, 97, 110, 62, 60, 97, 32, 99, 108, 97, 115, + 115, 61, 34, 98, 116, 108, 105, 110, 107, 34, 32, 111, 110, 99, 108, 105, 99, + 107, 61, 34, 98, 116, 46, 115, 111, 102, 116, 46, 114, 101, 110, 101, 119, 95, + 112, 114, 111, 40, 41, 34, 62, 82, 69, 78, 69, 87, 60, 47, 97, 62, 60, + 47, 115, 112, 97, 110, 62]).format(tmp2) else: tmp3 = public.to_string([60, 115, 112, 97, 110, 32, 99, 108, 97, 115, 115, 61, 34, 98, 116, 112, - 114, 111, 45, 103, 114, 97, 121, 34, 32, 111, 110, 99, 108, 105, 99, 107, - 61, 34, 98, 116, 46, 115, 111, 102, 116, 46, 114, 101, 110, 101, 119, 95, 112, - 114, 111, 40, 41, 34, 32, 116, 105, 116, 108, 101, 61, 34, 67,108,105,99,107,32,116, - 111,32,103,101,116,32,80,82,79, 34, 62, 70, 82, - 69, 69, 60, 47, 115, 112, 97, 110, 62]) + 114, 111, 45, 103, 114, 97, 121, 34, 32, 111, 110, 99, 108, 105, 99, 107, + 61, 34, 98, 116, 46, 115, 111, 102, 116, 46, 114, 101, 110, 101, 119, 95, 112, + 114, 111, 40, 41, 34, 32, 116, 105, 116, 108, 101, 61, 34, 67, 108, 105, 99, 107, + 32, 116, + 111, 32, 103, 101, 116, 32, 80, 82, 79, 34, 62, 70, 82, + 69, 69, 60, 47, 115, 112, 97, 110, 62]) else: tmp3 = public.to_string([60, 115, 112, 97, 110, 32, 99, 108, 97, 115, 115, 61, 34, 98, 116, 108, 116, - 100, 34, 62, 69, 120, 112, 105, 114,101,58,32, 60, 115, 112, 97, 110, 32, 115, 116, - 121, 108, 101, 61, 34, 99, 111, 108, 111, 114, 58, 32, 35, 102, 99, 54, 100, 50, - 54, 59, 102, 111, 110, 116, 45, 119, 101, 105, 103, 104, 116, 58, 32, 98, 111, - 108, 100, 59, 109, 97, 114, 103, 105, 110, 45, 114, 105, 103, 104, 116, 58, 53, - 112, 120, 34, 62, 123, 125, 60, 47, 115, 112, 97, 110, 62, 60, 97, 32, 99, 108, - 97, 115, 115, 61, 34, 98, 116, 108, 105, 110, 107, 34, 32, 111, 110, 99, 108, 105, - 99, 107, 61, 34, 98, 116, 46, 115, 111, 102, 116, 46, 114, 101, 110, 101, 119, 95, - 112, 114, 111, 40, 41, 34, 62, 82, 69,78,69,87, 60, 47, 97, 62, 60, 47, 115, - 112, 97, 110, 62]).format(time.strftime(public.to_string([37, 89, 45, 37, 109, 45, 37, 100]),time.localtime(ltd))) + 100, 34, 62, 69, 120, 112, 105, 114, 101, 58, 32, 60, 115, 112, 97, 110, 32, 115, 116, + 121, 108, 101, 61, 34, 99, 111, 108, 111, 114, 58, 32, 35, 102, 99, 54, 100, 50, + 54, 59, 102, 111, 110, 116, 45, 119, 101, 105, 103, 104, 116, 58, 32, 98, 111, + 108, 100, 59, 109, 97, 114, 103, 105, 110, 45, 114, 105, 103, 104, 116, 58, 53, + 112, 120, 34, 62, 123, 125, 60, 47, 115, 112, 97, 110, 62, 60, 97, 32, 99, 108, + 97, 115, 115, 61, 34, 98, 116, 108, 105, 110, 107, 34, 32, 111, 110, 99, 108, 105, + 99, 107, 61, 34, 98, 116, 46, 115, 111, 102, 116, 46, 114, 101, 110, 101, 119, 95, + 112, 114, 111, 40, 41, 34, 62, 82, 69, 78, 69, 87, 60, 47, 97, 62, 60, 47, 115, + 112, 97, 110, 62]).format( + time.strftime(public.to_string([37, 89, 45, 37, 109, 45, 37, 100]), time.localtime(ltd))) - return tmp3,tmp,ltd + return tmp3, tmp, ltd def send_authenticated(): - #发送http认证信息 + # 发送http认证信息 request_host = public.GetHost() - result = Response('', 401,{'WWW-Authenticate': 'Basic realm="%s"' % request_host.strip()}) + result = Response('', 401, {'WWW-Authenticate': 'Basic realm="%s"' % request_host.strip()}) if not 'login' in session and not 'admin_auth' in session: session.clear() return result -#取端口 +# 取端口 def FtpPort(): - #获取FTP端口 - if session.get('port'):return + # 获取FTP端口 + if session.get('port'): return import re try: - file = public.GetConfigValue('setup_path')+'/pure-ftpd/etc/pure-ftpd.conf' + file = public.GetConfigValue('setup_path') + '/pure-ftpd/etc/pure-ftpd.conf' conf = public.readFile(file) rep = r"\n#?\s*Bind\s+[0-9]+\.[0-9]+\.[0-9]+\.+[0-9]+,([0-9]+)" - port = re.search(rep,conf).groups()[0] + port = re.search(rep, conf).groups()[0] except: - port='21' + port = '21' session['port'] = port @@ -1869,24 +2239,26 @@ def is_login(result): pass return result + # js随机数模板使用,用于不更新版本号时更新前端文件不需要用户强制刷新浏览器 def get_js_random(): js_random = public.readFile('data/js_random.pl') if not js_random or js_random == '1': js_random = public.GetRandomString(16) - public.writeFile('data/js_random.pl',js_random) + public.writeFile('data/js_random.pl', js_random) return js_random + # 获取输入数据 def get_input(): data = public.dict_obj() exludes = ['blob'] for key in request.args.keys(): - data.set(key,str(request.args.get(key, ''))) + data.set(key, str(request.args.get(key, ''))) try: for key in request.form.keys(): if key in exludes: continue - data.set(key,str(request.form.get(key, ''))) + data.set(key, str(request.form.get(key, ''))) except: try: post = request.form.to_dict() @@ -1898,7 +2270,7 @@ def get_input(): if 'form_data' in g: for k in g.form_data.keys(): - data.set(k,str(g.form_data[k])) + data.set(k, str(g.form_data[k])) if not hasattr(data, 'data'): data.data = [] return data @@ -1930,7 +2302,6 @@ def check_token(data): return result - # ======================公共方法区域END============================# # --------------------- websocket START -------------------------- # @@ -1943,7 +2314,7 @@ def workorder_client(ws): get = ws.receive() get = json.loads(get) - if not check_csrf_websocket(ws,get): + if not check_csrf_websocket(ws, get): return import panelWorkorder @@ -1951,6 +2322,7 @@ def workorder_client(ws): get = get_input() toObject.client(ws, get) + @sockets.route('/ws_panel') def ws_panel(ws): ''' @@ -1964,7 +2336,7 @@ def ws_panel(ws): get = ws.receive() get = json.loads(get) - if not check_csrf_websocket(ws,get): return + if not check_csrf_websocket(ws, get): return while True: pdata = ws.receive() @@ -1972,9 +2344,10 @@ def ws_panel(ws): data = json.loads(pdata) get = public.to_dict_obj(data) get._ws = ws - p = threading.Thread(target=ws_panel_thread,args=(get,)) + p = threading.Thread(target=ws_panel_thread, args=(get,)) p.start() + def ws_panel_thread(get): ''' @name 面板管理ws线程 @@ -2005,25 +2378,31 @@ def ws_panel_thread(get): mod_file = '{}/{}.py'.format(public.get_class_path(), get.mod_name) if not os.path.exists(mod_file): - get._ws.send(public.getJson(public.return_status_code(1000, 'Specified module {} does not exist'.format(get.mod_name)))) + get._ws.send( + public.getJson(public.return_status_code(1000, 'Specified module {} does not exist'.format(get.mod_name)))) return _obj = public.get_script_object(mod_file) if not _obj: - get._ws.send(public.getJson(public.return_status_code(1000, 'Specified module {} does not exist'.format(get.mod_name)))) + get._ws.send( + public.getJson(public.return_status_code(1000, 'Specified module {} does not exist'.format(get.mod_name)))) return _cls = getattr(_obj, get.mod_name) if not _cls: get._ws.send( - public.getJson(public.return_status_code(1000, 'The {} object was not found in the {} module'.format(get.mod_name, get.mod_name)))) + public.getJson(public.return_status_code(1000, + 'The {} object was not found in the {} module'.format(get.mod_name, + get.mod_name)))) return _def = getattr(_cls(), get.def_name) if not _def: get._ws.send( - public.getJson(public.return_status_code(1000, 'The {} object was not found in the {} module'.format(get.mod_name, get.def_name)))) + public.getJson(public.return_status_code(1000, + 'The {} object was not found in the {} module'.format(get.mod_name, + get.def_name)))) return result = { 'callback': get.ws_callback, - 'result':_def(get) + 'result': _def(get) } get._ws.send(public.getJson(result)) @@ -2040,7 +2419,7 @@ def ws_project(ws): if comReturn: return comReturn get = ws.receive() get = json.loads(get) - if not check_csrf_websocket(ws,get): return + if not check_csrf_websocket(ws, get): return from panelProjectController import ProjectController project_obj = ProjectController() @@ -2072,7 +2451,10 @@ def ws_project_thread(_obj, get): import subprocess + sock_pids = {} + + @sockets.route('/sock_shell') def sock_shell(ws): ''' @@ -2091,7 +2473,7 @@ def sock_shell(ws): kill_closed() get = ws.receive() get = json.loads(get) - if not check_csrf_websocket(ws,get): return + if not check_csrf_websocket(ws, get): return t = None try: @@ -2105,6 +2487,7 @@ def sock_shell(ws): except: kill_closed() + def kill_closed(): ''' @name 关闭已关闭的连接 @@ -2116,12 +2499,12 @@ def kill_closed(): pids = psutil.pids() keys = sock_pids.copy().keys() for pid in keys: - if hasattr(sock_pids[pid],'closed'): + if hasattr(sock_pids[pid], 'closed'): is_closed = sock_pids[pid].closed else: is_closed = not sock_pids[pid].connected - logging.debug("PID: {} , sock_stat: {}".format(pid,is_closed)) + logging.debug("PID: {} , sock_stat: {}".format(pid, is_closed)) if not is_closed: continue if pid in pids: @@ -2153,7 +2536,8 @@ def sock_recv(cmdstring, ws): except: kill_closed() -@app.route('/close_sock_shell',methods=method_all) + +@app.route('/close_sock_shell', methods=method_all) def close_sock_shell(): ''' @name 关闭指定命令 @@ -2171,12 +2555,14 @@ def close_sock_shell(): skey = public.md5(cmdstring) pid = cache.get(skey) if not pid: - return json.dumps(public.return_data(False, [], error_msg='The specified sock has been terminated!')), json_header + return json.dumps( + public.return_data(False, [], error_msg='The specified sock has been terminated!')), json_header os.kill(pid, 9) cache.delete(skey) return json.dumps(public.return_data(True, 'Successful operation!')), json_header -def check_csrf_websocket(ws,args): + +def check_csrf_websocket(ws, args): ''' @name 检查websocket是否被csrf攻击 @author hwliang<2021-07-24> @@ -2200,6 +2586,7 @@ def check_csrf_websocket(ws,args): return True + @sockets.route('/webssh') def webssh(ws): # 宝塔终端连接 @@ -2211,7 +2598,7 @@ def webssh(ws): get = ws.receive() if not get: return get = json.loads(get) - if not check_csrf_websocket(ws,get): + if not check_csrf_websocket(ws, get): return import ssh_terminal @@ -2255,22 +2642,23 @@ def webssh(ws): # --------------------- websocket END -------------------------- # -# @app.route("/daily", methods=method_all) -# def daily(): -# """面板日报数据""" -# -# comReturn = comm.local() -# if comReturn: return comReturn -# -# import panelDaily -# toObject = panelDaily.panelDaily() -# -# defs = ("get_app_usage", "get_daily_data", "get_daily_list") -# result = publicObject(toObject, defs) -# return result +@app.route("/daily", methods=method_all) +def daily(): + """面板日报数据""" -@app.route('/phpmyadmin/',methods=method_all) -def pma_proxy(path_full = None): + comReturn = comm.local() + if comReturn: return comReturn + + import panelDaily + toObject = panelDaily.panelDaily() + + defs = ("get_app_usage", "get_daily_data", "get_daily_list") + result = publicObject(toObject, defs) + return result + + +@app.route('/phpmyadmin/', methods=method_all) +def pma_proxy(path_full=None): ''' @name phpMyAdmin代理 @author hwliang<2022-01-19> @@ -2284,7 +2672,7 @@ def pma_proxy(path_full = None): pmd = get_phpmyadmin_dir() if not pmd: return 'phpMyAdmin is not installed, please go to the [App Store] page to install it!' pmd = list(pmd) - cache.set(cache_key,pmd,10) + cache.set(cache_key, pmd, 10) panel_pool = 'http://' if request.url_root[:5] == 'https': panel_pool = 'https://' @@ -2295,15 +2683,16 @@ def pma_proxy(path_full = None): else: panel_pool = 'http://' - proxy_url = '{}127.0.0.1:{}/{}/'.format(panel_pool,pmd[1],pmd[0]) + request.full_path.replace('/phpmyadmin/','') + proxy_url = '{}127.0.0.1:{}/{}/'.format(panel_pool, pmd[1], pmd[0]) + request.full_path.replace('/phpmyadmin/', '') from panelHttpProxy import HttpProxy px = HttpProxy() return px.proxy(proxy_url) -@app.route('/p/',methods=method_all) -@app.route('/p//',methods=method_all) -@app.route('/p//',methods=method_all) -def proxy_port(port,full_path=None): + +@app.route('/p/', methods=method_all) +@app.route('/p//', methods=method_all) +@app.route('/p//', methods=method_all) +def proxy_port(port, full_path=None): ''' @name 代理指定端口 @author hwliang<2022-01-19> @@ -2312,13 +2701,23 @@ def proxy_port(port,full_path=None): comReturn = comm.local() if comReturn: return comReturn - full_path = request.full_path.replace('/p/{}/'.format(port),'').replace('/p/{}'.format(port),'') - uri = '{}/{}'.format(port,full_path) - uri = uri.replace('//','/') + full_path = request.full_path.replace('/p/{}/'.format(port), '').replace('/p/{}'.format(port), '') + uri = '{}/{}'.format(port, full_path) + uri = uri.replace('//', '/') proxy_url = 'http://127.0.0.1:{}'.format(uri) from panelHttpProxy import HttpProxy px = HttpProxy() return px.proxy(proxy_url) - +@app.route('/push', methods=method_all) +def push(pdata=None): + comReturn = comm.local() + if comReturn: return comReturn + import panelPush + toObject = panelPush.panelPush() + defs = ('set_push_status', 'get_push_msg_list', 'get_modules_list', 'install_module', 'uninstall_module', + 'get_module_template', 'set_push_config', 'get_push_config', 'del_push_config', 'get_module_logs', + 'get_module_config', 'get_push_list', 'get_push_logs') + result = publicObject(toObject, defs, None, pdata) + return result diff --git a/BTPanel/static/amd/config.js b/BTPanel/static/amd/config.js new file mode 100644 index 00000000..6b537357 --- /dev/null +++ b/BTPanel/static/amd/config.js @@ -0,0 +1,1171 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +define(["require", "exports", "./snabbdom", "./public/public", "./panelConfig", "./safeConfig", "./noticeConfig"], function (require, exports, snabbdom_1, public_1, panelConfig_1, safeConfig_1, noticeConfig_1) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.Config = void 0; + public_1 = __importDefault(public_1); + panelConfig_1 = __importDefault(panelConfig_1); + safeConfig_1 = __importDefault(safeConfig_1); + noticeConfig_1 = __importDefault(noticeConfig_1); + var panelConfig = new panelConfig_1.default(); + var safeConfig = new safeConfig_1.default(); + var noticeConfig = new noticeConfig_1.default(); + var Config = (function (_super) { + __extends(Config, _super); + function Config() { + var _this = _super.call(this) || this; + _this.Info = {}; + _this.configInfo = {}; + _this.formInfo = {}; + _this.alertListModule = {}; + _this.panelSiteList = []; + _this.taskTypeList = [ + { title: 'Website certificate (SSL) expires', value: 'ssl', model: 'site_push' }, + { title: 'Website expiration', value: 'site_endtime', model: 'site_push' }, + { title: 'Panel password validity period', value: 'panel_pwd_endtime', model: 'site_push' }, + { title: 'Panel login alarm', value: 'panel_login', model: 'site_push' }, + { title: 'SSH login alarm', value: 'ssh_login', model: 'site_push' }, + { title: 'SSH login failure alarm', value: 'ssh_login_error', model: 'site_push' }, + { title: 'Panel security alarm', value: 'panel_safe_push', model: 'site_push' }, + // { title: 'Panel update reminder', value: 'panel_update', model: 'site_push' }, + ]; + _this.disabledOption = ['site_endtime', 'ssh_login', 'ssh_login_error', 'panel_login', 'panel_pwd_endtime', 'panel_safe_push', 'panel_update']; + _this.apiInfo = { + getConfig: ['config/get_config', lan.public.the], + getCheckTwoStep: ['config/check_two_step', lan.public.the], + getPasswordConfig: ['config/get_password_config', 'Getting the password complexity verification status, please wait...'], + getMenuList: ['config/get_menu_list', 'Getting panel menu bar, please wait...'], + getMessageChannel: ['config/get_msg_configs', 'Getting profile, please wait...'], + getLoginAlarm: ['config/get_login_send', 'Getting login information, please wait...'], + setMsgConfigmail: ['config/set_msg_config&name=mail', 'Setting recipient email'], + setPanelConfig: ['config/setPanel', lan.config.config_save], + }; + _this.alertConfigForm = [ + { + label: 'Task type', + group: { + type: 'select', + name: 'type', + width: '250px', + value: 'ssl', + class: 'projectBox', + list: _this.taskTypeList, + disabled: false, + change: function (formData, element, that) { + var config = _this.switchPushType(that.config.form, formData); + that.$again_render_form(config); + }, + }, + }, + { + label: 'Website', + group: { + type: 'select', + name: 'site', + width: '250px', + value: '', + list: [], + }, + }, + { + label: 'Remaining days', + group: { + type: 'number', + name: 'cycle', + width: '70px', + unit: 'Day(s)', + value: 1, + }, + }, + { + label: 'Cycle', + hide: true, + group: [ + { + type: 'number', + name: 'where1', + width: '70px', + value: 30, + unit: 'Minute(s)
Frequency
', + input: function (data, b, c, d, e) { + var $input = $(e.currentTarget); + var num = $input.val(); + if (num < 0) { + $input.val(0); + num = 0; + } + var text = "".concat(num, " minute").concat(num > 1 ? 's' : ''); + $('.condition_tips').find('.minute').text(text); + }, + }, + { + type: 'number', + name: 'count', + width: '50px', + style: { 'vertical-align': 'initial', 'margin-left': '10px' }, + value: 3, + unit: 'Time(s) ', + input: function (data, b, c, d, e) { + var $input = $(e.currentTarget); + var num = $input.val(); + if (num < 0) { + $input.val(0); + num = 0; + } + var text = "".concat(num, " time").concat(num > 1 ? 's' : ''); + $('.condition_tips').find('.time').text(text); + }, + }, + { + type: 'div', + dispaly: 'block', + class: 'condition_tips', + style: { 'margin-top': '10px', color: '#666' }, + content: 'Login failed 3 times within 30 minutes', + }, + ], + }, + { + label: 'Interval', + group: { + type: 'number', + name: 'interval', + width: '70px', + value: 600, + unit: 'second(s)
Monitor the trigger condition again after an interval of 600 seconds
', + input: function (data, b, c, d, e) { + var $input = $(e.currentTarget); + var num = $input.val(); + if (num < 0) { + $input.val(0); + num = 0; + } + var text = "".concat(num, " second").concat(num > 1 ? 's' : ''); + $input.next().find('.count').text(text); + }, + }, + }, + { + label: 'Send times', + group: { + type: 'number', + name: 'push_count', + width: '70px', + value: 1, + unit: 'Time(s)
After sending 1 time, no more alarm messages will be sent,
if you want to send multiple times, please fill in more than 2 times.
', + input: function (data, b, c, d, e) { + var $input = $(e.currentTarget); + var num = $input.val(); + if (num < 0) { + $input.val(0); + num = 0; + } + var text = "".concat(num, " time").concat(num > 1 ? 's' : ''); + $input.next().find('.count').text(text); + }, + }, + }, + { + label: 'Alarm mode', + group: [], + }, + { + label: 'Alarm content', + hide: true, + group: { + type: 'help', + style: { 'margin-top': '6px' }, + list: ['panel user change, panel log delete, panel open developer, panel open API'], + }, + }, + { + label: '', + group: { + type: 'button', + name: 'submitForm', + title: 'Add task', + event: function (formData, element, that) { + that.submit(formData); + }, + }, + }, + ]; + _this.init(); + return _this; + } + Config.prototype.init = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + this.$apiInit(this.apiInfo); + this.render(); + this.event(); + return [2]; + }); + }); + }; + Config.prototype.render = function () { + var _this = this; + var loadT = this.$load(lan.public.the); + Promise.all([ + this.$request('getConfig', false), + this.$request('getCheckTwoStep', { loading: false, msg: false }), + this.$request('getPasswordConfig', { loading: false, msg: false }), + this.$request('getUserInfo', { loading: false, msg: false }), + this.$request('getMessageChannel', { loading: false, msg: false }), + this.$request('getLoginAlarm', { loading: false, msg: false }), + this.$request('getMenuList', { loading: false, msg: false }), + ]) + .then(function (resArr) { + var configInfo = resArr[0], twoStep = resArr[1], pawComplexity = resArr[2], bindUserInfo = resArr[3], messageChannelInfo = resArr[4], loginAlarmInfo = resArr[5], menuList = resArr[6]; + panelConfig.init({ configInfo: configInfo, menuList: menuList, bindUserInfo: bindUserInfo }); + safeConfig.init({ configInfo: configInfo, twoStep: twoStep, pawComplexity: pawComplexity }); + noticeConfig.init({ messageChannelInfo: messageChannelInfo, loginAlarmInfo: loginAlarmInfo }); + }) + .catch(function (err) { + console.log(err); + _this.$error(err.msg || 'Server Error'); + }) + .finally(function () { + loadT.close(); + }); + }; + Config.prototype.event = function () { + var _this = this; + $('#configTab').on('click', '.tabs-item', function (ev) { + var el = $(ev.currentTarget); + var type = el.attr('data-type'); + el.addClass('active').siblings().removeClass('active'); + $('.configure-box .panel-config').addClass('hide'); + if (type === 'allConfig') { + $('.configure-box .panel-config:not(.alert-view-box)').removeClass('hide'); + } + else { + if (type === 'alertConfig') + _this.renderAlertView(); + $('.configure-box .panel-config[data-type="' + type + '"]').removeClass('hide'); + } + _this.$setCookie('config-tab', type); + }); + this.cateClick(); + $('input[type="text"]').on('input', function (ev) { return __awaiter(_this, void 0, void 0, function () { + var el, value, oldValue; + return __generator(this, function (_a) { + el = $(ev.target); + value = el.val(); + oldValue = el.attr('value'); + value != oldValue ? el.parent().next().removeAttr('disabled') : el.parent().next().attr('disabled', 'disabled'); + return [2]; + }); + }); }); + $('.savePanelConfig').click(function () { return __awaiter(_this, void 0, void 0, function () { + var data, res, href; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + data = this.getInputData(); + return [4, this.$request('setPanelConfig', data)]; + case 1: + res = _a.sent(); + href = ''; + if (data.domain) { + href = window.location.protocol + '//' + data.domain + ':' + window.location.port + window.location.pathname; + } + else { + href = window.location.protocol + '//' + data.address + ':' + window.location.port + window.location.pathname; + } + res.status && this.$refreshBrowser(href); + return [2]; + } + }); + }); }); + $('.setPanelPort').click(function () { return _this.setPanelPortView(); }); + $('#addAlertTask').on('click', '.alertInstall', function (ev) { + var _type = $(ev.currentTarget).parent('span').siblings('input').attr('name'); + _this.setAlertConfigType(_type); + }); + + setTimeout(function () { + $.fn.serializeObject = function () { + var hasOwnProperty = Object.prototype.hasOwnProperty; + return this.serializeArray().reduce(function (data, pair) { + if (!hasOwnProperty.call(data, pair.name)) { + data[pair.name] = pair.value; + } + return data; + }, {}); + }; + }, 300); + + panelConfig.event(); + safeConfig.event(); + noticeConfig.event(); + }; + Config.prototype.cateClick = function () { + var configTab = this.$getCookie('config-tab') || 'allConfig'; + if (!isNaN(Number(configTab))) { + configTab = 'allConfig'; + } + $('#configTab .tabs-item[data-type="' + configTab + '"]').trigger('click'); + }; + Config.prototype.setPanelPortView = function () { + var _this = this; + var $input = $('input[name="port"]'); + var port = $input.val(); + this.$open({ + title: 'Change Panel Port', + area: ['380px', '380px'], + btn: ['Confirm', 'Cancel'], + content: { + data: { port: port, agreement: false }, + template: function () { + return ((0, snabbdom_1.jsx)("div", { class: this.$class('pd20 bt-form') }, + this.$ul({ className: 'explainDescribeList', style: 'margin-top:0;' }, [ + ['1. Have a security group server, please release the new port in the security group in advance.', 'red'], + ['2. If the panel is inaccessible after modifying the port, change the original port to the SSH command line by using the bt command.', 'red'], + ]), + this.$line({ title: 'Port', width: '60px' }, this.$input({ model: 'port', width: '210px' })), + this.$learnMore({ + title: (0, snabbdom_1.jsx)("span", null, + "I already understand, ", + this.$link({ title: 'How to release the port?', href: 'https://forum.aapanel.com/d/599-how-to-release-the-aapanel-port' })), + model: 'agreement', + id: 'checkPanelPort', + }))); + }, + }, + yes: function (content) { return __awaiter(_this, void 0, void 0, function () { + var close, vm, port, data, rdata; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + close = content.close, vm = content.vm, port = parseInt(vm.port); + if (!vm.agreement) + return [2, this.$tips({ el: '#checkPanelPort', msg: 'Please tick the one I already know' })]; + return [4, this.$verifySubmit(!this.$checkPort(port), 'Please enter correct panel port!')]; + case 1: + _a.sent(); + data = this.getInputData(); + data.port = port; + return [4, this.$request('setPanelConfig', data)]; + case 2: + rdata = _a.sent(); + if (rdata.status) { + close(); + this.$refreshBrowser("".concat(location.protocol, "//").concat(location.hostname, ":").concat(port).concat(location.pathname)); + } + return [2]; + } + }); + }); }, + }).catch(function (err) { }); + }; + Config.prototype.getInputData = function () { + var data = {}; + $('.savePanelConfig').each(function (index, item) { + var $input = $(item).parents('.line').find('input[type="text"]'); + var key = $input.attr('name'); + var value = $input.val(); + data[key] = value; + }); + return data; + }; + Config.renderFormColumn = function (configInfo) { + for (var key in configInfo) { + if (Object.prototype.hasOwnProperty.call(configInfo, key)) { + var value = configInfo[key].value; + var el = $('input[name="' + key + '"]'); + var type = el.attr('type'); + if (type === 'checkbox') { + el.prop('checked', value); + } + else { + el.val(value); + } + } + } + }; + Config.prototype.renderAlertView = function () { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + this.alertTaskList(); + $('.alert-view-box') + .unbind('click') + .on('click', '.tab-nav-border span', function (ev) { + var el = $(ev.currentTarget), index = $(el).index(); + $(el).addClass('on').siblings().removeClass('on'); + $(el).parent().next().find('.tab-block').eq(index).addClass('on').siblings().removeClass('on'); + switch (index) { + case 0: + _this.alertTaskList(); + break; + case 1: + _this.alertConfigTable(); + break; + case 2: + _this.alertLogsTable(); + break; + } + }); + return [2]; + }); + }); + }; + Config.prototype.alertTaskList = function () { + return __awaiter(this, void 0, void 0, function () { + var ChannelMessage, resetChannelMessage, prevArray, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4, this.$request('getMessageChannel', { loading: false, msg: false })]; + case 1: + ChannelMessage = _b.sent(); + resetChannelMessage = []; + prevArray = []; + Object.getOwnPropertyNames(ChannelMessage).forEach(function (key) { + var mod = ChannelMessage[key]; + key == 'wx_account' ? prevArray.push(mod) : resetChannelMessage.push(mod); + }); + this.alertListModule = __spreadArray(__spreadArray([], prevArray, true), resetChannelMessage, true); + _a = this; + return [4, this.$request(['crontab/GetDataList'], { type: 'sites' })]; + case 2: + _a.panelSiteList = _b.sent(); + return [4, this.addAlertTask()]; + case 3: + _b.sent(); + this.renderAlarmList(); + return [2]; + } + }); + }); + }; + Config.prototype.addAlertTask = function () { + return __awaiter(this, void 0, void 0, function () { + var _config; + var _this = this; + return __generator(this, function (_a) { + _config = this.switchPushType(__spreadArray([], this.alertConfigForm, true)); + bt_tools.form({ + el: '#addAlertTask', + form: _config, + submit: function (formData) { + _this.setAlertConfigTask(formData); + }, + }); + return [2]; + }); + }); + }; + Config.prototype.renderAlarmList = function () { + var _this = this; + $('#alertList').empty(); + var alertListTabel = bt_tools.table({ + el: '#alertList', + url: '/push?action=get_push_list', + default: 'The alarm list is empty', + autoHeight: true, + height: 320, + dataFilter: function (res) { + $.each(res.site_push, function (index, item) { + item['id'] = index; + }); + var data = Object.values(res.site_push || []); + return { data: data }; + }, + column: [ + { + type: 'checkbox', + width: 20, + }, + { + fid: 'title', + title: 'Title', + type: 'text', + template: function (row) { + var _title = ''; + switch (row.type) { + case 'ssl': + _title = "[".concat(row.project == 'all' ? 'All' : row.project, "]").concat(row.title); + break; + default: + _title = row.title; + break; + } + return "".concat(_title, ""); + }, + }, + { + fid: 'status', + title: 'Status', + config: { + icon: true, + list: [ + [true, 'Normal', 'bt_success', 'glyphicon-play'], + [false, 'Suspend', 'bt_danger', 'glyphicon-pause'], + ], + }, + type: 'status', + event: function (row) { return __awaiter(_this, void 0, void 0, function () { + var param, eData, rdata; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (row.type == 'ssh_login') + return [2, layer.msg('Do not support suspend SSH login alarm, if you want to stop it, please delete it directly.', { icon: 0 })]; + param = {}, eData = $.extend(true, row, { status: row.status ? false : true }); + param['name'] = row.module_type; + param['id'] = row.id; + param['data'] = JSON.stringify(eData); + return [4, this.$request(['push/set_push_config', 'Setting alarm tasks'], param)]; + case 1: + rdata = _a.sent(); + if (!rdata.status) return [3, 3]; + return [4, this.alertTaskList()]; + case 2: + _a.sent(); + _a.label = 3; + case 3: return [2]; + } + }); + }); }, + }, + { + title: 'Alarm mode', + type: 'text', + width: 265, + template: function (row) { + var alertMode = row.module.split(','), _mode = ''; + _this.alertListModule.forEach(function (mod) { + if ($.inArray(mod.name, alertMode) >= 0) + _mode += mod.title + ','; + }); + _mode = _mode.substring(0, _mode.length - 1); + return '' + _mode + ''; + }, + }, + { + fid: 'cycle', + title: 'Alarm condition', + template: function (row) { + switch (row.type) { + case 'ssl': + case 'site_endtime': + case 'panel_pwd_endtime': + return "Less than ".concat(row.cycle, " days remaining ").concat(typeof row.push_count != 'undefined' ? '(If not processed, it will be resent 1 time the next day for ' + row.push_count + ' days)' : '', ""); + case 'ssh_login_error': + return "Triggered by ".concat(row.count, " consecutive failed login attempts within ").concat(row.cycle, " minutes, to be detected again after every ").concat(row.interval, " seconds"); + case 'panel_update': + return "Send a notification when a new version is detected"; + default: + return "--"; + } + }, + }, + { + title: lan.public.operate, + type: 'group', + width: 150, + align: 'right', + group: [ + { + title: lan.public.edit, + event: function (row) { + _this.setAlertTaskConfig(row); + }, + }, + { + title: lan.public.del, + event: function (row) { return __awaiter(_this, void 0, void 0, function () { + var rdata; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4, this.$confirm({ + title: 'Delete Alarm Tasks', + msg: 'Delete will no longer alert this task, do you want to continue?', + })]; + case 1: + _a.sent(); + return [4, this.$request(['push/del_push_config', 'Deleting the alarm task'], { name: row.module_type, id: row.id })]; + case 2: + rdata = _a.sent(); + if (!rdata.status) return [3, 4]; + return [4, this.alertTaskList()]; + case 3: + _a.sent(); + _a.label = 4; + case 4: return [2]; + } + }); + }); }, + }, + ], + }, + ], + tootls: [ + { + type: 'batch', + positon: ['left', 'bottom'], + config: { + title: ' Delete', + url: 'push?action=del_push_config', + load: true, + param: function (row) { + return { name: row.module_type, id: row.id }; + }, + callback: function (that) { + bt.confirm({ title: 'Batch Delete Tasks', msg: 'The batch deletion will not be recovered, does it continue?', icon: 0 }, function (index) { + layer.close(index); + that.start_batch({}, function (list) { + var html = ''; + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += + '' + + (typeof item.project == 'undefined' ? item.title : (item.project == 'all' ? 'All' : item.project) + item.title) + + '
' + + item.request.msg + + '
'; + } + alertListTabel.$batch_success_table({ title: 'Batch Delete Tasks', th: 'Task title', html: html }); + alertListTabel.$refresh_table_list(true); + }); + }); + }, + }, + }, + ], + }); + }; + Config.prototype.setAlertTaskConfig = function (row) { + return __awaiter(this, void 0, void 0, function () { + var _config; + var _this = this; + return __generator(this, function (_a) { + _config = this.switchPushType($.extend(true, {}, this.alertConfigForm), row); + _config[0].group.disabled = true; + _config[0].group.unit = ''; + _config[8].hide = true; + if (row.type == 'ssh_login_error') { + row.where1 = row.cycle; + } + bt_tools.open({ + type: 1, + title: 'Edit Alert Tasks', + area: '540px', + skin: 'panel_alert_task_view', + btn: [lan.public.save, lan.public.cancel], + content: { + class: 'pd15', + data: row, + form: _config, + }, + success: function (layers) { + $(layers) + .find('.layui-layer-content') + .css('overflow', window.innerHeight > $(layers).height() ? 'inherit' : 'auto'); + $('.alertInstall').click(function (ev) { + var _type = $(ev.currentTarget).parent('span').siblings('input').attr('name'); + _this.setAlertConfigType(_type); + }); + }, + yes: function (formData, index) { + _this.setAlertConfigTask($.extend(true, {}, row, formData), index); + }, + }); + return [2]; + }); + }); + }; + Config.prototype.setAlertConfigTask = function (row, close) { + if (close === void 0) { close = null; } + return __awaiter(this, void 0, void 0, function () { + var _configD, eData, pushType, otherType, isCheck, rdata; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _configD = {}, eData = {}, pushType = this.taskTypeList.find(function (el) { return el.value == row.type; }), otherType = this.disabledOption; + _configD['name'] = typeof row.module_type !== 'undefined' ? row.module_type : pushType.model; + _configD['id'] = row.id ? row.id : $.inArray(row.type, otherType) >= 0 ? row.type : new Date().getTime(); + eData['interval'] = 600; + switch (row.type) { + case 'ssl': + case 'site_endtime': + case 'panel_pwd_endtime': + if (row.type == 'ssl') + eData['project'] = row.site || 'all'; + if (row.cycle == '' || row.cycle < 0) + return [2, this.$msg({ icon: 2, msg: 'Remaining days cannot be less than 1', time: 0, closeBtn: 2 })]; + eData['cycle'] = Number(row.cycle); + eData['push_count'] = Number(row.push_count); + break; + case 'ssh_login_error': + if (row.where1 == '' || row.where1 <= 0) + return [2, this.$msg({ icon: 2, msg: 'Trigger time cannot be less than 1', time: 0, closeBtn: 2 })]; + if (row.count == '' || row.count <= 0) + return [2, this.$msg({ icon: 2, msg: 'Trigger times cannot be less than 1', time: 0, closeBtn: 2 })]; + if (row.interval == '' || row.interval <= 0) + return [2, this.$msg({ icon: 2, msg: 'Interval cannot be less than 1', time: 0, closeBtn: 2 })]; + eData['cycle'] = Number(row.where1); + eData['count'] = Number(row.count); + eData['interval'] = Number(row.interval); + break; + } + isCheck = []; + $((row.id ? '.panel_alert_task_view ' : '#addAlertTask ') + '.module-check') + .not('.check_disabled') + .each(function () { + if ($(this).find('input').prop('checked')) { + isCheck.push($(this).find('input').prop('name')); + } + }); + eData['type'] = row.type; + eData['module'] = isCheck.join(); + if (typeof eData['push_count'] != 'undefined' && (eData['push_count'] <= 0 || eData['push_count'] == '')) { + this.$msg({ icon: 2, msg: 'The number of sending cannot be less than 1', time: 0, closeBtn: 2 }); + return [2, false]; + } + if (!eData['module']) { + this.$msg({ icon: 2, msg: 'Please select an alarm mode', time: 0, closeBtn: 2 }); + return [2, false]; + } + eData['status'] = typeof row.status !== 'undefined' ? row.status : true; + eData['title'] = $((row.id ? '.panel_alert_task_view ' : '#addAlertTask ') + '.projectBox .bt_select_content').html(); + _configD['data'] = JSON.stringify(eData); + return [4, this.$request(['push/set_push_config', 'Setting alarm task, Please wait...'], _configD)]; + case 1: + rdata = _a.sent(); + if (!rdata.status) return [3, 3]; + layer.close(close); + return [4, this.alertTaskList()]; + case 2: + _a.sent(); + _a.label = 3; + case 3: return [2]; + } + }); + }); + }; + Config.prototype.switchPushType = function (config, formData) { + if (formData === void 0) { formData = {}; } + var _checklist = [], isCheckType = [], siteList = [{ title: 'All Website', value: 'all' }], accountConfigStatus = false; + if (!formData.type) { + formData.type = 'ssl'; + config[1].group.value = 'all'; + } + this.panelSiteList['data'].forEach(function (key) { + siteList.push({ title: key.name, value: key.name }); + }); + this.alertListModule.forEach(function (mod, i) { + if (formData.type != 'ssl' && mod.name == 'sms') + return; + if (formData.module) { + isCheckType = formData.module.split(','); + } + if (mod.name === 'wx_account') { + if (!$.isEmptyObject(mod.data) && mod.data.res.is_subscribe && mod.data.res.is_bound) { + accountConfigStatus = true; + } + } + _checklist.push({ + type: 'checkbox', + name: mod.name, + class: 'module-check ' + (!mod.setup || $.isEmptyObject(mod.data) ? 'check_disabled' : mod.name == 'wx_account' && !accountConfigStatus ? 'check_disabled' : '') + '', + style: { 'margin-right': '10px' }, + disabled: !mod.setup || $.isEmptyObject(mod.data) ? true : mod.name == 'wx_account' && !accountConfigStatus ? true : false, + value: $.inArray(mod.name, isCheckType) >= 0 ? 1 : 0, + title: (mod.name == 'wx_account' ? ' [Recommend]' : '') + + mod.title + + (!mod.setup || $.isEmptyObject(mod.data) + ? ' [Install]' + : mod.name == 'wx_account' && !accountConfigStatus + ? ' [Not set]' + : ''), + event: function (formData, element, thatE) { + thatE.config.form[6].group[i].value = !formData[mod.name] ? 0 : 1; + }, + }); + }); + if (!formData.id) { + var checkActive = _checklist.findIndex(function (ev) { return !ev.disabled; }); + if (checkActive >= 0) + _checklist[checkActive].value = 1; + } + else { + if (formData.type == 'ssl') + config[1].group.value = formData.project; + } + config[1].hide = true; + config[3].hide = true; + config[4].hide = true; + config[5].hide = false; + delete config[0].group.unit; + switch (formData.type) { + case 'ssl': + config[1].hide = false; + config[2].hide = false; + config[2].group.value = 15; + break; + case 'site_endtime': + config[2].hide = false; + config[2].group.value = 7; + break; + case 'panel_pwd_endtime': + config[2].hide = false; + config[2].group.value = 15; + break; + case 'panel_login': + case 'ssh_login': + case 'panel_safe_push': + case 'panel_update': + config[2].hide = true; + config[5].hide = true; + if (formData.type == 'panel_update') { + config[0].group.unit = '* Send a notification when a new version is detected'; + } + break; + case 'ssh_login_error': + config[2].hide = true; + config[3].hide = false; + config[4].hide = false; + config[5].hide = true; + break; + } + config[7].hide = formData.type === 'panel_safe_push' ? false : true; + config[0].group.value = formData.type; + config[1].group.list = siteList; + config[6].group = _checklist; + return config; + }; + Config.prototype.setAlertConfigType = function (type) { + return __awaiter(this, void 0, void 0, function () { + var _configData; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4, this.$request('getMessageChannel', { loading: false, msg: false })]; + case 1: + _configData = _a.sent(); + switch (type) { + case 'mail': + renderMailConfigView(_configData[type]); + break; + case 'dingding': + case 'feishu': + case 'weixin': + renderAlertUrlTypeChannelView(_configData[type]); + break; + case 'tg': + renderTelegramConfigView(_configData[type]); + break; + } + return [2]; + } + }); + }); + }; + Config.prototype.alertConfigTable = function () { + return __awaiter(this, void 0, void 0, function () { + var ChannelInfo, html, tbody, prevHTML; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4, this.$request('getMessageChannel', { loading: false, msg: false })]; + case 1: + ChannelInfo = _a.sent(); + html = '', tbody = '', prevHTML = ''; + $('#alertConfig').empty(); + Object.getOwnPropertyNames(ChannelInfo).forEach(function (key) { + var item = ChannelInfo[key], btnGroup = ''; + if (item.setup) { + if (item.name != 'sms') { + if (!$.isEmptyObject(item.data)) { + if (item.name == 'mail') + btnGroup += 'Recipient | '; + btnGroup += + '' + lan.public.edit + ' | Test | ' + lan.public.del + ''; + if (item.name == 'wx_account') + btnGroup = 'Bind | Test | ' + lan.public.del + ''; + } + else { + btnGroup = '' + lan.public.set + ''; + } + } + else { + btnGroup = '' + lan.public.del + ''; + } + } + else { + btnGroup = '' + lan.public.set + ''; + } + var renderHTML = "\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t").concat(item.title, "\n\t\t\t\t\t\t

").concat(item.ps, ">>").concat(lan.public.help, "

\n\t\t\t\t\t
\n\t\t\t\t\n\t\t\t\t").concat(_this.renderAlertModelConfigInfo(item), "\n\t\t\t\t").concat(item.version, "\n\t\t\t\t").concat(btnGroup, "\n\t\t\t"); + item.name === 'wx_account' ? (prevHTML = renderHTML) : (tbody += renderHTML); + }); + html = "
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t").concat(prevHTML + tbody, "\n\t\t\t\t\t\t\t
Alarm moduleConfigurationVersion".concat(lan.public.operate, "
\n\t\t\t\t\t\t
"); + $('#alertConfig').html(html); + this.alertEventBind(ChannelInfo); + return [2]; + } + }); + }); + }; + Config.prototype.renderAlertModelConfigInfo = function (mode) { + var _info = '', noConfig = 'Unconfigured', _data = mode.data, isEmpty = $.isEmptyObject(_data); + if (mode.setup) { + if (mode.name != 'sms' && mode.name != 'wx_account') { + if (!$.isEmptyObject(_data)) { + switch (mode.name) { + case 'mail': + if (_data.receive[0] == '') { + _info = "No incoming email set"; + } + else { + _info = "".concat(_data.receive.length, " incoming email has been set up, Click to view"); + } + break; + case 'dingding': + case 'feishu': + case 'weixin': + _info = "Receiver: [".concat(isEmpty ? '' : _data.list.default.title, "]"); + break; + case 'tg': + _info = "Receiver: [".concat(isEmpty ? '' : _data.my_id, "]"); + break; + } + } + else { + _info = noConfig; + } + } + else if (mode.name == 'sms') { + _info = "\u5269\u4F59\u53D1\u9001\u544A\u8B66".concat(_data.count, "\u6B21"); + } + else if (mode.name == 'wx_account') { + var boundCheck = '', res = $.isEmptyObject(_data) ? { is_subscribe: 0, is_bound: 0 } : _data.res; + if (!res.is_subscribe || !res.is_bound) + boundCheck = '未订阅公众号或绑定微信'; + if (res.is_subscribe && res.is_bound) + boundCheck = "\u5FAE\u4FE1\u8D26\u53F7\u3010".concat(res.nickname, "\u3011,\u4ECA\u65E5\u5269\u4F59\u53D1\u9001\u6B21\u6570:").concat(res.remaining); + _info = boundCheck; + } + } + else { + _info = noConfig; + } + return _info; + }; + Config.prototype.alertEventBind = function (info) { + var _this = this; + $('.receiveMail').click(function () { return __awaiter(_this, void 0, void 0, function () { + var currentItem; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4, this.$request('getMessageChannel', { loading: false, msg: false })]; + case 1: + currentItem = _a.sent(); + this.$open({ + title: 'Recipient Email', + area: ['335px', '280px'], + btn: [lan.public.save, lan.public.cancel], + skin: 'alert-receive-view', + content: "
\n\t\t\t\t
Fill in one mailbox per line, e:
xxx@163.com
xxx@qq.com
", + success: function () { + var _tips = $('textarea[name=recipient_textarea]'); + var msg = ''; + if (!$.isEmptyObject(currentItem['mail']['data']['receive'])) { + msg = currentItem['mail']['data']['receive'] ? currentItem['mail']['data']['receive'].join('\n') : ''; + } + _tips.html(msg); + if (_tips.val() == '') + $('.reci_tips.placeholder').show(); + $('.placeholder').click(function () { + $(this).hide().siblings('textarea').focus(); + }); + _tips.focus(function () { + $('.reci_tips.placeholder').hide(); + }); + _tips.blur(function () { + _tips.val() == '' ? $('.reci_tips.placeholder').show() : $('.reci_tips.placeholder').hide(); + }); + }, + yes: function (config) { return __awaiter(_this, void 0, void 0, function () { + var close, reci_, rdata; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + close = config.close; + reci_ = $('textarea[name=recipient_textarea]').val(); + return [4, this.$request('setMsgConfigmail', { mails: reci_ })]; + case 1: + rdata = _a.sent(); + rdata.status && close(); + return [2]; + } + }); + }); }, + }); + return [2]; + } + }); + }); }); + $('.configEdit').click(function (ev) { return __awaiter(_this, void 0, void 0, function () { + var _type; + return __generator(this, function (_a) { + _type = $(ev.currentTarget).parents('tr').data('name'); + this.setAlertConfigType(_type); + return [2]; + }); + }); }); + $('.alertTest').click(function (ev) { return __awaiter(_this, void 0, void 0, function () { + var _type; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _type = $(ev.currentTarget).parents('tr').data('name'); + return [4, this.$request(['config/get_msg_fun', 'Testing Send, Please wait...'], { fun_name: 'push_data', module_name: _type, msg: 'Testing Send' })]; + case 1: + _a.sent(); + return [2]; + } + }); + }); }); + $('.replaceWx').click(function () { + _this.setAlertConfigType('wx_account'); + }); + $('.uninstall_alert').click(function (ev) { return __awaiter(_this, void 0, void 0, function () { + var _type, rdata, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _type = $(ev.currentTarget).parents('tr').data('name'); + return [4, this.$confirm({ + title: 'Delete ' + info[_type].title + ' module', + msg: 'After deleting the ' + info[_type].title + ' module, it will not be able to send panel alert messages, should I continue?', + })]; + case 1: + _b.sent(); + return [4, this.$request(['config/uninstall_msg_module&name=' + _type, 'Delete ' + info[_type].title + ' alert module'])]; + case 2: + rdata = _b.sent(); + _a = rdata.status; + if (!_a) return [3, 4]; + return [4, this.alertConfigTable()]; + case 3: + _a = (_b.sent()); + _b.label = 4; + case 4: + _a; + return [2]; + } + }); + }); }); + }; + Config.prototype.alertLogsTable = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + $('#alertLog').empty(); + bt_tools.table({ + el: '#alertLog', + load: 'Getting the alarm log list', + url: '/push?action=get_push_logs', + default: 'The alarm log is empty', + dataFilter: function (res) { + return { data: res.data }; + }, + column: [ + { + fid: 'log', + title: 'Title', + type: 'text', + }, + { + fid: 'addtime', + title: 'Time', + type: 'text', + }, + ], + tootls: [ + { + type: 'page', + positon: ['right', 'bottom'], + pageParam: 'p', + page: 1, + numberParam: 'limit', + number: 20, + numberList: [10, 20, 50, 100, 200], + numberStatus: true, + jump: true, + }, + ], + }); + return [2]; + }); + }); + }; + return Config; + }(public_1.default)); + exports.Config = Config; +}); diff --git a/BTPanel/static/amd/configMixin.js b/BTPanel/static/amd/configMixin.js new file mode 100644 index 00000000..8d5237ae --- /dev/null +++ b/BTPanel/static/amd/configMixin.js @@ -0,0 +1,101 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +define(["require", "exports", "./public/public"], function (require, exports, public_1) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + public_1 = __importDefault(public_1); + var ConfigMixin = (function (_super) { + __extends(ConfigMixin, _super); + function ConfigMixin() { + return _super !== null && _super.apply(this, arguments) || this; + } + ConfigMixin.prototype.renderFormColumn = function (configInfo) { + for (var key in configInfo) { + if (Object.prototype.hasOwnProperty.call(configInfo, key)) { + var value = configInfo[key].value; + var el = $('input[name="' + key + '"]'); + var type = el.attr('type'); + if (type === 'checkbox') { + el.prop('checked', value); + } + else { + el.val(value); + } + } + } + }; + ConfigMixin.prototype.showCheckboxConfirm = function (data) { + var _this = this; + var e = data.e, api = data.api, config = data.config, param = data.data; + return new Promise(function (resolve, reject) { + _this.$confirm(__assign({}, config)).then(function (res) { + return _this.changeCheckbox(e, api, param); + }).then(function (res) { + resolve(res); + }).catch(function (err) { + _this.changeReverseCheckbox(e); + reject(err); + }); + }); + }; + ConfigMixin.prototype.changeCheckbox = function (e, api, data) { + var _this = this; + if (data === void 0) { data = {}; } + return new Promise(function (resolve, reject) { + _this.$request(api, data).then(function (res) { + if (res.status) { + resolve(res); + } + else { + throw new Error(res); + } + }).catch(function (err) { + _this.changeReverseCheckbox(e); + reject(err); + }); + }); + }; + ConfigMixin.prototype.changeReverseCheckbox = function (e) { + var $this = $(e.target); + var checked = !$this.prop('checked'); + $this.prop('checked', checked); + }; + ConfigMixin.prototype.setLayerVerticalCenter = function (layero) { + var window_height = $(window).height(); + var height = layero.height(); + var top = (window_height - height) / 2; + layero.css({ + 'top': top + 'px' + }); + }; + return ConfigMixin; + }(public_1.default)); + exports.default = ConfigMixin; +}); diff --git a/BTPanel/static/amd/main.js b/BTPanel/static/amd/main.js new file mode 100644 index 00000000..5ba705d0 --- /dev/null +++ b/BTPanel/static/amd/main.js @@ -0,0 +1,68 @@ +// noinspection ES6ConvertVarToLetConst + +/* + * @Description: Require.js主配置文件 + * @Version: 1.0 + * @Autor: chudong + * @Date: 2021-11-30 09:59:13 + * @LastEditors: chudong + * @LastEditTime: 2021-12-05 22:59:36 + */ +require.config({ + paths: { + "jquery": "../js/jquery-2.2.4.min", // Jquery + "layer": "../layer/layer", // 弹窗 + "utils": "./utils.min", // 工具库 + "home": "home", // 首页代码 + "site": "site", // 站点代码 + "ftp": "ftp", // ftp代码 + "database": "database", // 数据库代码 + "control": "control", // 监控 + "firewall": "firewall", // 系统安全 + "files": "files", // 文件管理 + "xterm": "xterm", // 终端管理 + "crontab": "crontab", // 计划任务 + "soft": "soft", // 软件管理 + "config": "config", // 面板设置 + "jquery.qrcode": "../js/jquery.qrcode.min", // 二维码 + "language": "../language/English/lan", // 语言包 + "clipboard": "../js/clipboard.min", // 复制 + "polyfill": "../vue/polyfill.min" + }, + shim: { + "language": { + exports: "lan" + }, + "jquery.qrcode": { // 二维码插件 + deps: ["jquery"], + exports: "jQuery.fn.qrcode" + } + } +}) + +var requestList = ['jquery', 'layer', 'language'] +var detectBrowser = function () { + var userAgent = navigator.userAgent, + isLessIE11 = userAgent.indexOf('compatible') > -1 && userAgent.indexOf('MSIE') > -1, + isEdge = userAgent.indexOf('Edge') > -1 && !isLessIE11, + isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf('rv:11.0') > -1, + IEVersionNum = 0 + if (isLessIE11) { + var IEReg = new RegExp('MSIE (\\d+\\.\\d+);'); + IEReg.test(userAgent); + IEVersionNum = parseFloat(RegExp['$1']) + } + if (IEVersionNum >= 10 || isEdge || isIE11) requestList.push('polyfill') +} +detectBrowser() +requestList.push('utils') +require(requestList, function () { + switch (location.pathname) { + case "/config": + require(['config'], function (param1) { + var Config = param1['Config'] + new Config() + }) + break + } +}) \ No newline at end of file diff --git a/BTPanel/static/amd/noticeConfig.js b/BTPanel/static/amd/noticeConfig.js new file mode 100644 index 00000000..d2047fb8 --- /dev/null +++ b/BTPanel/static/amd/noticeConfig.js @@ -0,0 +1,372 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +define(["require", "exports", "./public/public"], function (require, exports, public_1) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + public_1 = __importDefault(public_1); + var NoticeConfig = (function (_super) { + __extends(NoticeConfig, _super); + function NoticeConfig() { + var _this = _super.call(this) || this; + _this.apiInfo = { + getLoginAlarm: ['config/get_login_send', 'Getting login information, please wait...'], + setLoginAlarm: ['config/set_login_send', lan.public.the], + clearLoginAlarm: ['config/clear_login_send', lan.public.the], + loginIpwhite: ['config/login_ipwhite', lan.public.the], + }; + _this.info = {}; + _this.$apiInit(_this.apiInfo); + return _this; + } + NoticeConfig.prototype.init = function (data) { + var messageChannelInfo = data.messageChannelInfo, loginAlarmInfo = data.loginAlarmInfo; + var setName = loginAlarmInfo.msg; + var isSet = false; + for (var key in messageChannelInfo) { + var item = messageChannelInfo[key]; + if (!$.isEmptyObject(item.data) && item.name == setName) { + isSet = true; + this.setLinkText('.setAlarmMail', "".concat(item.title, " configured"), 'btlink'); + break; + } + } + if (!isSet) + this.setLinkText('.setAlarmMail', "Not configured", 'bt_warning'); + this.info = { messageChannelInfo: messageChannelInfo, loginAlarmInfo: loginAlarmInfo }; + }; + NoticeConfig.prototype.event = function () { + var _this = this; + $('.setAlarmMail, .setAlarmMailBtn').click(function () { return _this.setAlarmView(); }); + }; + NoticeConfig.prototype.setAlarmView = function () { + return __awaiter(this, void 0, void 0, function () { + var config, messageChannelInfo, isSet, key, item, error_1; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + config = this.info; + messageChannelInfo = config.messageChannelInfo; + isSet = false; + for (key in messageChannelInfo) { + item = messageChannelInfo[key]; + if (!$.isEmptyObject(item.data)) { + isSet = true; + break; + } + } + if (!isSet) + return [2, this.$msg({ msg: 'Please configure at least one alarm module in [Alarm > Alarm Settings].', icon: 2 })]; + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + return [4, this.$open({ + area: ['800px', '540px'], + title: 'Login panel alarm', + content: "\n
\n
\n

Alarm settings

\n

IP whitelist

\n
\n
\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n
Login infoTime
No Data
\n
\n
\n
\n
    \n
  • \n
\n
\n
\n
\n
\n \n \n
\n
\n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n
IPOpt
No Data
\n
\n
    \n
  • Only allow to set ipv4 whitelist
  • \n
\n
\n
\n
\n
\n
", + success: function () { return __awaiter(_this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + $('.bt-w-menu p').on('click', function (ev) { return __awaiter(_this, void 0, void 0, function () { + var el, index; + return __generator(this, function (_a) { + el = $(ev.target), index = el.index(); + el.addClass('bgw').siblings().removeClass('bgw'); + switch (index) { + case 0: + this.renderAlarmConfig(); + this.reanderLoginTable(); + break; + case 1: + this.reanderLoginIpTable(); + break; + } + $('.conter_box').eq(index).show().siblings().hide(); + return [2]; + }); + }); }); + $('.news-channel .bt-form-new').on('change', 'input[type="checkbox"]', function (ev) { return __awaiter(_this, void 0, void 0, function () { + var $el, checked, type, name_1, res, error_2; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + $el = $(ev.currentTarget); + checked = $el.prop('checked'); + type = $el.attr('name'); + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + name_1 = checked ? 'setLoginAlarm' : 'clearLoginAlarm'; + return [4, this.$request(name_1, { type: type })]; + case 2: + res = _a.sent(); + if (!res.status) { + throw new Error(res); + } + if (checked) { + $('.news-channel .btswitch').prop('checked', false); + $el.prop('checked', true); + config.loginAlarmInfo.msg = type; + } + else { + config.loginAlarmInfo.msg = ''; + } + this.init(config); + return [3, 4]; + case 3: + error_2 = _a.sent(); + $el.prop('checked', !checked); + return [3, 4]; + case 4: return [2]; + } + }); + }); }); + $('.add_ip_write').click(function () { return __awaiter(_this, void 0, void 0, function () { + var ip_write, ip, res, err_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 3, , 4]); + ip_write = $('[name="ip_write"]'); + ip = ip_write.val(); + return [4, this.$verifySubmit(!this.$checkIp(ip), 'Please enter the correct IP')]; + case 1: + _a.sent(); + return [4, this.$request('loginIpwhite', { ip: ip, type: 'add' })]; + case 2: + res = _a.sent(); + if (!res.status) + return [2]; + this.$delay(); + this.reanderLoginIpTable(); + ip_write.val(''); + return [3, 4]; + case 3: + err_1 = _a.sent(); + return [3, 4]; + case 4: return [2]; + } + }); + }); }); + $('input[name="ip_write"]').keyup(function (e) { + if (e.keyCode == 13) { + $('.add_ip_write').click(); + } + }); + $('#ip_write_table').on('click', '.del_ip_write', function (ev) { return __awaiter(_this, void 0, void 0, function () { + var that, ip, res, err_2; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + that = $(ev.target); + ip = that.data('ip'); + _a.label = 1; + case 1: + _a.trys.push([1, 4, , 5]); + return [4, this.$confirm({ title: 'Delete IP whitelist', msg: "Delete the IP whitelist [".concat(ip, "] and continue the operation?") })]; + case 2: + _a.sent(); + return [4, this.$request('loginIpwhite', { ip: ip, type: 'del' })]; + case 3: + res = _a.sent(); + if (!res.status) + return [2]; + this.$delay(); + this.reanderLoginIpTable(); + return [3, 5]; + case 4: + err_2 = _a.sent(); + return [3, 5]; + case 5: return [2]; + } + }); + }); }); + $('.clear_all').click(function () { return __awaiter(_this, void 0, void 0, function () { + var res, err_3; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 3, , 4]); + return [4, this.$confirm({ title: 'Tips', msg: 'Whether to clear the IP whitelist?' })]; + case 1: + _a.sent(); + return [4, this.$request('loginIpwhite', { type: 'clear' })]; + case 2: + res = _a.sent(); + if (!res.status) + return [2]; + this.$delay(); + this.reanderLoginIpTable(); + return [3, 4]; + case 3: + err_3 = _a.sent(); + return [3, 4]; + case 4: return [2]; + } + }); + }); }); + $('#server_table_page').on('click', 'a', function (ev) { return __awaiter(_this, void 0, void 0, function () { + var page; + return __generator(this, function (_a) { + ev.stopPropagation(); + ev.preventDefault(); + page = $(ev.target) + .attr('href') + .match(/p=([0-9]*)/)[1]; + this.reanderLoginTable(page); + return [2]; + }); + }); }); + this.fixedTableHead('#config_server_table table', '348px'); + this.fixedTableHead('#ip_write_table', '396px'); + $('.bt-w-menu p').eq(0).click(); + return [2]; + }); + }); }, + })]; + case 2: + _a.sent(); + return [3, 4]; + case 3: + error_1 = _a.sent(); + return [3, 4]; + case 4: return [2]; + } + }); + }); + }; + NoticeConfig.prototype.renderAlarmConfig = function () { + return __awaiter(this, void 0, void 0, function () { + var _a, alarms, send, html, tits, cKey; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + return [4, Promise.all([this.$request(['config/get_msg_configs'], { loading: false, msg: false }), this.$request(['config/get_login_send'], { loading: false, msg: false })])]; + case 1: + _a = _b.sent(), alarms = _a[0], send = _a[1]; + html = ''; + tits = []; + cKey = send.msg; + $.each(alarms, function (key, item) { + var checked = cKey === item.name ? 'checked="checked"' : ''; + var title = item.title; + html += "\n\t\t\t
\n\t\t\t\t
Send to ".concat(title, "
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
"); + tits.push(title); + }); + $('.news-channel .bt-form-new').html(html); + $('.news-channel .help-info-text li') + .eq(0) + .text("".concat(tits.join('/'), " can only open one at the same time")); + return [2]; + } + }); + }); + }; + NoticeConfig.prototype.reanderLoginTable = function (p) { + if (p === void 0) { p = 1; } + return __awaiter(this, void 0, void 0, function () { + var rdata, html, i, item; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4, this.$request(['config/get_login_log', 'Getting Logs list, please wait'], { p: p, limit: 4 })]; + case 1: + rdata = _a.sent(); + if (!rdata.data) + return [2, false]; + html = ''; + $('#server_table').empty(); + for (i = 0; i < rdata.data.length; i++) { + item = rdata.data[i]; + html += "\n \n ").concat(item.log, "\n \n ").concat(item.addtime, "\n "); + } + !html && (html = "No Data"); + $('#server_table').html(html); + $('#server_table_page').html(rdata.page); + return [2]; + } + }); + }); + }; + NoticeConfig.prototype.reanderLoginIpTable = function () { + return __awaiter(this, void 0, void 0, function () { + var rdata, list, html, i, item, err_4; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [4, this.$request('loginIpwhite', { type: 'get' })]; + case 1: + rdata = _a.sent(); + list = rdata.msg; + html = ''; + for (i = 0; i < list.length; i++) { + item = list[i]; + html += "\n ".concat(item, "\n \n Del\n \n "); + } + !html && (html = "No Data"); + $('#ip_write_table tbody').html(html); + return [3, 3]; + case 2: + err_4 = _a.sent(); + return [3, 3]; + case 3: return [2]; + } + }); + }); + }; + return NoticeConfig; + }(public_1.default)); + exports.default = NoticeConfig; +}); diff --git a/BTPanel/static/amd/panelConfig.js b/BTPanel/static/amd/panelConfig.js new file mode 100644 index 00000000..0a06ca66 --- /dev/null +++ b/BTPanel/static/amd/panelConfig.js @@ -0,0 +1,564 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +define(["require", "exports", "./snabbdom", "./configMixin"], function (require, exports, snabbdom_1, configMixin_1) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + configMixin_1 = __importDefault(configMixin_1); + var PanelConfig = (function (_super) { + __extends(PanelConfig, _super); + function PanelConfig() { + var _this = _super.call(this) || this; + _this.apiInfo = { + closePanel: ['config/ClosePanel', lan.public.the], + setIpv6Status: ['config/set_ipv6_status', lan.config.setting_up], + setLocal: ['config/set_local', lan.public.the], + setDebug: ['config/set_debug', lan.public.the], + getToken: ['config/get_token', lan.config.get_api], + setToken: ['config/set_token', lan.config.is_submitting], + setUserName: ['config/setUsername', lan.public.the], + setPassword: ['config/setPassword', lan.public.the], + getMenuList: ['config/get_menu_list', 'Getting panel menu bar, please wait...'], + setHideMenuList: ['config/set_hide_menu_list', 'Setting panel menu bar display status, please wait...'], + }; + _this.$apiInit(_this.apiInfo); + return _this; + } + PanelConfig.prototype.init = function (data) { + var configInfo = data.configInfo, menuList = data.menuList, bindUserInfo = data.bindUserInfo; + var ipv6 = configInfo.ipv6, is_local = configInfo.is_local, debug = configInfo.debug, api = configInfo.api, session_timeout = configInfo.session_timeout, sites_path = configInfo.sites_path, backup_path = configInfo.backup_path, panel = configInfo.panel, systemdate = configInfo.systemdate; + var address = (panel || {}).address; + var bindUserStatus = bindUserInfo.status, bindUsername = bindUserInfo.data.username; + var username = sessionInfo.username, webname = sessionInfo.title; + var hideMenuList = []; + menuList.forEach(function (item) { return !item.show && hideMenuList.push(item.title); }); + var hideMenuValue = hideMenuList.length > 0 ? hideMenuList.join(', ') : 'No hidden bar'; + var formColumns = { + ipv6: { value: ipv6 === 'checked' }, + is_local: { value: is_local === 'checked' }, + debug: { value: debug === 'checked' }, + api: { value: api === 'checked' }, + webname: { value: webname }, + session_timeout: { value: session_timeout }, + sites_path: { value: sites_path }, + backup_path: { value: backup_path }, + address: { value: address }, + systemdate: { value: systemdate }, + username: { value: username }, + password: { value: '********' }, + bind_user_info: { value: bindUsername }, + menu_hide_list: { value: hideMenuValue }, + }; + this.renderFormColumn(formColumns); + $('.seconds').text(session_timeout || 0); + this.bindUsername = bindUserStatus ? bindUsername : ''; + }; + PanelConfig.prototype.event = function () { + var _this = this; + $('input[name="close_panel"]').change(function (e) { + var title = lan.config.close_panel_title; + var msg = lan.config.close_panel_msg; + var api = 'closePanel'; + _this.showCheckboxConfirm({ + e: e, + api: api, + config: { title: title, msg: msg }, + }) + .then(function (res) { + _this.$refreshBrowser(); + }) + .catch(function (err) { }); + }); + $('input[name="ipv6"]').change(function (e) { + _this.changeCheckbox(e, 'setIpv6Status').catch(function (err) { }); + }); + $('input[name="is_local"]').change(function (e) { + var checked = $(e.target).prop('checked'); + var title = "".concat(checked ? 'Open' : 'Close', " developer mode"); + var msg = "Do you confirm to ".concat(checked ? 'open' : 'close', " developer mode?"); + var api = 'setLocal'; + _this.showCheckboxConfirm({ e: e, api: api, config: { title: title, msg: msg } }).catch(function (err) { }); + }); + $('input[name="debug"]').change(function (e) { + var checked = $(e.target).prop('checked'); + if (checked) { + _this.setDeveloperView(e); + } + else { + var title = 'Close developer mode'; + var msg = 'Do you confirm to close developer mode?'; + var api = 'setDebug'; + _this.showCheckboxConfirm({ + e: e, + api: api, + config: { title: title, msg: msg }, + }).catch(function (err) { }); + } + }); + $('input[name="api"]').change(function (e) { + var checked = $(e.target).prop('checked'); + if (checked) { + _this.setPanelApiView(checked); + _this.$request('setToken', { t_type: 1 }); + } + else { + _this.changeCheckbox(e, 'setToken', { t_type: 2 }).catch(function (err) { }); + } + }); + $('.sitesPath').on('click', function () { return _this.selectFileDir('input[name="sites_path"]', 'dir', function () { }); }); + $('.backupPath').on('click', function () { return _this.selectFileDir('input[name="backup_path"]', 'dir', function () { }); }); + $('.apiInterfaceBtn').click(function () { return _this.setPanelApiView(); }); + $('.editPanelAccount').click(function () { return _this.setPanelUserView(); }); + $('.editPanelPassword').click(function () { return _this.setPanelPawView(); }); + $('.bindBtUser').click(function () { return _this.bindBtAccount(!!_this.bindUsername); }); + $('.unbindBtUser').click(function () { return _this.unbindUser(); }); + $('.menuBarManage').click(function () { return _this.setPanelGroundView(); }); + }; + PanelConfig.prototype.setDeveloperView = function (event) { + var _this = this; + this.$open({ + title: 'Turn on developer mode', + area: ['460px', '340px'], + btn: [lan.public.submit, lan.public.cancel], + content: { + data: { agreement: false }, + template: function () { + return ((0, snabbdom_1.jsx)("div", { class: this.$class('bt-form pd25') }, + this.$warningTitle('Risk ordinary users do not open!'), + this.$ul({ className: 'explainDescribeList pd15' }, [ + ['For development use only;', 'red'], + ['Please do not enable it in production environment;'], + ['It may take up a lot of memory after opening;'], + ]), + this.$learnMore({ title: 'I understand and am willing to take the risk, confirm to open', model: 'agreement', id: 'checkDevelopers' }))); + }, + }, + yes: function (config) { return __awaiter(_this, void 0, void 0, function () { + var close, vm, status; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + close = config.close, vm = config.vm; + if (!vm.agreement) + return [2, this.$tips({ msg: 'Please tick to understand the risk options', el: '#checkDevelopers' })]; + return [4, this.$request('setDebug')]; + case 1: + status = (_a.sent()).status; + if (status) { + close(); + this.$refreshBrowser(); + } + return [2]; + } + }); + }); }, + cancel: function () { + _this.changeReverseCheckbox(event); + }, + btn2: function () { + _this.changeReverseCheckbox(event); + }, + }).catch(function (err) { }); + }; + PanelConfig.prototype.setPanelApiView = function (checked) { + return __awaiter(this, void 0, void 0, function () { + var that, $checked, rdata, error_1; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + that = this; + $checked = $('input[name="api"]'); + return [4, this.$request('getToken')]; + case 1: + rdata = _a.sent(); + _a.label = 2; + case 2: + _a.trys.push([2, 4, , 5]); + return [4, this.$open({ + area: '522px', + title: lan.config.set_api, + content: { + data: { + api: typeof checked === 'undefined' ? rdata.open : checked, + panelTokenValue: rdata.token, + apiLimitAddr: rdata.limit_addr, + }, + template: function () { + var lineWidth = '125px', helpHref = 'https://forum.aapanel.com/d/482-api-interface-tutorial'; + return ((0, snabbdom_1.jsx)("div", { class: this.$class('bt-form'), style: this.$style('padding: 15px 25px;') }, + this.$line({ title: lan.config.api, width: lineWidth }, this.$switch({ model: 'api', change: this.setPanelApi.bind(this) })), + this.$line({ title: lan.config.int_sk, width: lineWidth }, this.$box(this.$input({ model: 'panelTokenValue', disabled: true, style: { width: '310px' } }), this.$button({ size: 'xs', click: this.resetInterface.bind(this), style: 'margin-left: -56px;', title: lan.config.reset }))), + this.$line({ + title: ((0, snabbdom_1.jsx)("span", null, + lan.config.ip_white_list, + (0, snabbdom_1.jsx)("br", null), + "(", + lan.config.one_per_line, + ")")), + width: lineWidth, + style: 'overflow: initial;height:20px;line-height:20px;', + }, this.$textarea({ model: 'apiLimitAddr', style: 'width: 310px;height:80px;line-height: 20px;padding: 5px 8px;' })), + this.$line({ title: '', width: lineWidth }, this.$button({ size: 'sm', click: this.savePanelApiIp.bind(this), title: lan.config.save })), + this.$ul({ style: { marginLeft: '16px' } }, [ + [lan.config.help1], + [lan.config.help2], + [ + (0, snabbdom_1.jsx)("span", null, + lan.config.help3, + ": ", + this.$link({ title: helpHref, href: helpHref })), + ], + ]))); + }, + methods: { + setPanelApi: function () { + return __awaiter(this, void 0, void 0, function () { + var res; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4, that.$request('setToken', { t_type: 2 })]; + case 1: + res = _a.sent(); + if (res.status) { + $checked.prop('checked', this.api); + } + else { + this.api = !this.api; + } + return [2]; + } + }); + }); + }, + resetInterface: function () { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + that + .$confirm({ + title: 'Reset key', + msg: 'Are you sure you want to reset your current key?
After the key is reset, the associated key product will be invalid. Please re-add the new key to the product.', + }) + .then(function (res) { + return that.$request('setToken', { t_type: 1 }, false); + }) + .then(function (res) { + if (res.status) { + _this.panelTokenValue = res.msg; + that.$msg({ msg: lan.config.create_int_key_success, time: 0, closeBtn: 2 }); + } + else { + throw new Error(res); + } + }) + .catch(function (err) { }); + return [2]; + }); + }); + }, + savePanelApiIp: function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4, that.$request('setToken', { t_type: 3, limit_addr: this.apiLimitAddr })]; + case 1: + _a.sent(); + return [2]; + } + }); + }); + }, + }, + }, + success: function (layers, indexs, vm) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this.setLayerVerticalCenter(layers); + $('.btswitch-btn').css('margin-bottom', '0'); + if (!(typeof checked === 'boolean' && checked)) return [3, 2]; + return [4, that.$request('setToken', { t_type: 2 })]; + case 1: + _a.sent(); + _a.label = 2; + case 2: return [2]; + } + }); + }); }, + })]; + case 3: + _a.sent(); + return [3, 5]; + case 4: + error_1 = _a.sent(); + return [3, 5]; + case 5: return [2]; + } + }); + }); + }; + PanelConfig.prototype.setPanelUserView = function () { + return __awaiter(this, void 0, void 0, function () { + var error_2; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [4, this.$open({ + title: lan.bt.user_title, + area: ['380px', '235px'], + btn: [lan.public.edit, lan.public.close], + content: { + data: { username1: sessionInfo.username, username2: '' }, + template: function () { + var lineWidth = '110px', inputWidth = '210px'; + return ((0, snabbdom_1.jsx)("div", { class: this.$class('bt-form pd25') }, + this.$line({ title: lan.bt.user, width: lineWidth }, this.$input({ model: 'username1', width: inputWidth })), + this.$line({ title: lan.bt.user_new, width: lineWidth }, this.$input({ model: 'username2', width: inputWidth })))); + }, + }, + yes: function (config) { return __awaiter(_this, void 0, void 0, function () { + var close, vm, username1, username2, weakCipher, rdata; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + close = config.close, vm = config.vm; + username1 = vm.username1, username2 = vm.username2; + weakCipher = ['admin', 'root', 'admin123', '123456']; + return [4, this.$verifySubmitList([ + [username1.length <= 3, lan.bt.user_len], + [weakCipher.indexOf(username1) > -1, lan.public.usually_username_ban], + [username1 !== username2, lan.bt.user_err_re], + ])]; + case 1: + _a.sent(); + username1 = rsa.encrypt_public(encodeURIComponent(username1)); + username2 = rsa.encrypt_public(encodeURIComponent(username2)); + return [4, this.$request('setUserName', { username1: username1, username2: username2 })]; + case 2: + rdata = _a.sent(); + rdata.status && close() && this.$refreshBrowser('/login?dologin=True'); + return [2]; + } + }); + }); }, + })]; + case 1: + _a.sent(); + return [3, 3]; + case 2: + error_2 = _a.sent(); + return [3, 3]; + case 3: return [2]; + } + }); + }); + }; + PanelConfig.prototype.setPanelPawView = function () { + return __awaiter(this, void 0, void 0, function () { + var that_1, error_3; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + that_1 = this; + return [4, this.$open({ + title: lan.bt.pass_title, + area: ['410px', '235px'], + btn: [lan.public.edit, lan.public.close], + content: { + data: { password1: '', password2: '' }, + template: function () { + var lineWidth = '110px', inputWidth = '210px'; + return ((0, snabbdom_1.jsx)("div", { class: { 'bt-form': true, pd25: true } }, + this.$line({ title: lan.public.pass, width: lineWidth }, this.$box(this.$input({ model: 'password1', width: inputWidth }), this.$icon({ type: 'repeat', click: this.showPaw.bind(this), class: 'ml5' }))), + this.$line({ title: lan.bt.pass_new_title, width: lineWidth }, this.$input({ model: 'password2', width: inputWidth })))); + }, + methods: { + showPaw: function () { + this.password1 = that_1.$getRandom(10); + this.password2 = this.password1; + }, + }, + }, + yes: function (config) { return __awaiter(_this, void 0, void 0, function () { + var close, vm, password1, password2, weakCipher, rdata; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + close = config.close, vm = config.vm; + password1 = vm.password1, password2 = vm.password2; + weakCipher = this.$checkWeakCipher(password1); + return [4, this.$verifySubmitList([ + [password1.length < 8, lan.bt.pass_err_len], + [!weakCipher.status, lan.bt.pass_err + weakCipher.msg], + [password1 !== password2, lan.bt.pass_err_re], + ])]; + case 1: + _a.sent(); + password1 = rsa.encrypt_public(encodeURIComponent(password1)); + password2 = rsa.encrypt_public(encodeURIComponent(password2)); + return [4, this.$request('setPassword', { password1: password1, password2: password2 })]; + case 2: + rdata = _a.sent(); + rdata.status && close() && this.$refreshBrowser('/login?dologin=True'); + return [2]; + } + }); + }); }, + })]; + case 1: + _a.sent(); + return [3, 3]; + case 2: + error_3 = _a.sent(); + return [3, 3]; + case 3: return [2]; + } + }); + }); + }; + PanelConfig.prototype.unbindUser = function () { + return __awaiter(this, void 0, void 0, function () { + var rdata, err_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 3, , 4]); + return [4, this.$confirm({ + title: 'Unbind aaPanel account', + msg: 'Unbind the aaPanel account and continue!', + })]; + case 1: + _a.sent(); + return [4, this.$request('unbindUserInfo')]; + case 2: + rdata = _a.sent(); + if (rdata.status) { + this.$removeCookie('bt_user_info'); + this.$refreshBrowser(); + } + return [3, 4]; + case 3: + err_1 = _a.sent(); + return [3, 4]; + case 4: return [2]; + } + }); + }); + }; + PanelConfig.prototype.setPanelGroundView = function () { + return __awaiter(this, void 0, void 0, function () { + var rdata, html, is_option, that, arry, isEdit; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4, this.$request('getMenuList')]; + case 1: + rdata = _a.sent(), html = '', is_option = '', that = this; + arry = ['dologin', 'memuAconfig', 'memuAsoft', 'memuA']; + rdata.map(function (item, index) { + is_option = "
"); + arry.indexOf(item.id) > -1 && (is_option = 'Inoperable'); + html += "".concat(item.title, "
").concat(is_option, "
"); + }); + isEdit = false; + return [4, this.$open({ + title: 'Manage panel menu bar', + area: ['350px', '598px'], + content: "\n
\n \n \n \n \n \n \n \n ".concat(html, "\n
Menu barDisplay
\n
\n "), + success: function () { + $('#panel_menu_tab input').click(function () { + return __awaiter(this, void 0, void 0, function () { + var arry; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + arry = []; + $(this) + .parents('tr') + .siblings() + .each(function (index, el) { + if ($(this).find('input').length > 0 && !$(this).find('input').prop('checked')) { + arry.push($(this).find('input').attr('name')); + } + }); + !$(this).prop('checked') && arry.push($(this).attr('name')); + return [4, that.$request('setHideMenuList', { hide_list: JSON.stringify(arry) })]; + case 1: + _a.sent(); + isEdit = true; + return [2]; + } + }); + }); + }); + }, + cancel: function () { + isEdit && that.$refreshBrowser(0); + }, + })]; + case 2: + _a.sent(); + return [2]; + } + }); + }); + }; + return PanelConfig; + }(configMixin_1.default)); + exports.default = PanelConfig; +}); diff --git a/BTPanel/static/amd/public.js b/BTPanel/static/amd/public.js new file mode 100644 index 00000000..e69de29b diff --git a/BTPanel/static/amd/require.min.js b/BTPanel/static/amd/require.min.js new file mode 100644 index 00000000..a4203f0d --- /dev/null +++ b/BTPanel/static/amd/require.min.js @@ -0,0 +1,5 @@ +/** vim: et:ts=4:sw=4:sts=4 + * @license RequireJS 2.3.6 Copyright jQuery Foundation and other contributors. + * Released under MIT license, https://github.com/requirejs/requirejs/blob/master/LICENSE + */ +var requirejs,require,define;!function(global,setTimeout){var req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath,version="2.3.6",commentRegExp=/\/\*[\s\S]*?\*\/|([^:"'=]|^)\/\/.*$/gm,cjsRequireRegExp=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,jsSuffixRegExp=/\.js$/,currDirRegExp=/^\.\//,op=Object.prototype,ostring=op.toString,hasOwn=op.hasOwnProperty,isBrowser=!("undefined"==typeof window||"undefined"==typeof navigator||!window.document),isWebWorker=!isBrowser&&"undefined"!=typeof importScripts,readyRegExp=isBrowser&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,defContextName="_",isOpera="undefined"!=typeof opera&&"[object Opera]"===opera.toString(),contexts={},cfg={},globalDefQueue=[],useInteractive=!1;function commentReplace(e,t){return t||""}function isFunction(e){return"[object Function]"===ostring.call(e)}function isArray(e){return"[object Array]"===ostring.call(e)}function each(e,t){var i;if(e)for(i=0;i 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +define(["require", "exports", "./snabbdom", "./configMixin"], function (require, exports, snabbdom_1, configMixin_1) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + configMixin_1 = __importDefault(configMixin_1); + var SafeConfig = (function (_super) { + __extends(SafeConfig, _super); + function SafeConfig() { + var _this = _super.call(this) || this; + _this.apiInfo = { + getCertSource: ['config/get_cert_source', lan.public.the], + setPanelSsl: ['config/SetPanelSSL', lan.public.the], + getPanelSsl: ['config/GetPanelSSL', lan.config.get_cert], + savePanelSsl: ['config/SavePanelSSL', lan.config.ssl_msg], + setBasicAuth: ['config/set_basic_auth', lan.config.set_basicauth], + setTwoStepAuth: ['config/set_two_step_auth', lan.public.the], + getQrcodeData: ['config/get_qrcode_data', lan.public.the], + getTwoStepKey: ['config/get_key', lan.public.the], + setPasswordSafe: ['config/set_password_safe', lan.public.the], + setAdminPath: ['config/set_admin_path', lan.config.config_save], + setNotAuthStatus: ['config/set_not_auth_status', lan.config.panel_entrance_err], + setPawExpire: ['config/set_password_expire', 'Setting password expiration time, please wait...'], + getPasswordConfig: ['config/get_password_config', 'Setting password complexity verification status, please wait...'], + getTempAuthList: ['config/get_temp_login', 'Getting temporary authorization list, please wait...'], + setTempAuthLink: ['config/set_temp_login', 'Setting temporary links, please wait...'], + removeTempAuthLink: ['config/remove_temp_login', 'Deleting temporary authorization record, please wait...'], + clearTempAuth: ['config/clear_temp_login', 'Forcing user to log out, please wait...'], + getTempOperationLogs: ['config/get_temp_login_logs', 'Getting operation log, please wait...'], + }; + _this.statusCodeList = [ + { label: 'security entry error', value: 0 }, + { label: '403', value: 403 }, + { label: '404', value: 404 }, + { label: '416', value: 416 }, + { label: '408', value: 408 }, + { label: '400', value: 400 }, + { label: '401', value: 401 }, + ]; + _this.$apiInit(_this.apiInfo); + return _this; + } + SafeConfig.prototype.init = function (data) { + var configInfo = data.configInfo, twoStep = data.twoStep, pawComplexity = data.pawComplexity; + var basic_auth = configInfo.basic_auth, panel = configInfo.panel; + var open = (basic_auth || {}).open; + var _a = panel || {}, port = _a.port, admin_path = _a.admin_path, domain = _a.domain, limitip = _a.limitip; + var googleStatus = twoStep.status; + var password_safe = pawComplexity.password_safe, expire = pawComplexity.expire, expire_time = pawComplexity.expire_time, expire_day = pawComplexity.expire_day; + var isHttps = location.protocol.indexOf('https:') > -1; + var statusCodeTips = this.getStatusCodeTips(); + var paw_expire_time = expire > 0 ? "".concat(this.$formatTime(expire_time), " (Exp in ").concat(expire_day, " days)") : lan.config.not_set; + var formColumns = { + ssl: { value: isHttps }, + basic_auth: { value: open }, + check_two_step: { value: googleStatus }, + paw_complexity: { value: password_safe }, + port: { value: port }, + admin_path: { value: admin_path }, + status_code: { value: statusCodeTips }, + domain: { value: domain }, + limitip: { value: limitip }, + paw_expire_time: { value: paw_expire_time, day: expire_day }, + }; + this.renderFormColumn(formColumns); + this.formColumns = formColumns; + }; + SafeConfig.prototype.event = function () { + var _this = this; + $('input[name="ssl"]').change(function (e) { + var checked = $(e.target).prop('checked'); + if (checked) { + _this.setPanelSslView(e); + } + else { + var title = 'Tips'; + var msg = 'Whether to close the panel SSL certificate?'; + var api = 'setPanelSsl'; + _this.showCheckboxConfirm({ + e: e, + api: api, + config: { title: title, msg: msg }, + }) + .then(function (res) { + if (res.status) + return _this.$request('restartPanel', { loading: false, msg: false }); + }) + .then(function (res) { + res.status && _this.$refreshBrowser(location.href.replace(/^https:/, 'http:'), 800); + }) + .catch(function (err) { }); + } + }); + $('.panelSslConfig').on('click', function () { return _this.setPanelSslConfigView(); }); + $('input[name="basic_auth"]').change(function (e) { + var checked = $(e.target).prop('checked'); + if (checked) { + _this.setBasicAuthView(e); + } + else { + var title = 'Turn off BasicAuth authentication'; + var msg = 'After BasicAuth authentication is disabled, panel login will no longer verify BasicAuth base authentication, which will cause panel security to decline. Do you want to continue?'; + var api = 'setBasicAuth'; + _this.showCheckboxConfirm({ + e: e, + api: api, + config: { title: title, msg: msg }, + data: { open: 'False', basic_user: '', basic_pwd: '' }, + }) + .then(function (res) { + _this.$refreshBrowser(); + }) + .catch(function (err) { }); + } + }); + $('input[name="check_two_step"]').change(function (e) { + var checked = $(e.target).prop('checked'); + if (checked) { + _this.setGoogleAuthView(e); + } + else { + var title = 'Google authentication'; + var msg = 'Turn off Google authentication, do you want to continue?'; + var api = 'setTwoStepAuth'; + _this.showCheckboxConfirm({ + e: e, + api: api, + config: { title: title, msg: msg }, + data: { act: false }, + }).catch(function (err) { }); + } + }); + $('.checkTwoStepConfig').click(function () { return _this.googleAuthRelationView(); }); + $('input[name="paw_complexity"]').change(function (e) { + var checked = $(e.target).is(':checked'); + var title = checked ? lan.config.open_strong_password : lan.config.close_strong_password; + var msg = checked ? "".concat(lan.config.strong_password_desc1, "").concat(lan.config.strong_password_desc2, "") : lan.config.strong_password_desc3; + var api = 'setPasswordSafe'; + _this.showCheckboxConfirm({ + e: e, + api: api, + config: { title: title, msg: msg }, + }) + .then(function (res) { + res.status && _this.$refreshBrowser(); + }) + .catch(function (err) { }); + }); + $('.setSafetyEntrance').click(function () { return _this.setSafetyEntranceView(); }); + $('.setStatusCodeView').click(function () { return _this.setStatusCodeView(); }); + $('.setPawExpiration').click(function () { return _this.setPawExpirationView(); }); + $('.setTempAuthView').on('click', function () { return _this.setTempAuthView(); }); + }; + SafeConfig.prototype.getStatusCodeTips = function () { + var statusCodeTips = lan.config.response_msg1; + var statusCode = sessionInfo.statusCode; + var code = parseInt(statusCode); + for (var i = 0; i < this.statusCodeList.length; i++) { + var item = this.statusCodeList[i]; + if (item.value === code) { + statusCodeTips = item.label; + break; + } + } + return statusCodeTips; + }; + SafeConfig.prototype.setPanelSslView = function (e) { + return __awaiter(this, void 0, void 0, function () { + var certSource, _a, certPem, privateKey, err_1; + var _this = this; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _b.trys.push([0, 4, , 5]); + return [4, this.$request('getCertSource')]; + case 1: + certSource = _b.sent(); + return [4, this.$request('getPanelSsl')]; + case 2: + _a = _b.sent(), certPem = _a.certPem, privateKey = _a.privateKey; + return [4, this.$open({ + title: 'Panel SSL', + area: '560px', + btn: ['Submit', 'Close'], + skin: 'panel-ssl', + content: { + data: { cert_type: certSource.cert_type ? parseInt(certSource.cert_type) : 1, email: certSource.email || '', certPem: certPem, privateKey: privateKey, agreement: false }, + template: function () { + var lineWidth = '80px', inputWidth = '280px', helpHref = 'https://forum.aapanel.com/d/167-common-problems-after-opening-the-panel-certificate'; + return ((0, snabbdom_1.jsx)("div", { class: this.$class('bt-form'), style: this.$style('padding: 20px 50px;') }, + this.$warningTitle(lan.config.ssl_open_ps), + this.$ul({ className: 'explainDescribeList pd15' }, [ + [lan.config.ssl_open_ps_1, 'red'], + [lan.config.ssl_open_ps_2], + [(0, snabbdom_1.jsx)("span", null, + "If panel is not accessible, you can click the ", + this.$link({ title: 'link', href: helpHref }), + " below to find solutions")], + ]), + (0, snabbdom_1.jsx)("div", { class: { pt10: true } }, + this.$line({ title: 'Cert Type', width: lineWidth }, this.$select({ + model: 'cert_type', + width: inputWidth, + options: [ + { label: 'Self-signed certificate', value: 1 }, + { label: "Let's Encrypt", value: 2 }, + { label: 'I have certficate', value: 3 }, + ], + })), + this.$line({ title: 'E-Mail', width: lineWidth, hide: parseInt(this.cert_type) !== 2 }, this.$input({ model: 'email', width: inputWidth, placeholder: 'Admin E-Mail' })), + this.$line({ title: 'Key', width: lineWidth, hide: parseInt(this.cert_type) !== 3 }, this.$textarea({ model: 'privateKey', width: inputWidth, height: '100px', style: 'line-height: 16px;padding: 5px 8px;' })), + this.$line({ title: 'Certificate', width: lineWidth, hide: parseInt(this.cert_type) !== 3 }, this.$textarea({ model: 'certPem', width: inputWidth, height: '100px', style: 'line-height: 16px;padding: 5px 8px;' })), + this.$learnMore({ + model: 'agreement', + id: 'checkSSL', + title: (0, snabbdom_1.jsx)("span", null, lan.config.ssl_open_ps_4), + link: this.$link({ title: lan.config.ssl_open_ps_5, href: 'https://forum.aapanel.com/d/167-common-problems-after-opening-the-panel-certificate' }), + })))); + }, + }, + success: function (layers) { + layers[0].style.height = 'auto'; + layers[0].querySelector('.layui-layer-content').style.height = 'auto'; + _this.setLayerVerticalCenter(layers); + $('select[name="cert_type"]').change(function (e) { + _this.setLayerVerticalCenter(layers); + }); + }, + yes: function (config) { return __awaiter(_this, void 0, void 0, function () { + var close, vm, cert_type, email, privateKey, certPem, agreement, _a, res, rdata; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + close = config.close, vm = config.vm; + cert_type = vm.cert_type, email = vm.email, privateKey = vm.privateKey, certPem = vm.certPem, agreement = vm.agreement; + if (!agreement) + return [2, this.$tips({ el: '#agreement_more', msg: 'Please confirm the risk first!' })]; + return [4, this.$verifySubmitList([ + [cert_type === '3' && (!certPem || !privateKey), 'Please enter certificate information'], + [cert_type === '2' && !email, 'Please enter administrator email'], + ])]; + case 1: + _b.sent(); + _a = cert_type === '3'; + if (!_a) return [3, 3]; + return [4, this.$request('savePanelSsl', { privateKey: privateKey, certPem: certPem }, false)]; + case 2: + _a = (_b.sent()); + _b.label = 3; + case 3: + _a; + return [4, this.$request('setPanelSsl', Object.assign({ cert_type: cert_type }, vm.cert_type === '2' ? { email: email } : {}))]; + case 4: + res = _b.sent(); + if (!res.status) return [3, 6]; + return [4, this.$request('restartPanel', { loading: false, msg: false })]; + case 5: + rdata = _b.sent(); + rdata.status && close() && this.$refreshBrowser(location.href.replace(/^http:/, 'https:'), 800); + _b.label = 6; + case 6: return [2]; + } + }); + }); }, + cancel: function () { + _this.changeReverseCheckbox(e); + }, + btn2: function () { + _this.changeReverseCheckbox(e); + }, + })]; + case 3: + _b.sent(); + return [3, 5]; + case 4: + err_1 = _b.sent(); + return [3, 5]; + case 5: return [2]; + } + }); + }); + }; + SafeConfig.prototype.setPanelSslConfigView = function () { + return __awaiter(this, void 0, void 0, function () { + var that_1, _a, certPem, privateKey, error_1; + var _this = this; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _b.trys.push([0, 3, , 4]); + that_1 = this; + return [4, this.$request('getPanelSsl')]; + case 1: + _a = _b.sent(), certPem = _a.certPem, privateKey = _a.privateKey; + return [4, this.$open({ + title: lan.config.custom_panel_cert, + area: '740px', + content: { + data: { certPem: certPem, privateKey: privateKey }, + template: function () { + return ((0, snabbdom_1.jsx)("div", { class: this.$class('bt-form pd20') }, + (0, snabbdom_1.jsx)("div", { class: this.$class('myKeyCon') }, + (0, snabbdom_1.jsx)("div", { class: this.$class('ssl-con-key pull-left mr20'), style: { width: '48%' } }, + lan.config.key, + (0, snabbdom_1.jsx)("br", null), + this.$textarea({ model: 'privateKey' })), + (0, snabbdom_1.jsx)("div", { class: this.$class('ssl-con-key pull-left'), style: { width: '48%' } }, + lan.config.pem_cert, + (0, snabbdom_1.jsx)("br", null), + this.$textarea({ model: 'certPem' })), + (0, snabbdom_1.jsx)("div", { class: this.$class('ssl-btn pull-left mtb15'), style: { width: '100%' } }, this.$button({ title: lan.config.save, click: this.savePanelSsl.bind(this) }))), + this.$ul({ style: 'clear: both;' }, [ + [ + (0, snabbdom_1.jsx)("span", null, + lan.config.ps, + " ", + this.$link({ title: "[".concat(lan.config.help, "]"), href: 'http://www.bt.cn/bbs/thread-704-1-1.html' }), + "."), + ], + [lan.config.ps1], + [lan.config.ps2], + ]))); + }, + methods: { + savePanelSsl: function () { + return __awaiter(this, void 0, void 0, function () { + var _a, certPem, privateKey; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = this, certPem = _a.certPem, privateKey = _a.privateKey; + return [4, that_1.$verifySubmitList([[!certPem || !privateKey, 'Please enter certificate information']])]; + case 1: + _b.sent(); + return [4, that_1.$request('savePanelSsl', { privateKey: privateKey, certPem: certPem })]; + case 2: + _b.sent(); + return [2]; + } + }); + }); + }, + }, + }, + success: function (layero) { + _this.setLayerVerticalCenter(layero); + }, + })]; + case 2: + _b.sent(); + return [3, 4]; + case 3: + error_1 = _b.sent(); + return [3, 4]; + case 4: return [2]; + } + }); + }); + }; + SafeConfig.prototype.setBasicAuthView = function (e) { + var _this = this; + this.$open({ + title: 'Risk reminder', + area: '650px', + btn: ['Submit', 'Close'], + content: { + data: { agreement: false }, + template: function () { + return ((0, snabbdom_1.jsx)("div", { class: this.$class('bt-form pd25') }, + this.$warningTitle('Warning! Do not understand this feature, do not open!'), + this.$ul({ className: 'explainDescribeList pd15' }, [ + ['You must use and understand this feature to decide if you want to open it!', 'red'], + ['After opening, access the panel in any way, you will be asked to enter the BasicAuth username and password first.'], + ['After being turned on, it can effectively prevent the panel from being scanned and found, but it cannot replace the account password of the panel itself.'], + ['Please remember the BasicAuth password, but forget that you will not be able to access the panel.'], + ['If you forget your password, you can disable BasicAuth authentication by using the bt command in SSH.'], + ]), + this.$learnMore({ + title: (0, snabbdom_1.jsx)("span", null, "I already know the details and are willing to take risks"), + model: 'agreement', + id: 'checkBasicAuth', + link: this.$link({ title: 'What is BasicAuth authentication?', href: 'https://www.bt.cn/bbs/thread-34374-1-1.html' }), + }))); + }, + }, + success: function (layers) { + _this.setLayerVerticalCenter(layers); + }, + yes: function (config) { return __awaiter(_this, void 0, void 0, function () { + var close, vm; + return __generator(this, function (_a) { + close = config.close, vm = config.vm; + if (!vm.agreement) + return [2, this.$tips({ el: '#checkBasicAuth', msg: 'Please read and agree to the risk' })]; + close(); + this.setBasicAuthConfigView(e); + return [2]; + }); + }); }, + cancel: function () { + _this.changeReverseCheckbox(e); + }, + btn2: function () { + _this.changeReverseCheckbox(e); + }, + }).catch(function (err) { }); + }; + SafeConfig.prototype.setBasicAuthConfigView = function (e) { + return __awaiter(this, void 0, void 0, function () { + var that; + var _this = this; + return __generator(this, function (_a) { + that = this; + this.$open({ + title: 'Configure BasicAuth authentication', + area: '500px', + content: { + data: { open: true, basic_user: '', basic_pwd: '' }, + template: function () { + var inputWidth = '280px'; + return ((0, snabbdom_1.jsx)("div", { class: this.$class('bt-form pd25') }, + this.$line({ title: lan.public.server_status }, this.$switch({ model: 'open' })), + this.$line({ title: lan.public.username }, this.$input({ model: 'basic_user', placeholder: lan.config.set_username, width: inputWidth })), + this.$line({ title: lan.public.pass }, this.$input({ model: 'basic_pwd', placeholder: lan.config.set_passwd, width: inputWidth })), + this.$line({ title: '' }, this.$button({ title: lan.public.save, click: this.saveBasicAuth.bind(this) })), + this.$ul([[lan.config.basic_auth_tips1, 'red'], [lan.config.basic_auth_tips2], [lan.config.basic_auth_tips3]]))); + }, + methods: { + saveBasicAuth: function () { + return __awaiter(this, void 0, void 0, function () { + var _a, basic_user, basic_pwd, open, rdata; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = this, basic_user = _a.basic_user, basic_pwd = _a.basic_pwd, open = _a.open; + return [4, that.$request('setBasicAuth', { basic_user: basic_user, basic_pwd: basic_pwd, open: open ? 'True' : 'False' })]; + case 1: + rdata = _b.sent(); + if (rdata.status) { + this.$closeLayer(); + that.$refreshBrowser(); + } + return [2]; + } + }); + }); + }, + }, + }, + success: function (layers) { + _this.setLayerVerticalCenter(layers); + }, + cancel: function () { + _this.changeReverseCheckbox(e); + }, + btn2: function () { + _this.changeReverseCheckbox(e); + }, + }).catch(function (err) { }); + return [2]; + }); + }); + }; + SafeConfig.prototype.setGoogleAuthView = function (e) { + var _this = this; + this.$open({ + title: 'Google authentication binding', + area: ['660px', '390px'], + btn: ['Submit', 'Close'], + content: { + data: { agreement: false }, + template: function () { + return ((0, snabbdom_1.jsx)("div", { class: this.$class('bt-form pd25') }, + this.$warningTitle('Warning! Do not understand this feature, do not open!'), + this.$ul({ className: 'explainDescribeList pd15' }, [ + ['You must use and understand this feature to decide if you want to open it!', 'red'], + ['If it is not possible to verify, enter "bt 24" on the command line to cancel Google authentication.', 'red'], + ['Once the service is turned on, bind it immediately to avoid the panel being inaccessible.'], + ['After opening, the panel will not be accessible. You can click the link below to find out the solution.'], + ]), + this.$learnMore({ + title: 'I already know the details and are willing to take risks', + model: 'agreement', + id: 'checkAuthenticator', + link: this.$link({ title: 'Learn more', href: 'https://forum.aapanel.com/d/357-how-to-use-google-authenticator-in-the-aapanel' }), + }))); + }, + }, + yes: function (config) { return __awaiter(_this, void 0, void 0, function () { + var close, vm, rdata, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + close = config.close, vm = config.vm; + if (!vm.agreement) + return [2, this.$tips({ el: '#checkAuthenticator', msg: 'Please read and agree to the risk' })]; + return [4, this.$request('setTwoStepAuth', { act: 1 })]; + case 1: + rdata = _b.sent(); + _a = rdata.status && close(); + if (!_a) return [3, 3]; + return [4, this.googleAuthRelationView()]; + case 2: + _a = (_b.sent()); + _b.label = 3; + case 3: + _a; + return [2]; + } + }); + }); }, + cancel: function () { + e && _this.changeReverseCheckbox(e); + }, + btn2: function () { + e && _this.changeReverseCheckbox(e); + }, + }).catch(function (err) { }); + }; + SafeConfig.prototype.googleAuthRelationView = function () { + return __awaiter(this, void 0, void 0, function () { + var that, checked; + var _this = this; + return __generator(this, function (_a) { + that = this; + checked = $('input[name="check_two_step"]').is(':checked'); + if (!checked) + return [2, this.$msg({ msg: 'Please turn on Google authentication first.', icon: 0 })]; + this.$open({ + title: 'Google authentication binding', + area: ['600px', '660px'], + content: { + data: { + username: '--', + key: '--', + type: 'Time based', + }, + template: function () { + return ((0, snabbdom_1.jsx)("div", { class: this.$class('bt-form'), style: this.$style('padding:20px 35px;') }, + (0, snabbdom_1.jsx)("div", { class: this.$class('verify_title') }, "Login authentication based on Google Authenticator"), + (0, snabbdom_1.jsx)("div", { class: this.$class('verify_item') }, + (0, snabbdom_1.jsx)("div", { class: this.$class('verify_vice_title') }, "1. Key binding"), + (0, snabbdom_1.jsx)("div", { class: this.$class('verify_conter') }, + (0, snabbdom_1.jsx)("div", { class: this.$class('verify_box') }, + (0, snabbdom_1.jsx)("div", { class: this.$class('verify_box_line') }, + "Account: ", + (0, snabbdom_1.jsx)("span", null, this.username)), + (0, snabbdom_1.jsx)("div", { class: this.$class('verify_box_line') }, + "Key: ", + (0, snabbdom_1.jsx)("span", null, this.key)), + (0, snabbdom_1.jsx)("div", { class: this.$class('verify_box_line') }, + "Type: ", + (0, snabbdom_1.jsx)("span", null, this.type))))), + (0, snabbdom_1.jsx)("div", { class: this.$class('verify_item') }, + (0, snabbdom_1.jsx)("div", { class: this.$class('verify_vice_title') }, "2. Scan code binding (Using Google Authenticator APP scan)"), + (0, snabbdom_1.jsx)("div", { class: this.$class('verify_conter'), style: this.$style('text-align:center;padding-top:10px;') }, + (0, snabbdom_1.jsx)("div", { props: { id: 'verify_qrcode' }, key: 'verifyQrcode' }))), + this.$ul({ className: 'verify_tips' }, [ + [ + (0, snabbdom_1.jsx)("span", null, + "Tips: Please use the \"Google Authenticator APP\" binding to support Android, IOS system.", + this.$link({ title: 'Use tutorial', href: 'https://forum.aapanel.com/d/357-how-to-use-google-authenticator-in-the-aapanel' })), + ], + ['Once you have turned on the service, use the Google Authenticator app binding now to avoid having to sign in.', 'red'], + ]))); + }, + mounted: function () { + return __awaiter(this, void 0, void 0, function () { + var loadT; + var _this = this; + return __generator(this, function (_a) { + loadT = that.$load(lan.public.the); + Promise.all([that.$request('getTwoStepKey', false), that.$request('getQrcodeData', { act: 1 }, false), that.$require('jquery.qrcode')]) + .then(function (resArr) { + var keyRes = resArr[0], qrcodeRes = resArr[1]; + var username = keyRes.username, key = keyRes.key; + _this.username = username; + _this.key = key; + $('#verify_qrcode').qrcode({ render: 'canvas', width: 150, height: 150, text: qrcodeRes }); + }) + .catch(function (err) { + _this.$error(err.msg || 'Server Error'); + }) + .finally(function () { + loadT.close(); + }); + return [2]; + }); + }); + }, + }, + success: function (layers) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + this.setLayerVerticalCenter(layers); + return [2]; + }); + }); }, + }).catch(function (err) { }); + return [2]; + }); + }); + }; + SafeConfig.prototype.setSafetyEntranceView = function () { + var _this = this; + this.$open({ + title: lan.config.change_safe_entry, + area: ['420px', '180px'], + btn: [lan.config.submit, lan.config.turn_off], + content: { + data: { expire: this.formColumns.admin_path.value }, + template: function () { + return (0, snabbdom_1.jsx)("div", { class: this.$class('pd20 bt-form') }, this.$line({ title: lan.config.entry_addr }, this.$input({ model: 'expire', width: '240px' }))); + }, + }, + yes: function (content) { return __awaiter(_this, void 0, void 0, function () { + var close, vm, admin_path, rdata; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + close = content.close, vm = content.vm, admin_path = vm.expire; + return [4, this.$verifySubmit(!admin_path, 'Entrance address cannot be empty')]; + case 1: + _a.sent(); + return [4, this.$request('setAdminPath', { admin_path: rsa.encrypt_public(admin_path) })]; + case 2: + rdata = _a.sent(); + if (rdata.status) { + close(); + $('input[name="admin_path"]').val(admin_path); + this.formColumns.admin_path.value = admin_path; + } + return [2]; + } + }); + }); }, + }).catch(function (err) { }); + }; + SafeConfig.prototype.setStatusCodeView = function () { + var _this = this; + this.$open({ + title: lan.config.panel_entrance_err, + area: ['420px', '250px'], + btn: ['Confirm', 'Cancel'], + content: { + data: { status_code: parseInt(sessionInfo.statusCode) }, + template: function () { + return ((0, snabbdom_1.jsx)("div", { class: this.$class('pd20 bt-form') }, + this.$line({ title: lan.config.response, width: '80px' }, this.$select({ + model: 'status_code', + width: '250px', + options: [ + { label: lan.config.response_msg1, value: 0 }, + { label: '403', value: 403 }, + { label: '404', value: 404 }, + { label: '416', value: 416 }, + { label: '408', value: 408 }, + { label: '400', value: 400 }, + { label: '401', value: 401 }, + ], + })), + this.$ul([[lan.config.response_desc, 'red']]))); + }, + }, + yes: function (config) { return __awaiter(_this, void 0, void 0, function () { + var close, vm, rdata; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + close = config.close, vm = config.vm; + return [4, this.$request('setNotAuthStatus', { status_code: vm.status_code })]; + case 1: + rdata = _a.sent(); + rdata.status && close() && this.$refreshBrowser(); + return [2]; + } + }); + }); }, + }).catch(function (err) { }); + }; + SafeConfig.prototype.setPawExpirationView = function () { + var _this = this; + var day = this.formColumns.paw_expire_time.day || 0; + this.$open({ + title: lan.config.set_password_expiration_time, + area: ['350px', '245px'], + btn: [lan.public.confirm, lan.public.cancel], + content: { + data: { expire: day }, + template: function () { + return ((0, snabbdom_1.jsx)("div", { class: this.$class('pd20 bt-form') }, + this.$line({ title: lan.config.expire_time }, this.$box(this.$input({ model: 'expire', placeholder: '', width: '120px' }), (0, snabbdom_1.jsx)("span", null, "Days"))), + this.$ul([[lan.config.expire_password_desc1, 'red'], [lan.config.expire_password_desc2]]))); + }, + }, + yes: function (config) { return __awaiter(_this, void 0, void 0, function () { + var close, vm, expire, rdata, _a, expire_time, expire_day, val, err_2; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + close = config.close, vm = config.vm, expire = vm.expire; + _b.label = 1; + case 1: + _b.trys.push([1, 4, , 5]); + return [4, this.$request('setPawExpire', { expire: expire })]; + case 2: + rdata = _b.sent(); + if (!rdata.status) + throw new Error(rdata); + return [4, this.$request('getPasswordConfig', false)]; + case 3: + _a = _b.sent(), expire_time = _a.expire_time, expire_day = _a.expire_day; + close(); + val = expire > 0 ? "".concat(this.$formatTime(expire_time), " ( Exp in ").concat(expire_day, " days )") : lan.config.not_set; + $('input[name="paw_expire_time"]').val(val); + this.formColumns.paw_expire_time.day = expire; + return [3, 5]; + case 4: + err_2 = _b.sent(); + return [3, 5]; + case 5: return [2]; + } + }); + }); }, + }).catch(function (err) { }); + }; + SafeConfig.prototype.setTempAuthView = function () { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + this.$open({ + area: ['700px', '600px'], + title: 'Temporary authorization management', + content: "
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Login IPStatusLogin timeExpiration timeOpt
No Data
\n \n
\n
", + success: function () { + _this.reanderTempAuthList(); + $('.create_temp_login').on('click', function () { + _this.$confirm({ + title: 'Risk tips', + msg: "Note 1: Abuse of temporary authorization may lead to security risks.
Note 2: Not publish temporary authorized connections in public

Temporary authorization connection is about to be created. Continue?", + }) + .then(function (res) { + return _this.$open({ + area: '570px', + title: 'Create temporary authorization', + content: "
\n
\n Temporary authorized address\n
\n \n
\n
\n
\n \n
\n
    \n
  • The temporary authorization is valid within 1 hour after it is generated. It is a one-time authorization and will be invalid immediately after use
  • \n
  • Use temporary authorization to log in to the panel within 1 hour. Do not publish temporary authorization connection in public
  • \n
  • The authorized connection information is only displayed here once. If you forget it before use, please regenerate it
  • \n
\n
", + success: function () { return __awaiter(_this, void 0, void 0, function () { + var rdata, temp_link, clipboard, clipboards; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4, this.$request('setTempAuthLink')]; + case 1: + rdata = _a.sent(); + temp_link = "".concat(location.origin, "/login?tmp_token=").concat(rdata.token); + $('#temp_link').val(temp_link); + $('.btn-copy-temp-link').attr('data-clipboard-text', temp_link); + this.reanderTempAuthList(); + return [4, this.$require('clipboard')]; + case 2: + clipboard = (_a.sent()).clipboard; + clipboards = new clipboard('.btn'); + clipboards.on('success', function (ev) { + _this.$msg({ status: true, msg: 'Copy succeeded!!' }); + ev.clearSelection(); + }); + clipboards.on('error', function (ev) { + _this.$msg({ status: false, msg: 'Copy failed, please copy address manually' }); + }); + return [2]; + } + }); + }); }, + }); + }) + .catch(function (err) { }); + }); + $('#temp_login_view_tbody').on('click', '.logs_temp_login', function (ev) { + var _a = $(ev.target).data(), id = _a.id, ip = _a.ip; + _this.$open({ + area: ['700px', '550px'], + title: "Operation logs [".concat(ip, "]"), + content: "
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n
OperationTimelogs
No Data
\n
\n
", + success: function () { + _this.reanderTempLogsList(id); + $('.refresh_login_logs').click(function () { + _this.reanderTempLogsList(id); + }); + _this.fixedTableHead('#logs_login_view_table', '420px'); + }, + }).catch(function (err) { }); + }); + $('#temp_login_view_tbody').on('click', '.remove_temp_login', function (ev) { + _this.$confirm({ + title: 'Remove unused licenses', + msg: 'Delete unused authorization record, continue?', + }) + .then(function (res) { return __awaiter(_this, void 0, void 0, function () { + var id, rdata; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + id = $(ev.target).data().id; + return [4, this.$request('removeTempAuthLink', { id: id })]; + case 1: + rdata = _a.sent(); + return [4, this.$delay()]; + case 2: + _a.sent(); + rdata.status && this.reanderTempAuthList(); + return [2]; + } + }); + }); }) + .catch(function (err) { }); + }); + $('#temp_login_view_tbody').on('click', '.clear_temp_login', function (ev) { + var _a = $(ev.target).data(), id = _a.id, ip = _a.ip; + _this.$confirm({ + title: 'Force logout [ ' + ip + ' ]', + msg: 'Confirm to force logout [ ' + ip + ' ] ?', + }) + .then(function () { return __awaiter(_this, void 0, void 0, function () { + var rdata; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4, this.$request('clearTempAuth', { id: id })]; + case 1: + rdata = _a.sent(); + return [4, this.$delay()]; + case 2: + _a.sent(); + rdata.status && this.reanderTempAuthList(); + return [2]; + } + }); + }); }) + .catch(function (err) { }); + }); + $('.temp_login_view_page').on('click', 'a', function (ev) { + ev.stopPropagation(); + ev.preventDefault(); + var href = $(ev.target).attr('href'); + var reg = /([0-9]*)$/; + var p = reg.exec(href)[0]; + _this.reanderTempAuthList(p); + }); + }, + }).catch(function (err) { }); + return [2]; + }); + }); + }; + SafeConfig.prototype.reanderTempAuthList = function (p) { + if (p === void 0) { p = 1; } + return __awaiter(this, void 0, void 0, function () { + var html, rdata, data, page, _loop_1, this_1, i, err_3; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + html = ''; + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + return [4, this.$request('getTempAuthList', { p: p, rows: 10 })]; + case 2: + rdata = _a.sent(); + data = rdata.data, page = rdata.page; + if (data.length > 0) { + _loop_1 = function (i) { + var item = data[i]; + html += "\n ".concat(item.login_addr || 'Not login', "\n ").concat((function () { + switch (item.state) { + case 0: + return 'Not login'; + case 1: + return 'Logged in'; + case -1: + return 'Expired'; + } + })(), "\n ").concat(item.login_time == 0 ? 'Not login' : this_1.$formatTime(item.login_time), "\n ").concat(this_1.$formatTime(item.expire), "\n ").concat((function () { + if (item.state != 1) + return "Del"); + if (item.online_state) + return "Force logout  |  \n Logs"); + return "Logs"); + })(), "\n "); + }; + this_1 = this; + for (i = 0; i < data.length; i++) { + _loop_1(i); + } + } + else { + html = 'No Data'; + } + $('#temp_login_view_tbody').html(html); + $('.temp_login_view_page').html(page); + return [3, 4]; + case 3: + err_3 = _a.sent(); + return [3, 4]; + case 4: return [2]; + } + }); + }); + }; + SafeConfig.prototype.reanderTempLogsList = function (id) { + return __awaiter(this, void 0, void 0, function () { + var html, rdata, i, item, err_4; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + html = ''; + return [4, this.$request('getTempOperationLogs', { id: id })]; + case 1: + rdata = _a.sent(); + if (rdata.length > 0) { + for (i = 0; i < rdata.length; i++) { + item = rdata[i]; + html += "\n ".concat(item.type, "\n ").concat(item.addtime, "\n ").concat(item.log, "\n "); + } + } + else { + html = 'No Data'; + } + $('#logs_login_view_table tbody').html(html); + return [3, 3]; + case 2: + err_4 = _a.sent(); + return [3, 3]; + case 3: return [2]; + } + }); + }); + }; + return SafeConfig; + }(configMixin_1.default)); + exports.default = SafeConfig; +}); diff --git a/BTPanel/static/amd/utils.min.js b/BTPanel/static/amd/utils.min.js new file mode 100644 index 00000000..0ef85d4e --- /dev/null +++ b/BTPanel/static/amd/utils.min.js @@ -0,0 +1,3227 @@ +var __createBinding = + (this && this.__createBinding) || + (Object.create + ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { + enumerable: true, + get: function () { + return m[k]; + }, + }); + } + : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; + }); +var __setModuleDefault = + (this && this.__setModuleDefault) || + (Object.create + ? function (o, v) { + Object.defineProperty(o, 'default', {enumerable: true, value: v}); + } + : function (o, v) { + o['default'] = v; + }); +var __importStar = + (this && this.__importStar) || + function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== 'default' && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; + }; +var __exportStar = + (this && this.__exportStar) || + function (m, exports) { + for (var p in m) if (p !== 'default' && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); + }; +var __awaiter = + (this && this.__awaiter) || + function (thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P + ? value + : new P(function (resolve) { + resolve(value); + }); + } + + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + + function rejected(value) { + try { + step(generator['throw'](value)); + } catch (e) { + reject(e); + } + } + + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; +var __generator = + (this && this.__generator) || + function (thisArg, body) { + var _ = { + label: 0, + sent: function () { + if (t[0] & 1) throw t[1]; + return t[1]; + }, + trys: [], + ops: [], + }, + f, + y, + t, + g; + return ( + (g = {next: verb(0), throw: verb(1), return: verb(2)}), + typeof Symbol === 'function' && + (g[Symbol.iterator] = function () { + return this; + }), + g + ); + + function verb(n) { + return function (v) { + return step([n, v]); + }; + } + + function step(op) { + if (f) throw new TypeError('Generator is already executing.'); + while (_) + try { + if (((f = 1), y && (t = op[0] & 2 ? y['return'] : op[0] ? y['throw'] || ((t = y['return']) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)) return t; + if (((y = 0), t)) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: + case 1: + t = op; + break; + case 4: + _.label++; + return {value: op[1], done: false}; + case 5: + _.label++; + y = op[1]; + op = [0]; + continue; + case 7: + op = _.ops.pop(); + _.trys.pop(); + continue; + default: + if (!((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && (op[0] === 6 || op[0] === 2)) { + _ = 0; + continue; + } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { + _.label = op[1]; + break; + } + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1]; + t = op; + break; + } + if (t && _.label < t[2]) { + _.label = t[2]; + _.ops.push(op); + break; + } + if (t[2]) _.ops.pop(); + _.trys.pop(); + continue; + } + op = body.call(thisArg, _); + } catch (e) { + op = [6, e]; + y = 0; + } finally { + f = t = 0; + } + if (op[0] & 5) throw op[1]; + return {value: op[0] ? op[1] : void 0, done: true}; + } + }; +var __importDefault = + (this && this.__importDefault) || + function (mod) { + return mod && mod.__esModule ? mod : {default: mod}; + }; +var __extends = + (this && this.__extends) || + (function () { + var extendStatics = function (d, b) { + extendStatics = + Object.setPrototypeOf || + ({__proto__: []} instanceof Array && + function (d, b) { + d.__proto__ = b; + }) || + function (d, b) { + for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; + }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== 'function' && b !== null) throw new TypeError('Class extends value ' + String(b) + ' is not a constructor or null'); + extendStatics(d, b); + + function __() { + this.constructor = d; + } + + d.prototype = b === null ? Object.create(b) : ((__.prototype = b.prototype), new __()); + }; + })(); +define('h', ['require', 'exports', './vnode', './is'], function (require, exports, vnode_1, is) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); + exports.h = void 0; + is = __importStar(is); + + function addNS(data, children, sel) { + data.ns = 'http://www.w3.org/2000/svg'; + if (sel !== 'foreignObject' && children !== undefined) { + for (var i = 0; i < children.length; ++i) { + var childData = children[i].data; + if (childData !== undefined) { + addNS(childData, children[i].children, children[i].sel); + } + } + } + } + + function h(sel, b, c) { + var data = {}; + var children; + var text; + var i; + if (c !== undefined) { + if (b !== null) { + data = b; + } + if (is.array(c)) { + children = c; + } else if (is.primitive(c)) { + text = c.toString(); + } else if (c && c.sel) { + children = [c]; + } + } else if (b !== undefined && b !== null) { + if (is.array(b)) { + children = b; + } else if (is.primitive(b)) { + text = b.toString(); + } else if (b && b.sel) { + children = [b]; + } else { + data = b; + } + } + if (children !== undefined) { + for (i = 0; i < children.length; ++i) { + if (is.primitive(children[i])) children[i] = (0, vnode_1.vnode)(undefined, undefined, undefined, children[i], undefined); + } + } + if (sel[0] === 's' && sel[1] === 'v' && sel[2] === 'g' && (sel.length === 3 || sel[3] === '.' || sel[3] === '#')) { + addNS(data, children, sel); + } + return (0, vnode_1.vnode)(sel, data, children, text, undefined); + } + + exports.h = h; +}); +define('hooks', ['require', 'exports'], function (require, exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); +}); +define('htmldomapi', ['require', 'exports'], function (require, exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); + exports.htmlDomApi = void 0; + + function createElement(tagName, options) { + return document.createElement(tagName, options); + } + + function createElementNS(namespaceURI, qualifiedName, options) { + return document.createElementNS(namespaceURI, qualifiedName, options); + } + + function createTextNode(text) { + return document.createTextNode(text); + } + + function createComment(text) { + return document.createComment(text); + } + + function insertBefore(parentNode, newNode, referenceNode) { + parentNode.insertBefore(newNode, referenceNode); + } + + function removeChild(node, child) { + node.removeChild(child); + } + + function appendChild(node, child) { + node.appendChild(child); + } + + function parentNode(node) { + return node.parentNode; + } + + function nextSibling(node) { + return node.nextSibling; + } + + function tagName(elm) { + return elm.tagName; + } + + function setTextContent(node, text) { + node.textContent = text; + } + + function getTextContent(node) { + return node.textContent; + } + + function isElement(node) { + return node.nodeType === 1; + } + + function isText(node) { + return node.nodeType === 3; + } + + function isComment(node) { + return node.nodeType === 8; + } + + exports.htmlDomApi = { + createElement: createElement, + createElementNS: createElementNS, + createTextNode: createTextNode, + createComment: createComment, + insertBefore: insertBefore, + removeChild: removeChild, + appendChild: appendChild, + parentNode: parentNode, + nextSibling: nextSibling, + tagName: tagName, + setTextContent: setTextContent, + getTextContent: getTextContent, + isElement: isElement, + isText: isText, + isComment: isComment, + }; +}); +define('init', ['require', 'exports', './vnode', './is', './htmldomapi'], function (require, exports, vnode_2, is, htmldomapi_1) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); + exports.init = void 0; + is = __importStar(is); + + function isUndef(s) { + return s === undefined; + } + + function isDef(s) { + return s !== undefined; + } + + var emptyNode = (0, vnode_2.vnode)('', {}, [], undefined, undefined); + + function sameVnode(vnode1, vnode2) { + var _a, _b; + var isSameKey = vnode1.key === vnode2.key; + var isSameIs = ((_a = vnode1.data) === null || _a === void 0 ? void 0 : _a.is) === ((_b = vnode2.data) === null || _b === void 0 ? void 0 : _b.is); + var isSameSel = vnode1.sel === vnode2.sel; + return isSameSel && isSameKey && isSameIs; + } + + function isVnode(vnode) { + return vnode.sel !== undefined; + } + + function createKeyToOldIdx(children, beginIdx, endIdx) { + var _a; + var map = {}; + for (var i = beginIdx; i <= endIdx; ++i) { + var key = (_a = children[i]) === null || _a === void 0 ? void 0 : _a.key; + if (key !== undefined) { + map[key] = i; + } + } + return map; + } + + var hooks = ['create', 'update', 'remove', 'destroy', 'pre', 'post']; + + function init(modules, domApi) { + var cbs = { + create: [], + update: [], + remove: [], + destroy: [], + pre: [], + post: [], + }; + var api = domApi !== undefined ? domApi : htmldomapi_1.htmlDomApi; + for (var _i = 0, hooks_1 = hooks; _i < hooks_1.length; _i++) { + var hook = hooks_1[_i]; + for (var _f = 0, modules_1 = modules; _f < modules_1.length; _f++) { + var module_1 = modules_1[_f]; + var currentHook = module_1[hook]; + if (currentHook !== undefined) { + cbs[hook].push(currentHook); + } + } + } + + function emptyNodeAt(elm) { + var id = elm.id ? '#' + elm.id : ''; + var classes = elm.getAttribute('class'); + var c = classes ? '.' + classes.split(' ').join('.') : ''; + return (0, vnode_2.vnode)(api.tagName(elm).toLowerCase() + id + c, {}, [], undefined, elm); + } + + function createRmCb(childElm, listeners) { + return function rmCb() { + if (--listeners === 0) { + var parent_1 = api.parentNode(childElm); + api.removeChild(parent_1, childElm); + } + }; + } + + function createElm(vnode, insertedVnodeQueue) { + var _a, _b; + var i; + var data = vnode.data; + if (data !== undefined) { + var init_1 = (_a = data.hook) === null || _a === void 0 ? void 0 : _a.init; + if (isDef(init_1)) { + init_1(vnode); + data = vnode.data; + } + } + var children = vnode.children; + var sel = vnode.sel; + if (sel === '!') { + if (isUndef(vnode.text)) { + vnode.text = ''; + } + vnode.elm = api.createComment(vnode.text); + } else if (sel !== undefined) { + var hashIdx = sel.indexOf('#'); + var dotIdx = sel.indexOf('.', hashIdx); + var hash = hashIdx > 0 ? hashIdx : sel.length; + var dot = dotIdx > 0 ? dotIdx : sel.length; + var tag = hashIdx !== -1 || dotIdx !== -1 ? sel.slice(0, Math.min(hash, dot)) : sel; + var elm = (vnode.elm = isDef(data) && isDef((i = data.ns)) ? api.createElementNS(i, tag, data) : api.createElement(tag, data)); + if (hash < dot) elm.setAttribute('id', sel.slice(hash + 1, dot)); + if (dotIdx > 0) elm.setAttribute('class', sel.slice(dot + 1).replace(/\./g, ' ')); + for (i = 0; i < cbs.create.length; ++i) cbs.create[i](emptyNode, vnode); + if (is.array(children)) { + for (i = 0; i < children.length; ++i) { + var ch = children[i]; + if (ch != null) { + api.appendChild(elm, createElm(ch, insertedVnodeQueue)); + } + } + } else if (is.primitive(vnode.text)) { + api.appendChild(elm, api.createTextNode(vnode.text)); + } + var hook = vnode.data.hook; + if (isDef(hook)) { + (_b = hook.create) === null || _b === void 0 ? void 0 : _b.call(hook, emptyNode, vnode); + if (hook.insert) { + insertedVnodeQueue.push(vnode); + } + } + } else { + vnode.elm = api.createTextNode(vnode.text); + } + return vnode.elm; + } + + function addVnodes(parentElm, before, vnodes, startIdx, endIdx, insertedVnodeQueue) { + for (; startIdx <= endIdx; ++startIdx) { + var ch = vnodes[startIdx]; + if (ch != null) { + api.insertBefore(parentElm, createElm(ch, insertedVnodeQueue), before); + } + } + } + + function invokeDestroyHook(vnode) { + var _a, _b; + var data = vnode.data; + if (data !== undefined) { + (_b = (_a = data === null || data === void 0 ? void 0 : data.hook) === null || _a === void 0 ? void 0 : _a.destroy) === null || _b === void 0 ? void 0 : _b.call(_a, vnode); + for (var i = 0; i < cbs.destroy.length; ++i) cbs.destroy[i](vnode); + if (vnode.children !== undefined) { + for (var j = 0; j < vnode.children.length; ++j) { + var child = vnode.children[j]; + if (child != null && typeof child !== 'string') { + invokeDestroyHook(child); + } + } + } + } + } + + function removeVnodes(parentElm, vnodes, startIdx, endIdx) { + var _a, _b; + for (; startIdx <= endIdx; ++startIdx) { + var listeners = void 0; + var rm = void 0; + var ch = vnodes[startIdx]; + if (ch != null) { + if (isDef(ch.sel)) { + invokeDestroyHook(ch); + listeners = cbs.remove.length + 1; + rm = createRmCb(ch.elm, listeners); + for (var i = 0; i < cbs.remove.length; ++i) cbs.remove[i](ch, rm); + var removeHook = (_b = (_a = ch === null || ch === void 0 ? void 0 : ch.data) === null || _a === void 0 ? void 0 : _a.hook) === null || _b === void 0 ? void 0 : _b.remove; + if (isDef(removeHook)) { + removeHook(ch, rm); + } else { + rm(); + } + } else { + api.removeChild(parentElm, ch.elm); + } + } + } + } + + function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue) { + var oldStartIdx = 0; + var newStartIdx = 0; + var oldEndIdx = oldCh.length - 1; + var oldStartVnode = oldCh[0]; + var oldEndVnode = oldCh[oldEndIdx]; + var newEndIdx = newCh.length - 1; + var newStartVnode = newCh[0]; + var newEndVnode = newCh[newEndIdx]; + var oldKeyToIdx; + var idxInOld; + var elmToMove; + var before; + while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) { + if (oldStartVnode == null) { + oldStartVnode = oldCh[++oldStartIdx]; + } else if (oldEndVnode == null) { + oldEndVnode = oldCh[--oldEndIdx]; + } else if (newStartVnode == null) { + newStartVnode = newCh[++newStartIdx]; + } else if (newEndVnode == null) { + newEndVnode = newCh[--newEndIdx]; + } else if (sameVnode(oldStartVnode, newStartVnode)) { + patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue); + oldStartVnode = oldCh[++oldStartIdx]; + newStartVnode = newCh[++newStartIdx]; + } else if (sameVnode(oldEndVnode, newEndVnode)) { + patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue); + oldEndVnode = oldCh[--oldEndIdx]; + newEndVnode = newCh[--newEndIdx]; + } else if (sameVnode(oldStartVnode, newEndVnode)) { + patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue); + api.insertBefore(parentElm, oldStartVnode.elm, api.nextSibling(oldEndVnode.elm)); + oldStartVnode = oldCh[++oldStartIdx]; + newEndVnode = newCh[--newEndIdx]; + } else if (sameVnode(oldEndVnode, newStartVnode)) { + patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue); + api.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm); + oldEndVnode = oldCh[--oldEndIdx]; + newStartVnode = newCh[++newStartIdx]; + } else { + if (oldKeyToIdx === undefined) { + oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); + } + idxInOld = oldKeyToIdx[newStartVnode.key]; + if (isUndef(idxInOld)) { + api.insertBefore(parentElm, createElm(newStartVnode, insertedVnodeQueue), oldStartVnode.elm); + } else { + elmToMove = oldCh[idxInOld]; + if (elmToMove.sel !== newStartVnode.sel) { + api.insertBefore(parentElm, createElm(newStartVnode, insertedVnodeQueue), oldStartVnode.elm); + } else { + patchVnode(elmToMove, newStartVnode, insertedVnodeQueue); + oldCh[idxInOld] = undefined; + api.insertBefore(parentElm, elmToMove.elm, oldStartVnode.elm); + } + } + newStartVnode = newCh[++newStartIdx]; + } + } + if (oldStartIdx <= oldEndIdx || newStartIdx <= newEndIdx) { + if (oldStartIdx > oldEndIdx) { + before = newCh[newEndIdx + 1] == null ? null : newCh[newEndIdx + 1].elm; + addVnodes(parentElm, before, newCh, newStartIdx, newEndIdx, insertedVnodeQueue); + } else { + removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx); + } + } + } + + function patchVnode(oldVnode, vnode, insertedVnodeQueue) { + var _a, _b, _c, _d, _e; + var hook = (_a = vnode.data) === null || _a === void 0 ? void 0 : _a.hook; + (_b = hook === null || hook === void 0 ? void 0 : hook.prepatch) === null || _b === void 0 ? void 0 : _b.call(hook, oldVnode, vnode); + var elm = (vnode.elm = oldVnode.elm); + var oldCh = oldVnode.children; + var ch = vnode.children; + if (oldVnode === vnode) return; + if (vnode.data !== undefined) { + for (var i = 0; i < cbs.update.length; ++i) cbs.update[i](oldVnode, vnode); + (_d = (_c = vnode.data.hook) === null || _c === void 0 ? void 0 : _c.update) === null || _d === void 0 ? void 0 : _d.call(_c, oldVnode, vnode); + } + if (isUndef(vnode.text)) { + if (isDef(oldCh) && isDef(ch)) { + if (oldCh !== ch) updateChildren(elm, oldCh, ch, insertedVnodeQueue); + } else if (isDef(ch)) { + if (isDef(oldVnode.text)) api.setTextContent(elm, ''); + addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue); + } else if (isDef(oldCh)) { + removeVnodes(elm, oldCh, 0, oldCh.length - 1); + } else if (isDef(oldVnode.text)) { + api.setTextContent(elm, ''); + } + } else if (oldVnode.text !== vnode.text) { + if (isDef(oldCh)) { + removeVnodes(elm, oldCh, 0, oldCh.length - 1); + } + api.setTextContent(elm, vnode.text); + } + (_e = hook === null || hook === void 0 ? void 0 : hook.postpatch) === null || _e === void 0 ? void 0 : _e.call(hook, oldVnode, vnode); + } + + return function patch(oldVnode, vnode) { + var i, elm, parent; + var insertedVnodeQueue = []; + for (i = 0; i < cbs.pre.length; ++i) cbs.pre[i](); + if (!isVnode(oldVnode)) { + oldVnode = emptyNodeAt(oldVnode); + } + if (sameVnode(oldVnode, vnode)) { + patchVnode(oldVnode, vnode, insertedVnodeQueue); + } else { + elm = oldVnode.elm; + parent = api.parentNode(elm); + createElm(vnode, insertedVnodeQueue); + if (parent !== null) { + api.insertBefore(parent, vnode.elm, api.nextSibling(elm)); + removeVnodes(parent, [oldVnode], 0, 0); + } + } + for (i = 0; i < insertedVnodeQueue.length; ++i) { + insertedVnodeQueue[i].data.hook.insert(insertedVnodeQueue[i]); + } + for (i = 0; i < cbs.post.length; ++i) cbs.post[i](); + return vnode; + }; + } + + exports.init = init; +}); +define('is', ['require', 'exports'], function (require, exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); + exports.primitive = exports.array = void 0; + exports.array = Array.isArray; + + function primitive(s) { + return typeof s === 'string' || typeof s === 'number' || s instanceof String || s instanceof Number; + } + + exports.primitive = primitive; +}); +define('jsx', ['require', 'exports', './vnode', './h'], function (require, exports, vnode_3, h_1) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); + exports.jsx = void 0; + + function flattenAndFilter(children, flattened) { + for (var _i = 0, children_1 = children; _i < children_1.length; _i++) { + var child = children_1[_i]; + if (child !== undefined && child !== null && child !== false && child !== '') { + if (Array.isArray(child)) { + flattenAndFilter(child, flattened); + } else if (typeof child === 'string' || typeof child === 'number' || typeof child === 'boolean') { + flattened.push((0, vnode_3.vnode)(undefined, undefined, undefined, String(child), undefined)); + } else { + flattened.push(child); + } + } + } + return flattened; + } + + function jsx(tag, data) { + var children = []; + for (var _i = 2; _i < arguments.length; _i++) { + children[_i - 2] = arguments[_i]; + } + var flatChildren = flattenAndFilter(children, []); + if (typeof tag === 'function') { + return tag(data, flatChildren); + } else { + if (flatChildren.length === 1 && !flatChildren[0].sel && flatChildren[0].text) { + return (0, h_1.h)(tag, data, flatChildren[0].text); + } else { + return (0, h_1.h)(tag, data, flatChildren); + } + } + } + + exports.jsx = jsx; + (function (jsx) { + })(jsx || (exports.jsx = jsx = {})); +}); +define('snabbdom', [ + 'require', + 'exports', + './htmldomapi', + './init', + './thunk', + './vnode', + './helpers/attachto', + './is', + './tovnode', + './h', + './hooks', + './modules/attributes', + './modules/class', + './modules/dataset', + './modules/eventlisteners', + './modules/props', + './modules/style', + './jsx', +], function (require, exports, htmldomapi_2, init_2, thunk_1, vnode_4, attachto_1, is_1, tovnode_1, h_2, hooks_2, attributes_1, class_1, dataset_1, eventlisteners_1, props_1, style_1, jsx_1) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); + exports.jsx = + exports.styleModule = + exports.propsModule = + exports.eventListenersModule = + exports.datasetModule = + exports.classModule = + exports.attributesModule = + exports.h = + exports.toVNode = + exports.primitive = + exports.array = + exports.attachTo = + exports.vnode = + exports.thunk = + exports.init = + exports.htmlDomApi = + void 0; + Object.defineProperty(exports, 'htmlDomApi', { + enumerable: true, + get: function () { + return htmldomapi_2.htmlDomApi; + }, + }); + Object.defineProperty(exports, 'init', { + enumerable: true, + get: function () { + return init_2.init; + }, + }); + Object.defineProperty(exports, 'thunk', { + enumerable: true, + get: function () { + return thunk_1.thunk; + }, + }); + Object.defineProperty(exports, 'vnode', { + enumerable: true, + get: function () { + return vnode_4.vnode; + }, + }); + Object.defineProperty(exports, 'attachTo', { + enumerable: true, + get: function () { + return attachto_1.attachTo; + }, + }); + Object.defineProperty(exports, 'array', { + enumerable: true, + get: function () { + return is_1.array; + }, + }); + Object.defineProperty(exports, 'primitive', { + enumerable: true, + get: function () { + return is_1.primitive; + }, + }); + Object.defineProperty(exports, 'toVNode', { + enumerable: true, + get: function () { + return tovnode_1.toVNode; + }, + }); + Object.defineProperty(exports, 'h', { + enumerable: true, + get: function () { + return h_2.h; + }, + }); + __exportStar(hooks_2, exports); + Object.defineProperty(exports, 'attributesModule', { + enumerable: true, + get: function () { + return attributes_1.attributesModule; + }, + }); + Object.defineProperty(exports, 'classModule', { + enumerable: true, + get: function () { + return class_1.classModule; + }, + }); + Object.defineProperty(exports, 'datasetModule', { + enumerable: true, + get: function () { + return dataset_1.datasetModule; + }, + }); + Object.defineProperty(exports, 'eventListenersModule', { + enumerable: true, + get: function () { + return eventlisteners_1.eventListenersModule; + }, + }); + Object.defineProperty(exports, 'propsModule', { + enumerable: true, + get: function () { + return props_1.propsModule; + }, + }); + Object.defineProperty(exports, 'styleModule', { + enumerable: true, + get: function () { + return style_1.styleModule; + }, + }); + Object.defineProperty(exports, 'jsx', { + enumerable: true, + get: function () { + return jsx_1.jsx; + }, + }); +}); +define('thunk', ['require', 'exports', './h'], function (require, exports, h_3) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); + exports.thunk = void 0; + + function copyToThunk(vnode, thunk) { + vnode.data.fn = thunk.data.fn; + vnode.data.args = thunk.data.args; + thunk.data = vnode.data; + thunk.children = vnode.children; + thunk.text = vnode.text; + thunk.elm = vnode.elm; + } + + function init(thunk) { + var cur = thunk.data; + var vnode = cur.fn.apply(cur, cur.args); + copyToThunk(vnode, thunk); + } + + function prepatch(oldVnode, thunk) { + var i; + var old = oldVnode.data; + var cur = thunk.data; + var oldArgs = old.args; + var args = cur.args; + if (old.fn !== cur.fn || oldArgs.length !== args.length) { + copyToThunk(cur.fn.apply(cur, args), thunk); + return; + } + for (i = 0; i < args.length; ++i) { + if (oldArgs[i] !== args[i]) { + copyToThunk(cur.fn.apply(cur, args), thunk); + return; + } + } + copyToThunk(oldVnode, thunk); + } + + var thunk = function thunk(sel, key, fn, args) { + if (args === undefined) { + args = fn; + fn = key; + key = undefined; + } + return (0, h_3.h)(sel, { + key: key, + hook: {init: init, prepatch: prepatch}, + fn: fn, + args: args, + }); + }; + exports.thunk = thunk; +}); +define('tovnode', ['require', 'exports', './vnode', './htmldomapi'], function (require, exports, vnode_5, htmldomapi_3) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); + exports.toVNode = void 0; + + function toVNode(node, domApi) { + var api = domApi !== undefined ? domApi : htmldomapi_3.htmlDomApi; + var text; + if (api.isElement(node)) { + var id = node.id ? '#' + node.id : ''; + var cn = node.getAttribute('class'); + var c = cn ? '.' + cn.split(' ').join('.') : ''; + var sel = api.tagName(node).toLowerCase() + id + c; + var attrs = {}; + var children = []; + var name_1; + var i = void 0, + n = void 0; + var elmAttrs = node.attributes; + var elmChildren = node.childNodes; + for (i = 0, n = elmAttrs.length; i < n; i++) { + name_1 = elmAttrs[i].nodeName; + if (name_1 !== 'id' && name_1 !== 'class') { + attrs[name_1] = elmAttrs[i].nodeValue; + } + } + for (i = 0, n = elmChildren.length; i < n; i++) { + children.push(toVNode(elmChildren[i], domApi)); + } + return (0, vnode_5.vnode)(sel, {attrs: attrs}, children, undefined, node); + } else if (api.isText(node)) { + text = api.getTextContent(node); + return (0, vnode_5.vnode)(undefined, undefined, undefined, text, node); + } else if (api.isComment(node)) { + text = api.getTextContent(node); + return (0, vnode_5.vnode)('!', {}, [], text, node); + } else { + return (0, vnode_5.vnode)('', {}, [], undefined, node); + } + } + + exports.toVNode = toVNode; +}); +define('vnode', ['require', 'exports'], function (require, exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); + exports.vnode = void 0; + + function vnode(sel, data, children, text, elm) { + var key = data === undefined ? undefined : data.key; + return {sel: sel, data: data, children: children, text: text, elm: elm, key: key}; + } + + exports.vnode = vnode; +}); +define('helpers/attachto', ['require', 'exports'], function (require, exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); + exports.attachTo = void 0; + + function pre(vnode, newVnode) { + var attachData = vnode.data.attachData; + newVnode.data.attachData.placeholder = attachData.placeholder; + newVnode.data.attachData.real = attachData.real; + vnode.elm = vnode.data.attachData.real; + } + + function post(_, vnode) { + vnode.elm = vnode.data.attachData.placeholder; + } + + function destroy(vnode) { + if (vnode.elm !== undefined) { + vnode.elm.parentNode.removeChild(vnode.elm); + } + vnode.elm = vnode.data.attachData.real; + } + + function create(_, vnode) { + var real = vnode.elm; + var attachData = vnode.data.attachData; + var placeholder = document.createElement('span'); + vnode.elm = placeholder; + attachData.target.appendChild(real); + attachData.real = real; + attachData.placeholder = placeholder; + } + + function attachTo(target, vnode) { + if (vnode.data === undefined) vnode.data = {}; + if (vnode.data.hook === undefined) vnode.data.hook = {}; + var data = vnode.data; + var hook = vnode.data.hook; + data.attachData = {target: target, placeholder: undefined, real: undefined}; + hook.create = create; + hook.prepatch = pre; + hook.postpatch = post; + hook.destroy = destroy; + return vnode; + } + + exports.attachTo = attachTo; +}); +define('modules/attributes', ['require', 'exports'], function (require, exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); + exports.attributesModule = void 0; + var xlinkNS = 'http://www.w3.org/1999/xlink'; + var xmlNS = 'http://www.w3.org/XML/1998/namespace'; + var colonChar = 58; + var xChar = 120; + + function updateAttrs(oldVnode, vnode) { + var key; + var elm = vnode.elm; + var oldAttrs = oldVnode.data.attrs; + var attrs = vnode.data.attrs; + if (!oldAttrs && !attrs) return; + if (oldAttrs === attrs) return; + oldAttrs = oldAttrs || {}; + attrs = attrs || {}; + for (key in attrs) { + var cur = attrs[key]; + var old = oldAttrs[key]; + if (old !== cur) { + if (cur === true) { + elm.setAttribute(key, ''); + } else if (cur === false) { + elm.removeAttribute(key); + } else { + if (key.charCodeAt(0) !== xChar) { + elm.setAttribute(key, cur); + } else if (key.charCodeAt(3) === colonChar) { + elm.setAttributeNS(xmlNS, key, cur); + } else if (key.charCodeAt(5) === colonChar) { + elm.setAttributeNS(xlinkNS, key, cur); + } else { + elm.setAttribute(key, cur); + } + } + } + } + for (key in oldAttrs) { + if (!(key in attrs)) { + elm.removeAttribute(key); + } + } + } + + exports.attributesModule = { + create: updateAttrs, + update: updateAttrs, + }; +}); +define('modules/class', ['require', 'exports'], function (require, exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); + exports.classModule = void 0; + + function updateClass(oldVnode, vnode) { + var cur; + var name; + var elm = vnode.elm; + var oldClass = oldVnode.data.class; + var klass = vnode.data.class; + if (!oldClass && !klass) return; + if (oldClass === klass) return; + oldClass = oldClass || {}; + klass = klass || {}; + for (name in oldClass) { + if (oldClass[name] && !Object.prototype.hasOwnProperty.call(klass, name)) { + elm.classList.remove(name); + } + } + for (name in klass) { + cur = klass[name]; + if (cur !== oldClass[name]) { + elm.classList[cur ? 'add' : 'remove'](name); + } + } + } + + exports.classModule = {create: updateClass, update: updateClass}; +}); +define('modules/dataset', ['require', 'exports'], function (require, exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); + exports.datasetModule = void 0; + var CAPS_REGEX = /[A-Z]/g; + + function updateDataset(oldVnode, vnode) { + var elm = vnode.elm; + var oldDataset = oldVnode.data.dataset; + var dataset = vnode.data.dataset; + var key; + if (!oldDataset && !dataset) return; + if (oldDataset === dataset) return; + oldDataset = oldDataset || {}; + dataset = dataset || {}; + var d = elm.dataset; + for (key in oldDataset) { + if (!dataset[key]) { + if (d) { + if (key in d) { + delete d[key]; + } + } else { + elm.removeAttribute('data-' + key.replace(CAPS_REGEX, '-$&').toLowerCase()); + } + } + } + for (key in dataset) { + if (oldDataset[key] !== dataset[key]) { + if (d) { + d[key] = dataset[key]; + } else { + elm.setAttribute('data-' + key.replace(CAPS_REGEX, '-$&').toLowerCase(), dataset[key]); + } + } + } + } + + exports.datasetModule = { + create: updateDataset, + update: updateDataset, + }; +}); +define('modules/eventlisteners', ['require', 'exports'], function (require, exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); + exports.eventListenersModule = void 0; + + function invokeHandler(handler, vnode, event) { + if (typeof handler === 'function') { + handler.call(vnode, event, vnode); + } else if (typeof handler === 'object') { + for (var i = 0; i < handler.length; i++) { + invokeHandler(handler[i], vnode, event); + } + } + } + + function handleEvent(event, vnode) { + var name = event.type; + var on = vnode.data.on; + if (on && on[name]) { + invokeHandler(on[name], vnode, event); + } + } + + function createListener() { + return function handler(event) { + handleEvent(event, handler.vnode); + }; + } + + function updateEventListeners(oldVnode, vnode) { + var oldOn = oldVnode.data.on; + var oldListener = oldVnode.listener; + var oldElm = oldVnode.elm; + var on = vnode && vnode.data.on; + var elm = vnode && vnode.elm; + var name; + if (oldOn === on) { + return; + } + if (oldOn && oldListener) { + if (!on) { + for (name in oldOn) { + oldElm.removeEventListener(name, oldListener, false); + } + } else { + for (name in oldOn) { + if (!on[name]) { + oldElm.removeEventListener(name, oldListener, false); + } + } + } + } + if (on) { + var listener = (vnode.listener = oldVnode.listener || createListener()); + listener.vnode = vnode; + if (!oldOn) { + for (name in on) { + elm.addEventListener(name, listener, false); + } + } else { + for (name in on) { + if (!oldOn[name]) { + elm.addEventListener(name, listener, false); + } + } + } + } + } + + exports.eventListenersModule = { + create: updateEventListeners, + update: updateEventListeners, + destroy: updateEventListeners, + }; +}); +define('modules/module', ['require', 'exports'], function (require, exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); +}); +define('modules/props', ['require', 'exports'], function (require, exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); + exports.propsModule = void 0; + + function updateProps(oldVnode, vnode) { + var key; + var cur; + var old; + var elm = vnode.elm; + var oldProps = oldVnode.data.props; + var props = vnode.data.props; + if (!oldProps && !props) return; + if (oldProps === props) return; + oldProps = oldProps || {}; + props = props || {}; + for (key in props) { + cur = props[key]; + old = oldProps[key]; + if (old !== cur && (key !== 'value' || elm[key] !== cur)) { + elm[key] = cur; + } + } + } + + exports.propsModule = {create: updateProps, update: updateProps}; +}); +define('modules/style', ['require', 'exports'], function (require, exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); + exports.styleModule = void 0; + var raf = (typeof window !== 'undefined' && window.requestAnimationFrame.bind(window)) || setTimeout; + var nextFrame = function (fn) { + raf(function () { + raf(fn); + }); + }; + var reflowForced = false; + + function setNextFrame(obj, prop, val) { + nextFrame(function () { + obj[prop] = val; + }); + } + + function updateStyle(oldVnode, vnode) { + var cur; + var name; + var elm = vnode.elm; + var oldStyle = oldVnode.data.style; + var style = vnode.data.style; + if (!oldStyle && !style) return; + if (oldStyle === style) return; + oldStyle = oldStyle || {}; + style = style || {}; + var oldHasDel = 'delayed' in oldStyle; + for (name in oldStyle) { + if (!style[name]) { + if (name[0] === '-' && name[1] === '-') { + elm.style.removeProperty(name); + } else { + elm.style[name] = ''; + } + } + } + for (name in style) { + cur = style[name]; + if (name === 'delayed' && style.delayed) { + for (var name2 in style.delayed) { + cur = style.delayed[name2]; + if (!oldHasDel || cur !== oldStyle.delayed[name2]) { + setNextFrame(elm.style, name2, cur); + } + } + } else if (name !== 'remove' && cur !== oldStyle[name]) { + if (name[0] === '-' && name[1] === '-') { + elm.style.setProperty(name, cur); + } else { + elm.style[name] = cur; + } + } + } + } + + function applyDestroyStyle(vnode) { + var style; + var name; + var elm = vnode.elm; + var s = vnode.data.style; + if (!s || !(style = s.destroy)) return; + for (name in style) { + elm.style[name] = style[name]; + } + } + + function applyRemoveStyle(vnode, rm) { + var s = vnode.data.style; + if (!s || !s.remove) { + rm(); + return; + } + if (!reflowForced) { + vnode.elm.offsetLeft; + reflowForced = true; + } + var name; + var elm = vnode.elm; + var i = 0; + var style = s.remove; + var amount = 0; + var applied = []; + for (name in style) { + applied.push(name); + elm.style[name] = style[name]; + } + var compStyle = getComputedStyle(elm); + var props = compStyle['transition-property'].split(', '); + for (; i < props.length; ++i) { + if (applied.indexOf(props[i]) !== -1) amount++; + } + elm.addEventListener('transitionend', function (ev) { + if (ev.target === elm) --amount; + if (amount === 0) rm(); + }); + } + + function forceReflow() { + reflowForced = false; + } + + exports.styleModule = { + pre: forceReflow, + create: updateStyle, + update: updateStyle, + destroy: applyDestroyStyle, + remove: applyRemoveStyle, + }; +}); +define('public/describe', ['require', 'exports'], function (require, exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); +}); +define('public/vdom', ['require', 'exports', 'snabbdom'], function (require, exports, snabbdom_1) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); + var patch = (0, snabbdom_1.init)([snabbdom_1.classModule, snabbdom_1.propsModule, snabbdom_1.styleModule, snabbdom_1.eventListenersModule]); + var Vm = (function () { + function Vm(config) { + var _this = this; + var el = config.el, + template = config.template, + methods = config.methods, + mounted = config.mounted; + this.$element = document.querySelector(''.concat(el)); + this.$el = el; + this.$methods = methods; + this.$template = template; + this.$mounted = mounted; + this.$keys = {}; + this.$watcher({ + data: config.data, + watch: function (key, oldVal, newVal) { + _this.$reanderElement(_this.$el); + }, + }); + this.$eventHandle(); + this.$reanderElement(el); + } + + Vm.prototype.$watcher = function (opts) { + this._data = this.$getBaseType(opts.data) === 'Object' ? opts.data : {}; + this.$watch = opts.watch; + for (var key in opts.data) { + this.$setData(key); + } + }; + Vm.prototype.$getBaseType = function (target) { + var typeStr = Object.prototype.toString.apply(target); + return typeStr.slice(8, -1); + }; + Vm.prototype.$reanderElement = function (el) { + var _this = this; + var jsxTemplate = (0, snabbdom_1.jsx)( + 'div', + { + props: {id: el.replace('#', '')}, + hook: { + insert: function (vnode) { + if (typeof _this.$VirtualDOM === 'undefined') _this.$mounted && _this.$mounted(); + }, + }, + }, + ' ', + this.$template(this) + ); + this.$VirtualDOM = patch(typeof this.$VirtualDOM !== 'undefined' ? this.$VirtualDOM : this.$element, jsxTemplate); + }; + Vm.prototype.$setData = function (_key) { + Object.defineProperty(this, _key, { + get: function () { + return this._data[_key]; + }, + set: function (val) { + var oldVal = this._data[_key]; + if (oldVal === val) return val; + this._data[_key] = val; + this.$watch.call(this, _key, oldVal, val); + return val; + }, + }); + }; + Vm.prototype.$eventHandle = function () { + Object.assign(this, this.$methods); + for (var key in this.$methods) { + if (Object.prototype.hasOwnProperty.call(this.$methods, key)) { + this.$methods[key].bind(this); + } + } + }; + Vm.prototype.$class = function (array) { + if (typeof array === 'string') array = array.trim().split(' '); + var classList = {}; + for (var i = 0; i < array.length; i++) classList[array[i]] = true; + return classList; + }; + Vm.prototype.$style = function (str) { + if (!str) return {}; + if (typeof str === 'object') return str; + var style = {}, + styleList = str.split(';'); + for (var i = 0; i < styleList.length; i++) { + if (styleList[i] === '') continue; + var styleItem = styleList[i].split(':'); + style[styleItem[0].trim()] = styleItem[1]; + } + return style; + }; + Vm.prototype.$ul = function (config, arry) { + if (Array.isArray(config)) { + arry = config; + config = {style: {}, className: ''}; + } + var style = config.style, + className = config.className; + var liList = arry.map(function (item, index) { + if (typeof item === 'string') item = [item]; + return (0, snabbdom_1.jsx)('li', {key: index, style: {color: item[1] || ''}}, item[0] || item); + }); + return (0, snabbdom_1.jsx)('ul', { + class: this.$class('help-info-text c7 '.concat(className || '')), + style: this.$style(style) + }, liList); + }; + Vm.prototype.$line = function (config, content) { + if (typeof config != 'object') config = {title: config}; + var title = config.title, + width = config.width, + style = config.style, + hide = config.hide; + return (0, snabbdom_1.jsx)( + 'div', + {class: {line: true, hide: hide}}, + (0, snabbdom_1.jsx)('span', { + class: {tname: true}, + style: this.$style(''.concat(width ? 'width:' + width + ';' : '').concat(style)) + }, title), + (0, snabbdom_1.jsx)('div', {class: {'info-r': true}, style: {marginLeft: width}}, content) + ); + }; + Vm.prototype.$box = function (element1, element2) { + return (0, snabbdom_1.jsx)('div', {class: this.$class('group-box')}, ' ', element1, ' ', element2); + }; + Vm.prototype.$switch = function (config) { + var checked = config.checked, + change = config.change, + model = config.model, + name = config.name; + if (model) (checked = this[model]), (name = model); + return (0, snabbdom_1.jsx)( + 'div', + {class: {'info-block': true}}, + (0, snabbdom_1.jsx)('input', { + class: this.$class('btswitch btswitch-ios'), + props: {id: model + '_vm', type: 'checkbox', name: name, checked: checked}, + on: {input: this.$inputEvent.bind(this), change: change}, + }), + (0, snabbdom_1.jsx)('label', { + style: {position: 'relative', top: '5px'}, + class: {'btswitch-btn': true}, + props: {htmlFor: model + '_vm'} + }) + ); + }; + Vm.prototype.$input = function (config) { + var name = config.name, + readonly = config.readonly, + disabled = config.disabled, + style = config.style, + value = config.value, + type = config.type, + change = config.change, + className = config.className, + model = config.model, + width = config.width, + id = config.id, + placeholder = config.placeholder, + keyup = config.keyup; + if (model) (value = this[model]), (name = model); + if (width) style = 'width:'.concat(width, ';').concat(style); + return (0, snabbdom_1.jsx)('input', { + class: this.$class('bt-input-text mr5 '.concat(className || '')), + props: { + readonly: readonly, + name: name, + type: type || 'text', + disabled: disabled, + value: value, + id: id, + placeholder: placeholder + }, + style: this.$style(style), + on: {input: this.$inputEvent.bind(this), change: change, keyup: keyup}, + }); + }; + Vm.prototype.$select = function (config) { + var style = config.style, + className = config.className, + options = config.options, + model = config.model, + name = config.name, + value = config.value, + width = config.width, + change = config.change; + if (model) (value = this[model]), (name = model); + if (width) style = 'width:'.concat(width, ';').concat(style); + var optionList = options.map(function (item, index) { + if (typeof item === 'string') item = {value: index, label: item}; + return (0, snabbdom_1.jsx)('option', { + key: index, + props: {value: item.value, selected: item.value === value} + }, item.label); + }); + return (0, snabbdom_1.jsx)( + 'select', + { + class: this.$class('bt-input-text mr5 '.concat(className || '')), + props: {name: name}, + on: {input: this.$inputEvent.bind(this), change: change}, + style: this.$style(style) + }, + optionList + ); + }; + Vm.prototype.$textarea = function (config) { + var style = config.style, + className = config.className, + value = config.value, + model = config.model, + name = config.name, + width = config.width, + height = config.height, + id = config.id; + if (model) (value = this[model]), (name = model); + if (width) style = 'width:'.concat(width, ';').concat(style); + if (height) style = 'height:'.concat(height, ';').concat(style); + return (0, snabbdom_1.jsx)( + 'textarea', + { + class: this.$class('bt-input-text '.concat(className || '')), + style: this.$style(style), + props: {name: name, id: id}, + on: {input: this.$inputEvent.bind(this)} + }, + value + ); + }; + Vm.prototype.$button = function (config) { + var type = config.type, + size = config.size, + click = config.click, + style = config.style, + className = config.className, + title = config.title, + width = config.width, + height = config.height; + if (width) style = 'width:'.concat(width, ';').concat(style); + if (height) style = 'height:'.concat(height, ';').concat(style); + return (0, snabbdom_1.jsx)( + 'button', + { + class: this.$class( + 'btn btn-' + .concat(type || 'success', ' btn-') + .concat(size || 'sm', ' ') + .concat(className || '') + ), + style: this.$style(style), + on: {click: click}, + }, + title + ); + }; + Vm.prototype.$link = function (config) { + var click = config.click, + style = config.style, + className = config.className, + title = config.title, + href = config.href, + target = config.target; + return (0, snabbdom_1.jsx)( + 'a', + { + class: this.$class('btlink ' + className), + props: {href: href || 'javascript:;', target: target || '_blank'}, + style: this.$style(style), + on: {click: click} + }, + title + ); + }; + Vm.prototype.$icon = function (config) { + var click = config.click, + style = config.style, + type = config.type; + return (0, snabbdom_1.jsx)('span', { + class: this.$class('glyphicon glyphicon-'.concat(type, ' cursor')), + style: this.$style(style), + on: {click: click} + }); + }; + Vm.prototype.$warningTitle = function (tips) { + return (0, snabbdom_1.jsx)( + 'div', + {class: {mb15: true, 'layer-info-head': true}}, + (0, snabbdom_1.jsx)('i', {class: this.$class('layui-layer-ico layui-layer-ico3 layer-info-ico')}), + (0, snabbdom_1.jsx)('h3', {class: {'layer-info-title': true}}, tips) + ); + }; + Vm.prototype.$learnMore = function (config) { + var title = config.title, + model = config.model, + className = config.className, + style = config.style, + id = config.id, + link = config.link, + relation = model + '_more'; + return (0, snabbdom_1.jsx)( + 'div', + { + class: this.$class('mt10 agreementBox '.concat(className || '')), + props: {id: id}, + style: this.$style(style) + }, + (0, snabbdom_1.jsx)( + 'div', + {class: this.$class('agreementCont')}, + this.$input({type: 'checkbox', model: model, id: relation}), + (0, snabbdom_1.jsx)('label', {props: {htmlFor: relation}}, title) + ), + link + ); + }; + Vm.prototype.$table = function (config) { + return (0, snabbdom_1.jsx)('div', {class: {divtable: true}}, (0, snabbdom_1.jsx)('table', {class: {'table table-bordered table-hover': true}})); + }; + Vm.prototype.$tab = function (config) { + var title = config.title, + content = config.content, + className = config.className, + style = config.style, + id = config.id; + return (0, snabbdom_1.jsx)( + 'div', + {class: {'bt-w-main': true}}, + (0, snabbdom_1.jsx)('div', {class: {'bt-w-menu': true}}), + (0, snabbdom_1.jsx)('div', {class: {'bt-w-con': true, pd15: true}}, {content: content}) + ); + }; + Vm.prototype.$tabItem = function (config) { + var title = config.title, + content = config.content, + hide = config.hide; + return (0, snabbdom_1.jsx)('div', {class: {'bt-w-item': true, hide: hide}, props: {title: title}}, content); + }; + Vm.prototype.$inputEvent = function (ev, fn) { + var targets = ev.target; + var targetValue = targets.value; + var targetType = targets.getAttribute('type'); + var name = targets.getAttribute('name'); + if (ev.type === 'input' && targetType === 'checkbox') { + this[name] = targets.checked; + } else { + this[name] = targetValue; + } + if (typeof fn === 'function') fn(ev); + }; + return Vm; + })(); + exports.default = Vm; +}); +define('public/utils', ['require', 'exports', 'public/vdom'], function (require, exports, vdom_1) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); + vdom_1 = __importDefault(vdom_1); + var Utils = (function () { + function Utils() { + this.System = 'linux'; + this.Language = 'zh-CN'; + this.API = {}; + this.vDdomList = {}; + this.layerIndex = 0; + this.$ajaxSetup(); + this.$requestInit(); + } + + Utils.prototype.$ajaxSetup = function () { + var my_headers = {}; + var request_token_ele = document.getElementById('request_token_head'); + if (request_token_ele) { + var request_token = request_token_ele.getAttribute('token'); + if (request_token) { + my_headers['x-http-token'] = request_token; + } + } + var request_token_cookie = this.$getCookie('request_token'); + if (request_token_cookie) { + my_headers['x-cookie-token'] = request_token_cookie; + } + if (my_headers) { + $.ajaxSetup({ + headers: my_headers, + error: function (jqXHR, textStatus, errorThrown) { + if (!jqXHR.responseText) return; + if (typeof String.prototype.trim === 'undefined') { + String.prototype.trim = function () { + return String(this).replace(/^\s+|\s+$/g, ''); + }; + } + var error_key = 'We need to make sure this has a favicon so that the debugger does'; + var error_find = jqXHR.responseText.indexOf(error_key); + if (jqXHR.status == 500 && (jqXHR.responseText.indexOf('An error occurred while the panel was running') != -1 || error_find != -1)) { + if (error_find != -1) { + var error_body = jqXHR.responseText.split('', ''); + var tmp = error_body.split('During handling of the above exception, another exception occurred:'); + error_body = tmp[tmp.length - 1]; + var error_msg = + '
\ +

An error occurred while the panel was running!

\ +
' +
+                                    error_body.trim() +
+                                    '
\ +
    \ +
  • Sorry, please try to resolve this error in the following order:
  • \ +
  • 1. Click the repair panel in the upper right corner of the [Homepage], log out of the panel and log in again.
  • \ +
  • 2. If the above attempts fail to resolve this error, please screenshot this window and post it to the Pagoda Forum for help, forum address:https://forum.aapanel.com
  • \ +
\ +
'; + } else { + error_msg = jqXHR.responseText; + } + $('.layui-layer-padding').parents('.layer-anim').remove(); + $('.layui-layer-shade').remove(); + setTimeout(function () { + layer.open({ + title: false, + content: error_msg, + closeBtn: 2, + area: ['1000px', '800px'], + btn: false, + shadeClose: false, + shade: 0.3, + success: function () { + $('pre').scrollTop(100000000000); + }, + }); + }, 100); + } + }, + }); + } + }; + Utils.prototype.$checkIp = function (ip) { + var reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/; + return reg.test(ip); + }; + Utils.prototype.$checkIps = function (ips) { + var reg = /^\d{1, 3}\.\d{1, 3}\.\d{1, 3}\.\d{1, 3}(\/\d{1, 2})?$/; + return reg.test(ips); + }; + Utils.prototype.$checkDomainList = function (domainInfo) { + if (typeof domainInfo === 'string') domainInfo = domainInfo.split(','); + var reg = /^([a-zA-Z0-9]([a-zA-Z0-9\-]{0, 61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2, 6}$/; + for (var _i = 0, domainInfo_1 = domainInfo; _i < domainInfo_1.length; _i++) { + var item = domainInfo_1[_i]; + if (!reg.test(item)) return false; + } + return true; + }; + Utils.prototype.$checkPawComplexity = function (paw) { + var regList = { + length: /^.{8,}$/, + number: /\d+/, + lowercase: /[a-z]+/, + capital: /[A-Z]+/, + special: /[^A-Za-z0-9]+/, + }; + return false; + }; + Utils.prototype.$checkWeakCipher = function (paw) { + var checks = ['admin888', '123123123', '12345678', '45678910', '87654321', 'asdfghjkl', 'password', 'qwerqwer'], + pchecks = 'abcdefghijklmnopqrstuvwxyz1234567890', + lower = paw.toLowerCase(), + isError = ''; + for (var i = 0; i < pchecks.length; i++) { + var item = pchecks[i]; + checks.push(item + item + item + item + item + item + item + item); + } + for (var i = 0; i < checks.length; i++) { + var item = checks[i]; + if (lower === item) isError += '['.concat(item, ']'); + break; + } + return { + status: !isError, + msg: isError, + }; + }; + Utils.prototype.$checkUrl = function (url) { + var reg = /^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+/; + return reg.test(url); + }; + Utils.prototype.$checkPort = function (port) { + var reg = /^([1-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/; + return reg.test(port.toString()); + }; + Utils.prototype.$checkChinese = function (chinese) { + var reg = /^[\u4e00-\u9fa5]+$/; + return reg.test(chinese); + }; + Utils.prototype.$checkDomain = function (domain) { + var reg = /^([\w\u4e00-\u9fa5\-\*]{1, 100}\.){1, 10}([\w\u4e00-\u9fa5\-]{1, 24}|[\w\u4e00-\u9fa5\-]{1, 24}\.[\w\u4e00-\u9fa5\-]{1, 24})$/; + return reg.test(domain); + }; + Utils.prototype.$checkEmail = function (email) { + var reg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/; + return reg.test(email); + }; + Utils.prototype.$checkPhone = function (phone) { + var reg = /^1[3456789]\d{9}$/; + return reg.test(phone.toString()); + }; + Utils.prototype.$containsStr = function (str, subStr) { + if (typeof str !== 'string' && typeof subStr !== 'string') return false; + return str.indexOf(subStr) > -1; + }; + Utils.prototype.$replaceTrim = function (str) { + return str.replace(/\s+/g, ''); + }; + Utils.prototype.$ltrim = function (str, l) { + var reg = new RegExp('/(^\\' + l + '+)/g'); + return str.replace(reg, ''); + }; + Utils.prototype.$rtrim = function (str, r) { + var reg = new RegExp('/(\\' + r + '+$)/g'); + return str.replace(reg, ''); + }; + Utils.prototype.$formatTime = function (time, format) { + if (format === void 0) { + format = 'yyyy/MM/dd hh:mm:ss'; + } + var timestamp = ''; + if (typeof time === 'object') timestamp = time.getTime().toString(); + if (typeof time === 'string') timestamp = new Date(time).getTime().toString(); + if (typeof time === 'number') timestamp = time.toString(); + if (timestamp.length > 10) timestamp = timestamp.substring(0, 10); + var date = new Date(parseInt(timestamp) * 1000); + var o = { + 'M+': date.getMonth() + 1, + 'd+': date.getDate(), + 'h+': date.getHours(), + 'm+': date.getMinutes(), + 's+': date.getSeconds(), + 'q+': Math.floor((date.getMonth() + 3) / 3), + S: date.getMilliseconds(), + }; + if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)); + for (var k in o) { + if (new RegExp('(' + k + ')').test(format)) { + format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)); + } + } + return format; + }; + Utils.prototype.$formatSize = function (bytes, isUnit, fixed, endUnit) { + if (bytes === void 0) { + bytes = 0; + } + if (isUnit === void 0) { + isUnit = true; + } + if (fixed === void 0) { + fixed = 2; + } + if (endUnit === void 0) { + endUnit = ''; + } + if (typeof bytes === 'string') bytes = parseInt(bytes); + var unit = [' B', ' KB', ' MB', ' GB', 'TB'], + c = 1024; + for (var i = 0; i < unit.length; i++) { + var cUnit = unit[i]; + var val = bytes; + if (fixed !== 0 && i === 0) val = bytes.toFixed(fixed); + if (endUnit) { + if (cUnit.trim() == endUnit.trim()) { + if (endUnit) { + return val + cUnit; + } else { + return val; + } + } + } else { + if (bytes < c) { + if (isUnit) { + return val + cUnit; + } else { + return val; + } + } + } + bytes /= c; + } + }; + Utils.prototype.$formatPath = function (path) { + var reg = /(\\)/g; + path = path.replace(reg, '/'); + return path; + }; + Utils.prototype.$getFilePath = function (filename) { + if (filename === '/') return '/'; + filename = (filename + '/').replace(/\/\//g, '/'); + var arr = filename.split('/'), + last = arr[arr.length - 1]; + return filename.replace('/' + arr[arr.length - (last === '' ? 2 : 1)], ''); + }; + Utils.prototype.$getRandom = function (len) { + if (len === void 0) { + len = 32; + } + var $chars = 'AaBbCcDdEeFfGHhiJjKkLMmNnPpRSrTsWtXwYxZyz2345678', + maxPos = $chars.length; + var password = ''; + for (var i = 0; i < len; i++) { + password += $chars.charAt(Math.floor(Math.random() * maxPos)); + } + return password; + }; + Utils.prototype.$getRandomNum = function (min, max) { + if (min === void 0) { + min = 0; + } + if (max === void 0) { + max = 9; + } + return Math.floor(Math.random() * (max - min + 1) + min); + }; + Utils.prototype.$getStorage = function (key) { + return window.localStorage.getItem(key); + }; + Utils.prototype.$setStorage = function (key, value) { + window.localStorage.setItem(key, value); + }; + Utils.prototype.$removeStorage = function (key) { + window.localStorage.removeItem(key); + }; + Utils.prototype.$getCookie = function (name) { + var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); + var itExist = document.cookie.match(reg); + if (itExist) { + var val = unescape(itExist[2]); + return val == 'undefined' ? '' : val; + } else { + return null; + } + }; + Utils.prototype.$setCookie = function (name, value, time) { + if (time === void 0) { + time = 2592000000; + } + var date = '', + expires = new Date(); + expires.setTime(expires.getTime() + time); + date = expires.toGMTString(); + var isHttps = window.location.protocol === 'https:'; + var sameSite = ';Secure; Path=/; SameSite=None'; + document.cookie = name + '=' + escape(value) + ';expires=' + time + (isHttps ? sameSite : ''); + }; + Utils.prototype.$removeCookie = function (name) { + this.$setCookie(name, '', 0); + }; + Utils.prototype.$requestInit = function () { + var _this_1 = this; + var requestTokenHead = document.getElementById('request_token_head'); + var headers = {'x-http-token': '', 'x-cookie-token': ''}; + var httpToken = (requestTokenHead && requestTokenHead.getAttribute('token')) || ''; + var cookieToken = this.$getCookie('request_token') || ''; + httpToken && (headers['x-http-token'] = httpToken); + cookieToken && (headers['x-cookie-token'] = cookieToken); + if (httpToken) { + $.ajaxSetup({ + headers: headers, + error: function (XHR) { + return __awaiter(_this_1, void 0, void 0, function () { + var resText, resStatus, monitorStr, content, errorHead, isErrorHead, errorBody, tmp; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + (resText = XHR.responseText), (resStatus = XHR.status), (monitorStr = ['/static/favicon.ico', '/static/img/qrCode.png', '']), (content = ''); + if (resText) return [2, false]; + if ( + typeof resText == 'string' && + monitorStr.some(function (item) { + return resText.indexOf(item) > -1; + }) + ) + return [2, this.$refreshBrowser('/login')]; + (errorHead = 'We need to make sure this has a favicon so that the debugger does'), (isErrorHead = resText.indexOf(errorHead) > -1); + if (resStatus === 500 && resText.indexOf('运行时发生错误') > -1 && isErrorHead) { + if (resText.indexOf('请先绑定宝塔帐号!') > -1) { + this.$refreshBrowser('/bind?redirect='.concat(encodeURIComponent(window.location.href))); + return [2, false]; + } + if (isErrorHead) { + errorBody = resText.split('', ''); + tmp = errorBody.split('During handling of the above exception, another exception occurred:'); + errorBody = tmp[tmp.length - 1]; + content = + '
\n

Something went wrong, an error occurred while the panel was running!

\n
'.concat(
+                                                        errorBody.trim(),
+                                                        '
\n
    \n
  • Sorry, an unexpected error occurred while panel was running, please try to resolve this error in the following order:
  • \n
  • 1. Click Fix Panel in the upper right corner of [Home] and log out of the panel to log in again.
  • \n
  • 2. if the above attempts fail to lift this error, please screenshot this window to the aaPanel Forum to post for help, forum address: https://forum.aapanel.com
\n
' + ); + } else { + content = resText; + } + } + return [ + 4, + this.$open({ + title: false, + content: content, + area: ['1200px', '810px'], + btn: false, + }), + ]; + case 1: + _a.sent(); + return [2]; + } + }); + }); + }, + }); + } + }; + Utils.prototype.$send = function (param, param1, param2) { + var _this_1 = this; + if (param2 === void 0) { + param2 = ''; + } + return new Promise(function (resolve, reject) { + var config = { + url: '', + method: 'POST', + msg: false, + data: {}, + }, + loading = '', + loadT; + if (typeof param === 'string') { + var urls = param.split('/'); + config.url = '/'.concat(urls[0], '?action=').concat(urls[1]); + if (typeof param1 === 'string') { + loading = param1; + } else if (typeof param1 === 'object') { + config.data = param1; + loading = param2; + } + } else if (typeof param === 'object') { + config.url = param.url; + config.method = param.method || 'POST'; + config.msg = param.msg || false; + config.data = param.data || {}; + loading = param.loading || ''; + } + if (loading) loadT = _this_1.$load(''.concat(loading)); + $.ajax({ + url: config.url, + method: config.method, + data: config.data, + success: function (rdata) { + return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (loadT) loadT.close(); + if (!(typeof rdata === 'object')) return [3, 3]; + if (!(typeof rdata.msg === 'string' && rdata.msg.indexOf('CSRF校验失败,请重新登录面板') > -1)) return [3, 2]; + return [4, this.$confirm({ + title: 'Tips', + msg: 'Panel login has expired, please login again!' + })]; + case 1: + _a.sent(); + layer.closeAll(); + this.$load('Logging out, please wait...'); + this.$refreshBrowser('/login?dologin=True'); + return [2, false]; + case 2: + if (typeof rdata.msg === 'string' && rdata.msg === '没有权限' && !rdata.status) { + layer.closeAll(); + this.$error(rdata.msg); + return [2, false]; + } + if (typeof rdata.status === 'boolean' && !rdata.status && rdata.msg && config.msg) this.$error(rdata.msg); + _a.label = 3; + case 3: + resolve(rdata); + return [2]; + } + }); + }); + }, + error: function (err) { + reject(err); + }, + }); + }); + }; + Utils.prototype.$apiInit = function (apiInfo) { + this.API = Object.assign(this.API, apiInfo); + }; + Utils.prototype.$request = function (info, param, config) { + var _this_1 = this; + if (param === void 0) { + param = {}; + } + return new Promise(function (resolve, reject) { + return __awaiter(_this_1, void 0, void 0, function () { + var url, loading, rdata, error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (typeof info === 'string') info = this.API[info]; + if (typeof param === 'boolean') (config = param), (param = {}); + if (typeof param === 'object' && param.hasOwnProperty('loading') && param.hasOwnProperty('msg')) (config = param), (param = {}); + if (typeof config === 'boolean') config = {msg: config}; + if (typeof config === 'undefined') config = {msg: true, loading: true}; + (url = info[0]), (loading = info[1] || ''); + if (!config.loading) loading = ''; + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + return [4, this.$send(url, param, loading)]; + case 2: + rdata = _a.sent(); + config.msg && typeof rdata.msg === 'string' && this.$msg(rdata); + resolve(rdata); + return [3, 4]; + case 3: + error_1 = _a.sent(); + reject(error_1); + return [3, 4]; + case 4: + return [2]; + } + }); + }); + }); + }; + Utils.prototype.$open = function (param) { + var _this_1 = this; + var _this = this; + return new Promise(function (resolve, reject) { + var id = 'virtual-'.concat(_this_1.$getRandom(5)); + var content = param.content, + success = param.success, + yes = param.yes, + btn2 = param.btn2, + cancel = param.cancel, + title = param.title, + shadeClose = param.shadeClose, + closeBtn = param.closeBtn, + skin = param.skin, + type = param.type; + var config = typeof param.content === 'string' ? '' : param.content; + var vm; + switch (typeof param.content) { + case 'string': + content = param.content; + break; + case 'object': + content = '
'); + break; + } + var layerConfig = { + title: title, + type: type || 1, + shadeClose: shadeClose, + content: content, + skin: skin, + closeBtn: closeBtn || 2, + success: function (layers, indexs) { + if (typeof config === 'object') { + var vm_1 = new vdom_1.default(Object.assign(config, {el: '#'.concat(id)})); + vm_1['$closeLayer'] = function () { + layer.close(indexs); + return indexs; + }; + _this.vDdomList[indexs] = vm_1; + } + success && success(layers, indexs, vm); + }, + yes: function (indexs) { + _this.layerIndex = indexs; + var config = { + close: function () { + layer.close(indexs); + return indexs; + }, + vm: _this.vDdomList[indexs], + }; + yes && yes(config); + resolve(config); + }, + cancel: function (indexs) { + _this.layerIndex = indexs; + if (cancel) { + cancel && cancel(); + } else { + reject({cancel: true, type: 'cancel'}); + } + delete _this.vDdomList[indexs]; + }, + btn2: function (indexs) { + _this.layerIndex = indexs; + if (btn2) { + btn2 && btn2(); + } else { + reject({cancel: true, type: 'btn2'}); + } + delete _this.vDdomList[indexs]; + }, + end: function () { + delete _this.vDdomList[_this.layerIndex]; + }, + }; + layer.open(Object.assign(param, layerConfig)); + }); + }; + Utils.prototype.$confirm = function (param) { + return new Promise(function (resolve, reject) { + var msg = ''; + if (param.hasOwnProperty('msg')) { + msg = param.msg; + delete param.msg; + } + layer.confirm( + msg, + Object.assign( + { + title: 'Tips', + icon: 3, + btn: [lan.public.confirm, lan.public.cancel], + shadeClose: false, + closeBtn: 2, + cancel: function () { + return reject({cancel: true}); + }, + }, + param + ), + function (indexs) { + return resolve(indexs); + }, + function () { + return reject({cancel: true}); + } + ); + }); + }; + Utils.prototype.$tips = function (param) { + var msg = '', + el = ''; + if (param.msg) { + msg = param.msg; + delete param.msg; + } + if (param.el) { + el = param.el; + delete param.el; + } + param.success = function (layero) { + var oldLeft = layero.css('left'); + oldLeft = oldLeft.substring(0, oldLeft.indexOf('px')); + layero.css('left', ''.concat(oldLeft - 10, 'px')); + }; + return { + layer: layer.tips(msg, el, Object.assign({tips: [1, 'red']}, param)), + close: function () { + layer.close(this.layer); + }, + }; + }; + Utils.prototype.$close = function (index) { + layer.close(index); + }; + Utils.prototype.$msg = function (param, param1) { + var config = { + time: 1500, + shade: 0.3, + shadeClose: true, + closeBtn: 0, + icon: 1, + }, + msg = ''; + if (typeof param === 'object') { + for (var key in config) { + if (Object.prototype.hasOwnProperty.call(config, key)) { + if (typeof param[key] !== 'undefined') config[key] = param[key]; + } + } + msg = param.msg + (param.msg_error || '') + (param.msg_solve || ''); + if (typeof msg == 'string' && typeof param.status === 'boolean') { + config.icon = typeof param.status === 'boolean' ? (param.status ? 1 : 2) : 1; + } + } else if (typeof param === 'string') { + msg = param; + if (typeof param1 === 'boolean' || typeof param1 === 'number') { + config.icon = typeof param1 === 'boolean' ? (param1 ? 1 : 2) : param1; + } + } + return { + layer: layer.msg(msg, config), + close: function () { + layer.close(this.layer); + }, + }; + }; + Utils.prototype.$error = function (msg) { + return this.$msg({msg: msg, icon: 2}); + }; + Utils.prototype.$warning = function (msg) { + return this.$msg({msg: msg, icon: 0}); + }; + Utils.prototype.$load = function (tips) { + if (tips === void 0) { + tips = 'Processing, please wait...'; + } + return this.$msg({msg: tips, icon: 16, time: 0, shade: [0.3, '#000']}); + }; + Utils.prototype.$verifySubmit = function (param, msg) { + var _this_1 = this; + return new Promise(function (resolve) { + var status = false; + status = typeof param === 'function' ? param() : param; + if (status) { + _this_1.$error(msg); + } else { + resolve(status); + } + }); + }; + Utils.prototype.$verifySubmitList = function (list) { + var _this_1 = this; + return new Promise(function (resolve) { + return __awaiter(_this_1, void 0, void 0, function () { + var status, i, element; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + status = true; + i = 0; + _a.label = 1; + case 1: + if (!(i < list.length)) return [3, 4]; + element = list[i]; + return [4, this.$verifySubmit(element[0], element[1])]; + case 2: + status = _a.sent(); + if (status) return [3, 4]; + _a.label = 3; + case 3: + i++; + return [3, 1]; + case 4: + if (!status) resolve(true); + return [2]; + } + }); + }); + }); + }; + Utils.prototype.$refreshBrowser = function (href, time) { + if (href === void 0) { + href = 1500; + } + if (time === void 0) { + time = 1500; + } + typeof href === 'number' && (time = href); + setTimeout(function () { + switch (typeof href) { + case 'string': + location.href = href; + break; + case 'number': + location.reload(); + break; + } + }, time); + }; + Utils.prototype.$require = function (moduleName) { + return new Promise(function (resolve, reject) { + try { + if (!Array.isArray(moduleName)) moduleName = [moduleName]; + require(moduleName, function () { + var param = {}; + for (var i = 0; i < arguments.length; i++) { + param[moduleName[i]] = arguments[i]; + } + resolve(param); + }); + } catch (error) { + reject(error); + } + }); + }; + Utils.prototype.$delay = function (time) { + if (time === void 0) { + time = 1000; + } + return new Promise(function (resolve) { + setTimeout(function () { + resolve(time); + }, time); + }); + }; + return Utils; + })(); + exports.default = Utils; +}); +define('public/public', ['require', 'exports', 'snabbdom', 'public/utils'], function (require, exports, snabbdom_2, utils_1) { + 'use strict'; + Object.defineProperty(exports, '__esModule', {value: true}); + utils_1 = __importDefault(utils_1); + var Public = (function (_super) { + __extends(Public, _super); + + function Public() { + var _this_1 = _super.call(this) || this; + _this_1.apiInfo = { + getUserInfo: ['ssl/GetUserInfo', 'Getting bind account information, please wait...'], + unbindUserInfo: ['ssl/DelToken', 'Unbinding the pagoda account, please wait...'], + restartPanel: ['system/ReWeb', lan.public.the], + GetToken: ['ssl/GetToken', lan.config.token_get], + getFileDir: ['files/GetDir', lan.public.the], + getMsgConfig: ['config/get_settings2', 'Getting profile, please wait...'], + setTelegramConfig: ['config/set_tg_bot', 'The notification is being generated, please wait...'], + setDingDingConfig: ['config/set_msg_config&name=dingding', 'The notification is being generated, please wait...'], + clearTelegramConfig: ['config/del_tg_info', 'Deleting notification, please wait...'], + addMailAddress: ['config/add_mail_address', 'Please wait while creating recipient list...'], + delMailAddress: ['config/del_mail_list', 'Deleting email, please wait...'], + getMailList: ['config/get_settings2', lan.public.the], + setMailConfig: ['config/user_mail_send', 'The notification is being generated, please wait...'], + }; + _this_1.$apiInit(_this_1.apiInfo); + return _this_1; + } + + Public.prototype.fixedTableHead = function (el, height, isBorder) { + if (isBorder === void 0) { + isBorder = true; + } + $(el).css({border: 'none'}); + var data = {'overflow-y': 'auto', 'max-height': height}; + if (isBorder) data.border = '1px solid #ddd'; + $(el).parent().css(data); + $(el) + .parent() + .bind('scroll', function () { + var scrollTop = this.scrollTop; + $(this) + .find('thead') + .css({ + transform: 'translateY(' + scrollTop + 'px)', + position: 'relative', + 'z-index': '1', + }); + }); + }; + Public.prototype.bindBtAccount = function (isEdit) { + if (isEdit === void 0) { + isEdit = false; + } + var that = this; + var title = !isEdit ? lan.config.config_user_binding : lan.config.config_user_edit; + var bindBtn = !isEdit ? lan.config.binding : lan.public.edit; + this.$open({ + title: title, + area: ['420px', '360px'], + content: { + data: { + username: '', + password: '', + }, + template: function () { + return (0, snabbdom_2.jsx)( + 'div', + {class: this.$class('pd20 bt-form libLogin')}, + (0, snabbdom_2.jsx)('h4', {class: this.$class('c2 f18 text-center mtb20')}, lan.public_backup.bind_bt_account), + (0, snabbdom_2.jsx)('div', {class: {line: true}}, this.$input({ + model: 'username', + placeholder: lan.public.user + })), + (0, snabbdom_2.jsx)('div', {class: {line: true}}, this.$input({ + model: 'password', + type: 'password', + placeholder: lan.public.pass, + keyup: this.bindUserInfo.bind(this) + })), + (0, snabbdom_2.jsx)('div', {class: {line: true}}, this.$button({ + className: 'login-button', + title: bindBtn, + click: this.bindUserInfo.bind(this), + width: '360px', + height: '40px' + })), + (0, snabbdom_2.jsx)('p', {class: {'text-right': true}}, ' ', this.$link({ + title: lan.public_backup.no_account, + href: 'https://www.aapanel.com/user_admin/register' + })) + ); + }, + methods: { + bindUserInfo: function (ev) { + return __awaiter(this, void 0, void 0, function () { + var _a, username, password, param, rdata; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (ev.type === 'keyup' && ev.keyCode !== 13) return [2, false]; + (_a = this), (username = _a.username), (password = _a.password); + return [ + 4, + that.$verifySubmitList([ + [!username, 'Please input account'], + [!password, 'Please input password'], + ]), + ]; + case 1: + _b.sent(); + param = {username: username, password: password}; + return [4, that.$request('GetToken', param)]; + case 2: + rdata = _b.sent(); + that.$msg(rdata); + rdata.status && that.$refreshBrowser(); + return [2]; + } + }); + }); + }, + }, + }, + }).catch(function (err) { + }); + }; + Public.prototype.selectFileDir = function (id, type, success, default_path) { + var _this_1 = this; + if (type === void 0) { + type = 'all'; + } + this.$setCookie('SetName', ''); + if (typeof type !== 'string') (success = type), (type = 'dir'); + this.$open({ + area: '680px', + title: type === 'all' ? 'Select directories or files' : type === 'file' ? lan.bt.file : lan.bt.dir, + closeBtn: 2, + content: + "\n
\n
\n \n
") + .concat( + lan.bt.path, + "
\n
\n
\n
\n
\n
\n
\n
\n
\n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n
    " + ) + .concat(lan.bt.filename, "") + .concat(lan.bt.etime, "") + .concat(lan.bt.access, "") + .concat( + lan.bt.own, + "
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n
    \n '), + success: function (layers, indexs) { + var el = null; + if (id.indexOf('.') === 0) el = $('.' + id); + if (id.indexOf('#') === 0) el = $('#' + id); + if (id.indexOf('.') !== 0 && id.indexOf('#') !== 0) el = $(id); + _this_1.fixedTableHead('.file-list .table', '100%', false); + $('#btn_back').on('click', function () { + var path = $('#PathPlace').find('span').text(); + path = _this_1.$rtrim(_this_1.$formatPath(path), '/'); + _this_1.getFileList(_this_1.$getFilePath(path), type); + }); + $('#bt_select').on('click', function () { + var path = _this_1.$formatPath($('#PathPlace').find('span').text()); + if (type === 'file' && !$('#tbody tr.active').length) { + layer.msg('Select the file first!', {icon: 0}); + return false; + } + if ($('#tbody tr').hasClass('active')) path = $('#tbody tr.active .bt_open_dir').attr('path'); + path = _this_1.$rtrim(path, '/'); + el.val(path).trigger('input'); + success && success(path); + layer.close(indexs); + }); + $('.closeLayer').on('click', function () { + layer.close(indexs); + }); + _this_1.getFileList(el.val() || '/www/wwwroot', type); + }, + }).catch(function (err) { + }); + }; + Public.prototype.getFileList = function (path, type) { + if (type === void 0) { + type = 'dir'; + } + return __awaiter(this, void 0, void 0, function () { + var _this, diskHtml, fileHtml, dirHtml, rdata, fileList, dirList, diskList, i_1, item, i_2, item, + unfoldList, dirName, i, item, unfoldList, fileName; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + (_this = this), (diskHtml = ''), (fileHtml = ''), (dirHtml = ''); + return [4, this.$request('getFileDir', {path: path, disk: true})]; + case 1: + rdata = _a.sent(); + (fileList = rdata.FILES), (dirList = rdata.DIR), (diskList = rdata.DISK); + for (i_1 = 0; i_1 < diskList.length; i_1++) { + item = diskList[i_1]; + diskHtml += '
     " + item.path + '
    '; + } + for (i_2 = 0; i_2 < dirList.length; i_2++) { + (item = dirList[i_2]), (unfoldList = item.split(';')); + dirName = unfoldList[0]; + if (dirName.length > 20) dirName = dirName.substring(0, 20) + '...'; + if (this.$checkChinese(dirName) && dirName.length > 10) dirName = dirName.substring(0, 10) + '...'; + dirHtml += + '' + + (type === 'all' || type === 'dir' ? '' : '') + + '" + + dirName + + '' + + this.$formatTime(parseInt(unfoldList[2])) + + '' + + unfoldList[3] + + '' + + unfoldList[4] + + ''; + } + for (i = 0; i < fileList.length; i++) { + (item = fileList[i]), (unfoldList = item.split(';')); + fileName = unfoldList[0]; + if (fileName.length > 20) fileName = fileName.substring(0, 20) + '...'; + if (this.$checkChinese(fileName) && fileName.length > 10) fileName = fileName.substring(0, 10) + '...'; + fileHtml += + '' + + (type === 'all' || type === 'file' ? '' : '') + + '" + + fileName + + '' + + this.$formatTime(parseInt(unfoldList[2])) + + '' + + unfoldList[3] + + '' + + unfoldList[4] + + ''; + } + $('#changecomlist').html(diskHtml); + $('.default').hide(); + $('.file-list').show(); + $('#tbody').html(dirHtml + fileHtml); + if (rdata.PATH.substr(rdata.PATH.length - 1, 1) != '/') { + rdata.PATH += '/'; + } + $('#PathPlace').find('span').html(rdata.PATH); + $('#tbody tr').click(function () { + if ($(this).find('td:eq(0) input').length > 0) { + if ($(this).hasClass('active')) { + $(this).removeClass('active'); + $(this).find('td:eq(0) input').prop('checked', false); + } else { + $(this).find('td:eq(0) input').prop('checked', true); + $(this).siblings().find('td:eq(0) input').prop('checked', false); + $(this).addClass('active').siblings().removeClass('active'); + } + } + }); + $('#changecomlist dd').click(function () { + _this.getFileList($(this).attr('path'), type); + }); + $('.bt_open_dir span').click(function () { + if ($(this).parent().data('type') == 'dir') _this.getFileList($(this).parent().attr('path'), type); + }); + return [2]; + } + }); + }); + }; + Public.prototype.setMessageChannelView = function (type, info) { + if (type === void 0) { + type = 0; + } + return __awaiter(this, void 0, void 0, function () { + var rdata, _a, setup, id, token, error_2; + var _this_1 = this; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _b.trys.push([0, 3, , 4]); + return [4, this.$request('getMsgConfig')]; + case 1: + rdata = _b.sent(); + (_a = rdata.telegram), (setup = _a.setup), (id = _a.my_id), (token = _a.bot_token); + console.log(rdata); + console.log(rdata); + return [ + 4, + this.$open({ + area: '600px', + title: 'Setting up notification', + skin: 'layer-channel-auth', + content: '
    \n
    \n
    \n

    Email

    \n

    DingDing

    \n

    Feishu

    \n

    Telegram

    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n
    EmailOperating
    No Data
    \n
    \n
    \n
    \n
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n Name\n
    \n \n
    \n
    \n\t\t\t\t\t\t\t\t\t\t
    \n Url\n
    \n \n
    \n
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t' + ) + .concat( + setup ? '' : '', + '\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n Name\n
    \n \n
    \n
    \n\t\t\t\t\t\t\t\t\t\t
    \n Url\n
    \n \n
    \n
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t' + ) + .concat( + setup ? '' : '', + '\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n
    \n
    \n
    \n ID\n
    \n \n
    \n
    \n
    \n TOKEN\n
    \n \n
    \n
    \n \n \n ' + ) + .concat( + setup ? '' : '', + '\n
    \n
    \n
    \n
      \n
    • ID: Your telegram user ID
    • \n
    • Token: Your telegram bot token
    • \n
    • e.g: [ 12345677:AAAAAAAAA_a0VUo2jjr__CCCCDDD ] Help
    • \n
    \n
    \n
    \n
    \n
    \n
    ' + ), + success: function ($layer) { + $('.bt-w-menu p').click(function () { + var index = $(this).index(); + $(this).addClass('bgw').siblings().removeClass('bgw'); + $('.conter_box').eq(index).removeClass('hide').siblings().addClass('hide'); + }); + $('.addRecipient').on('click', function () { + return _this_1.addMessageMail(); + }); + $('.setMailMessageView').on('click', function () { + return _this_1.setMailMessageView(info); + }); + $('#receive_table').on('click', '.del_email', function (ev) { + return __awaiter(_this_1, void 0, void 0, function () { + var email, res, err_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + email = $(ev.target).data('mail'); + _a.label = 1; + case 1: + _a.trys.push([1, 6, , 7]); + return [4, this.$confirm({ + title: 'Delete Email ['.concat(email, ']'), + msg: 'Are your sure to delete the Email?' + })]; + case 2: + _a.sent(); + return [4, this.$request('delMailAddress', {email: email})]; + case 3: + res = _a.sent(); + if (!res.status) return [2]; + return [4, this.$delay()]; + case 4: + _a.sent(); + return [4, this.renderMailMessageList()]; + case 5: + _a.sent(); + return [3, 7]; + case 6: + err_1 = _a.sent(); + return [3, 7]; + case 7: + return [2]; + } + }); + }); + }); + $('.addTelegram').click(function () { + return __awaiter(_this_1, void 0, void 0, function () { + var id_1, token_1, res, err_2; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 3, , 4]); + id_1 = $('input[name="telegram_id"]').val(); + token_1 = $('input[name="telegram_token"]').val(); + return [4, this.$verifySubmit(id_1 == '' || token_1 == '', 'input box cannot be empty!')]; + case 1: + _a.sent(); + return [4, this.$request('setTelegramConfig', { + my_id: id_1, + bot_token: token_1 + })]; + case 2: + res = _a.sent(); + if (!res.status) return [2]; + $('.addTelegram').after(''); + this.setLinkText('.setMessageChannelTelegram', 'Telegram is set', 'btlink'); + return [3, 4]; + case 3: + err_2 = _a.sent(); + return [3, 4]; + case 4: + return [2]; + } + }); + }); + }); + $layer.on('click', '.delTelegram', function () { + return __awaiter(_this_1, void 0, void 0, function () { + var res, err_3; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 3, , 4]); + return [4, this.$confirm({ + title: 'Clear set', + msg: 'Delete Clear Settings?' + })]; + case 1: + _a.sent(); + return [4, this.$request('clearTelegramConfig')]; + case 2: + res = _a.sent(); + if (!res.status) return [2]; + $('.delTelegram').remove(); + $('input[name="telegram_id"]').val(''); + $('input[name="telegram_token"]').val(''); + this.setLinkText('.setMessageChannelTelegram', 'Telegram is not set', 'bt_warning'); + return [3, 4]; + case 3: + err_3 = _a.sent(); + return [3, 4]; + case 4: + return [2]; + } + }); + }); + }); + $('.addDingDing').click(function () { + return __awaiter(_this_1, void 0, void 0, function () { + var name_2, url, res, err_4; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 3, , 4]); + name_2 = $('input[name=chatName]').val(); + url = $('[name=dingding_url]').val(); + return [4, this.$verifySubmit(name_2 == '' || url == '', 'input box cannot be empty!')]; + case 1: + _a.sent(); + return [4, this.$request('setDingDingConfig', { + title: name_2, + url: url, + atall: 'True' + })]; + case 2: + res = _a.sent(); + if (!res.status) return [2]; + return [3, 4]; + case 3: + err_4 = _a.sent(); + return [3, 4]; + case 4: + return [2]; + } + }); + }); + }); + _this_1.fixedTableHead('#receive_table', '356px'); + _this_1.renderMailMessageList(); + }, + }), + ]; + case 2: + _b.sent(); + return [3, 4]; + case 3: + error_2 = _b.sent(); + return [3, 4]; + case 4: + return [2]; + } + }); + }); + }; + Public.prototype.setLinkText = function (el, text, type) { + var $el = $(el); + switch (type) { + case 'btlink': + $el.text(text).addClass('btlink').removeClass('bt_warning'); + break; + case 'bt_warning': + $el.text(text).addClass('bt_warning').removeClass('btlink'); + break; + } + }; + Public.prototype.addMessageMail = function () { + return __awaiter(this, void 0, void 0, function () { + var error_3; + var _this_1 = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [ + 4, + this.$open({ + area: '400px', + title: 'Add recipient email', + btn: ['Create', 'Close'], + content: + '
    \n
    \n Recipient mailbox\n
    \n \n
    \n
    \n
    ', + yes: function (config) { + return __awaiter(_this_1, void 0, void 0, function () { + var email, rdata; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + email = $('input[name=creater_email_value]').val(); + return [ + 4, + this.$verifySubmitList([ + [email === '', 'Recipient mailbox cannot be empty!'], + [!this.$checkEmail(email), 'Recipient mailbox format is incorrect!'], + ]), + ]; + case 1: + _a.sent(); + return [4, this.$request('addMailAddress', {email: email})]; + case 2: + rdata = _a.sent(); + if (!rdata.status) return [3, 5]; + config.close(); + return [4, this.$delay()]; + case 3: + _a.sent(); + return [4, this.renderMailMessageList()]; + case 4: + _a.sent(); + _a.label = 5; + case 5: + return [2]; + } + }); + }); + }, + }), + ]; + case 1: + _a.sent(); + return [3, 3]; + case 2: + error_3 = _a.sent(); + return [3, 3]; + case 3: + return [2]; + } + }); + }); + }; + Public.prototype.setMailMessageView = function (info) { + return __awaiter(this, void 0, void 0, function () { + var rdata, _a, qq_mail, qq_stmp_pwd, hosts, port, verifyPortList, err_5; + var _this_1 = this; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _b.trys.push([0, 3, , 4]); + return [4, this.$request('getMsgConfig')]; + case 1: + rdata = _b.sent(); + (_a = rdata.user_mail.info.msg), (qq_mail = _a.qq_mail), (qq_stmp_pwd = _a.qq_stmp_pwd), (hosts = _a.hosts), (port = _a.port); + qq_mail = qq_mail || ''; + qq_stmp_pwd = qq_stmp_pwd || ''; + hosts = hosts || ''; + port = port || ''; + verifyPortList = ['25', '465', '587', '']; + return [ + 4, + this.$open({ + title: 'Set sender email information', + area: '466px', + content: + '
    \n
    \n Sender email\n
    \n
    \n
    \n SMTP password\n
    \n
    \n
    \n SMTP server\n
    \n
    \n
    \n SMTP port\n
    \n \n \n
    \n
    \n
      \n
    • 465 port is recommended, the protocol is SSL/TLS
    • \n
    • Port 25 is SMTP protocol, port 587 is STARTTLS protocol
    • \n
    \n
    \n ' + ) + .concat( + qq_mail ? '' : '', + '\n \n \n
    \n
    ' + ), + success: function (layers, indexs) { + return __awaiter(_this_1, void 0, void 0, function () { + var portSelect, mailPort; + var _this_1 = this; + return __generator(this, function (_a) { + portSelect = $('#port_select'); + mailPort = $('input[name=channel_email_port]'); + portSelect.change(function (ev) { + var that = $(ev.target), + mailPort = $('input[name=channel_email_port]'); + that.css('width', ev.target.value === 'other' ? '100px' : '300px'); + mailPort.css('display', ev.target.value === 'other' ? 'inline-block' : 'none'); + }); + $('.SetChannelEmail').click(function () { + return __awaiter(_this_1, void 0, void 0, function () { + var email, stmp_pwd, hosts, port, portSelectVal, rdata, text, + type; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + email = $('input[name="channel_email_value"]').val(); + stmp_pwd = $('input[name="channel_email_password"]').val(); + hosts = $('input[name="channel_email_server"]').val(); + (port = ''), (portSelectVal = portSelect.val()); + port = portSelectVal === 'other' ? mailPort.val() : portSelectVal; + return [ + 4, + this.$verifySubmitList([ + [!email, 'Email address cannot be empty!'], + [!stmp_pwd, 'STMP password cannot be empty!'], + [!hosts, 'STMP server address cannot be empty!'], + [!port, 'STMP server port cannot be empty!'], + [!this.$checkPort(port), 'STMP server port format is incorrect'], + ]), + ]; + case 1: + _a.sent(); + return [4, this.$request('setMailConfig', { + email: email, + stmp_pwd: stmp_pwd, + hosts: hosts, + port: port + })]; + case 2: + rdata = _a.sent(); + if (!rdata.status) return [2]; + layer.close(indexs); + info.isSetEmail = true; + text = info.mail ? 'Already set' : 'Not set'; + type = info.mail ? 'btlink' : 'bt_warning'; + this.setLinkText('.setMessageChannelMail', 'Email is set', 'btlink'); + this.setLinkText('.setAlarmMail', text, type); + return [4, this.$delay()]; + case 3: + _a.sent(); + return [4, this.renderMailMessageList()]; + case 4: + _a.sent(); + return [2]; + } + }); + }); + }); + $('.smtp_closeBtn').click(function () { + layer.close(indexs); + }); + $('.set_empty').click(function () { + return __awaiter(_this_1, void 0, void 0, function () { + var rdata; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + return [4, this.$request(['config/set_empty', 'notification, please wait...'], {type: 'mail'})]; + case 1: + rdata = _a.sent(); + if (!rdata.status) return [2]; + layer.close(indexs); + info.isSetEmail = false; + this.setLinkText('.setMessageChannelMail', 'Email is not set', 'bt_warning'); + this.setLinkText('.setAlarmMail', 'Email is not set', 'bt_warning'); + return [2]; + } + }); + }); + }); + return [2]; + }); + }); + }, + }), + ]; + case 2: + _b.sent(); + return [3, 4]; + case 3: + err_5 = _b.sent(); + return [3, 4]; + case 4: + return [2]; + } + }); + }); + }; + Public.prototype.renderMailMessageList = function () { + return __awaiter(this, void 0, void 0, function () { + var rdata, _html, _list, i, item; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + return [4, this.$request('getMailList', {loading: true, msg: false})]; + case 1: + rdata = _a.sent(); + (_html = ''), (_list = rdata.user_mail.mail_list); + if (_list.length > 0) { + for (i = 0; i < _list.length; i++) { + item = _list[i]; + _html += '\n ' + .concat(item, '.\n \n Del\n \n '); + } + } else { + _html = 'No Data'; + } + $('#receive_table tbody').html(_html); + return [2]; + } + }); + }); + }; + return Public; + })(utils_1.default); + exports.default = Public; +}); diff --git a/BTPanel/static/bootstrap-3.3.5/css/bootstrap.min.css b/BTPanel/static/bootstrap-3.3.5/css/bootstrap.min.css index 7477e255..da4797c2 100644 --- a/BTPanel/static/bootstrap-3.3.5/css/bootstrap.min.css +++ b/BTPanel/static/bootstrap-3.3.5/css/bootstrap.min.css @@ -2,4 +2,4 @@ * Bootstrap v3.3.5 (http://getbootstrap.com) * Copyright 2011-2015 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;-webkit-text-size-adjust:100%;-ms-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:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}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{padding:0;border: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-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{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 td,.table-bordered th{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:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro: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,.glyphicon-True:before{content:"\e072"}.glyphicon-pause:before,.glyphicon-False: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}:after,:before{-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:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:none}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;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:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.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,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.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:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.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:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;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:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;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{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.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-md-1,.col-md-10,.col-md-11,.col-md-12,.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-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.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-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{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-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{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-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{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-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{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:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{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=checkbox]:focus,input[type=radio]:focus{outline:none}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(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:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;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:34px}.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],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.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],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@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 .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:none}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#555;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#fff;background-color:#10952a;border-color:#398439}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#fff;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.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:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.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:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#20a53a;border-color:#20a53a}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#10952a;border-color:#255625}.btn-success:hover{color:#fff;background-color:#10952a;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#10952a;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.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:#20a53a;border-color:#20a53a}.btn-success .badge{color:#20a53a;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.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:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.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:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.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:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;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:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .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-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.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}.dropdown,.dropup{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;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{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-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-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-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(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-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;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-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;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=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{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-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;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:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.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:30px;padding:5px 10px;font-size:12px;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:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn: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:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{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-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-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:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-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:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{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{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.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:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.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:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.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:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.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{margin-bottom:5px;text-align:center}.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:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.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-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{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-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{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;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{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;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;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:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@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 .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@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 .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{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;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left: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:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#20a53a}.label-success[href]:focus,.label-success[href]:hover{background-color:#10952a}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.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:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.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{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-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{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{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);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-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:#20a53a}.progress-striped .progress-bar-success{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)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{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)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{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)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{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)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.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-body,.media-left,.media-right{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{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-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:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}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:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}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:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}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:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}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:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;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-left-radius:3px;border-top-right-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-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody: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:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.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 th:first-child,.panel>.table-responsive:first-child>.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 th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.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 th:last-child,.panel>.table-responsive:first-child>.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 th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.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 th:first-child,.panel>.table-responsive:last-child>.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 th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.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 th:last-child,.panel>.table-responsive:last-child>.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 th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.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 #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.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>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height: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:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.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:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;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:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.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,.5);box-shadow:0 5px 15px rgba(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:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;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:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;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{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,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;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.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%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(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-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left: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-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-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}td.visible-xs,th.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}td.visible-sm,th.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}td.visible-md,th.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}td.visible-lg,th.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}td.visible-print,th.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}}.bootstrap-select>select.bs-select-hidden,select.bs-select-hidden,select.selectpicker{display:none!important}.bootstrap-select{width:220px\0}.bootstrap-select>.dropdown-toggle{position:relative;width:100%;z-index:1;text-align:right;white-space:nowrap}.bootstrap-select>.dropdown-toggle.bs-placeholder,.bootstrap-select>.dropdown-toggle.bs-placeholder:active,.bootstrap-select>.dropdown-toggle.bs-placeholder:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder:hover{color:#999}.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success:hover{color:rgba(255,255,255,.5)}.bootstrap-select>select{position:absolute!important;bottom:0;left:50%;display:block!important;width:.5px!important;height:100%!important;padding:0!important;opacity:0!important;border:none}.bootstrap-select>select.mobile-device{top:0;left:0;display:block!important;width:100%!important;z-index:2}.bootstrap-select.is-invalid .dropdown-toggle,.error .bootstrap-select .dropdown-toggle,.has-error .bootstrap-select .dropdown-toggle,.was-validated .bootstrap-select .selectpicker:invalid+.dropdown-toggle{border-color:#b94a48}.bootstrap-select.is-valid .dropdown-toggle,.was-validated .bootstrap-select .selectpicker:valid+.dropdown-toggle{border-color:#28a745}.bootstrap-select.fit-width{width:auto!important}.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn){width:220px}.bootstrap-select .dropdown-toggle:focus{outline:thin dotted #333!important;outline:5px auto -webkit-focus-ring-color!important;outline-offset:-2px}.bootstrap-select.form-control{margin-bottom:0;padding:0;border:none}:not(.input-group)>.bootstrap-select.form-control:not([class*=col-]){width:100%}.bootstrap-select.form-control.input-group-btn{z-index:auto}.bootstrap-select.form-control.input-group-btn:not(:first-child):not(:last-child)>.btn{border-radius:0}.bootstrap-select:not(.input-group-btn),.bootstrap-select[class*=col-]{float:none;display:inline-block;margin-left:0}.bootstrap-select.dropdown-menu-right,.bootstrap-select[class*=col-].dropdown-menu-right,.row .bootstrap-select[class*=col-].dropdown-menu-right{float:right}.form-group .bootstrap-select,.form-horizontal .bootstrap-select,.form-inline .bootstrap-select{margin-bottom:0}.form-group-lg .bootstrap-select.form-control,.form-group-sm .bootstrap-select.form-control{padding:0}.form-group-lg .bootstrap-select.form-control .dropdown-toggle,.form-group-sm .bootstrap-select.form-control .dropdown-toggle{height:100%;font-size:inherit;line-height:inherit;border-radius:inherit}.bootstrap-select.form-control-lg .dropdown-toggle,.bootstrap-select.form-control-sm .dropdown-toggle{font-size:inherit;line-height:inherit;border-radius:inherit}.bootstrap-select.form-control-sm .dropdown-toggle{padding:.25rem .5rem}.bootstrap-select.form-control-lg .dropdown-toggle{padding:.5rem 1rem}.form-inline .bootstrap-select .form-control{width:100%}.bootstrap-select.disabled,.bootstrap-select>.disabled{cursor:not-allowed}.bootstrap-select.disabled:focus,.bootstrap-select>.disabled:focus{outline:0!important}.bootstrap-select.bs-container{position:absolute;top:0;left:0;height:0!important;padding:0!important}.bootstrap-select.bs-container .dropdown-menu{z-index:1060}.bootstrap-select .dropdown-toggle:before{content:'';display:inline-block}.bootstrap-select .dropdown-toggle .filter-option{position:absolute;top:0;left:0;padding-top:inherit;padding-right:inherit;padding-bottom:inherit;padding-left:inherit;height:100%;width:100%;text-align:left}.bootstrap-select .dropdown-toggle .filter-option-inner{padding-right:inherit}.bootstrap-select .dropdown-toggle .filter-option-inner-inner{overflow:hidden}.bootstrap-select .dropdown-toggle .caret{position:absolute;top:50%;right:12px;margin-top:-2px;vertical-align:middle}.input-group .bootstrap-select.form-control .dropdown-toggle{border-radius:inherit}.bootstrap-select[class*=col-] .dropdown-toggle{width:100%}.bootstrap-select .dropdown-menu{min-width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select .dropdown-menu>.inner:focus{outline:0!important}.bootstrap-select .dropdown-menu.inner{position:static;float:none;border:0;padding:0;margin:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.bootstrap-select .dropdown-menu li{position:relative}.bootstrap-select .dropdown-menu li.active small{color:rgba(255,255,255,.5)!important}.bootstrap-select .dropdown-menu li.disabled a{cursor:not-allowed}.bootstrap-select .dropdown-menu li a{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bootstrap-select .dropdown-menu li a.opt{position:relative;padding-left:2.25em}.bootstrap-select .dropdown-menu li a span.check-mark{display:none}.bootstrap-select .dropdown-menu li a span.text{display:inline-block}.bootstrap-select .dropdown-menu li small{padding-left:.5em}.bootstrap-select .dropdown-menu .notify{position:absolute;bottom:5px;width:96%;margin:0 2%;min-height:26px;padding:3px 5px;background:#f5f5f5;border:1px solid #e3e3e3;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05);pointer-events:none;opacity:.9;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select .no-results{padding:3px;background:#f5f5f5;margin:0 5px;white-space:nowrap}.bootstrap-select.fit-width .dropdown-toggle .filter-option{position:static;display:inline;padding:0}.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner,.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner-inner{display:inline}.bootstrap-select.fit-width .dropdown-toggle .caret{position:static;top:auto;margin-top:-1px}.bootstrap-select.show-tick .dropdown-menu .selected span.check-mark{position:absolute;display:inline-block;right:15px;top:5px}.bootstrap-select.show-tick .dropdown-menu li a span.text{margin-right:34px}.bootstrap-select .bs-ok-default:after{content:'';display:block;width:.5em;height:1em;border-style:solid;border-width:0 .26em .26em 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle,.bootstrap-select.show-menu-arrow.show>.dropdown-toggle{z-index:1061}.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:before{content:'';border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid rgba(204,204,204,.2);position:absolute;bottom:-4px;left:9px;display:none}.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:after{content:'';border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;bottom:-4px;left:10px;display:none}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:before{bottom:auto;top:-4px;border-top:7px solid rgba(204,204,204,.2);border-bottom:0}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:after{bottom:auto;top:-4px;border-top:6px solid #fff;border-bottom:0}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:before{right:12px;left:auto}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:after{right:13px;left:auto}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle .filter-option:after,.bootstrap-select.show-menu-arrow.open>.dropdown-toggle .filter-option:before,.bootstrap-select.show-menu-arrow.show>.dropdown-toggle .filter-option:after,.bootstrap-select.show-menu-arrow.show>.dropdown-toggle .filter-option:before{display:block}.bs-actionsbox,.bs-donebutton,.bs-searchbox{padding:4px 8px}.bs-actionsbox{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-actionsbox .btn-group button{width:50%}.bs-donebutton{float:left;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-donebutton .btn-group button{width:100%}.bs-searchbox+.bs-actionsbox{padding:0 8px 4px}.bs-searchbox .form-control{margin-bottom:0;width:100%;float:none} \ No newline at end of file + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-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:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}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{padding:0;border: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-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{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 td,.table-bordered th{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:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro: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-vip:before{content:"\e600"}.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,.glyphicon-True:before{content:"\e072"}.glyphicon-pause:before,.glyphicon-False: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}:after,:before{-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:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:none}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;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:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.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,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.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:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.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:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;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:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;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{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.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-md-1,.col-md-10,.col-md-11,.col-md-12,.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-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.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-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{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-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{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-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{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-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{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:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{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=checkbox]:focus,input[type=radio]:focus{outline:none}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(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:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;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:34px}.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],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.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],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@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 .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:none}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#555;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#fff;background-color:#10952a;border-color:#398439}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#fff;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.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:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.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:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#20a53a;border-color:#20a53a}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#10952a;border-color:#255625}.btn-success:hover{color:#fff;background-color:#10952a;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#10952a;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.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:#20a53a;border-color:#20a53a}.btn-success .badge{color:#20a53a;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.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:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.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:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.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:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;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:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .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-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.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}.dropdown,.dropup{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;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{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-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-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-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(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-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;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-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;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=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{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-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;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:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.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:30px;padding:5px 10px;font-size:12px;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:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn: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:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{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-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-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:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-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:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{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{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.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:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.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:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.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:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.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{margin-bottom:5px;text-align:center}.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:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.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-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{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-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{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;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{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;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;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:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@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 .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@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 .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{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;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left: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:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#20a53a}.label-success[href]:focus,.label-success[href]:hover{background-color:#10952a}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.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:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.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{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-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{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{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);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-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:#20a53a}.progress-striped .progress-bar-success{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)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{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)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{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)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{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)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.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-body,.media-left,.media-right{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{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-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:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}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:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}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:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}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:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}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:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;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-left-radius:3px;border-top-right-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-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody: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:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.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 th:first-child,.panel>.table-responsive:first-child>.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 th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.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 th:last-child,.panel>.table-responsive:first-child>.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 th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.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 th:first-child,.panel>.table-responsive:last-child>.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 th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.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 th:last-child,.panel>.table-responsive:last-child>.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 th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.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 #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.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>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height: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:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.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:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;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:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.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,.5);box-shadow:0 5px 15px rgba(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:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;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:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;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{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,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;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.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%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(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-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left: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-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-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}td.visible-xs,th.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}td.visible-sm,th.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}td.visible-md,th.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}td.visible-lg,th.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}td.visible-print,th.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}}.bootstrap-select>select.bs-select-hidden,select.bs-select-hidden,select.selectpicker{display:none!important}.bootstrap-select{width:220px\0}.bootstrap-select>.dropdown-toggle{position:relative;width:100%;z-index:1;text-align:right;white-space:nowrap}.bootstrap-select>.dropdown-toggle.bs-placeholder,.bootstrap-select>.dropdown-toggle.bs-placeholder:active,.bootstrap-select>.dropdown-toggle.bs-placeholder:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder:hover{color:#999}.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success:hover{color:rgba(255,255,255,.5)}.bootstrap-select>select{position:absolute!important;bottom:0;left:50%;display:block!important;width:.5px!important;height:100%!important;padding:0!important;opacity:0!important;border:none}.bootstrap-select>select.mobile-device{top:0;left:0;display:block!important;width:100%!important;z-index:2}.bootstrap-select.is-invalid .dropdown-toggle,.error .bootstrap-select .dropdown-toggle,.has-error .bootstrap-select .dropdown-toggle,.was-validated .bootstrap-select .selectpicker:invalid+.dropdown-toggle{border-color:#b94a48}.bootstrap-select.is-valid .dropdown-toggle,.was-validated .bootstrap-select .selectpicker:valid+.dropdown-toggle{border-color:#28a745}.bootstrap-select.fit-width{width:auto!important}.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn){width:220px}.bootstrap-select .dropdown-toggle:focus{outline:thin dotted #333!important;outline:5px auto -webkit-focus-ring-color!important;outline-offset:-2px}.bootstrap-select.form-control{margin-bottom:0;padding:0;border:none}:not(.input-group)>.bootstrap-select.form-control:not([class*=col-]){width:100%}.bootstrap-select.form-control.input-group-btn{z-index:auto}.bootstrap-select.form-control.input-group-btn:not(:first-child):not(:last-child)>.btn{border-radius:0}.bootstrap-select:not(.input-group-btn),.bootstrap-select[class*=col-]{float:none;display:inline-block;margin-left:0}.bootstrap-select.dropdown-menu-right,.bootstrap-select[class*=col-].dropdown-menu-right,.row .bootstrap-select[class*=col-].dropdown-menu-right{float:right}.form-group .bootstrap-select,.form-horizontal .bootstrap-select,.form-inline .bootstrap-select{margin-bottom:0}.form-group-lg .bootstrap-select.form-control,.form-group-sm .bootstrap-select.form-control{padding:0}.form-group-lg .bootstrap-select.form-control .dropdown-toggle,.form-group-sm .bootstrap-select.form-control .dropdown-toggle{height:100%;font-size:inherit;line-height:inherit;border-radius:inherit}.bootstrap-select.form-control-lg .dropdown-toggle,.bootstrap-select.form-control-sm .dropdown-toggle{font-size:inherit;line-height:inherit;border-radius:inherit}.bootstrap-select.form-control-sm .dropdown-toggle{padding:.25rem .5rem}.bootstrap-select.form-control-lg .dropdown-toggle{padding:.5rem 1rem}.form-inline .bootstrap-select .form-control{width:100%}.bootstrap-select.disabled,.bootstrap-select>.disabled{cursor:not-allowed}.bootstrap-select.disabled:focus,.bootstrap-select>.disabled:focus{outline:0!important}.bootstrap-select.bs-container{position:absolute;top:0;left:0;height:0!important;padding:0!important}.bootstrap-select.bs-container .dropdown-menu{z-index:1060}.bootstrap-select .dropdown-toggle:before{content:'';display:inline-block}.bootstrap-select .dropdown-toggle .filter-option{position:absolute;top:0;left:0;padding-top:inherit;padding-right:inherit;padding-bottom:inherit;padding-left:inherit;height:100%;width:100%;text-align:left}.bootstrap-select .dropdown-toggle .filter-option-inner{padding-right:inherit}.bootstrap-select .dropdown-toggle .filter-option-inner-inner{overflow:hidden}.bootstrap-select .dropdown-toggle .caret{position:absolute;top:50%;right:12px;margin-top:-2px;vertical-align:middle}.input-group .bootstrap-select.form-control .dropdown-toggle{border-radius:inherit}.bootstrap-select[class*=col-] .dropdown-toggle{width:100%}.bootstrap-select .dropdown-menu{min-width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select .dropdown-menu>.inner:focus{outline:0!important}.bootstrap-select .dropdown-menu.inner{position:static;float:none;border:0;padding:0;margin:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.bootstrap-select .dropdown-menu li{position:relative}.bootstrap-select .dropdown-menu li.active small{color:rgba(255,255,255,.5)!important}.bootstrap-select .dropdown-menu li.disabled a{cursor:not-allowed}.bootstrap-select .dropdown-menu li a{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bootstrap-select .dropdown-menu li a.opt{position:relative;padding-left:2.25em}.bootstrap-select .dropdown-menu li a span.check-mark{display:none}.bootstrap-select .dropdown-menu li a span.text{display:inline-block}.bootstrap-select .dropdown-menu li small{padding-left:.5em}.bootstrap-select .dropdown-menu .notify{position:absolute;bottom:5px;width:96%;margin:0 2%;min-height:26px;padding:3px 5px;background:#f5f5f5;border:1px solid #e3e3e3;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05);pointer-events:none;opacity:.9;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select .no-results{padding:3px;background:#f5f5f5;margin:0 5px;white-space:nowrap}.bootstrap-select.fit-width .dropdown-toggle .filter-option{position:static;display:inline;padding:0}.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner,.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner-inner{display:inline}.bootstrap-select.fit-width .dropdown-toggle .caret{position:static;top:auto;margin-top:-1px}.bootstrap-select.show-tick .dropdown-menu .selected span.check-mark{position:absolute;display:inline-block;right:15px;top:5px}.bootstrap-select.show-tick .dropdown-menu li a span.text{margin-right:34px}.bootstrap-select .bs-ok-default:after{content:'';display:block;width:.5em;height:1em;border-style:solid;border-width:0 .26em .26em 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle,.bootstrap-select.show-menu-arrow.show>.dropdown-toggle{z-index:1061}.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:before{content:'';border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid rgba(204,204,204,.2);position:absolute;bottom:-4px;left:9px;display:none}.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:after{content:'';border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;bottom:-4px;left:10px;display:none}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:before{bottom:auto;top:-4px;border-top:7px solid rgba(204,204,204,.2);border-bottom:0}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:after{bottom:auto;top:-4px;border-top:6px solid #fff;border-bottom:0}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:before{right:12px;left:auto}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:after{right:13px;left:auto}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle .filter-option:after,.bootstrap-select.show-menu-arrow.open>.dropdown-toggle .filter-option:before,.bootstrap-select.show-menu-arrow.show>.dropdown-toggle .filter-option:after,.bootstrap-select.show-menu-arrow.show>.dropdown-toggle .filter-option:before{display:block}.bs-actionsbox,.bs-donebutton,.bs-searchbox{padding:4px 8px}.bs-actionsbox{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-actionsbox .btn-group button{width:50%}.bs-donebutton{float:left;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-donebutton .btn-group button{width:100%}.bs-searchbox+.bs-actionsbox{padding:0 8px 4px}.bs-searchbox .form-control{margin-bottom:0;width:100%;float:none} \ No newline at end of file diff --git a/BTPanel/static/bootstrap-3.3.5/fonts/glyphicons-halflings-regular.woff2 b/BTPanel/static/bootstrap-3.3.5/fonts/glyphicons-halflings-regular.woff2 index 64539b54c3751a6d9adb44c8e3a45ba5a73b77f0..43e801127af33b6f6c3b13bacd6d93ca0c98366a 100644 GIT binary patch literal 17848 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 diff --git a/BTPanel/static/css/files_style.css b/BTPanel/static/css/files_style.css index 103bf1ca..6b6593db 100644 --- a/BTPanel/static/css/files_style.css +++ b/BTPanel/static/css/files_style.css @@ -64,7 +64,7 @@ box-sizing: border-box; border-radius: 2px; cursor: pointer; - transition: all 200ms; + transition: all .2s; background-color: #fff; } .file_list_header .file_main_title{ @@ -105,16 +105,16 @@ display: none; } -.file_table_view.icon_view .file_name .iconfont, -.file_table_view.icon_view .file_checkbox, -.file_table_view.icon_view .file_ps, -.file_table_view.icon_view .file_type, -.file_table_view.icon_view .file_size, -.file_table_view.icon_view .file_mtime, -.file_table_view.icon_view .file_user, +.file_table_view.icon_view .app_menu_group, .file_table_view.icon_view .file_accept, -.file_table_view.icon_view .app_menu_group { - display: none; +.file_table_view.icon_view .file_checkbox, +.file_table_view.icon_view .file_mtime, +.file_table_view.icon_view .file_name .iconfont, +.file_table_view.icon_view .file_ps, +.file_table_view.icon_view .file_size, +.file_table_view.icon_view .file_type, +.file_table_view.icon_view .file_user { + display: none } .file_table_view.icon_view .file_tr { @@ -265,7 +265,7 @@ display: inline-block; height: 40px; line-height: 40px; - transition: all 500ms; + transition: all .5s; float: right; } @@ -281,8 +281,8 @@ width: 100%; height: 8px; position: absolute; - left: 0px; - right: 0px; + left: 0; + right: 0; background: -webkit-linear-gradient(top, rgba(220, 220, 220, .5), rgba(255, 255, 255, 0)); z-index: 99; } @@ -558,13 +558,7 @@ display: inline-block; position: relative; } -.file_table_view.list_view .file_list_content .file_ico_type img.file_images{ - width: 22px; - height: 22px; - position: absolute; - top: 50%; - margin-top: -11px; -} + .file_table_view.list_view .file_title { vertical-align: top; padding-left: 38px; @@ -600,7 +594,7 @@ border-radius: 2px; } -.file_table_view .file_list_content .file_icon { +.file_list_content .file_icon { width: 100%; width: 30px; height: 30px; @@ -614,39 +608,39 @@ cursor: pointer; } -.file_table_view .file_list_content .file_html { +.file_list_content .file_html { background-image: url(../img/file_icon/html.png); } -.file_table_view .file_list_content .file_css { +.file_list_content .file_css { background-image: url(../img/file_icon/css.png); } -.file_table_view .file_list_content .file_js { +.file_list_content .file_js { background-image: url(../img/file_icon/javascript.png); } -.file_table_view .file_list_content .file_json { +.file_list_content .file_json { background-image: url(../img/file_icon/json.png); } -.file_table_view .file_list_content .file_folder { +.file_list_content .file_folder { background-image: url(../img/file_icon/folder.png); } -.file_table_view .file_list_content .file_php { +.file_list_content .file_php { background-image: url(../img/file_icon/php.png); } -.file_table_view .file_list_content .file_log { +.file_list_content .file_log { background-image: url(../img/file_icon/log.png); } -.file_table_view .file_list_content .file_txt { +.file_list_content .file_txt { background-image: url(../img/file_icon/file.png); } -.file_table_view .file_list_content .file_py { +.file_list_content .file_py { background-image: url(../img/file_icon/python.png); width: 30px; height: 30px; @@ -654,11 +648,11 @@ top: 10px; } -.file_table_view .file_list_content .file_png { +.file_list_content .file_png { background-image: url(../img/file_icon/png.png); } -.file_table_view .file_list_content .file_lua { +.file_list_content .file_lua { background-image: url(../img/file_icon/lua.png); width: 30px; height: 30px; @@ -666,151 +660,144 @@ top: 10px; } -/* .file_table_view .file_list_content .file_sh{ - background-image: url(../img/file_icon/shell.png); - width: 30px; - height: 30px; - left: 2.5px; - top: 10px; -} */ -.file_table_view .file_list_content .file_access { +.file_list_content .file_access { background-image: url(../img/file_icon/access.png); } -.file_table_view .file_list_content .file_apk { +.file_list_content .file_apk { background-image: url(../img/file_icon/apk.png); } -.file_table_view .file_list_content .file_avi { +.file_list_content .file_avi { background-image: url(../img/file_icon/avi.png); } -.file_table_view .file_list_content .file_bmp { +.file_list_content .file_bmp { background-image: url(../img/file_icon/bmp.png); } -.file_table_view .file_list_content .file_cdr { +.file_list_content .file_cdr { background-image: url(../img/file_icon/cdr.png); } -.file_table_view .file_list_content .file_gif { +.file_list_content .file_gif { background-image: url(../img/file_icon/gif.png); } -.file_table_view .file_list_content .file_ico { +.file_list_content .file_ico { background-image: url(../img/file_icon/ico.png); } -.file_table_view .file_list_content .file_java { +.file_list_content .file_java { background-image: url(../img/file_icon/java.png); } -.file_table_view .file_list_content .file_jpeg { +.file_list_content .file_jpeg { background-image: url(../img/file_icon/jpeg.png); } -.file_table_view .file_list_content .file_jpg { +.file_list_content .file_jpg { background-image: url(../img/file_icon/jpg.png); } -.file_table_view .file_list_content .file_mkv { +.file_list_content .file_mkv { background-image: url(../img/file_icon/mkv.png); } -.file_table_view .file_list_content .file_mov { +.file_list_content .file_mov { background-image: url(../img/file_icon/mov.png); } -.file_table_view .file_list_content .file_mp4 { +.file_list_content .file_mp4 { background-image: url(../img/file_icon/mp4.png); } -.file_table_view .file_list_content .file_mpeg { +.file_list_content .file_mpeg { background-image: url(../img/file_icon/mpeg.png); } -.file_table_view .file_list_content .file_mpg { +.file_list_content .file_mpg { background-image: url(../img/file_icon/mpg.png); } -.file_table_view .file_list_content .file_pdf { +.file_list_content .file_pdf { background-image: url(../img/file_icon/pdf.png); } -.file_table_view .file_list_content .file_pptx, -.file_table_view .file_list_content .file_ppt { +.file_list_content .file_pptx, +.file_list_content .file_ppt { background-image: url(../img/file_icon/ppt.png); width: 30px; height: 30px; left: 2.5px; } -.file_table_view .file_list_content .file_rar { +.file_list_content .file_rar { background-image: url(../img/file_icon/rar.png); } -.file_table_view .file_list_content .file_rm { +.file_list_content .file_rm { background-image: url(../img/file_icon/rm.png); } -.file_table_view .file_list_content .file_rmvb { +.file_list_content .file_rmvb { background-image: url(../img/file_icon/rmvb.png); } -.file_table_view .file_list_content .file_sql { +.file_list_content .file_sql { background-image: url(../img/file_icon/sql.png); } -.file_table_view .file_list_content .file_swf { +.file_list_content .file_swf { background-image: url(../img/file_icon/swf.png); } -.file_table_view .file_list_content .file_tar { +.file_list_content .file_tar { background-image: url(../img/file_icon/tar.png); } -.file_table_view .file_list_content .file_webm { +.file_list_content .file_webm { background-image: url(../img/file_icon/webm.png); } -.file_table_view .file_list_content .file_webp { +.file_list_content .file_webp { background-image: url(../img/file_icon/webp.png); } -.file_table_view .file_list_content .file_wma { +.file_list_content .file_wma { background-image: url(../img/file_icon/wma.png); } -.file_table_view .file_list_content .file_wmv { +.file_list_content .file_wmv { background-image: url(../img/file_icon/wmv.png); } -.file_table_view .file_list_content .file_docx, -.file_table_view .file_list_content .file_doc { +.file_list_content .file_docx, +.file_list_content .file_doc { background-image: url(../img/file_icon/doc.png); width: 30px; height: 30px; left: 2.5px; } -.file_table_view .file_list_content .file_xlsx, -.file_table_view .file_list_content .file_xls { +.file_list_content .file_xlsx, +.file_list_content .file_xls { background-image: url(../img/file_icon/xls.png); width: 30px; height: 30px; left: 2.5px; } -.file_table_view .file_list_content .file_xml { +.file_list_content .file_xml { background-image: url(../img/file_icon/xml.png); } -.file_table_view .file_list_content .file_zip { +.file_list_content .file_zip { background-image: url(../img/file_icon/zip.png); } -.file_table_view .file_list_content .file_tar, -.file_table_view .file_list_content .file_gz { +.file_list_content .file_tar, +.file_list_content .file_gz { background-image: url(../img/file_icon/tar.png); } @@ -885,7 +872,11 @@ top: 50%; margin-top: -8px; font-style: normal; +} +.selection_right_menu li .property_file_icon { + background-image: url(data:image/png; + base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA7klEQVQ4T6WTQUrDUBCG///lBnZboeAFvEBvUcWV0BIy3dadJ3CnSzNJcF20d+giF/AALRTi1t7gZaQhkVJ0kb5ZDMyb+T+YNzPEiRVFceG9nwAYkxwf0mZWAiijKFrFcbw/lvA4yLLszsyeAIxOwW28I/mYJMmyy/8CVNX+Ef35LCKNtnGq+gxg0QcA4EVEHpjn+bCu608Ag56Ab+fcNdM0nZJ86yluys1sdgC8kpyfCUipqhsAVy3gQ0RuVbUCMCR5772vnHNrAF8icqmq7wBu2vptOCC4heBPDB5j8CJ14wta5Q4SdEwdpO85/wAdKopJjTYPqgAAAABJRU5ErkJggg==)!important } .nav_down_list:before { @@ -1229,8 +1220,8 @@ @-webkit-keyframes uplaod { 0% { - -webkit-transform: translateY(0px); - transform: translateY(0px); + -webkit-transform: translateY(0); + transform: translateY(0); } 100% { @@ -1241,9 +1232,9 @@ @keyframes uplaod { 0% { - -ms-transform: translateY(0px); - -webkit-transform: translateY(0px); - transform: translateY(0px); + -ms-transform: translateY(0); + -webkit-transform: translateY(0); + transform: translateY(0); } 100% { @@ -1254,7 +1245,7 @@ } .file_nav_view { - height: 32px; + min-height: 32px; margin: 15px 0; font-size: 0; } @@ -1338,7 +1329,7 @@ box-sizing: border-box; cursor: pointer; border-radius: 2px; - transition: all 100ms; + transition: all .1s; position: relative; padding: 7px 10px; } @@ -1471,11 +1462,11 @@ .nav_down_list { display: none; - transition: all 500ms; + transition: all .5s; list-style: none; - background: #ffffff; + background: #fff; border-radius: 2px; - box-shadow: 4px 2px 5px 0px #ececec; + box-shadow: 4px 2px 5px 0 #ececec; border: 1px solid #cfcfcf; position: absolute; left: -1px; @@ -1502,7 +1493,7 @@ box-sizing: border-box; cursor: pointer; position: relative; - transition: all 500ms; + transition: all .5s; } .nav_group.mount_disk_list .file_disk_list .nav_btn:last-child { @@ -1632,7 +1623,7 @@ left: 0; border: 1px solid #cfcfcf; border-radius: 2px; - box-shadow: 4px 2px 5px 0px #ececec; + box-shadow: 4px 2px 5px 0 #ececec; z-index: 9999; background-color: #fff; } @@ -1702,10 +1693,10 @@ /* end */ /* 重命名和新建 - 列表*/ -.file_table_view.list_view .createModel input , +.file_table_view.list_view .createModel input, .file_table_view .file_list_content .file_tr.editr_tr input{ width: 100%; - padding: 0px 0 0 5px; + padding: 0 0 0 5px; height: 25px; border: 1px solid #ececec; outline: none; @@ -1915,7 +1906,7 @@ background: #efefef; box-shadow: inset 0 3px 6px rgba(0, 0, 0, 0.1); cursor: no-drop; - transition: all 500ms; + transition: all .5s; } .file_path_views .forward_path span:first-child { @@ -1985,7 +1976,7 @@ display: inline-block; font-size: 14px; background-image: url(../img/file_icon/file_menu_icon.png); - background-position: 0px -16px; + background-position: 0 -16px; background-size: auto; height: 16px; position: absolute; @@ -2093,7 +2084,7 @@ display: inline-block; border-left: 1px solid #f3f3f3; border-right: 1px solid #f3f3f3; - transition: all 500ms; + transition: all .5s; background: #f3f3f3; } @@ -2122,11 +2113,11 @@ .file_dir_item .nav_down_list li.active { font-weight: 600; color: #333; - background-color: #eeeeee; + background-color: #eee; } .file_dir_item .nav_down_list li:hover { - background: #eeeeee; + background: #eee; } .file_dir_item:first-child .file_dir { @@ -2270,7 +2261,7 @@ width: 210px; height: 30px; background: #fff; - box-shadow: 4px 2px 5px 0px #ececec; + box-shadow: 4px 2px 5px 0 #ececec; z-index: 9999; border: 1px solid #ececec; border-radius: 2px; @@ -2278,7 +2269,7 @@ .search_path_views .file_search_config { position: absolute; - right: 35px; + right: 40px; font-size: 12px; color: #666; width: 105px; @@ -2349,7 +2340,7 @@ } .file_bodys { - background-color: white; + background-color: #fff; margin: 10px 15px; padding: 15px 20px; font-size: 12px; @@ -2703,7 +2694,7 @@ .preview_images_mask .preview_body img { position: absolute; display: none; - transition: all 200ms; + transition: all .2s; cursor: all-scroll; display: inline-block; opacity: 0; @@ -2724,7 +2715,7 @@ font-size: 18px; z-index: 999; opacity: 0; - transition: all 1000ms; + transition: all 1s; } .preview_images_mask .preview_toolbar a { @@ -2733,7 +2724,7 @@ line-height: 45px; text-align: center; display: inline-block; - transition: all 500ms; + transition: all .5s; border-radius: 3px; } @@ -2752,7 +2743,7 @@ .preview_images_mask .preview_cut_view { opacity: 0; - transition: all 500ms; + transition: all .5s; } .preview_images_mask .preview_cut_view a:hover { @@ -2771,7 +2762,7 @@ margin-top: -25px; background-color: rgb(194 194 194 / 80%); border-radius: 50%; - transition: all 200ms; + transition: all .2s; z-index: 999; } @@ -2858,7 +2849,7 @@ color: #fff; } .bt-property-setting .tab-nav{ - font-size: 0px; + font-size: 0; } .bt-property-setting .tab-nav span{ font-size: 12px; @@ -2882,13 +2873,13 @@ .bt-property-setting .property-box .attr-name{ - width: 90px; + width: 120px; padding-left: 10px; float: left; } .bt-property-setting .property-box .attr-content{ - margin-left: 80px; + margin-left: 120px; } .bt-property-setting .property-box .attr-content input{ height: 32px; @@ -2925,7 +2916,7 @@ line-height: 25px; } .bt-property-setting .property-box .attr-box .attr-content span{ - width: 450px; + max-width: 400px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; @@ -2937,7 +2928,7 @@ .details_box_view, .history_box_view, .property-box{ - height:388px !important; + height:386px !important; overflow:auto; } .details_box_view table, @@ -2968,6 +2959,10 @@ height: 30px; line-height: 20px; } +.details_box_view td div { + min-height: 30px; + height: auto; +} .details_box_view thead, .history_box_view thead{ border-bottom: 1px solid #f6f6f6; diff --git a/BTPanel/static/css/site.css b/BTPanel/static/css/site.css index f87fd312..ec114ba1 100644 --- a/BTPanel/static/css/site.css +++ b/BTPanel/static/css/site.css @@ -8,15 +8,15 @@ body { line-height: 1.4; color: #333; - font-family: "微软雅黑", Arial, Helvetica, sans-serif; - font-size: 12px + font-family: '微软雅黑', Arial, Helvetica, sans-serif; + font-size: 12px; } input, textarea, select { font-size: 100%; - font-family: inherit + font-family: inherit; } body, @@ -31,58 +31,60 @@ ul, ol, label, form { - margin: 0 + margin: 0; } h4, h5, h6 { - font-size: 1em + font-size: 1em; } ul, ol { padding-left: 0; - list-style-type: none + list-style-type: none; } fieldset, img { - border: 0 + border: 0; } a { color: #333; border: 0; - text-decoration: none + text-decoration: none; + cursor: pointer; } a:hover { - text-decoration: none + text-decoration: none; } a:link { -webkit-tap-highlight-color: rgba(0, 0, 0, 0); - -webkit-touch-callout: none + -webkit-touch-callout: none; } :-moz-placeholder { - color: #999 + color: #999; } ::-moz-placeholder { - color: #999 + color: #999; } input:-ms-input-placeholder { - color: #999 + color: #999; } input::-webkit-input-placeholder { - color: #999 + color: #999; } -input[type=checkbox], input[type=radio] { +input[type='checkbox'], +input[type='radio'] { height: 14px; width: 14px; margin-top: 0; @@ -90,75 +92,75 @@ input[type=checkbox], input[type=radio] { body, html { - height: 100% + height: 100%; } .f12 { - font-size: 12px + font-size: 12px; } .f14 { - font-size: 14px + font-size: 14px; } .f15 { - font-size: 15px + font-size: 15px; } .f16 { - font-size: 16px + font-size: 16px; } .f18 { - font-size: 18px + font-size: 18px; } .f20 { - font-size: 20px + font-size: 20px; } .cw { - color: white + color: white; } .c0 { - color: #000 + color: #000; } .c3 { - color: #333 + color: #333; } .c4 { - color: #444 + color: #444; } .c5 { - color: #555 + color: #555; } .c6 { - color: #666 + color: #666; } .c7 { - color: #777 + color: #777; } .c8 { - color: #888 + color: #888; } .c9 { - color: #999 + color: #999; } .cbt { - color: #20a53a + color: #20a53a; } .bgw { - background-color: white + background-color: white; } .move_class { @@ -194,147 +196,155 @@ html { } .plr10 { - padding: 0 10px + padding: 0 10px; } .plr15 { - padding: 0 15px + padding: 0 15px; } .plr20 { - padding: 0 20px + padding: 0 20px; } .ptb10 { - padding: 10px 0 + padding: 10px 0; } .ptb15 { - padding: 15px 0 + padding: 15px 0; } .ptb20 { - padding: 20px 0 + padding: 20px 0; } .pd0 { - padding: 0 + padding: 0; } .pd15 { - padding: 15px + padding: 15px; } .pd20 { - padding: 20px + padding: 20px; } .pd30 { - padding: 30px + padding: 30px; } .pr8 { - padding-right: 8px + padding-right: 8px; } .pl7 { - padding-left: 7px + padding-left: 7px; } .line .pb0 { - padding-bottom: 0 + padding-bottom: 0; } .pb15 { - padding-bottom: 15px + padding-bottom: 15px; } .pb55 { - padding-bottom: 55px + padding-bottom: 55px; } .pb70 { - padding-bottom: 70px + padding-bottom: 70px; } .mt5 { - margin-top: 5px + margin-top: 5px; +} + +.ml10 { + margin-left: 10px; } .mt10 { - margin-top: 10px + margin-top: 10px; } .mtb10 { - margin: 10px 0 + margin: 10px 0; } .mtb15 { - margin: 15px 0 + margin: 15px 0; } .mtb20 { - margin: 20px 0 + margin: 20px 0; } .mlr15 { - margin: 0 15px + margin: 0 15px; } .mlr20 { - margin: 0 20px + margin: 0 20px; } .mb0 { - margin-bottom: 0 !important; + margin-bottom: 0 !important; } .line .mb0 { - margin-bottom: 0 + margin-bottom: 0; +} + +.mb10 { + margin-bottom: 10px; } .mb15 { - margin-bottom: 15px + margin-bottom: 15px; } .mr50 { - margin-right: 50px + margin-right: 50px; } -.ml33{ - margin-left: 38px +.ml33 { + margin-left: 38px; } -.ml35{ +.ml35 { margin-left: 35px; } .ml45 { - margin-left: 50px + margin-left: 50px; } .ml5 { - margin-left: 5px + margin-left: 5px; } .mr5 { - margin-right: 5px + margin-right: 5px; } -.mr10{ +.mr10 { margin-right: 10px; } .mr20 { - margin-right: 20px + margin-right: 20px; } -.ml0{ +.ml0 { margin-left: 0; } .mg10 { - margin: 10px + margin: 10px; } .va0 { - vertical-align: 0 + vertical-align: 0; } .ico-font-ask { @@ -349,7 +359,7 @@ html { margin-left: 5px; text-align: center; width: 16px; - cursor: help + cursor: help; } .limit-text-length { @@ -370,22 +380,37 @@ html { } .btlink { - color: #20a53a + color: #20a53a; + font-style: inherit; } .btlink:hover { - cursor: pointer + cursor: pointer; + color: #238b37; +} + +.bterror { + color: #f00; + font-style: inherit; +} + +.bterror:hover { + color: #f00; +} + +.bt_warning { + color: #fc6d26; } .btn-btlink { border-color: #20a53a; color: #20a53a; - vertical-align: 1px + vertical-align: 1px; } .btn-btlink:hover { border-color: orange; - color: orange + color: orange; } .input-edit { cursor: pointer; @@ -394,22 +419,22 @@ html { min-width: 150px; display: inline-block; } -.input-edit:hover{ - border:#ccc 1px solid; +.input-edit:hover { + border: #ccc 1px solid; background-color: #fff; } -.baktext{ +.baktext { height: 20px; - border:#ccc 1px solid; + border: #ccc 1px solid; min-width: 150px; } .b-shadown { - transition: border-color .15s ease-in-out 0s, box-shadow .15s ease-in-out 0s + transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s; } .b-shadown:hover { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6) + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } .important-title { @@ -418,7 +443,7 @@ html { line-height: 20px; margin-bottom: 15px; padding-left: 10px; - box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .2); + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2); padding: 10px; } .info-title-tips { @@ -435,16 +460,16 @@ html { line-height: 30px; padding-left: 5px; border-radius: 2px; - -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 + -webkit-transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s; + -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; } .bt-input-text:focus, .bt-input-text:active { border: #66afe9 1px solid; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6) + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } .bt-submit { @@ -455,24 +480,33 @@ html { line-height: 34px; text-align: center; color: #fff; - cursor: pointer + cursor: pointer; } .cursor { - cursor: pointer + cursor: pointer; } .help-info-text { - margin-top: 15px + margin-top: 15px; } -.help-info-text>li { +.help-info-text > li { list-style: inside disc; - line-height: 24px + line-height: 24px; } .relative { - position: relative + position: relative; +} + +.flex { + display: flex; +} + +.flex > .text-overflow { + flex: 1; + width: 0; } .ico-copy { @@ -480,35 +514,35 @@ html { height: 14px; width: 12px; display: inline-block; - vertical-align: -2px + vertical-align: -2px; } .zclip embed { - vertical-align: top + vertical-align: top; } .webDelete .options { - padding: 20px 0 + padding: 20px 0; } .webDelete .options label { - margin-right:25px; + margin-right: 25px; float: left; - font-weight: normal + font-weight: normal; } -.webDelete .options label:last-chlid{ - margin-right:0; +.webDelete .options label:last-chlid { + margin-right: 0; } .webDelete .options label input { float: left; margin: 0 10px 0 0; - margin-top: 1px + margin-top: 1px; } .webDelete .options label span { float: left; margin: 0; - line-height: 16px + line-height: 16px; } .webDelete .vcode { @@ -520,12 +554,12 @@ html { margin: 10px 0; padding-left: 12px; text-align: left; - color: #444 + color: #444; } .webDelete .vcode .text { margin-right: 10px; - margin-left: 10px + margin-left: 10px; } .webDelete .vcode #vcodeResult { @@ -534,94 +568,94 @@ html { line-height: 26px; margin-left: 10px; width: 50px; - color: #444 + color: #444; } .btswitch { - display: none + display: none; } -.btswitch+.btswitch-btn { +.btswitch + .btswitch-btn { outline: 0; display: block; width: 3em; height: 1.8em; position: relative; - cursor: pointer + cursor: pointer; } -.btswitch+.btswitch-btn:after, -.btswitch+.btswitch-btn:before { +.btswitch + .btswitch-btn:after, +.btswitch + .btswitch-btn:before { position: relative; display: block; - content: ""; + content: ''; width: 50%; - height: 100% + height: 100%; } -.btswitch+.btswitch-btn:after { - left: 0 +.btswitch + .btswitch-btn:after { + left: 0; } -.btswitch+.btswitch-btn:before { - display: none +.btswitch + .btswitch-btn:before { + display: none; } -.btswitch:checked+.btswitch-btn:after { - left: 50% +.btswitch:checked + .btswitch-btn:after { + left: 50%; } -.btswitch-ios+.btswitch-btn { +.btswitch-ios + .btswitch-btn { background: #cdcdcd; - border-radius: .9em; + border-radius: 0.9em; padding: 2px; - -webkit-transition: all .4s ease; - transition: all .4s ease; - border: 1px solid #e8eae9 + -webkit-transition: all 0.4s ease; + transition: all 0.4s ease; + border: 1px solid #e8eae9; } -.btswitch-ios+.btswitch-btn:after { - border-radius: .9em; +.btswitch-ios + .btswitch-btn:after { + border-radius: 0.9em; background: #fbfbfb; - -webkit-transition: left .3s cubic-bezier(.175, .885, .32, 1.275), padding .3s ease, margin .3s ease; - transition: left .3s cubic-bezier(.175, .885, .32, 1.275), padding .3s ease, margin .3s ease; - -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, .1), 0 4px 0 rgba(0, 0, 0, .08); - box-shadow: 0 0 0 1px rgba(0, 0, 0, .1), 0 4px 0 rgba(0, 0, 0, .08) + -webkit-transition: left 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275), padding 0.3s ease, margin 0.3s ease; + transition: left 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275), padding 0.3s ease, margin 0.3s ease; + -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1), 0 4px 0 rgba(0, 0, 0, 0.08); + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1), 0 4px 0 rgba(0, 0, 0, 0.08); } -.btswitch-ios+.btswitch-btn:active { +.btswitch-ios + .btswitch-btn:active { -webkit-box-shadow: inset 0 0 0 2em #e8eae9; - box-shadow: inset 0 0 0 2em #e8eae9 + box-shadow: inset 0 0 0 2em #e8eae9; } -.btswitch-ios+.btswitch-btn:active:after { - padding-right: .8em +.btswitch-ios + .btswitch-btn:active:after { + padding-right: 0.8em; } -.btswitch-ios:checked+.btswitch-btn { - background: #20a53a +.btswitch-ios:checked + .btswitch-btn { + background: #20a53a; } -.btswitch-ios:checked+.btswitch-btn:active { +.btswitch-ios:checked + .btswitch-btn:active { -webkit-box-shadow: none; - box-shadow: none + box-shadow: none; } -.btswitch-ios:checked+.btswitch-btn:active:after { - margin-left: -.8em +.btswitch-ios:checked + .btswitch-btn:active:after { + margin-left: -0.8em; } .bt-warp { position: relative; - min-height: 100% + min-height: 100%; } -.bt-warp>.container-fluid { - padding: 0 +.bt-warp > .container-fluid { + padding: 0; } .main-content { - margin-left: 180px + margin-left: 180px; } .sidebar-scroll { @@ -630,7 +664,7 @@ html { z-index: 100; height: 100%; position: fixed; - overflow: hidden + overflow: hidden; } .task { @@ -647,7 +681,7 @@ html { cursor: pointer; font-family: arial; font-size: 14px; - font-weight: bold + font-weight: bold; } .softnum { @@ -666,32 +700,32 @@ html { font-size: 14px; font-weight: bold; display: none; - color: #fff + color: #fff; } .cmdlist li { border-bottom: 1px solid #dbdbea; - line-height: 48px + line-height: 48px; } .cmdlist li .titlename { padding-left: 12px; - position: relative + position: relative; } .cmdlist li .state { - float: right + float: right; } .cmdlist li .titlename:before { background-color: #20a53a; border-radius: 3px; - content: ""; + content: ''; height: 5px; left: 0; position: absolute; top: 6px; - width: 5px + width: 5px; } .cmdlist li .cmd { @@ -701,11 +735,11 @@ html { line-height: 22px; color: #fff; padding-left: 10px; - font-family: arial + font-family: arial; } #remind td { - vertical-align: middle + vertical-align: middle; } #remind .titlename { @@ -714,29 +748,29 @@ html { height: 20px; overflow: hidden; width: 300px; - white-space: nowrap + white-space: nowrap; } #remind .titlename:before { background-color: #20a53a; border-radius: 3px; - content: ""; + content: ''; height: 5px; left: -10px; position: absolute; top: 6px; - width: 5px + width: 5px; } .btn-default[disabled], .btn-default:active[disabled] { background-color: #f7f7f7; color: #bbb; - opacity: 1 + opacity: 1; } .table-page { - height: 32px + height: 32px; } .table-page a { @@ -751,32 +785,32 @@ html { color: #666; vertical-align: middle; text-align: center; - line-height: 30px + line-height: 30px; } .table-page a:hover { border: 1px solid #20a53a; color: #20a53a; - z-index: 3 + z-index: 3; } .table-page a.disable { background-color: #f3f3f3; cursor: not-allowed; - color: #bbb + color: #bbb; } .table-page a.disable:hover { - border: 1px solid #ccc + border: 1px solid #ccc; } .table-page-select { float: left; - position: relative + position: relative; } .table-page .table-page-num { - width: 60px + width: 60px; } .page-select-ul { @@ -791,24 +825,24 @@ html { position: absolute; top: auto; width: 60px; - display: none + display: none; } .page-selected .page-select-ul { - display: block + display: block; } .page-select-ul li { - padding: 0 12px + padding: 0 12px; } .page-select-ul li:hover { - background-color: #f0f0f0 + background-color: #f0f0f0; } /*群控导航*/ -.group-control .main-content{ - margin-left:0; - margin-top:50px; +.group-control .main-content { + margin-left: 0; + margin-top: 50px; } .sidebar-scroll-panel { width: 100%; @@ -822,8 +856,8 @@ html { background-color: #fff; box-shadow: 0 0 10px #ddd; } -.sidebar-scroll-panel .mypcip{ - display:none; +.sidebar-scroll-panel .mypcip { + display: none; } .sidebar-scroll-panel .sidebar-auto .menu { background-color: #fff; @@ -846,16 +880,17 @@ html { border-right: #eee 1px solid; padding-right: 26px; } -.sidebar-scroll-panel .menu li.current a,.sidebar-scroll-panel .menu li a:hover { +.sidebar-scroll-panel .menu li.current a, +.sidebar-scroll-panel .menu li a:hover { background-color: #20a53a; color: #fff; border-bottom: #20a53a 2px solid; } -.sidebar-scroll-panel .btpc-plus{ - display:none; +.sidebar-scroll-panel .btpc-plus { + display: none; } -.sidebar-scroll-panel .task{ - right:26px; +.sidebar-scroll-panel .task { + right: 26px; } /*默认导航*/ .sidebar-scroll { @@ -864,13 +899,13 @@ html { z-index: 100; height: 100%; position: fixed; - overflow: hidden + overflow: hidden; } .sidebar-scroll .sidebar-auto { overflow: auto; height: 100%; - margin-right: -18px + margin-right: -18px; } .sidebar-scroll .mypcip { @@ -888,11 +923,12 @@ html { .sidebar-scroll .mypcip:hover { background: #20a53a; - opacity: 1 + opacity: 1; } .sidebar-scroll .mypcip span { - background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAQCAYAAAAS7Y8mAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAGPSURBVDiNldQ9ixRBEAbgZ3Zn1fVOuQU/wK9AMDDS1MvuRxj5CwTBP2CiYmYmGBsYGRsaa2qkkSiCgRd4y3ri3XqzbdDV7Lgs7uwLRc90V1dXv29VVymluxiiRoVkNaoYG7wN+9chpTTBBn7jKA5YhYR+JPQEDxYd6rAPeIwDnOgQuMEIz3F8mUMdC9/wqkPAxb1P0Yv/6ziLX/hTy9c6jXPYXSPwBQywF+Mz7GCCSRGMbqK1Ufwbmb4beI9TuNZFqFWoZCH7Mp0XcaX33y3dUDKfmRdD1bM+BYuoWtaEKeIdyqSvg5+RZSWX6Ri3ZUqmRbxjcqnsx3cyF7Utbpmf4YxcapXcWFNcjiSbOk7Yxhu5BocRaGBeoyXYNII32MTJsJ7cvR/D92aN1xFsFA6HYZ/iiiWjTVyVGyrhBz7jXSQxxq3wPahxJ7JuX30sd9IoshviC77KzdSmag+XYm4QNq0tF+0e7sc1SwPs4xFeLPHvt2ibsfwl24rFl/KLV/jdCho2ZC3a+I6HOB9rR38B10ZjDE49T6kAAAAASUVORK5CYII=") no-repeat 0 center; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAQCAYAAAAS7Y8mAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAdgAAAHYBTnsmCAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAGPSURBVDiNldQ9ixRBEAbgZ3Zn1fVOuQU/wK9AMDDS1MvuRxj5CwTBP2CiYmYmGBsYGRsaa2qkkSiCgRd4y3ri3XqzbdDV7Lgs7uwLRc90V1dXv29VVymluxiiRoVkNaoYG7wN+9chpTTBBn7jKA5YhYR+JPQEDxYd6rAPeIwDnOgQuMEIz3F8mUMdC9/wqkPAxb1P0Yv/6ziLX/hTy9c6jXPYXSPwBQywF+Mz7GCCSRGMbqK1Ufwbmb4beI9TuNZFqFWoZCH7Mp0XcaX33y3dUDKfmRdD1bM+BYuoWtaEKeIdyqSvg5+RZSWX6Ri3ZUqmRbxjcqnsx3cyF7Utbpmf4YxcapXcWFNcjiSbOk7Yxhu5BocRaGBeoyXYNII32MTJsJ7cvR/D92aN1xFsFA6HYZ/iiiWjTVyVGyrhBz7jXSQxxq3wPahxJ7JuX30sd9IoshviC77KzdSmag+XYm4QNq0tF+0e7sc1SwPs4xFeLPHvt2ibsfwl24rFl/KLV/jdCho2ZC3a+I6HOB9rR38B10ZjDE49T6kAAAAASUVORK5CYII=') + no-repeat 0 center; display: inline-block; height: 50px; line-height: 50px; @@ -911,38 +947,40 @@ html { padding-left: 80px; transition-duration: 500ms; transition-property: background; - transition-timing-function: ease + transition-timing-function: ease; } .sidebar-scroll .btpc-plus:hover { background-color: #20a53a; - color: #fff + color: #fff; } .sidebar-scroll .mypcip .btedit { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAFVSURBVDiNndO/ahRRFMfxz+zOav6goKC1S54gBBUECy0lIKTeyrXwFcROyBuENCHdNhaCoCgiWoggGPAJxFgIsbEJJBmTrCfFnBFZNjHrDy4z5849935/Z84tIsJ/6gneFhFR4AHuYHjM4jN4iZWM13ALSyWWcR+rOERrzAYFNvP9Ka7jKrZExKeIWI8IpxivIuJrRFxo5lqJXfzDbwfvcQU3cAnTUOIsfif6zeYDfuEDzuM5LuIatrGBu/hcInCAy1mH2STawyLmknI+56bykFZDsJsUP7CAdhIMUeELXo9YGmbOn4o3Nah6vd5Ot9vd6ff7lfr3dXKMVZnIVVp4MRgMZtLW6LpneJhxpB1lJnfwE49yblRtfPsrLhoLpbqA7fT15jjUERXNQeO6biK11DXYnyCnymdIjI+4jXuJdlJXHqq7cArf620izkXEu5hMj5u7cAQCwbENi6a1WQAAAABJRU5ErkJggg==) no-repeat center center; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAFVSURBVDiNndO/ahRRFMfxz+zOav6goKC1S54gBBUECy0lIKTeyrXwFcROyBuENCHdNhaCoCgiWoggGPAJxFgIsbEJJBmTrCfFnBFZNjHrDy4z5849935/Z84tIsJ/6gneFhFR4AHuYHjM4jN4iZWM13ALSyWWcR+rOERrzAYFNvP9Ka7jKrZExKeIWI8IpxivIuJrRFxo5lqJXfzDbwfvcQU3cAnTUOIsfif6zeYDfuEDzuM5LuIatrGBu/hcInCAy1mH2STawyLmknI+56bykFZDsJsUP7CAdhIMUeELXo9YGmbOn4o3Nah6vd5Ot9vd6ff7lfr3dXKMVZnIVVp4MRgMZtLW6LpneJhxpB1lJnfwE49yblRtfPsrLhoLpbqA7fT15jjUERXNQeO6biK11DXYnyCnymdIjI+4jXuJdlJXHqq7cArf620izkXEu5hMj5u7cAQCwbENi6a1WQAAAABJRU5ErkJggg==) + no-repeat center center; width: 16px; height: 16px; display: none; position: absolute; left: 156px; - top: 14px + top: 14px; } .sidebar-scroll .mypcip:hover .btedit { - display: block + display: block; } .sidebar-scroll .sidebar-auto .menu { - background-color: #353d44 + background-color: #353d44; } .sidebar-scroll .menu li { margin-bottom: 1px; - position: relative + position: relative; } .sidebar-scroll .menu li a { + width: 100%; font-size: 15px; color: #d6d7d9; display: block; @@ -951,198 +989,200 @@ html { background-repeat: no-repeat; background-size: 16px auto; background-position: 25px 14px; - border-left: #404040 2px solid + border-left: #404040 2px solid; } .sidebar-scroll .menu li.current a, .sidebar-scroll .menu li a:hover { background-color: #2c3138; color: #fff; - border-left: #20a53a 2px solid + border-left: #20a53a 2px solid; } .menu .menu_home { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKwwAACsMBNCkkqwAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAFZSURBVDiNpdO9a1VBEAXw3zOioIUQEdFGkQdWVtr6D1ikERtRppLU6awUsUkh2CgoBNwhoPhsLESxERR7wcI2XSBNMAHRNFmLbB6Xa64RXFjYOXvmzMfOjmqt/mcd2I+QmUuZOcgbDWWQmTN4iFms4wGu4jC+RMT7wQwy8xBe4FtE3MBXPMdqE5sfLCEzj+Il3kXEE4iIJTzFFbzB9z0FMvMYJphExLPuXUQs4y1eYfmPHmTmbHN+FBGv92zMDm+ulXAzItZHtVaZeRH3sBgRn4ecOyKXcRt3dkuYwyJOZeaJfZyP42TjX1Nrne5SyqSUMu5ho559tpQy2bUP9gL8wHYnzbtYzczTuB8RHzs8/H0Sz+ETbuEDxg3f7pL6AhW/2vknNiNiCxvY6uDT8e2XMINLmbmC89js3I0z8wLOdP36Aht43KIcwULD1+w82/WGT+dk8DP96/oNlqecb6uu8YEAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKwwAACsMBNCkkqwAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAFZSURBVDiNpdO9a1VBEAXw3zOioIUQEdFGkQdWVtr6D1ikERtRppLU6awUsUkh2CgoBNwhoPhsLESxERR7wcI2XSBNMAHRNFmLbB6Xa64RXFjYOXvmzMfOjmqt/mcd2I+QmUuZOcgbDWWQmTN4iFms4wGu4jC+RMT7wQwy8xBe4FtE3MBXPMdqE5sfLCEzj+Il3kXEE4iIJTzFFbzB9z0FMvMYJphExLPuXUQs4y1eYfmPHmTmbHN+FBGv92zMDm+ulXAzItZHtVaZeRH3sBgRn4ecOyKXcRt3dkuYwyJOZeaJfZyP42TjX1Nrne5SyqSUMu5ho559tpQy2bUP9gL8wHYnzbtYzczTuB8RHzs8/H0Sz+ETbuEDxg3f7pL6AhW/2vknNiNiCxvY6uDT8e2XMINLmbmC89js3I0z8wLOdP36Aht43KIcwULD1+w82/WGT+dk8DP96/oNlqecb6uu8YEAAAAASUVORK5CYII='); } .menu .current .menu_home, .menu .menu_home:hover { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKTQAACk0BtZPkxgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAFVSURBVDiNpdO9atVBFATw3/UjBEGidkJSRFFIiKJBsAmaBxDFQptUIoJPYCc2Wmpjo4haRUFMnsEmnXUIKQXFRlEvaiIxY/HfheXCNUUWht2dM+fsYXe2l8Ruxp4d4jN4gDNlvw/70dMQw8ZRXMdFbOAvpjGJ93iHrWEdHMdDfMMcPuMpjiC4hYPDOpjCPazgceGeYS8m8BYj2AZJWpxOspTk9gBfcTPJSpJrlRtMXk5yY0hyxUKSF0lOtQWuJHmV5NIOyRWXk7xOcrVe4iSW8BXj/3mZ+jpfiv5ErThS5udJzjcnHUgyXubKnU3yUrcerR38wSH0sVm4C3iDO+Xm5wu/hX44jI3WB4OePoaPeIIPOm9U3XYVtQV6JfC77PtYxyrW8KPwP9vDWiNFZ5BzOtvO4Fejm8ZJzGqM1BbYLHiE77pPc7fEPuE+FjCGxaLV2+13/gdXJgTGYi2BZQAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKTQAACk0BtZPkxgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAFVSURBVDiNpdO9atVBFATw3/UjBEGidkJSRFFIiKJBsAmaBxDFQptUIoJPYCc2Wmpjo4haRUFMnsEmnXUIKQXFRlEvaiIxY/HfheXCNUUWht2dM+fsYXe2l8Ruxp4d4jN4gDNlvw/70dMQw8ZRXMdFbOAvpjGJ93iHrWEdHMdDfMMcPuMpjiC4hYPDOpjCPazgceGeYS8m8BYj2AZJWpxOspTk9gBfcTPJSpJrlRtMXk5yY0hyxUKSF0lOtQWuJHmV5NIOyRWXk7xOcrVe4iSW8BXj/3mZ+jpfiv5ErThS5udJzjcnHUgyXubKnU3yUrcerR38wSH0sVm4C3iDO+Xm5wu/hX44jI3WB4OePoaPeIIPOm9U3XYVtQV6JfC77PtYxyrW8KPwP9vDWiNFZ5BzOtvO4Fejm8ZJzGqM1BbYLHiE77pPc7fEPuE+FjCGxaLV2+13/gdXJgTGYi2BZQAAAABJRU5ErkJggg=='); } .menu .menu_web { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAHuSURBVDiNpZO/S9ZRGMU/5xZl0NJQDf2ybAgrGgylGloiCR0jDAO3+4WQlqA/oiHkpUGvgYtFRENL5g+CCEIiqSjMoFKsaJFqScMXfU9DV3vVluiZDs997odzuM+Vbf6n1v+tmVJqA9okHba9CXgF9McY+1fPqtpBSmkH0Al8B45Iema7DDRlyHagK8b4ZQ2gp6dnn6QB2+2SdgFvJW2xPQeUbdcCM5L6gNYY4/QyIKW0AbgGPAb2AueALuAQMA9MApeAu7YnJZ0ALscYyyE7aZf0JsZ4R1I/MAKMAwFYl+0/AW4URXFb0gTQTh4AOGP7Xta7gbEY43NJw8BA1hPAHoA821wdYUxSCZi13QhslPTI9kmgLGkUOG37m6QXwGbbF2OMTUvPuGD7JzCbM2N7FigD87bnJC3r7HyhOsK0pNEY46CkoRxhRNJDYDjGOGz7fdYPsqNP1YBB2y0Ai4uLH4GjKaUG281AS0qpAThQqVSmsrsWYAj+bOIt4Gpvb+/ZEMJ+4BTwLp8ZaASOhRA6UkofgHrgyupFqpN0H7gA7ATGJW21/SNvY10IYcZ2n+3WoiimVgAAuru7a0MIncBXoF7SU9sLwHHgJbDN9vWiKD4v3VkBACiVSqqpqekAzgMHc/s1vz/TTVbVGsC/1i9dw/hm1FHr2QAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAHuSURBVDiNpZO/S9ZRGMU/5xZl0NJQDf2ybAgrGgylGloiCR0jDAO3+4WQlqA/oiHkpUGvgYtFRENL5g+CCEIiqSjMoFKsaJFqScMXfU9DV3vVluiZDs997odzuM+Vbf6n1v+tmVJqA9okHba9CXgF9McY+1fPqtpBSmkH0Al8B45Iema7DDRlyHagK8b4ZQ2gp6dnn6QB2+2SdgFvJW2xPQeUbdcCM5L6gNYY4/QyIKW0AbgGPAb2AueALuAQMA9MApeAu7YnJZ0ALscYyyE7aZf0JsZ4R1I/MAKMAwFYl+0/AW4URXFb0gTQTh4AOGP7Xta7gbEY43NJw8BA1hPAHoA821wdYUxSCZi13QhslPTI9kmgLGkUOG37m6QXwGbbF2OMTUvPuGD7JzCbM2N7FigD87bnJC3r7HyhOsK0pNEY46CkoRxhRNJDYDjGOGz7fdYPsqNP1YBB2y0Ai4uLH4GjKaUG281AS0qpAThQqVSmsrsWYAj+bOIt4Gpvb+/ZEMJ+4BTwLp8ZaASOhRA6UkofgHrgyupFqpN0H7gA7ATGJW21/SNvY10IYcZ2n+3WoiimVgAAuru7a0MIncBXoF7SU9sLwHHgJbDN9vWiKD4v3VkBACiVSqqpqekAzgMHc/s1vz/TTVbVGsC/1i9dw/hm1FHr2QAAAABJRU5ErkJggg=='); } .menu .current .menu_web, .menu .menu_web:hover { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKnAAACpwB9NLfEgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAGCSURBVDiNpdLPaw9wGAfw13fExWVq1IzYJEkc5kezgws5zM2S+irOWi7KH+EgB0e1m9ZycMGWm0jLRYqUWNNyIDkw2lq9Hb7P5rsfDvKpT717Pp/n/byf53k3kvif0/GX+AXcx3t8wgQurvexsUrBDozgGw7jBRZwHK+wHbeKdA1BLx6iiZ14i078LJLd+IJRnMVMO8Em3MQT7MH5qnQQ8/iAq7hXeBDXsLCxqjfxBuPVRide4xA2lPxnuIPP2Fo5o5JIMp6ku/BAkuHCp5MMFr6S5Gjh7iRjSSwp6MUpzOEYNmMRJ6v/rmqnG7uwpVpdJljEryKYr9hcJc+3DXIJd1TOMsEMnmMW36vSYzQq4Sn21Vqn0INz/DHSBIYKf8QR9ONMxfuxH9P1ZwiT7Qru4gaGsbfm8a7eUnMZwCUtdx7AdVYaqQ8PtCzbo7XGLvyo/vusNNL0agJabhvB16oyVcM6gZfYhts1q9LX2mv7bSS5nGQyyWzdR0ma6/xdo+Cfz28JnsxkWP6vVAAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKnAAACpwB9NLfEgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAGCSURBVDiNpdLPaw9wGAfw13fExWVq1IzYJEkc5kezgws5zM2S+irOWi7KH+EgB0e1m9ZycMGWm0jLRYqUWNNyIDkw2lq9Hb7P5rsfDvKpT717Pp/n/byf53k3kvif0/GX+AXcx3t8wgQurvexsUrBDozgGw7jBRZwHK+wHbeKdA1BLx6iiZ14i078LJLd+IJRnMVMO8Em3MQT7MH5qnQQ8/iAq7hXeBDXsLCxqjfxBuPVRide4xA2lPxnuIPP2Fo5o5JIMp6ku/BAkuHCp5MMFr6S5Gjh7iRjSSwp6MUpzOEYNmMRJ6v/rmqnG7uwpVpdJljEryKYr9hcJc+3DXIJd1TOMsEMnmMW36vSYzQq4Sn21Vqn0INz/DHSBIYKf8QR9ONMxfuxH9P1ZwiT7Qru4gaGsbfm8a7eUnMZwCUtdx7AdVYaqQ8PtCzbo7XGLvyo/vusNNL0agJabhvB16oyVcM6gZfYhts1q9LX2mv7bSS5nGQyyWzdR0ma6/xdo+Cfz28JnsxkWP6vVAAAAABJRU5ErkJggg=='); } .menu .menu_ftp { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAH6SURBVDiNpdM/qJZlGAbw3/1+n31o/0BJrMFaGmoRRBsM14M4iINLixBxHs6pxSxBmhpCqEk5CL2Pp5ZAdBD/UIJNhdBQzTqJYKkoB8HEY+r53rvB99hnuXlNNzfXfT3X9dzPE5npWTB8WrPWuhvvYwvGOI+vSykn/8uNSQfz8/MvdV33DRaxBlMInMZ9LI7H449mZ2cfLM80y0Xbtiu7rjsZEecz8ws8xBEc7l3swfXBYHB8bm6u+Z9A0zSfYmtmXoyIg/gKV3AJLQ7hV+wcjUYzT0Sota7C2Yg4kJm7sQM/YQOWcAFb+ygn8HHXdVMzMzMPlx1swML09PSPEXEIpzCNc/gBH+D7zPyylHIGt5umeWsywou4B5n5BhZKKTdwFddKKTdxJyLe7PmLWD0pcB2v9PVlvN627WZsxKZa6ya8hj96zsuZuUD/DobD4YWlpaUVtdbP8A62RcRNrO+38SG2I2qtv2AUERcfXyLUWnfhu8zcGBEFv+PVPtp9vI2j+A3vlVKOPSHQi+zHrcz8NiLebZrmr3yE1ePx+OfBYLAfK0opnz9eY9u2WzJzHRJ/Yy3uRsTePnfgSmYexAu4gZX9/NUh9kXElH8xxgjPTfTWR8RmPMBg+XCcGOKTiHh+gtxFxKqu685gXd/7MyJ29g6bCe7teNbv/A8ZE8Q3GMBOFwAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAH6SURBVDiNpdM/qJZlGAbw3/1+n31o/0BJrMFaGmoRRBsM14M4iINLixBxHs6pxSxBmhpCqEk5CL2Pp5ZAdBD/UIJNhdBQzTqJYKkoB8HEY+r53rvB99hnuXlNNzfXfT3X9dzPE5npWTB8WrPWuhvvYwvGOI+vSykn/8uNSQfz8/MvdV33DRaxBlMInMZ9LI7H449mZ2cfLM80y0Xbtiu7rjsZEecz8ws8xBEc7l3swfXBYHB8bm6u+Z9A0zSfYmtmXoyIg/gKV3AJLQ7hV+wcjUYzT0Sota7C2Yg4kJm7sQM/YQOWcAFb+ygn8HHXdVMzMzMPlx1swML09PSPEXEIpzCNc/gBH+D7zPyylHIGt5umeWsywou4B5n5BhZKKTdwFddKKTdxJyLe7PmLWD0pcB2v9PVlvN627WZsxKZa6ya8hj96zsuZuUD/DobD4YWlpaUVtdbP8A62RcRNrO+38SG2I2qtv2AUERcfXyLUWnfhu8zcGBEFv+PVPtp9vI2j+A3vlVKOPSHQi+zHrcz8NiLebZrmr3yE1ePx+OfBYLAfK0opnz9eY9u2WzJzHRJ/Yy3uRsTePnfgSmYexAu4gZX9/NUh9kXElH8xxgjPTfTWR8RmPMBg+XCcGOKTiHh+gtxFxKqu685gXd/7MyJ29g6bCe7teNbv/A8ZE8Q3GMBOFwAAAABJRU5ErkJggg=='); } .menu .current .menu_ftp, .menu .menu_ftp:hover { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKnAAACpwB9NLfEgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAGVSURBVDiNpdLdaw9wFAbwzw+jzVspIxdIuXHhQqbGHVmSRLlx4w9YKbkhpVz4A6SkKOWlldA0uXA1Um645motL7NImsnYNI+LnZ9+W63IqW+dzvc8zznPOaeRxP/YgnnixzCISUzgEQ7/DcEK3MEefEMDbfiKI7iKxfMRtKMfT3EePwtwCdM4gVHcnoVL0nxnk0wl2ZvkYZLuJKeSHE+yO0lfkgOZsd4mrgnuSPI4SU+SW0nGkwwkeZ1kKMmDJGNJric5mGQwSVsrQXeSu+V3JbmRZE2SK0kuJuks4i2Vcz/J1iR/tCzH9/I34hM+YATv8bEGublyJrCqdYijWF3+MDagC9uwvd46vK2clVXEogq8rHWdwQ7sq6rraxu92F9rfYYleNVKMI3LuFlVh/ECQyVtEmPow3McLYzGnFM+jc+4hl0YR0rvk/pvw7kmoJFkJ9ZW4g90mrnCk6W7gTe4gGU13PbCjzSS9KOnpYvp0jjrZEvGFBY2i+NeI8kmLG1J/IUODFRn8A6HqsPW8/8ydwb/bL8B1eb4OuOuSusAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKnAAACpwB9NLfEgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAGVSURBVDiNpdLdaw9wFAbwzw+jzVspIxdIuXHhQqbGHVmSRLlx4w9YKbkhpVz4A6SkKOWlldA0uXA1Um645motL7NImsnYNI+LnZ9+W63IqW+dzvc8zznPOaeRxP/YgnnixzCISUzgEQ7/DcEK3MEefEMDbfiKI7iKxfMRtKMfT3EePwtwCdM4gVHcnoVL0nxnk0wl2ZvkYZLuJKeSHE+yO0lfkgOZsd4mrgnuSPI4SU+SW0nGkwwkeZ1kKMmDJGNJric5mGQwSVsrQXeSu+V3JbmRZE2SK0kuJuks4i2Vcz/J1iR/tCzH9/I34hM+YATv8bEGublyJrCqdYijWF3+MDagC9uwvd46vK2clVXEogq8rHWdwQ7sq6rraxu92F9rfYYleNVKMI3LuFlVh/ECQyVtEmPow3McLYzGnFM+jc+4hl0YR0rvk/pvw7kmoJFkJ9ZW4g90mrnCk6W7gTe4gGU13PbCjzSS9KOnpYvp0jjrZEvGFBY2i+NeI8kmLG1J/IUODFRn8A6HqsPW8/8ydwb/bL8B1eb4OuOuSusAAAAASUVORK5CYII='); } .menu .menu_data { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAHISURBVDiNpZPPi81RGMY/z+3mpmasGBOZEgthQ5SFTDM2svMjOyt9X1eUEhshRbGx1e1cO5M/YVIzSWbjx4RidTeKbl3XgoyYW5rHwvlO35TZzFtn8fac5znPc855ZZvVVL3apJR2AGeAw5JGbI9m6Iukvu0ZIEVEp+TINimlOnANGAc6wCvbHUm/AAHrgZ3AHmA7MC3pVlEUS6WDWaALHIuIb/9xOw3QarVGa7XafduzwGQtg+PA+xXIy9VsNnvAHDBRvYMBcDyldEDSvO1nkj7lCNhea3uLpEO29wOjmbMsUAfOAYu2C+CC7XW2hzL+A1iw3QWu5/0vqgIAD4A7EXFxpQgppRPA1bIvBX4Dt4GJlNIV4DPQlTTIERrApryeA3eBh1WBBkBEnM+n7AO22R7O+ALwISJeZvxkySn/wQD4CDyV9Nj2XET0/7G+ATgIHAEmgbGIaJQO1gCngF22A7iRUloCfgLOpwnoA4+AFvC6GmEGOA1ciogpgHa7vRkYygLfi6LoVdzcI79CGUHAZf5+jh4wb/udpK/5EoclbQX2AruBt8DNiFhUdRpTSmPAWeCopI22R7KDfh6mJ8BURLwpOVrtOP8BlJPKP95zNKgAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAHISURBVDiNpZPPi81RGMY/z+3mpmasGBOZEgthQ5SFTDM2svMjOyt9X1eUEhshRbGx1e1cO5M/YVIzSWbjx4RidTeKbl3XgoyYW5rHwvlO35TZzFtn8fac5znPc855ZZvVVL3apJR2AGeAw5JGbI9m6Iukvu0ZIEVEp+TINimlOnANGAc6wCvbHUm/AAHrgZ3AHmA7MC3pVlEUS6WDWaALHIuIb/9xOw3QarVGa7XafduzwGQtg+PA+xXIy9VsNnvAHDBRvYMBcDyldEDSvO1nkj7lCNhea3uLpEO29wOjmbMsUAfOAYu2C+CC7XW2hzL+A1iw3QWu5/0vqgIAD4A7EXFxpQgppRPA1bIvBX4Dt4GJlNIV4DPQlTTIERrApryeA3eBh1WBBkBEnM+n7AO22R7O+ALwISJeZvxkySn/wQD4CDyV9Nj2XET0/7G+ATgIHAEmgbGIaJQO1gCngF22A7iRUloCfgLOpwnoA4+AFvC6GmEGOA1ciogpgHa7vRkYygLfi6LoVdzcI79CGUHAZf5+jh4wb/udpK/5EoclbQX2AruBt8DNiFhUdRpTSmPAWeCopI22R7KDfh6mJ8BURLwpOVrtOP8BlJPKP95zNKgAAAAASUVORK5CYII='); } .menu .current .menu_data, .menu .menu_data:hover { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKdQAACnUBSiXd/QAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAF3SURBVDiNpdI5a5VhEAXg58qFRDBi4RIiBkSJoiIoihZi0EpsFWy0FAtbSwvB0uUn2LiUliIWMWgT90i0sRFcYxqFiCYQcizufHK9hUQcGIZh3jnvOYdpJfE/sayn34pLeI4PWKj8jJe4jJHuhVYxaOM8RvEGT6r+RAursQ27sBl3cBGLkkgynuRmklXV/y0Hk9xOMpbkt4RRvMK3JciexkMc6pYwhyl8wlM8wPuSAMuxAQexF4PYif4GYAH7C+g0hrASKwrgO2bxEdfKs0doN7oWkkwmObEED44leVY7f0g4Wbr24Uv9Nl8M+orVECZwH9fR3+56AGer7sEmDFQ/i7d4XP3xZqdhMI93GMfdcnmmx/01OIAjOIxh9DUAwW5sx6lyeRE/atanc1AzuIXXOtfaaoy5l+Rqj1nrk2xJMlLH0z27kmSi28QWzpWJ0zq3MIWvRX8AG4vlDkziAuYagCaGcQZHsQ5rS8JM5Rhu4EWz0Avwz/ELJiL9PSckq44AAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKdQAACnUBSiXd/QAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAF3SURBVDiNpdI5a5VhEAXg58qFRDBi4RIiBkSJoiIoihZi0EpsFWy0FAtbSwvB0uUn2LiUliIWMWgT90i0sRFcYxqFiCYQcizufHK9hUQcGIZh3jnvOYdpJfE/sayn34pLeI4PWKj8jJe4jJHuhVYxaOM8RvEGT6r+RAursQ27sBl3cBGLkkgynuRmklXV/y0Hk9xOMpbkt4RRvMK3JciexkMc6pYwhyl8wlM8wPuSAMuxAQexF4PYif4GYAH7C+g0hrASKwrgO2bxEdfKs0doN7oWkkwmObEED44leVY7f0g4Wbr24Uv9Nl8M+orVECZwH9fR3+56AGer7sEmDFQ/i7d4XP3xZqdhMI93GMfdcnmmx/01OIAjOIxh9DUAwW5sx6lyeRE/atanc1AzuIXXOtfaaoy5l+Rqj1nrk2xJMlLH0z27kmSi28QWzpWJ0zq3MIWvRX8AG4vlDkziAuYagCaGcQZHsQ5rS8JM5Rhu4EWz0Avwz/ELJiL9PSckq44AAAAASUVORK5CYII='); } .menu .menu_set { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAH3SURBVDiNpZI/SJZhFMV/90kicsv+EdEQRUNQYC1S0R+ag2hxMKPgvc/r0Ba2FFEpJARhiF/P9QsaGippimgoG4QgI6egICcJEkoIEyI/9L0NvV98llLQmS6c5x7OPc8Rd+d/0LQcUa1W1xZFcR9ocvfOGOPkXwXMbDvQoqov3b0NuA00i8gBYNLM9gBfVXWiviP1E8xsB3AZmANmgHVAt4jMu/sl4DuwFfgI9KvqO4DQYKAFmFXVU8Bj4JqqfsiybAroBZ6r6jFglbtv+MNB6aIHeKKqL4aGhra4eycQRORelmXvU0pHgPYYoy4SSCltFJGDwEngCjANXHT3WyGEeXfvAq4Dze7eKyJ3i6IYyfN8KgCIyAjQDFxQ1VfAaaA/xjiWZdm4iPQBHao6LiLdwJoQwsiiX3D3z0VR1NNd4e5zDfnUACnnWeATsNB4wjYR2Q8cdfcbIYSau58D+kRkwd273X1QRGaAAWC4KIrRPM8nfg/xqrs/jTGOmtlOoKN08zDGOGZm+0SkPcuys7+W3J3Sxd6U0s1ybk0ptda5SqWyOqW0u+QepJTa6lxjD2rASjO7A5wBBszsEEAI4TzQZWaDwBfg23I92AWsV9VnZnYC2OTur0Vks6oOm9lhYFpV3ywp0IiySI/42bzjMca3S71bVuBf8QODpRL9eTmkdgAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAH3SURBVDiNpZI/SJZhFMV/90kicsv+EdEQRUNQYC1S0R+ag2hxMKPgvc/r0Ba2FFEpJARhiF/P9QsaGippimgoG4QgI6egICcJEkoIEyI/9L0NvV98llLQmS6c5x7OPc8Rd+d/0LQcUa1W1xZFcR9ocvfOGOPkXwXMbDvQoqov3b0NuA00i8gBYNLM9gBfVXWiviP1E8xsB3AZmANmgHVAt4jMu/sl4DuwFfgI9KvqO4DQYKAFmFXVU8Bj4JqqfsiybAroBZ6r6jFglbtv+MNB6aIHeKKqL4aGhra4eycQRORelmXvU0pHgPYYoy4SSCltFJGDwEngCjANXHT3WyGEeXfvAq4Dze7eKyJ3i6IYyfN8KgCIyAjQDFxQ1VfAaaA/xjiWZdm4iPQBHao6LiLdwJoQwsiiX3D3z0VR1NNd4e5zDfnUACnnWeATsNB4wjYR2Q8cdfcbIYSau58D+kRkwd273X1QRGaAAWC4KIrRPM8nfg/xqrs/jTGOmtlOoKN08zDGOGZm+0SkPcuys7+W3J3Sxd6U0s1ybk0ptda5SqWyOqW0u+QepJTa6lxjD2rASjO7A5wBBszsEEAI4TzQZWaDwBfg23I92AWsV9VnZnYC2OTur0Vks6oOm9lhYFpV3ywp0IiySI/42bzjMca3S71bVuBf8QODpRL9eTmkdgAAAABJRU5ErkJggg=='); } .menu .current .menu_set, .menu .menu_set:hover { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKnAAACpwB9NLfEgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAF0SURBVDiNpdJNiM5RGAXw38ukkJVvMYqZRsqYZmyYDTZWbCxsKLG3pCSaWNmNJU2NmhU7pQjFRhYsJCTWykfJRz5eH8fmefn39lLy1FPn3nPv7Zzz3FYS/1Oz/sItwg3cwuo/HWp1KRjEQtzBTizAfHzCDMbwDk97PTCECXzBWyzGYXzDCXzGGjzHJB6DJJ3ekuRc4R1JNja4VUl2FZ5OsrXDNTO4jRcYx1W8wTEcx1xcwna0cbM7xGXYgxF8LakTuIbLZWVdWevHXixvWniY5ECSkVqfbGBJBpOcKjyc5FCSR90WXjXSnV1hdqqNVuH3eInvTQUDSfYnmUkylmRDkvNJ1icZSjJV+wNJriQ5WKr01avPqtfW3O/hNPaVmrO1N14qp35pa/jclORM4dHqDjevMdYLSTZ3uD6/q405mMYHjOJojewIluJHjfdj51L3Vx7GElzHbqzAXazERWzDazzoZaG7+5PcT/Kkwux5rlvBP9dPgIpDWf6ENxgAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKnAAACpwB9NLfEgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAF0SURBVDiNpdJNiM5RGAXw38ukkJVvMYqZRsqYZmyYDTZWbCxsKLG3pCSaWNmNJU2NmhU7pQjFRhYsJCTWykfJRz5eH8fmefn39lLy1FPn3nPv7Zzz3FYS/1Oz/sItwg3cwuo/HWp1KRjEQtzBTizAfHzCDMbwDk97PTCECXzBWyzGYXzDCXzGGjzHJB6DJJ3ekuRc4R1JNja4VUl2FZ5OsrXDNTO4jRcYx1W8wTEcx1xcwna0cbM7xGXYgxF8LakTuIbLZWVdWevHXixvWniY5ECSkVqfbGBJBpOcKjyc5FCSR90WXjXSnV1hdqqNVuH3eInvTQUDSfYnmUkylmRDkvNJ1icZSjJV+wNJriQ5WKr01avPqtfW3O/hNPaVmrO1N14qp35pa/jclORM4dHqDjevMdYLSTZ3uD6/q405mMYHjOJojewIluJHjfdj51L3Vx7GElzHbqzAXazERWzDazzoZaG7+5PcT/Kkwux5rlvBP9dPgIpDWf6ENxgAAAAASUVORK5CYII='); } .menu .menu_xterm { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMBJREFUeNpiYKAQMM6cOVMASBuQozk9Pf0AC5AuAOJ6cgwAWt7IhMQvRKIfAPEEYgxhQWL3o9EFpBgwAeifQhKdD7YI5oWPUMEEmAQR4COyATBwAIgdgIacB2IFYkxhQouWB0BsCA3E86QGIsxvDSBXgGIDSxr5ALTgAk4XADWAQt4fiB2BChcAaQVoGoHheLwuAGqagBz/UNsciQ4DEgE/zAUfQM4DOt+eRANAYTMRZADIrxfIdMUFSnMzA0CAAQD0hjqnYxWD2gAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMBJREFUeNpiYKAQMM6cOVMASBuQozk9Pf0AC5AuAOJ6cgwAWt7IhMQvRKIfAPEEYgxhQWL3o9EFpBgwAeifQhKdD7YI5oWPUMEEmAQR4COyATBwAIgdgIacB2IFYkxhQouWB0BsCA3E86QGIsxvDSBXgGIDSxr5ALTgAk4XADWAQt4fiB2BChcAaQVoGoHheLwuAGqagBz/UNsciQ4DEgE/zAUfQM4DOt+eRANAYTMRZADIrxfIdMUFSnMzA0CAAQD0hjqnYxWD2gAAAABJRU5ErkJggg=='); } .menu .current .menu_xterm, -.menu .menu_xterm:hover{ - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALhJREFUeNpiYKAQMH78+FEASBuQo5mfn/8AC5AuAOJ6cgwAWt7IhMQvRKIfAPEEYgxhQWL3o9EFpBgwAeifQhKdD7YI5oWPUMEEmAQxZiAbAAMHgNgBaMh5IFYgxhQmtGh5AMSG0EA8T2ogwvzWAHIFKDawpJEPQAsu4DQAqAEU8v5A7AhSCOQboKWRC1CM3QCgpgnI8Q+1zZHoMCA1JcNc8AHkTKBz7Uk0AOS9iRRlJvTwIAsABBgAqiNCt+zqQrsAAAAASUVORK5CYII=") +.menu .menu_xterm:hover { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALhJREFUeNpiYKAQMH78+FEASBuQo5mfn/8AC5AuAOJ6cgwAWt7IhMQvRKIfAPEEYgxhQWL3o9EFpBgwAeifQhKdD7YI5oWPUMEEmAQxZiAbAAMHgNgBaMh5IFYgxhQmtGh5AMSG0EA8T2ogwvzWAHIFKDawpJEPQAsu4DQAqAEU8v5A7AhSCOQboKWRC1CM3QCgpgnI8Q+1zZHoMCA1JcNc8AHkTKBz7Uk0AOS9iRRlJvTwIAsABBgAqiNCt+zqQrsAAAAASUVORK5CYII='); } .menu .menu_folder { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAE3SURBVDiNpZO9SgNBFIW/OySiaBCtbCwE8ReUgGDpE9gExNJmd6O+hM8gmGJn3yKxt7WyEARBUUSbIPhTGFAwxyarSwoZ2AO3mjkf98y9Y5IoI1fKDVQA0jRtOOd2B8BRST5Jkk4IwCSRZVkbOAYeACdpD3iX9DrUpQO+gHaz2XwuRnCSLuM4vpU0AnSAvplNmdlkocbNbN3MTrz3de/9WKVA/07TdN85twbcA5/A8AsLuAO6wI6k2UrhoGZmy3EcH4Zk995vAAd5hA9gBXgJMQ+0ZWanOaAH1IGrEGer1TJgxszOckAFWATOQwDVanUO6EVR9JYD5oGJJEmeAtvfBG7gb4xLwEWgGWA1v59PoQs8Zlm2ANg/RgETwLRz7voXIOnIzBrAdgCgBvgoivowWOUyKv0bfwCvBmEVd9ynHgAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAE3SURBVDiNpZO9SgNBFIW/OySiaBCtbCwE8ReUgGDpE9gExNJmd6O+hM8gmGJn3yKxt7WyEARBUUSbIPhTGFAwxyarSwoZ2AO3mjkf98y9Y5IoI1fKDVQA0jRtOOd2B8BRST5Jkk4IwCSRZVkbOAYeACdpD3iX9DrUpQO+gHaz2XwuRnCSLuM4vpU0AnSAvplNmdlkocbNbN3MTrz3de/9WKVA/07TdN85twbcA5/A8AsLuAO6wI6k2UrhoGZmy3EcH4Zk995vAAd5hA9gBXgJMQ+0ZWanOaAH1IGrEGer1TJgxszOckAFWATOQwDVanUO6EVR9JYD5oGJJEmeAtvfBG7gb4xLwEWgGWA1v59PoQs8Zlm2ANg/RgETwLRz7voXIOnIzBrAdgCgBvgoivowWOUyKv0bfwCvBmEVd9ynHgAAAABJRU5ErkJggg=='); } .menu .current .menu_folder, .menu .menu_folder:hover { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKnAAACpwB9NLfEgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAADuSURBVDiNpdO9SkQxEIbh56ynUHQbQbCxEMR/BEGw9B4s1m6t9W5svQgL3d7Wyk4QLES0EcGfQkGbsTgJuywIwTMQEsh8b+ZLJlVEaBOdVmrUad7HQQJO4hQXJYAqWTjHCR4S5BAfeBursoOflP8CIkJEDCJiLq03ozymcgUD9NHDFu7xjfEbjmR7Oo2FemSjizUcl3jHDo6yv0+s47VQDHsYZMAXtnFTKK4wj8sMqLGCq0LAYjr0PQOWMIOnQsAu7hi+8SquC8WwkfPzKzzjEcsaf39FpEpnccuwE3uadp4oAHQ1rX42Cvh3tP6Nv5Cebn/RRiyLAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKnAAACpwB9NLfEgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAADuSURBVDiNpdO9SkQxEIbh56ynUHQbQbCxEMR/BEGw9B4s1m6t9W5svQgL3d7Wyk4QLES0EcGfQkGbsTgJuywIwTMQEsh8b+ZLJlVEaBOdVmrUad7HQQJO4hQXJYAqWTjHCR4S5BAfeBursoOflP8CIkJEDCJiLq03ozymcgUD9NHDFu7xjfEbjmR7Oo2FemSjizUcl3jHDo6yv0+s47VQDHsYZMAXtnFTKK4wj8sMqLGCq0LAYjr0PQOWMIOnQsAu7hi+8SquC8WwkfPzKzzjEcsaf39FpEpnccuwE3uadp4oAHQ1rX42Cvh3tP6Nv5Cebn/RRiyLAAAAAElFTkSuQmCC'); } .menu .menu_day { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKwwAACsMBNCkkqwAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAFrSURBVDiNpZMxSFxBEIa/ed49tQsBQdEqgrVgithFW1sr62PhKttXpjy0vWb2WjkQrk6rjWUgjY3ICorYGCFV9C7vxuJ24fE4Y8SBZf/9d3b2n/1ZMTPeE1l10ev1Frz3Wy8lq+pXVf1Y5cTM6Ha7jTzPd4BtYBUYAHO184/ALnAJnJRl+b3dbo8aAM1m8xB4AO6BT2b2C5ivFxCRv8AtsJ5l2SZQYGao6kBVFyNeNjOmDVVdifOSqh6Z2aQF7/0xcGNmF4BMkV9tw0RkDfjgnGs14kYJXInIOTALjGOhukUZ8AQ0gc+JIJI/nHNnIYRWCME5505CCC7i04hbzrkz4Gc8Q1IwEwedTmcvXfcSruZnNZKiKPpFUfT/hZnYX1YVyGu31hRk6X2SgnEi/lPBb6JTSUFuZsM3KPiTWk4FbkXki/d+CORMbK3aKEzsTXhDRK6rBb4B+2bWAkbVN5kSDRG5E5EDiJ/pPfEM08DH4VH64rEAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKwwAACsMBNCkkqwAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAFrSURBVDiNpZMxSFxBEIa/ed49tQsBQdEqgrVgithFW1sr62PhKttXpjy0vWb2WjkQrk6rjWUgjY3ICorYGCFV9C7vxuJ24fE4Y8SBZf/9d3b2n/1ZMTPeE1l10ev1Frz3Wy8lq+pXVf1Y5cTM6Ha7jTzPd4BtYBUYAHO184/ALnAJnJRl+b3dbo8aAM1m8xB4AO6BT2b2C5ivFxCRv8AtsJ5l2SZQYGao6kBVFyNeNjOmDVVdifOSqh6Z2aQF7/0xcGNmF4BMkV9tw0RkDfjgnGs14kYJXInIOTALjGOhukUZ8AQ0gc+JIJI/nHNnIYRWCME5505CCC7i04hbzrkz4Gc8Q1IwEwedTmcvXfcSruZnNZKiKPpFUfT/hZnYX1YVyGu31hRk6X2SgnEi/lPBb6JTSUFuZsM3KPiTWk4FbkXki/d+CORMbK3aKEzsTXhDRK6rBb4B+2bWAkbVN5kSDRG5E5EDiJ/pPfEM08DH4VH64rEAAAAASUVORK5CYII='); } .menu .current .menu_day, .menu .menu_day:hover { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKnAAACpwB9NLfEgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAEPSURBVDiNpdO9SkNBEIbh58RoFKwEwT8QFOwEQQvt1NbW+7Cx8B7svAZLa1tbG0sbEQQh2KigjcZoxsI9YT2EGMnCMt8us+98s8sWEWGYUausp7HTJ38bU/lGPYt72MUyFjFeOfyOfdziAudol4BjPOMRS3jCRA/AJ5pYwxaORISIOIuImaTnU+w1F1KcjYjTiOi28IVD3KDoYT93EVhJ+hfgDtdooJNA1SeqoYVRbOSAFq5wmR0q+mhYzQEjaeYJ/XQ3v1bZlCrFH7rw03bXwSBVc10rYaWDzgBVc/0ivVTpYAwf/3DwJrVcAprYTJCx1F/15huZXsc9FOk3TuIAc2hXqlVHHQ84wWsx7Hf+BgvadUGnT3fcAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKnAAACpwB9NLfEgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAEPSURBVDiNpdO9SkNBEIbh58RoFKwEwT8QFOwEQQvt1NbW+7Cx8B7svAZLa1tbG0sbEQQh2KigjcZoxsI9YT2EGMnCMt8us+98s8sWEWGYUausp7HTJ38bU/lGPYt72MUyFjFeOfyOfdziAudol4BjPOMRS3jCRA/AJ5pYwxaORISIOIuImaTnU+w1F1KcjYjTiOi28IVD3KDoYT93EVhJ+hfgDtdooJNA1SeqoYVRbOSAFq5wmR0q+mhYzQEjaeYJ/XQ3v1bZlCrFH7rw03bXwSBVc10rYaWDzgBVc/0ivVTpYAwf/3DwJrVcAprYTJCx1F/15huZXsc9FOk3TuIAc2hXqlVHHQ84wWsx7Hf+BgvadUGnT3fcAAAAAElFTkSuQmCC'); } .menu .menu_control { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAF5SURBVDiNpdM9ixNRFMbx3yRZ3/ANbCxEcBubpNJSLIQFaxs7D4JfQSz9CpYWItyPYCOIFtqvhQxopSyCb1gpEuNukrHImewQY7UHLsOce85z/vPMvVXTNA4SAyilfMI2Zpn/n2rV6RtGxOYgE9sITLK5Qa8jVGGezwpH8VgWwRTjiJigj6vYwrVcW5nrZ824pW0Jeh0xSVJhr4M86ez32/qBf6OH04nZCmzk1HbI0qN1AhO8zuYfOJ5i8xWKZq1AREzxpZRyAlfwJiI+r5RVrUCLNOvgtnER93FpDeV0laBnYcwMSimHcQpP7Z+V2xZelA7FkuA8opRyK9/P4gIeYq+Ucj2/fwM3Lc7Mua7AVzzH91LKHZxBExE/s/EudiwOz0u8wLeuwDgidvAMf3APr3LvHR7gfUT8joiPw+HwQwqrmqZRSnmSWL9wEpt4a/Hr5qPRaLeu60OdgcfwKCJutCZeTnNmuXZxpDWqruvG/j1o0vDhkuAg8RdE7nuSY6nc+gAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAF5SURBVDiNpdM9ixNRFMbx3yRZ3/ANbCxEcBubpNJSLIQFaxs7D4JfQSz9CpYWItyPYCOIFtqvhQxopSyCb1gpEuNukrHImewQY7UHLsOce85z/vPMvVXTNA4SAyilfMI2Zpn/n2rV6RtGxOYgE9sITLK5Qa8jVGGezwpH8VgWwRTjiJigj6vYwrVcW5nrZ824pW0Jeh0xSVJhr4M86ez32/qBf6OH04nZCmzk1HbI0qN1AhO8zuYfOJ5i8xWKZq1AREzxpZRyAlfwJiI+r5RVrUCLNOvgtnER93FpDeV0laBnYcwMSimHcQpP7Z+V2xZelA7FkuA8opRyK9/P4gIeYq+Ucj2/fwM3Lc7Mua7AVzzH91LKHZxBExE/s/EudiwOz0u8wLeuwDgidvAMf3APr3LvHR7gfUT8joiPw+HwQwqrmqZRSnmSWL9wEpt4a/Hr5qPRaLeu60OdgcfwKCJutCZeTnNmuXZxpDWqruvG/j1o0vDhkuAg8RdE7nuSY6nc+gAAAABJRU5ErkJggg=='); } .menu .current .menu_control, .menu .menu_control:hover { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKwwAACsMBNCkkqwAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAFaSURBVDiNpdM7a5RREAbg59uLJOgSkRQhfYSIhWWsQgj+gfgLTJEmBJLa0tZW0MbawtbaUkQEQ8Q/YCWIIAqb7G1S7JzNYdlUOfAxlzPznndevmkiwk1OJ+03nGKMBpNr6lsIdLGBrQJwimP05wCatFEBTHAHL2sGY/zHEMt4jBWMKqZ/8RkXVc8MoJX+MF8bJJth3nczV5i0s2cGUJ82eslgkLlbOU57vngRwAA/sqmftp35AhiFzSKAIX6mv4+3C2pa887YlTjlPMAJtjNeMtVC1k5qgA5Wa2Q8xQvsZnyI51jD3cK+jLCOA/xLyn1TET/m3U4+0M+xRpmfAfzGBzzBM/zB17Rf8B57+ISHpsI+AhEhIt6kbSLiKCLOImIzc72IOIyIbsblex0RMwZLuGf6t73Dd/zK/AVepYDLKV4v7zS5jfUyjXCO25Wok/TLnnRwH1vNTdf5EpkVg1v2kuagAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKwwAACsMBNCkkqwAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAFaSURBVDiNpdM7a5RREAbg59uLJOgSkRQhfYSIhWWsQgj+gfgLTJEmBJLa0tZW0MbawtbaUkQEQ8Q/YCWIIAqb7G1S7JzNYdlUOfAxlzPznndevmkiwk1OJ+03nGKMBpNr6lsIdLGBrQJwimP05wCatFEBTHAHL2sGY/zHEMt4jBWMKqZ/8RkXVc8MoJX+MF8bJJth3nczV5i0s2cGUJ82eslgkLlbOU57vngRwAA/sqmftp35AhiFzSKAIX6mv4+3C2pa887YlTjlPMAJtjNeMtVC1k5qgA5Wa2Q8xQvsZnyI51jD3cK+jLCOA/xLyn1TET/m3U4+0M+xRpmfAfzGBzzBM/zB17Rf8B57+ISHpsI+AhEhIt6kbSLiKCLOImIzc72IOIyIbsblex0RMwZLuGf6t73Dd/zK/AVepYDLKV4v7zS5jfUyjXCO25Wok/TLnnRwH1vNTdf5EpkVg1v2kuagAAAAAElFTkSuQmCC'); } .menu .menu_soft { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAF7SURBVDiNrdPPi41hFAfwz72uoVsUWZOFJbKThYkVe1mpx13YjcmU/NwrZCKRLNRZsrSZErvJ1h+glFgiYxC6Pyze8zSvOwsLzuZ5T9/n/T7n+z3ndCaTiX+JHkTELlzHHozQxQrOl1JeRcReLGIbxtiAN7jcS6JrCT5OcIx9mMcAZ/EBz5N8hCO4UQl240kp5XYtLSJmsZDpdjwspTxr4V9xppv5EP0peVuzEnlumcL7GFaCDn5OXfj+l/wHulXCBIci4rXG2BFmMZP4RhyLiBmNR0McxqgSLGBOY1iNIW7l96LGyNMtfBXznf81B/vzhR0pB37hbillOSIO4hw2JdbBJ9yrEu7gIx7504OLWMYFvMcLax6cwv1K0MPLUsrTWlr2eS7TEZZKKUstfCcGtY3jVnk1+i05E+vnZDPGlaBnfZ+/aMZWnqtT+Df0qoR3ON7qc92FlcQ/YxARB6ztwlG8rQRXNdt4Mn/u5AuXEn+AmziRcroaU6/8BgTXdRpxDzi5AAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAF7SURBVDiNrdPPi41hFAfwz72uoVsUWZOFJbKThYkVe1mpx13YjcmU/NwrZCKRLNRZsrSZErvJ1h+glFgiYxC6Pyze8zSvOwsLzuZ5T9/n/T7n+z3ndCaTiX+JHkTELlzHHozQxQrOl1JeRcReLGIbxtiAN7jcS6JrCT5OcIx9mMcAZ/EBz5N8hCO4UQl240kp5XYtLSJmsZDpdjwspTxr4V9xppv5EP0peVuzEnlumcL7GFaCDn5OXfj+l/wHulXCBIci4rXG2BFmMZP4RhyLiBmNR0McxqgSLGBOY1iNIW7l96LGyNMtfBXznf81B/vzhR0pB37hbillOSIO4hw2JdbBJ9yrEu7gIx7504OLWMYFvMcLax6cwv1K0MPLUsrTWlr2eS7TEZZKKUstfCcGtY3jVnk1+i05E+vnZDPGlaBnfZ+/aMZWnqtT+Df0qoR3ON7qc92FlcQ/YxARB6ztwlG8rQRXNdt4Mn/u5AuXEn+AmziRcroaU6/8BgTXdRpxDzi5AAAAAElFTkSuQmCC'); } .menu .current .menu_soft, .menu .menu_soft:hover { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKnAAACpwB9NLfEgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAFsSURBVDiNrdO/jw1RFAfwz4xnVzYIydZeY0tEKETChkIoNGrNtkKyhQL/gUg0YgudQiciGpVEIRsdPdlkQ0usH4vNvHcUc27e9bbkm9zMmfnOPfP9nvneJiL8CwZ5PYS72I8xdmANN/EeQ9zGAkZosYHrTSp4gD14m+QIZ/ATl/AI83iRzcc4jC0RISIeR8S5rMu6EhFvsl6NiOUpfjEinrZpYZwKasyhy7rL+xp7MW6rB5tTL/xKO9Dg9xS/WQ9xJ85jJj12OJ2zgMBJvMs9IyxipgzxFK5lo4JvWMFrHMNV7Kv4DivN/8rBkVQwn3JhC/fwCiewjNnkGnzG/aLgJT7h4ZTHBVzEE3w0yUGHyxgWBQOs4lml7rvet2z4PFfBASzVOZj1N+YqO2F7DnapcjCwPQdfTXLQ6v9KjR8YFAsfcMEkByXrG8l/wRKOmpyVs1gvQzyoP23D3NzkF27oc3Acd7A77bT6od76A2AskgeNVoIQAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKnAAACpwB9NLfEgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAFsSURBVDiNrdO/jw1RFAfwz4xnVzYIydZeY0tEKETChkIoNGrNtkKyhQL/gUg0YgudQiciGpVEIRsdPdlkQ0usH4vNvHcUc27e9bbkm9zMmfnOPfP9nvneJiL8CwZ5PYS72I8xdmANN/EeQ9zGAkZosYHrTSp4gD14m+QIZ/ATl/AI83iRzcc4jC0RISIeR8S5rMu6EhFvsl6NiOUpfjEinrZpYZwKasyhy7rL+xp7MW6rB5tTL/xKO9Dg9xS/WQ9xJ85jJj12OJ2zgMBJvMs9IyxipgzxFK5lo4JvWMFrHMNV7Kv4DivN/8rBkVQwn3JhC/fwCiewjNnkGnzG/aLgJT7h4ZTHBVzEE3w0yUGHyxgWBQOs4lml7rvet2z4PFfBASzVOZj1N+YqO2F7DnapcjCwPQdfTXLQ6v9KjR8YFAsfcMEkByXrG8l/wRKOmpyVs1gvQzyoP23D3NzkF27oc3Acd7A77bT6od76A2AskgeNVoIQAAAAAElFTkSuQmCC'); } .menu .menu_firewall { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAG0SURBVDiNhdNPiI5RFAbw352ZsGBDMhkpYyE12cxOyYIFayW7SY2zkCxIlkrZKIrJjPe+X1FksrQQo/xp2IhZiPXUxIoaGxa+mGsx78dn+vDUvXVu53l6znO6qZSig6mpqbX9/f37cRB7sDOl1C6lzOIZHkXEK11IpRR1Xe8upRzFKNqYxzt8xGpsxy6swwCeYjIi5gcaoTt4i8BcRBQ90Gq11i8tLY3gCjZibABKKUu4FxGvexE7GB8fX8RsVVVPUkqDGjtQGqv/RM75CJ6nlH6gT+dCwvf/kE9hGlvwrZfAqrqu+3LOQz3Ix3EJpyPipeUwdQt8RbuUshkLjdUOeQzXcD4iLnfptvmdwXtsjYgPOefrmM45f0Y/buJiRJzrIm+wvOJfDl5gBCLiBFp4iPuYiIizK6YaSim96Ra4jeGc86ZG5BhyQz65Io9hDJZSZkApRSlFVVUTVVXd7dR/O1VVPaiq6mqn7jiQUjqD0Zxzd1B/IOc8iW1N7zKv+zM1I8zgE8YjYqF534EbTegHImKxp0DTnHABh3ALa3AY0ys20Vugg7qu95ZSHuML9kXEXK++ny1tzgEddf2OAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAG0SURBVDiNhdNPiI5RFAbw352ZsGBDMhkpYyE12cxOyYIFayW7SY2zkCxIlkrZKIrJjPe+X1FksrQQo/xp2IhZiPXUxIoaGxa+mGsx78dn+vDUvXVu53l6znO6qZSig6mpqbX9/f37cRB7sDOl1C6lzOIZHkXEK11IpRR1Xe8upRzFKNqYxzt8xGpsxy6swwCeYjIi5gcaoTt4i8BcRBQ90Gq11i8tLY3gCjZibABKKUu4FxGvexE7GB8fX8RsVVVPUkqDGjtQGqv/RM75CJ6nlH6gT+dCwvf/kE9hGlvwrZfAqrqu+3LOQz3Ix3EJpyPipeUwdQt8RbuUshkLjdUOeQzXcD4iLnfptvmdwXtsjYgPOefrmM45f0Y/buJiRJzrIm+wvOJfDl5gBCLiBFp4iPuYiIizK6YaSim96Ra4jeGc86ZG5BhyQz65Io9hDJZSZkApRSlFVVUTVVXd7dR/O1VVPaiq6mqn7jiQUjqD0Zxzd1B/IOc8iW1N7zKv+zM1I8zgE8YjYqF534EbTegHImKxp0DTnHABh3ALa3AY0ys20Vugg7qu95ZSHuML9kXEXK++ny1tzgEddf2OAAAAAElFTkSuQmCC'); } .menu .current .menu_firewall, .menu .menu_firewall:hover { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKdQAACnUBSiXd/QAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAFrSURBVDiNhdMvaJZRGAXw36viFrRoENxw4IJYLDMJalkxC8OkrC5qNAwEi+CC4lAsikGMY0FQmGIQ/AMKyjDIUGYyqMXgmB7Dd9/P63j37cAN73OfczjPc+7bJFFhFyZxCsdxGGt4hqd4hFc1oSkCxzCNiUJYwXt8xRDGcQS7sQNPMI8VSST5lGQxydEkTal1nT1JTiR5k+RuEtuKkz9YwGv8N9MGfCvjLBUnfYEUq1vhDEbwu+W2Ag3WtyCfx32M4leXwM7yPdJBnsFVXMALvWWqBX7qbX8/PherLc7hBi5hrqqvURaBVRzAF9wsVr9jO+7gCmYr8l69iLXxXEyyUMV1O/9wrSPOpSRnk/QFxpK8S7Kvarq1CflgkuW2t764nuTBgEfUnoe1cH0xnORjkrkB5PkkH5IMdQkott4meVzGauuHkjxP8rI85z6n/ZlqNLiM07iHYUyVZGY3Ng+a9WSS9SQ/kkxs1vcXeVqZSyUF+yoAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKdQAACnUBSiXd/QAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAFrSURBVDiNhdMvaJZRGAXw36viFrRoENxw4IJYLDMJalkxC8OkrC5qNAwEi+CC4lAsikGMY0FQmGIQ/AMKyjDIUGYyqMXgmB7Dd9/P63j37cAN73OfczjPc+7bJFFhFyZxCsdxGGt4hqd4hFc1oSkCxzCNiUJYwXt8xRDGcQS7sQNPMI8VSST5lGQxydEkTal1nT1JTiR5k+RuEtuKkz9YwGv8N9MGfCvjLBUnfYEUq1vhDEbwu+W2Ag3WtyCfx32M4leXwM7yPdJBnsFVXMALvWWqBX7qbX8/PherLc7hBi5hrqqvURaBVRzAF9wsVr9jO+7gCmYr8l69iLXxXEyyUMV1O/9wrSPOpSRnk/QFxpK8S7Kvarq1CflgkuW2t764nuTBgEfUnoe1cH0xnORjkrkB5PkkH5IMdQkott4meVzGauuHkjxP8rI85z6n/ZlqNLiM07iHYUyVZGY3Ng+a9WSS9SQ/kkxs1vcXeVqZSyUF+yoAAAAASUVORK5CYII='); } .menu .menu_exit { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAEYSURBVDiNpZOtTkNBEEbPFCQIUHgEBoJAYFDgERgSCBjSvU9Q0/AkX5+ApB6PI6lAYPhJUCgEgkApkHyI/nBpb28DPWozu3MyuzsTtpmG2f5CUs32BlABouBsAK8RUU8pPY4IImIfOLd9k4/n+IyII2AZGBUAM8BZlmXX48qVtAksFl6hx/y45B5N4C4fqExI+EVK6QJYkLT9L0GPJ+BU0hYUP9YAScfACtDh52c6wAPQlHRQKoiIN+B5WGC7DXzYfi8VVKvV5nCs0WgsRcSh7b0sy1qlgiJszwG1lFIL/viIknaAdkrpsh8bruBlgmOXbq8UduIXcCLpvkDc31+j20wDBgdty/Y6sMroMJnuda+A2/xGTDvO32OQXrvPg7l3AAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAEYSURBVDiNpZOtTkNBEEbPFCQIUHgEBoJAYFDgERgSCBjSvU9Q0/AkX5+ApB6PI6lAYPhJUCgEgkApkHyI/nBpb28DPWozu3MyuzsTtpmG2f5CUs32BlABouBsAK8RUU8pPY4IImIfOLd9k4/n+IyII2AZGBUAM8BZlmXX48qVtAksFl6hx/y45B5N4C4fqExI+EVK6QJYkLT9L0GPJ+BU0hYUP9YAScfACtDh52c6wAPQlHRQKoiIN+B5WGC7DXzYfi8VVKvV5nCs0WgsRcSh7b0sy1qlgiJszwG1lFIL/viIknaAdkrpsh8bruBlgmOXbq8UduIXcCLpvkDc31+j20wDBgdty/Y6sMroMJnuda+A2/xGTDvO32OQXrvPg7l3AAAAAElFTkSuQmCC'); } .menu .current .menu_exit, .menu .menu_exit:hover { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKdQAACnUBSiXd/QAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAADvSURBVDiNpdO7LkRRFAbg7wwlBZVeoSEKEtHSayUSGs+g8RwqbyDR6ycaiYRC45KoVAqFuAySpdhzODn2mWMyf7KSvdflz7oWEWEUjFfee1hCB0XGt8AL9vGQI9jECa5r+hKf2MZsE8EYjnA1IOMVTDeVAJMDguEYt1VFpyWgji6msNaUwX/wiAN84LSNYAdz6PmdTA/3UjlbbQSveMoQvPUzeBcRpVxExGrl3yQzEdGNiOWIGLqJMCEt3TnDT2G9n/5Zqaj34LmFYEPalewmfmEXdxni0r4gdf8HVcdDLGLe32MKqdxL3FQNxajn/A0ZS19hUhhlTwAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKdQAACnUBSiXd/QAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAADvSURBVDiNpdO7LkRRFAbg7wwlBZVeoSEKEtHSayUSGs+g8RwqbyDR6ycaiYRC45KoVAqFuAySpdhzODn2mWMyf7KSvdflz7oWEWEUjFfee1hCB0XGt8AL9vGQI9jECa5r+hKf2MZsE8EYjnA1IOMVTDeVAJMDguEYt1VFpyWgji6msNaUwX/wiAN84LSNYAdz6PmdTA/3UjlbbQSveMoQvPUzeBcRpVxExGrl3yQzEdGNiOWIGLqJMCEt3TnDT2G9n/5Zqaj34LmFYEPalewmfmEXdxni0r4gdf8HVcdDLGLe32MKqdxL3FQNxajn/A0ZS19hUhhlTwAAAABJRU5ErkJggg=='); } html .menu .menu_home:hover { - background-image: url("data:image/gif;base64,R0lGODlhEAAQANUAAPPz8+np6d3d3c/Pz8vLy8XFxb+/v729vbu7u7e3t7W1tbGxsa+vr62traurq6mpqaenp6WlpaOjo6GhoZ2dnZubmwrPOpmZmQzLPJeXl5WVlRLFPhLDPhy5RI+Pjx63RImJiYeHhyypSiirSIODgzKfToGBgTabUDibUDiZUH5+fj6TUnx8fECRVEKPVHp6ekSNVkCPVESLVnZ2dnR0dEyDWnBwcFR4XlZ2Xlh2XlpyYGZmZgAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJHgA7ACwAAAEAEAAOAAAGhsCdcLgzJUjE5HCmECxMFYZHuWMRHDuJINIg2JIqAmQYOS6SpEEkORFciOkJlVIwCTUEDfVOyOweFyAzVDMgFw1DBSFDOkMkBUQ2B0g1HyIdNUUGX0OTOy0jNyMrRQecOzYIKjsyKDspMDsvpkQGFDklJzsoJTgVBkkIAAEYLjsuGAEACEJBACH5BAkeADsALAAAAQAQAA4AAAZxwJ1wuDMlSMTkcKYQLEwVhke5YxEcO4kg0iDYkioCZBg5LpKkQSQ5EVyI6QmVUjAJNQQN9U7I7B4XIDNUMyAXDUMFIVQkBUQ2B0hKJgZfQ5FUJgeWOzYIKlQvm0QGFEM6QxUGSQgAARYcIhsWAQAIQkEAIfkECR4AOwAsAAABABAADgAABnfAnXC4MyVIxORwphAsTBWGR7ljERw7iSDSINiSKgJkGDkukqRBJDkRXIjpCZVSMAk1BA31TsjsHhcgM1QzIBcNQwUhVCQFRDYHSEomBl9DkVQmB5Y7NggqQzpDL5tEBhQ5NR8iHTU4FQZJCAABGC47LhgBAAhCQQAh+QQJHgA7ACwAAAEAEAAOAAAGfcCdcLgzJUjE5HCmECxMFYZHuWMRHDuJINIg2JIqAmQYOS6SpEEkORFciOkJlVIwCTUEDfVOyOweFyAzVDMgFw1DBSFUJAVENgdISiYGX0ORQzpDJgeWOzYIKjs1HyIdNTsvnUQGFDklJzsoJTgVBkkIAAEYLjsuGAEACEJBACH5BAUeADsALAAAAQAQAA4AAAaCwJ1wuDMlSMTkcKYQLEwVhke5YxEcO4kg0iDYkioCZBg5LpKkQSQ5EVyI6QmVUjAJNQQN9U7I7B4XIDNUMyAXDUMFIVQkBUQ2B0hCOkMmBl9DkTs1HyIdNUUHmDs2CCo7Mig7KTA7L6JEBhQ5JSc7KCU4FQZJCAABGC47LhgBAAhCQQAh+QQFHgA7ACwGAAkABQADAAAGDsDdTiesfUSdWmt0G62CACH5BAkyADsALAAAAQAQAA4AAAYVwJ1wSCwaj8ikcslsOp/QqHRKdQYBADs=") + background-image: url('data:image/gif;base64,R0lGODlhEAAQANUAAPPz8+np6d3d3c/Pz8vLy8XFxb+/v729vbu7u7e3t7W1tbGxsa+vr62traurq6mpqaenp6WlpaOjo6GhoZ2dnZubmwrPOpmZmQzLPJeXl5WVlRLFPhLDPhy5RI+Pjx63RImJiYeHhyypSiirSIODgzKfToGBgTabUDibUDiZUH5+fj6TUnx8fECRVEKPVHp6ekSNVkCPVESLVnZ2dnR0dEyDWnBwcFR4XlZ2Xlh2XlpyYGZmZgAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJHgA7ACwAAAEAEAAOAAAGhsCdcLgzJUjE5HCmECxMFYZHuWMRHDuJINIg2JIqAmQYOS6SpEEkORFciOkJlVIwCTUEDfVOyOweFyAzVDMgFw1DBSFDOkMkBUQ2B0g1HyIdNUUGX0OTOy0jNyMrRQecOzYIKjsyKDspMDsvpkQGFDklJzsoJTgVBkkIAAEYLjsuGAEACEJBACH5BAkeADsALAAAAQAQAA4AAAZxwJ1wuDMlSMTkcKYQLEwVhke5YxEcO4kg0iDYkioCZBg5LpKkQSQ5EVyI6QmVUjAJNQQN9U7I7B4XIDNUMyAXDUMFIVQkBUQ2B0hKJgZfQ5FUJgeWOzYIKlQvm0QGFEM6QxUGSQgAARYcIhsWAQAIQkEAIfkECR4AOwAsAAABABAADgAABnfAnXC4MyVIxORwphAsTBWGR7ljERw7iSDSINiSKgJkGDkukqRBJDkRXIjpCZVSMAk1BA31TsjsHhcgM1QzIBcNQwUhVCQFRDYHSEomBl9DkVQmB5Y7NggqQzpDL5tEBhQ5NR8iHTU4FQZJCAABGC47LhgBAAhCQQAh+QQJHgA7ACwAAAEAEAAOAAAGfcCdcLgzJUjE5HCmECxMFYZHuWMRHDuJINIg2JIqAmQYOS6SpEEkORFciOkJlVIwCTUEDfVOyOweFyAzVDMgFw1DBSFUJAVENgdISiYGX0ORQzpDJgeWOzYIKjs1HyIdNTsvnUQGFDklJzsoJTgVBkkIAAEYLjsuGAEACEJBACH5BAUeADsALAAAAQAQAA4AAAaCwJ1wuDMlSMTkcKYQLEwVhke5YxEcO4kg0iDYkioCZBg5LpKkQSQ5EVyI6QmVUjAJNQQN9U7I7B4XIDNUMyAXDUMFIVQkBUQ2B0hCOkMmBl9DkTs1HyIdNUUHmDs2CCo7Mig7KTA7L6JEBhQ5JSc7KCU4FQZJCAABGC47LhgBAAhCQQAh+QQFHgA7ACwGAAkABQADAAAGDsDdTiesfUSdWmt0G62CACH5BAkyADsALAAAAQAQAA4AAAYVwJ1wSCwaj8ikcslsOp/QqHRKdQYBADs='); } html .menu .menu_web:hover { - background-image: url("data:image/gif;base64,R0lGODlhEAAQAOYAAPHx8e/v7+vr6+np6efn5+Xl5eHh4d/f393d3dXV1dHR0c3NzcvLy8nJycfHx7+/v729vbu7u7m5ube3t6+vr62traurq6mpqaenp6WlpaGhoZ+fn52dnZubm5mZmZeXlxTDPpOTkyqrSiqpSoeHhy6nSiynSoWFhS6lTDCjTDKhTjSfTjadTjadUDSdTjabUDyXUjqXUjyVUj6TUkCRVHp6ekSNVkaLVkSLVnh4eEqHWHZ2dkiHWEqFWE6BWlB+XFJ8XFJ6XFR6XFZ4XlZ2XlpyYFxwYmZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFDgBHACwAAAEADwAOAAAHbYBHgoIdCgIACRyDizsTFQ0XGA4WEjuLNQMnH4shJwU1gw8di4sdD4IaGKSkGBpHC5argzsMRwYbsoMbB0cHHrmCHghHDDnARzm1GhnHGa5HEL+yHxCDmJqcJASg1hEUDRgZkxLGqxoJAQGJi4EAIfkEBQ4ARwAsBAADAAgAAgAABxGAR0dDPkBDgi0gNCgqNCAsgQAh+QQFDgBHACwEAAUACAACAAAHEYBFKUAogyNGPjZHPT5HMD+BACH5BAUOAEcALAMABwAKAAIAAAcWgDcoJjclKDciKTc6Kig9KCo6Jis6gQAh+QQFDgBHACwEAAkACAABAAAHCoA+Nkc6PkcwP4EAIfkEBQ4ARwAsBAAKAAgAAQAABwqARShAJSlAI0aBACH5BAUOAEcALAQACwAIAAIAAAcRgCwgMyUpMiAvR0dDPkJDioEAIfkECTIARwAsAAABAA8ADgAABxaAR4KDhIWGh4iJiouMjY6PkJGSk5SBADs=") + background-image: url('data:image/gif;base64,R0lGODlhEAAQAOYAAPHx8e/v7+vr6+np6efn5+Xl5eHh4d/f393d3dXV1dHR0c3NzcvLy8nJycfHx7+/v729vbu7u7m5ube3t6+vr62traurq6mpqaenp6WlpaGhoZ+fn52dnZubm5mZmZeXlxTDPpOTkyqrSiqpSoeHhy6nSiynSoWFhS6lTDCjTDKhTjSfTjadTjadUDSdTjabUDyXUjqXUjyVUj6TUkCRVHp6ekSNVkaLVkSLVnh4eEqHWHZ2dkiHWEqFWE6BWlB+XFJ8XFJ6XFR6XFZ4XlZ2XlpyYFxwYmZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFDgBHACwAAAEADwAOAAAHbYBHgoIdCgIACRyDizsTFQ0XGA4WEjuLNQMnH4shJwU1gw8di4sdD4IaGKSkGBpHC5argzsMRwYbsoMbB0cHHrmCHghHDDnARzm1GhnHGa5HEL+yHxCDmJqcJASg1hEUDRgZkxLGqxoJAQGJi4EAIfkEBQ4ARwAsBAADAAgAAgAABxGAR0dDPkBDgi0gNCgqNCAsgQAh+QQFDgBHACwEAAUACAACAAAHEYBFKUAogyNGPjZHPT5HMD+BACH5BAUOAEcALAMABwAKAAIAAAcWgDcoJjclKDciKTc6Kig9KCo6Jis6gQAh+QQFDgBHACwEAAkACAABAAAHCoA+Nkc6PkcwP4EAIfkEBQ4ARwAsBAAKAAgAAQAABwqARShAJSlAI0aBACH5BAUOAEcALAQACwAIAAIAAAcRgCwgMyUpMiAvR0dDPkJDioEAIfkECTIARwAsAAABAA8ADgAABxaAR4KDhIWGh4iJiouMjY6PkJGSk5SBADs='); } html .menu .menu_ftp:hover { - background-image: url("data:image/gif;base64,R0lGODlhEAAQAOYAAP////39/fv7+/f39+3t7evr6+Pj49/f39nZ2dfX19XV1dPT09HR0c/Pz83NzcvLy8nJycfHx8XFxcPDw8HBwb+/v729vbu7u7W1tbOzs7Gxsa+vr62trampqaenp6OjowDZNp+fnwLXNp2dnQTVOATTOJubmwrPOpmZmQrNOgzLPJeXl5WVlRi/QBa/QJGRkY+PjyC1RI2NjSSxRomJiYeHh4WFhYODg4GBgX5+fnx8fECRVESNVkSLVkaLVkiHWHR0dE6BWnJyclB+XFJ8XFR6XlR4Xlp0YFh0YGZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJMgBJACwAAAEAEAAOAAAHvYBJgoIhCAICCiuDi4IOEQsBAQ4QE4yCCR06DRUWD0AYDYwaATALNBweMA8sAB6LCC8QAwwEBQwDESwIgzQOSTURQBMVQBA5SQw3grFJKBdJGRtJFCxJDzKCOApJNg01DA42DDZJCziDCRsMAhQGBxIBDBsJiygCORYjqB8XNgAmjDZ8SCLjxg0YSTRkGBSkh48fO3i0UKGiRY8dP3z4GBKDhMcSIkCIBCGihEcSM5AUWVlkyAmRKYiwLHIkEAAh+QQFDgBJACwAAAEADwALAAAHj4BJgoIhCAICCiuDi0kOEQsBAQ4QE4xJCR06DRUWD0AYDYsaATALNBweMA8sAB6DCC8QAwwEBQwDESwIgjQOSTURQBMVQBA5SQw3SbFJKBdJGRtJFCxJDzJJOApJNg01DA42DDZJCziCCRsMAhQGBxIBDBsJgygCORYjqB8XNgAmizZ8SCLjxg0YSTRkEBQIACH5BAUOAEkALAAADAACAAMAAAcIgEE9MSRIRYEAIfkEBQ4ASQAsAgAMAAEAAwAABwWAPiRFgQAh+QQJDgBJACwAAAEADwAOAAAHIIBJgoOEhYaHiImKi4yNjo+QkY8/OzyMJCUijEVFQ4mBACH5BAkOAEkALAAAAQAPAA4AAAepgEmCgiEIAgIKK4OLSQ4RCwEBDhATjEkJHToNFRYPQBgNixoBMAs0HB4wDywAHoMILxADDAQFDAMRLAiCNA5JNRFAExVAEDlJDDdJsUkoF0kZG0kULEkPMkk4Ckk2DTUMDjYMNkkLOIIJGwwCFAYHEgEMGwmDKAI5FiOoHxc2ACaLNnxIIuPGDRhJNGQQFKSHjx87eFgaFIOExRIiQGgEwQhJkY9FJg4KBAAh+QQFDgBJACwAAAEADwAOAAAHsYBJgoIhCAICCiuDi0kOEQsBAQ4QE4xJCR06DRUWD0AYDYsaATALNBweMA8sAB6DCC8QAwwEBQwDESwIgjQOSTURQBMVQBA5SQw3SbFJKBdJGRtJFCxJDzJJOApJNg01DA42DDZJCziCCRsMAhQGBxIBDBsJgygCORYjqB8XNgAmizZ8SCLjxg0YSTRkEBSkh48fO3gs6rHjh6AYJDKWEAGiIwgRJUgIQlKkpKUkJpMEAgAh+QQFDgBJACwNAAwAAwADAAAHC4A+PkMkJDNFRUeBACH5BAUOAEkALAQADAAGAAMAAAcOgElJLSoqLYKISUVDiYEAIfkECTIASQAsAAABABAADgAABx2ASYKDhIWGh4iJiouMjY6PkJGSk5SEJyAgKUSFgQA7") + background-image: url('data:image/gif;base64,R0lGODlhEAAQAOYAAP////39/fv7+/f39+3t7evr6+Pj49/f39nZ2dfX19XV1dPT09HR0c/Pz83NzcvLy8nJycfHx8XFxcPDw8HBwb+/v729vbu7u7W1tbOzs7Gxsa+vr62trampqaenp6OjowDZNp+fnwLXNp2dnQTVOATTOJubmwrPOpmZmQrNOgzLPJeXl5WVlRi/QBa/QJGRkY+PjyC1RI2NjSSxRomJiYeHh4WFhYODg4GBgX5+fnx8fECRVESNVkSLVkaLVkiHWHR0dE6BWnJyclB+XFJ8XFR6XlR4Xlp0YFh0YGZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJMgBJACwAAAEAEAAOAAAHvYBJgoIhCAICCiuDi4IOEQsBAQ4QE4yCCR06DRUWD0AYDYwaATALNBweMA8sAB6LCC8QAwwEBQwDESwIgzQOSTURQBMVQBA5SQw3grFJKBdJGRtJFCxJDzKCOApJNg01DA42DDZJCziDCRsMAhQGBxIBDBsJiygCORYjqB8XNgAmjDZ8SCLjxg0YSTRkGBSkh48fO3i0UKGiRY8dP3z4GBKDhMcSIkCIBCGihEcSM5AUWVlkyAmRKYiwLHIkEAAh+QQFDgBJACwAAAEADwALAAAHj4BJgoIhCAICCiuDi0kOEQsBAQ4QE4xJCR06DRUWD0AYDYsaATALNBweMA8sAB6DCC8QAwwEBQwDESwIgjQOSTURQBMVQBA5SQw3SbFJKBdJGRtJFCxJDzJJOApJNg01DA42DDZJCziCCRsMAhQGBxIBDBsJgygCORYjqB8XNgAmizZ8SCLjxg0YSTRkEBQIACH5BAUOAEkALAAADAACAAMAAAcIgEE9MSRIRYEAIfkEBQ4ASQAsAgAMAAEAAwAABwWAPiRFgQAh+QQJDgBJACwAAAEADwAOAAAHIIBJgoOEhYaHiImKi4yNjo+QkY8/OzyMJCUijEVFQ4mBACH5BAkOAEkALAAAAQAPAA4AAAepgEmCgiEIAgIKK4OLSQ4RCwEBDhATjEkJHToNFRYPQBgNixoBMAs0HB4wDywAHoMILxADDAQFDAMRLAiCNA5JNRFAExVAEDlJDDdJsUkoF0kZG0kULEkPMkk4Ckk2DTUMDjYMNkkLOIIJGwwCFAYHEgEMGwmDKAI5FiOoHxc2ACaLNnxIIuPGDRhJNGQQFKSHjx87eFgaFIOExRIiQGgEwQhJkY9FJg4KBAAh+QQFDgBJACwAAAEADwAOAAAHsYBJgoIhCAICCiuDi0kOEQsBAQ4QE4xJCR06DRUWD0AYDYsaATALNBweMA8sAB6DCC8QAwwEBQwDESwIgjQOSTURQBMVQBA5SQw3SbFJKBdJGRtJFCxJDzJJOApJNg01DA42DDZJCziCCRsMAhQGBxIBDBsJgygCORYjqB8XNgAmizZ8SCLjxg0YSTRkEBSkh48fO3gs6rHjh6AYJDKWEAGiIwgRJUgIQlKkpKUkJpMEAgAh+QQFDgBJACwNAAwAAwADAAAHC4A+PkMkJDNFRUeBACH5BAUOAEkALAQADAAGAAMAAAcOgElJLSoqLYKISUVDiYEAIfkECTIASQAsAAABABAADgAABx2ASYKDhIWGh4iJiouMjY6PkJGSk5SEJyAgKUSFgQA7'); } html .menu .menu_data:hover { - background-image: url("data:image/gif;base64,R0lGODlhEAAQAOYAAP////39/fv7+/Hx8e/v7+np6ePj4+Hh4d/f393d3dfX19XV1dPT08XFxcPDw8HBwb+/v7u7u7m5ube3t62traenp6OjowDZNgLXNp2dnZubmwrPOpmZmQrNOpeXlxLFPhTDQBTDPhbBQBTBQBa/QBq9Qhi9Qh63RBy5QiC1RCC1RiKzRiSxRouLi4mJiYeHhyirSCynSoWFhS6lTIODgzKhTjSfTjadTjKfToGBgTibUDiZUHx8fD6TUnh4eHZ2dkiHWHR0dEyDWnJyclB+XFZ4XlZ2Xlh0YFxwYGZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFMgBJACwAAAEADwAOAAAHr4BJgkUzIB0XFxsfM0WCgjUlMD1CRERAOiwiNoIlLEiOoElIKSVJFzehoTsXSRggJzZCR0hIR0I2JyIYSQEyOTErKCQkKCoxNDIBvAYaqYIcB8oCHBAHDA4QEA4MBg8cAkkAHIIyGhYWGi/PAEkCBQ4cQaBBHg4F4AA0GQsGBgkJB6xloMFOQQRHP3jwkCcoAgJBFBg0qNAiRw4XGSIskADKxwQDAwIEIGAgAg1BgQAAIfkECQ8ASQAsAAABAA8ADgAABxaASYKDhIWGh4iJiouMjY6PkJGSk5SBACH5BAkPAEkALAAAAAAPAA8AAAe0gEmCRTMgHRcXGx8zRYKCNSUwPUJEREA6LCI2giUsSI6gSUgpJUkXN6GhOxdJGCAnNkJHSEhHQjYnIhigMSsoJCQoKjGgATI5qYI0MgFJAQYayUkcB80CHBAHDA4QEA4MBg8cAkkAHIIyGhYWGi+CHABJAgUOHEGgQR4OBeQANBkLDBhIkOCAtgw04imI4OgHDx73BEVAIIgCgwYVWuTI4SJDhAUSQPmYYGBAgAAEDESgISgQACH5BAkPAEkALAAAAQAPAA4AAAevgEmCRTMgHRcXGx8zRYKCNSUwPUJEREA6LCI2giUsSI6gSUgpJUkXN6GhOxdJGCAnNkJHSEhHQjYnIhhJATI5MSsoJCQoKjE0MgG8BhqpghwHygIcEAcMDhAQDgwGDxwCSQAcgjIaFhYaL88ASQIFDhxBoEEeDgXgADQZCwYGCQkHrGWgwU5BBEc/ePCQJygCAkEUGDSo0CJHDhcZIiyQAMrHBAMDAgQgYCACDUGBAAAh+QQJDwBJACwAAAAADwAPAAAHtIBJgkUzIB0XFxsfM0WCgjUlMD1CRERAOiwiNoIlLEiOoElIKSVJFzehoTsXSRggJzZCR0hIR0I2JyIYoDErKCQkKCoxoAEyOamCNDIBSQEGGslJHAfNAhwQBwwOEBAODAYPHAJJAByCMhoWFhovghwASQIFDhxBoEEeDgXkADQZCwwYSJDggLYMNOIpiODoBw8e9wRFQCCIAoMGFVrkyOEiQ4QFEkD5mGBgQIAABAxEoCEoEAA7") + background-image: url('data:image/gif;base64,R0lGODlhEAAQAOYAAP////39/fv7+/Hx8e/v7+np6ePj4+Hh4d/f393d3dfX19XV1dPT08XFxcPDw8HBwb+/v7u7u7m5ube3t62traenp6OjowDZNgLXNp2dnZubmwrPOpmZmQrNOpeXlxLFPhTDQBTDPhbBQBTBQBa/QBq9Qhi9Qh63RBy5QiC1RCC1RiKzRiSxRouLi4mJiYeHhyirSCynSoWFhS6lTIODgzKhTjSfTjadTjKfToGBgTibUDiZUHx8fD6TUnh4eHZ2dkiHWHR0dEyDWnJyclB+XFZ4XlZ2Xlh0YFxwYGZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFMgBJACwAAAEADwAOAAAHr4BJgkUzIB0XFxsfM0WCgjUlMD1CRERAOiwiNoIlLEiOoElIKSVJFzehoTsXSRggJzZCR0hIR0I2JyIYSQEyOTErKCQkKCoxNDIBvAYaqYIcB8oCHBAHDA4QEA4MBg8cAkkAHIIyGhYWGi/PAEkCBQ4cQaBBHg4F4AA0GQsGBgkJB6xloMFOQQRHP3jwkCcoAgJBFBg0qNAiRw4XGSIskADKxwQDAwIEIGAgAg1BgQAAIfkECQ8ASQAsAAABAA8ADgAABxaASYKDhIWGh4iJiouMjY6PkJGSk5SBACH5BAkPAEkALAAAAAAPAA8AAAe0gEmCRTMgHRcXGx8zRYKCNSUwPUJEREA6LCI2giUsSI6gSUgpJUkXN6GhOxdJGCAnNkJHSEhHQjYnIhigMSsoJCQoKjGgATI5qYI0MgFJAQYayUkcB80CHBAHDA4QEA4MBg8cAkkAHIIyGhYWGi+CHABJAgUOHEGgQR4OBeQANBkLDBhIkOCAtgw04imI4OgHDx73BEVAIIgCgwYVWuTI4SJDhAUSQPmYYGBAgAAEDESgISgQACH5BAkPAEkALAAAAQAPAA4AAAevgEmCRTMgHRcXGx8zRYKCNSUwPUJEREA6LCI2giUsSI6gSUgpJUkXN6GhOxdJGCAnNkJHSEhHQjYnIhhJATI5MSsoJCQoKjE0MgG8BhqpghwHygIcEAcMDhAQDgwGDxwCSQAcgjIaFhYaL88ASQIFDhxBoEEeDgXgADQZCwYGCQkHrGWgwU5BBEc/ePCQJygCAkEUGDSo0CJHDhcZIiyQAMrHBAMDAgQgYCACDUGBAAAh+QQJDwBJACwAAAAADwAPAAAHtIBJgkUzIB0XFxsfM0WCgjUlMD1CRERAOiwiNoIlLEiOoElIKSVJFzehoTsXSRggJzZCR0hIR0I2JyIYoDErKCQkKCoxoAEyOamCNDIBSQEGGslJHAfNAhwQBwwOEBAODAYPHAJJAByCMhoWFhovghwASQIFDhxBoEEeDgXkADQZCwwYSJDggLYMNOIpiODoBw8e9wRFQCCIAoMGFVrkyOEiQ4QFEkD5mGBgQIAABAxEoCEoEAA7'); } html .menu .menu_control:hover { - background-image: url("data:image/gif;base64,R0lGODlhEAAQAPcAAOTk5N/f38bUxsnQycTTxMfOx8XLxcPKw8bKxsfHx8TIxMbGxsXGxcXFxcfFx8PGw8TExMXExcbCxsfCx8PDw8PEw8PCw8PBw8HBwcW/xcHAwb7AvsK/whzVHBzTHCDOICLLIjC2MDO0MzOzMzKzMjWxNTOyMzWvNTavNjirOE2hTTqpOjunOzylPEmhSUqgSjqlOoaGhj+iPz6iPoSEhD6hPj6fPj+fP4ODg0CfQDqhOoKCgkGcQUObQ4CAgEWXRUaWRkWWRUqQSkiSSEiRSEyNTFuHW3p6eluGW3l5eU6KTliFWE6JTk2JTVaFVlWFVWB/YFGGUXV1dVGEUVWAVVSAVHRzdHNzc3FxcVV9VXZvdlp4Wm9vb2hyaGF0YVt2W1x1XFx0XGFyYWNwY15yXl1zXWtra15xXmNtY2FuYWpqamBvYG1obWJtYmlpaWJsYmhpaGNqY2hoaGJrYmRqZGRpZGdnZ2VpZWVoZWRoZGZmZmVnZWdlZ2VlZWdkZ2djZ2hjaGxdbG9ab2ZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCACDACwAAAEADwAOAAAIhgAHAUgAYcGCBggbGISQIMCgBlwG9dFjp6IdPX0GYaEwCMKgQWqO4NixA8cRNR89LvjoJglJkkncpBy0EqSPGDRoxPCBsiPNj3KwSLlyRQoWOTNrflzK1GeDplAHcWQQtWmFQQOqMi0wCIHWpQoGWfj6cSzEQXC63IG6UWCCBhA2KDS4sGFAACH5BAUIAIMALAIACQACAAMAAAgJAMUMcsHjSZSAACH5BAUIAIMALAMACgADAAQAAAgQAGGUGbSCxaBBJ4IM8gIlIAAh+QQFCACDACwEAAoAAwAEAAAIEAAHhTkzKAeVFiCoDDIyKCAAIfkEBQgAgwAsBQAIAAMABAAACBAABzFJM6jElj0pwAwaMiggACH5BAUIAIMALAYABwADAAUAAAgSAAfpGFSlQ5FBQEIMGpRiYZiAACH5BAUIAIMALAgACQADAAQAAAgQAAcN2jJIiIwpHogMujEoIAAh+QQFCACDACwJAAcABQAFAAAIGQAHCRw4kI2gHiK+iBlEwoQNFYOaBMqyJCAAIfkECTIAgwAsAAABAA8ADgAACBkABwkcSLCgwYMIEypcyLChw4cQI0qcSDEgADs=") + background-image: url('data:image/gif;base64,R0lGODlhEAAQAPcAAOTk5N/f38bUxsnQycTTxMfOx8XLxcPKw8bKxsfHx8TIxMbGxsXGxcXFxcfFx8PGw8TExMXExcbCxsfCx8PDw8PEw8PCw8PBw8HBwcW/xcHAwb7AvsK/whzVHBzTHCDOICLLIjC2MDO0MzOzMzKzMjWxNTOyMzWvNTavNjirOE2hTTqpOjunOzylPEmhSUqgSjqlOoaGhj+iPz6iPoSEhD6hPj6fPj+fP4ODg0CfQDqhOoKCgkGcQUObQ4CAgEWXRUaWRkWWRUqQSkiSSEiRSEyNTFuHW3p6eluGW3l5eU6KTliFWE6JTk2JTVaFVlWFVWB/YFGGUXV1dVGEUVWAVVSAVHRzdHNzc3FxcVV9VXZvdlp4Wm9vb2hyaGF0YVt2W1x1XFx0XGFyYWNwY15yXl1zXWtra15xXmNtY2FuYWpqamBvYG1obWJtYmlpaWJsYmhpaGNqY2hoaGJrYmRqZGRpZGdnZ2VpZWVoZWRoZGZmZmVnZWdlZ2VlZWdkZ2djZ2hjaGxdbG9ab2ZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCACDACwAAAEADwAOAAAIhgAHAUgAYcGCBggbGISQIMCgBlwG9dFjp6IdPX0GYaEwCMKgQWqO4NixA8cRNR89LvjoJglJkkncpBy0EqSPGDRoxPCBsiPNj3KwSLlyRQoWOTNrflzK1GeDplAHcWQQtWmFQQOqMi0wCIHWpQoGWfj6cSzEQXC63IG6UWCCBhA2KDS4sGFAACH5BAUIAIMALAIACQACAAMAAAgJAMUMcsHjSZSAACH5BAUIAIMALAMACgADAAQAAAgQAGGUGbSCxaBBJ4IM8gIlIAAh+QQFCACDACwEAAoAAwAEAAAIEAAHhTkzKAeVFiCoDDIyKCAAIfkEBQgAgwAsBQAIAAMABAAACBAABzFJM6jElj0pwAwaMiggACH5BAUIAIMALAYABwADAAUAAAgSAAfpGFSlQ5FBQEIMGpRiYZiAACH5BAUIAIMALAgACQADAAQAAAgQAAcN2jJIiIwpHogMujEoIAAh+QQFCACDACwJAAcABQAFAAAIGQAHCRw4kI2gHiK+iBlEwoQNFYOaBMqyJCAAIfkECTIAgwAsAAABAA8ADgAACBkABwkcSLCgwYMIEypcyLChw4cQI0qcSDEgADs='); } html .menu .menu_firewall:hover { - background-image: url("data:image/gif;base64,R0lGODlhEAAQANUAAP////39/fv7+/f39+3t7evr6+np6efn5+Xl5ePj4+Hh4d/f393d3dnZ2dfX19XV1dHR0cvLy8nJycfHx8PDw8HBwb+/v729vbu7u7m5ube3t7W1tbOzs7Gxsa+vr6enp6WlpaOjo5+fnwDZNpeXl42NjYuLi4mJiSitSCqpSiypSoeHhyirSC6lTIWFhTKhTjiZUDyXUnx8fECRVEKPVHp6enh4eEqHWEiHWHR0dFB+XHBwcFpyYGZmZgAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAwA9ACwAAAAADwAQAAAGdMCesEeiHAACR2c17J0oiUXEE/pgHAsFptYjQFzN4c6UmPQKoXAYIzl/1M1M5AyCDzdzwtveu8wRdXwXbQ8afD0SGD0dEIcNIj01CDl2NQeUPRZzcA8WTQWKYRUGYTkJDlw9MgwLO3AaBh0bBhyHJQEDYE1BACH5BAUEAD0ALAMABgACAAMAAAYHwB6PN+qlggAh+QQFBAA9ACwFAAcAAQADAAAGBUDaCBUEACH5BAUIAD0ALAYACAACAAMAAAYHwBtuNGKpggAh+QQFCAA9ACwIAAcAAQADAAAGBcDZSBUEACH5BAUIAD0ALAkABgABAAMAAAYFwNioFQQAIfkEBQgAPQAsCgAFAAEAAwAABgVA2OgVBAAh+QQFBgA9ACwLAAQAAgADAAAGB0Aab6SD9YIAIfkECTIAPQAsAAAAAA8AEAAABhXAnnBILBqPyKRyyWw6n9CodEqtJoMAOw==") + background-image: url('data:image/gif;base64,R0lGODlhEAAQANUAAP////39/fv7+/f39+3t7evr6+np6efn5+Xl5ePj4+Hh4d/f393d3dnZ2dfX19XV1dHR0cvLy8nJycfHx8PDw8HBwb+/v729vbu7u7m5ube3t7W1tbOzs7Gxsa+vr6enp6WlpaOjo5+fnwDZNpeXl42NjYuLi4mJiSitSCqpSiypSoeHhyirSC6lTIWFhTKhTjiZUDyXUnx8fECRVEKPVHp6enh4eEqHWEiHWHR0dFB+XHBwcFpyYGZmZgAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAwA9ACwAAAAADwAQAAAGdMCesEeiHAACR2c17J0oiUXEE/pgHAsFptYjQFzN4c6UmPQKoXAYIzl/1M1M5AyCDzdzwtveu8wRdXwXbQ8afD0SGD0dEIcNIj01CDl2NQeUPRZzcA8WTQWKYRUGYTkJDlw9MgwLO3AaBh0bBhyHJQEDYE1BACH5BAUEAD0ALAMABgACAAMAAAYHwB6PN+qlggAh+QQFBAA9ACwFAAcAAQADAAAGBUDaCBUEACH5BAUIAD0ALAYACAACAAMAAAYHwBtuNGKpggAh+QQFCAA9ACwIAAcAAQADAAAGBcDZSBUEACH5BAUIAD0ALAkABgABAAMAAAYFwNioFQQAIfkEBQgAPQAsCgAFAAEAAwAABgVA2OgVBAAh+QQFBgA9ACwLAAQAAgADAAAGB0Aab6SD9YIAIfkECTIAPQAsAAAAAA8AEAAABhXAnnBILBqPyKRyyWw6n9CodEqtJoMAOw=='); } -.menu .menu_btwaf,.menu .current .menu_btwaf{ - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAGTSURBVDiNpZNBaxNBGIaf3RkSSEkJLmYIybYyETRG6CEwELAevAheBH9CKRVksHdPgRxzacBDwT/hT8hBydEK0aqHXFI9BCKBaEJSttuDadjgtpj63uab733ebz4YJwxD4tRsNm+k0+nXWmuRSqVeGGMGcX2iVqstDkopx/O8Xcdxbna73Tuu675SSt0NguBjq9XamEwmj3zf/wAsUp0wDGk0GjvFYvFeoVB42263D33fT/b7/RNgu1wuI6VsD4fDnOd5p51O53kul3uazWa/VCqVNxIgkUgcDAYDORqNHgMbvV4vLYS4LaW8CHqQyWQAfmutD4Fbs9nsDPgDEEL8nE6nm+Px+L4QInYnAEEQrCWTydLc8wPAnd+58+Kl5hjJvwArSkSNK0VHQ/9ngiXA2jUA61HAp2sAOlHAM+DzCuZj4MkCYK39DuwBo38w/wL2jDEn0Qmw1r4HHgJfrzB/E0JsV6vVdxeFpe1ba4+ALcCy/KRj4CWwZYw5inqcy75zvV5fz+fzB1proZTaL5VKw7i+cyFObUDzXeUJAAAAAElFTkSuQmCC"); +.menu .menu_btwaf, +.menu .current .menu_btwaf { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAGTSURBVDiNpZNBaxNBGIaf3RkSSEkJLmYIybYyETRG6CEwELAevAheBH9CKRVksHdPgRxzacBDwT/hT8hBydEK0aqHXFI9BCKBaEJSttuDadjgtpj63uab733ebz4YJwxD4tRsNm+k0+nXWmuRSqVeGGMGcX2iVqstDkopx/O8Xcdxbna73Tuu675SSt0NguBjq9XamEwmj3zf/wAsUp0wDGk0GjvFYvFeoVB42263D33fT/b7/RNgu1wuI6VsD4fDnOd5p51O53kul3uazWa/VCqVNxIgkUgcDAYDORqNHgMbvV4vLYS4LaW8CHqQyWQAfmutD4Fbs9nsDPgDEEL8nE6nm+Px+L4QInYnAEEQrCWTydLc8wPAnd+58+Kl5hjJvwArSkSNK0VHQ/9ngiXA2jUA61HAp2sAOlHAM+DzCuZj4MkCYK39DuwBo38w/wL2jDEn0Qmw1r4HHgJfrzB/E0JsV6vVdxeFpe1ba4+ALcCy/KRj4CWwZYw5inqcy75zvV5fz+fzB1proZTaL5VKw7i+cyFObUDzXeUJAAAAAElFTkSuQmCC'); } -html .menu .menu_btwaf:hover{ - background-image: url("data:image/gif;base64,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"); +html .menu .menu_btwaf:hover { + background-image: url('data:image/gif;base64,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'); } html .menu .menu_xterm:hover { - background-image: url("data:image/gif;base64,R0lGODlhEAAQAMQXAJ6ipUFITySRPIiMkDFRQuXm5jJKQy1kQCGeOzBXQSl3PiWLPVhfZSxrQCpxP9na2yeEPTREQ8LExmRqb5OXm/Hx8TU9RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjMyQjYwMTU3OTA2QTExRUJCN0NFQUUwQjRDMzM4RDJDIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjMyQjYwMTU4OTA2QTExRUJCN0NFQUUwQjRDMzM4RDJDIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MzJCNjAxNTU5MDZBMTFFQkI3Q0VBRTBCNEMzMzhEMkMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MzJCNjAxNTY5MDZBMTFFQkI3Q0VBRTBCNEMzMzhEMkMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQFMgAXACwAAAAAEAAQAAAFU6AljmRpBVOqrqtFVXAsy9Q7VMMDzHHN/5UawGQC1CiWg4IoOiINAoGB6BxBENSjyIE4oFKMprYhIFgYkvTQpWWOqm6RcVBI2+/2AuXL6k8CcSYhACH5BAUyABcALAcACQAFAAIAAAUIYJSMBLGcSggAIfkEBTIAFwAsBwAJAAUAAgAABQhgMI0MI51ACAAh+QQFMgAXACwHAAkABQACAAAFCGCUjASxnEoIADs=") + background-image: url('data:image/gif;base64,R0lGODlhEAAQAMQXAJ6ipUFITySRPIiMkDFRQuXm5jJKQy1kQCGeOzBXQSl3PiWLPVhfZSxrQCpxP9na2yeEPTREQ8LExmRqb5OXm/Hx8TU9RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjMyQjYwMTU3OTA2QTExRUJCN0NFQUUwQjRDMzM4RDJDIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjMyQjYwMTU4OTA2QTExRUJCN0NFQUUwQjRDMzM4RDJDIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MzJCNjAxNTU5MDZBMTFFQkI3Q0VBRTBCNEMzMzhEMkMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MzJCNjAxNTY5MDZBMTFFQkI3Q0VBRTBCNEMzMzhEMkMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQFMgAXACwAAAAAEAAQAAAFU6AljmRpBVOqrqtFVXAsy9Q7VMMDzHHN/5UawGQC1CiWg4IoOiINAoGB6BxBENSjyIE4oFKMprYhIFgYkvTQpWWOqm6RcVBI2+/2AuXL6k8CcSYhACH5BAUyABcALAcACQAFAAIAAAUIYJSMBLGcSggAIfkEBTIAFwAsBwAJAAUAAgAABQhgMI0MI51ACAAh+QQFMgAXACwHAAkABQACAAAFCGCUjASxnEoIADs='); } html .menu .menu_day:hover { - background-image: url("data:image/gif;base64,R0lGODlhEAAQANUAANPT09HR0c3NzcvLy8nJycfHx8XFxcPDw8HBwb+/v729vbu7u7m5ubW1tbOzs7Gxsa2trampqaenp6WlpaOjo6GhoQDZNpubm5WVlY+Pj42NjYuLi4mJiYeHh4WFhYODg35+fnZ2dnR0dHJycnBwcGZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAlACwAAAEADwAOAAAGesCSUKQRGkua0RGjAFQm0EkFoMAIFY9HAHPpXjABiINREohKoaMwHSKUBgvKJEKvTygLw1vCyWj+gBkcEnoGHCUWFmpCHAglBYeLRhsHjxuSRhqOBJeYSI4FnZgeegMdniUgBSULER8dHrCxG7QRDUIPCQq7vLsJDyVBACH5BAUKACUALAcABwACAAEAAAYEQIslCAAh+QQFCgAlACwKAAcAAgABAAAGBECLJQgAIfkEBQoAJQAsBAAJAAIAAQAABgRAiyUIACH5BAUKACUALAcACQACAAEAAAYEQIslCAAh+QQFCgAlACwKAAkAAgABAAAGBECLJQgAIfkEBQoAJQAsBAALAAIAAQAABgRAiyUIACH5BAUKACUALAcACwACAAEAAAYEQIslCAAh+QQFCgAlACwKAAsAAgABAAAGBECLJQgAIfkECTIAJQAsAAABAA8ADgAABhTAknBILBqPyKRyyWw6n9CodEoNAgA7") + background-image: url('data:image/gif;base64,R0lGODlhEAAQANUAANPT09HR0c3NzcvLy8nJycfHx8XFxcPDw8HBwb+/v729vbu7u7m5ubW1tbOzs7Gxsa2trampqaenp6WlpaOjo6GhoQDZNpubm5WVlY+Pj42NjYuLi4mJiYeHh4WFhYODg35+fnZ2dnR0dHJycnBwcGZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAlACwAAAEADwAOAAAGesCSUKQRGkua0RGjAFQm0EkFoMAIFY9HAHPpXjABiINREohKoaMwHSKUBgvKJEKvTygLw1vCyWj+gBkcEnoGHCUWFmpCHAglBYeLRhsHjxuSRhqOBJeYSI4FnZgeegMdniUgBSULER8dHrCxG7QRDUIPCQq7vLsJDyVBACH5BAUKACUALAcABwACAAEAAAYEQIslCAAh+QQFCgAlACwKAAcAAgABAAAGBECLJQgAIfkEBQoAJQAsBAAJAAIAAQAABgRAiyUIACH5BAUKACUALAcACQACAAEAAAYEQIslCAAh+QQFCgAlACwKAAkAAgABAAAGBECLJQgAIfkEBQoAJQAsBAALAAIAAQAABgRAiyUIACH5BAUKACUALAcACwACAAEAAAYEQIslCAAh+QQFCgAlACwKAAsAAgABAAAGBECLJQgAIfkECTIAJQAsAAABAA8ADgAABhTAknBILBqPyKRyyWw6n9CodEoNAgA7'); } html .menu .menu_soft:hover { - background-image: url("data:image/gif;base64,R0lGODlhEAAQAOYAAOPj4+Hh4d/f393d3dvb29nZ2dfX19XV1dPT09HR0c/Pz83NzcvLy8nJycfHx8XFxcPDw7+/v729vbu7u6+vr62traurq6mpqaenp6WlpZmZmZeXl5WVlRTDQBTDPpOTkxLDPhbBQBi/QBTBQBq9Qha/QJGRkRi9Qhi9QI+Pjxq7Qhy5RB63RBy5QiC1RiC1RI2NjSKzRiSxRouLiyKxRiavSCitSCSvSImJiSatSCypSiirSCynSoWFhYODg4GBgTadUDadTjabUDSdTjibUDiZUDyXUn5+fjqXUjyVUnx8fHh4eESLVkaLVkaJWEaJVkqHWEiHWEqFWE6DWkyDWk6BWlB+WlB8XFJ8XFJ6XFR6XlR4Xlh2Xlp0YGZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFHgBeACwAAAEAEAAPAAAHtoBeXTEdIR0qWF4/BgECAQtKXjIrQkBAMjVeEAwVFBUHCl4iRV6lUy5eCyalXhgAXidArE6oCxqsFQGiRKxStR+sGLonLk5MTTwsXgoSHBscCwJeWDUu1jFUXjMLCt0OOKzh4uI+DwndDDNeOAzdCQ89XgUKzhwTCcsR9dFeAxasKUItAFZKmBcCFFhxEHirVK5+F1jBwKeKVYZXDA50qtDAgZcHnDwdwKdEQaMABcD1KHAywZFAACH5BAUeAF4ALAAAAQAQAAcAAAdhgF5LDAECAQY+XloqHSEdMVxeDQcVFBUND147MkBAQisuXgMXXqUwCV4uUKVeRh1eBBSsHApeMUysRK8EFqwptTGrpa6wChwbHBMIqTxNTE4xIV49DwrWCzBeUzEu3TVWgQAh+QQFHgBeACwJAAEABwAPAAAHWIA/BgECAQtKEAwVFBUHCgsmXpIYAAsakl4Vhh+YGAEKEhwbHAsCMwsKqQ44mK1WMS6xNlguOk1MTjEhMVCYRh0xTJhEHS69kkkdNjJAQEIrLlckHSHFWoEAIfkECR4AXgAsAAABABAADwAAB3CAXoKDhIWGh4iJiouMjY6PiVg2LpQxVV44DAoKCQ89XiQuTkxNPCxeChEcGxwLAl4iRINSLl4LH4MYAV4nQINOtQsagxW7IkWDU8EmgxkAXjErQkBAMjVeDwwVFBUHCV5cLh0hHSRWXj0FAQIBCUeBADs=") + background-image: url('data:image/gif;base64,R0lGODlhEAAQAOYAAOPj4+Hh4d/f393d3dvb29nZ2dfX19XV1dPT09HR0c/Pz83NzcvLy8nJycfHx8XFxcPDw7+/v729vbu7u6+vr62traurq6mpqaenp6WlpZmZmZeXl5WVlRTDQBTDPpOTkxLDPhbBQBi/QBTBQBq9Qha/QJGRkRi9Qhi9QI+Pjxq7Qhy5RB63RBy5QiC1RiC1RI2NjSKzRiSxRouLiyKxRiavSCitSCSvSImJiSatSCypSiirSCynSoWFhYODg4GBgTadUDadTjabUDSdTjibUDiZUDyXUn5+fjqXUjyVUnx8fHh4eESLVkaLVkaJWEaJVkqHWEiHWEqFWE6DWkyDWk6BWlB+WlB8XFJ8XFJ6XFR6XlR4Xlh2Xlp0YGZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFHgBeACwAAAEAEAAPAAAHtoBeXTEdIR0qWF4/BgECAQtKXjIrQkBAMjVeEAwVFBUHCl4iRV6lUy5eCyalXhgAXidArE6oCxqsFQGiRKxStR+sGLonLk5MTTwsXgoSHBscCwJeWDUu1jFUXjMLCt0OOKzh4uI+DwndDDNeOAzdCQ89XgUKzhwTCcsR9dFeAxasKUItAFZKmBcCFFhxEHirVK5+F1jBwKeKVYZXDA50qtDAgZcHnDwdwKdEQaMABcD1KHAywZFAACH5BAUeAF4ALAAAAQAQAAcAAAdhgF5LDAECAQY+XloqHSEdMVxeDQcVFBUND147MkBAQisuXgMXXqUwCV4uUKVeRh1eBBSsHApeMUysRK8EFqwptTGrpa6wChwbHBMIqTxNTE4xIV49DwrWCzBeUzEu3TVWgQAh+QQFHgBeACwJAAEABwAPAAAHWIA/BgECAQtKEAwVFBUHCgsmXpIYAAsakl4Vhh+YGAEKEhwbHAsCMwsKqQ44mK1WMS6xNlguOk1MTjEhMVCYRh0xTJhEHS69kkkdNjJAQEIrLlckHSHFWoEAIfkECR4AXgAsAAABABAADwAAB3CAXoKDhIWGh4iJiouMjY6PiVg2LpQxVV44DAoKCQ89XiQuTkxNPCxeChEcGxwLAl4iRINSLl4LH4MYAV4nQINOtQsagxW7IkWDU8EmgxkAXjErQkBAMjVeDwwVFBUHCV5cLh0hHSRWXj0FAQIBCUeBADs='); } html .menu .menu_set:hover { - background-image: url("data:image/gif;base64,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") + background-image: url('data:image/gif;base64,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'); } html .menu .menu_folder:hover { - background-image: url("data:image/gif;base64,R0lGODlhEAAQANUAAPX19efn593d3dXV1dPT09HR0c/Pz83NzcvLy8nJycfHx8XFxcHBwb29vbm5ube3t7W1tbOzs7Gxsa+vr62traurq6mpqaenp6WlpaOjo6GhoQDZNp+fn52dnZubm5mZmZeXl5WVlZOTk4+Pj4WFhX5+fnx8fHp6enh4eHZ2dnJycnBwcGZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFDgAsACwAAAIAEAAMAAAGYEAWCHEohFjIpJJVGJlKD0oGQ8VoVEkCdslFajEMiuVCJlskjwTz1OgmSQsWQhRxIysg1mLysbMcKywKCih2J3UsAgZ+Hh1IABJ+ECVIARwlmJmZJAxJHkQHoaKhA3ksQQAh+QQJDgAsACwAAAAAEAAOAAAGGUCWULgpGo/DpHLJbDqf0Kh0Sq1ar9isMAgAIfkECQ4ALAAsAAABABAADQAABmZAllC4KRqPQhDiUAgNn8/CyFR6UDKYLEajGhK60LDwi2FQLJd02iJ5JFiFU0M8JC1YCFGELqyAWAsTH3wsDissCgoofCd7LAIGhB4dQgAShBAlQgEcJZ6fnyQMQx5LB6eopwN/LEEAIfkECQ4ALAAsAAACABAADAAABmNAFghxKGyOyCSLVRiZSg9KBkPFaFRLFgGb7Xq1KgyDYrmYzRbJI8E8Nb5d0oKFEEXg2QqItZh88EsOKywKCiiAJ3csAgaALB4dSwASjhAlSwEcJZucnCQMWR5EB6SlpAN7LEEAIfkECQ4ALAAsAAACABAADAAABlxAFghxKIRYyKSSVRiZSpuodIokqJbYpBXDoFguYLBF8kgwT41skrRgIUQRNbICYi0mHznLsWIpFChyJ3EsAgZ6Hh1IABJ6ECVIARwllJWVJAxJHkQHnZ6dA3UsQQAh+QQFDgAsACwAAAIAEAAMAAAGZUAWCHEohFjIpJJVGJlKD0oGQ8VoVEkClrXper9ILYZBsVzOZ4vkkWCeGsslacFCiCJxZQXEWkw+eUkOKywKCiiBLCd4LAIGiSweHUgAEpAQJUgBHCWdnp4kDEkeRAemp6YDfCxBACH5BAkOACwALAAAAgAQAAwAAAYUQJZwSCwaj8ikcslsOp/QqHQqDAIAIfkECQ4ALAAsAAACABAADAAABlxAFghxKIRYyKSSVRiZSpuodIokqJbYpBXDoFguYLBF8kgwT41skrRgIUQRNbICYi0mHznLsWIpFChyJ3EsAgZ6Hh1IABJ6ECVIARwllJWVJAxJHkQHnZ6dA3UsQQAh+QQJDgAsACwAAAIAEAAMAAAGY0AWCHEobI7IJItVGJlKD0oGQ8VoVEsWAZvterUqDINiuZjNFskjwTw1vl3SgoUQReDZCoi1mHzwSw4rLAoKKIAndywCBoAsHh1LABKOECVLARwlm5ycJAxZHkQHpKWkA3ssQQAh+QQJDgAsACwAAAEAEAANAAAGZkCWULgpGo9CEOJQCA2fz8LIVHpQMpgsRqMaErrQsPCLYVAsl3TaInkkWIVTQzwkLVgIUYQurIBYCxMffCwOKywKCih8J3ssAgaEHh1CABKEECVCARwlnp+fJAxDHksHp6inA38sQQAh+QQJDgAsACwAAAAAEAAOAAAGZkCWULgpGo/DpHIJQhwKoaWyMDKVHpQMZovRqIaEr3QZxjAolotabZE8EqzCqTEWkhYshChSZ1VALAsTH30OKywKCih1J3wsAgZ9Hh1CABJ9ECVCARwlnp+fJAxDHk4Hp6inA4AsQQA7") + background-image: url('data:image/gif;base64,R0lGODlhEAAQANUAAPX19efn593d3dXV1dPT09HR0c/Pz83NzcvLy8nJycfHx8XFxcHBwb29vbm5ube3t7W1tbOzs7Gxsa+vr62traurq6mpqaenp6WlpaOjo6GhoQDZNp+fn52dnZubm5mZmZeXl5WVlZOTk4+Pj4WFhX5+fnx8fHp6enh4eHZ2dnJycnBwcGZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFDgAsACwAAAIAEAAMAAAGYEAWCHEohFjIpJJVGJlKD0oGQ8VoVEkCdslFajEMiuVCJlskjwTz1OgmSQsWQhRxIysg1mLysbMcKywKCih2J3UsAgZ+Hh1IABJ+ECVIARwlmJmZJAxJHkQHoaKhA3ksQQAh+QQJDgAsACwAAAAAEAAOAAAGGUCWULgpGo/DpHLJbDqf0Kh0Sq1ar9isMAgAIfkECQ4ALAAsAAABABAADQAABmZAllC4KRqPQhDiUAgNn8/CyFR6UDKYLEajGhK60LDwi2FQLJd02iJ5JFiFU0M8JC1YCFGELqyAWAsTH3wsDissCgoofCd7LAIGhB4dQgAShBAlQgEcJZ6fnyQMQx5LB6eopwN/LEEAIfkECQ4ALAAsAAACABAADAAABmNAFghxKGyOyCSLVRiZSg9KBkPFaFRLFgGb7Xq1KgyDYrmYzRbJI8E8Nb5d0oKFEEXg2QqItZh88EsOKywKCiiAJ3csAgaALB4dSwASjhAlSwEcJZucnCQMWR5EB6SlpAN7LEEAIfkECQ4ALAAsAAACABAADAAABlxAFghxKIRYyKSSVRiZSpuodIokqJbYpBXDoFguYLBF8kgwT41skrRgIUQRNbICYi0mHznLsWIpFChyJ3EsAgZ6Hh1IABJ6ECVIARwllJWVJAxJHkQHnZ6dA3UsQQAh+QQFDgAsACwAAAIAEAAMAAAGZUAWCHEohFjIpJJVGJlKD0oGQ8VoVEkClrXper9ILYZBsVzOZ4vkkWCeGsslacFCiCJxZQXEWkw+eUkOKywKCiiBLCd4LAIGiSweHUgAEpAQJUgBHCWdnp4kDEkeRAemp6YDfCxBACH5BAkOACwALAAAAgAQAAwAAAYUQJZwSCwaj8ikcslsOp/QqHQqDAIAIfkECQ4ALAAsAAACABAADAAABlxAFghxKIRYyKSSVRiZSpuodIokqJbYpBXDoFguYLBF8kgwT41skrRgIUQRNbICYi0mHznLsWIpFChyJ3EsAgZ6Hh1IABJ6ECVIARwllJWVJAxJHkQHnZ6dA3UsQQAh+QQJDgAsACwAAAIAEAAMAAAGY0AWCHEobI7IJItVGJlKD0oGQ8VoVEsWAZvterUqDINiuZjNFskjwTw1vl3SgoUQReDZCoi1mHzwSw4rLAoKKIAndywCBoAsHh1LABKOECVLARwlm5ycJAxZHkQHpKWkA3ssQQAh+QQJDgAsACwAAAEAEAANAAAGZkCWULgpGo9CEOJQCA2fz8LIVHpQMpgsRqMaErrQsPCLYVAsl3TaInkkWIVTQzwkLVgIUYQurIBYCxMffCwOKywKCih8J3ssAgaEHh1CABKEECVCARwlnp+fJAxDHksHp6inA38sQQAh+QQJDgAsACwAAAAAEAAOAAAGZkCWULgpGo/DpHIJQhwKoaWyMDKVHpQMZovRqIaEr3QZxjAolotabZE8EqzCqTEWkhYshChSZ1VALAsTH30OKywKCih1J3wsAgZ9Hh1CABJ9ECVCARwlnp+fJAxDHk4Hp6inA4AsQQA7'); } html .menu .menu_exit:hover { - background-image: url("data:image/gif;base64,R0lGODlhEAAQANUAAOPj4+Hh4dnZ2dXV1c3NzcvLy8fHx8PDw8HBwb+/v729vbu7u7W1ta2trampqaenp6Ojo6GhoZ2dnQzNOgjPOpeXlxq9Qhi9QI+Pj4uLi4mJiSatSCqpSjCjTDSfToGBgTadTjKfTjibUDqZUDqXUDyVUkCRVESNVnZ2dkyFWnR0dE6BWlB+XFB8XFR4Xlh2XlxwYF5uYmZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCAAyACwCAAEACwAOAAAGQMBGgUAsEgyoAEMSaTYlgwzgI6taZYkKQHO1ZlDb7jUsrpLLZ3G6ux5zxRgwVayoBBQPh17/EGQgCQiCgwcLKkEAIfkEBQgAMgAsBwAHAAEAAgAABgRA0ykIACH5BAUIADIALAgABwABAAIAAAYEwI4oCAAh+QQFCAAyACwJAAcAAgACAAAGBkCPhzQKAgAh+QQFCAAyACwLAAcAAQACAAAGBEDPKAgAIfkEBQgAMgAsDAAHAAIAAgAABgZA0KbECQIAIfkEBQgAMgAsDAAFAAIAAgAABgZAVypmCQIAIfkEBQgAMgAsDgAGAAIAAwAABgfAlYySmqyCACH5BAUIADIALAwACQADAAEAAAYFQNiFFQQAIfkEBQgAMgAsDAAKAAIAAQAABgTAFysIACH5BAkyADIALAIAAQAOAA4AAAYUQJlwSCwaj8ikcslsOp/QqHRqDAIAOw==") + background-image: url('data:image/gif;base64,R0lGODlhEAAQANUAAOPj4+Hh4dnZ2dXV1c3NzcvLy8fHx8PDw8HBwb+/v729vbu7u7W1ta2trampqaenp6Ojo6GhoZ2dnQzNOgjPOpeXlxq9Qhi9QI+Pj4uLi4mJiSatSCqpSjCjTDSfToGBgTadTjKfTjibUDqZUDqXUDyVUkCRVESNVnZ2dkyFWnR0dE6BWlB+XFB8XFR4Xlh2XlxwYF5uYmZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCAAyACwCAAEACwAOAAAGQMBGgUAsEgyoAEMSaTYlgwzgI6taZYkKQHO1ZlDb7jUsrpLLZ3G6ux5zxRgwVayoBBQPh17/EGQgCQiCgwcLKkEAIfkEBQgAMgAsBwAHAAEAAgAABgRA0ykIACH5BAUIADIALAgABwABAAIAAAYEwI4oCAAh+QQFCAAyACwJAAcAAgACAAAGBkCPhzQKAgAh+QQFCAAyACwLAAcAAQACAAAGBEDPKAgAIfkEBQgAMgAsDAAHAAIAAgAABgZA0KbECQIAIfkEBQgAMgAsDAAFAAIAAgAABgZAVypmCQIAIfkEBQgAMgAsDgAGAAIAAwAABgfAlYySmqyCACH5BAUIADIALAwACQADAAEAAAYFQNiFFQQAIfkEBQgAMgAsDAAKAAIAAQAABgTAFysIACH5BAkyADIALAIAAQAOAA4AAAYUQJlwSCwaj8ikcslsOp/QqHRqDAIAOw=='); } html .menu .menu_docker { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjQ2OUMyQTlEQzA3RjExRUNBRjc0QjI4QkM0QUMxRDBBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjQ2OUMyQTlFQzA3RjExRUNBRjc0QjI4QkM0QUMxRDBBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NDY5QzJBOUJDMDdGMTFFQ0FGNzRCMjhCQzRBQzFEMEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NDY5QzJBOUNDMDdGMTFFQ0FGNzRCMjhCQzRBQzFEMEEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz606BQhAAAAn0lEQVR42mL8//8/AyWAiYFCQB8DZs2a9R+EsckxUhoGLPhshVkCxGB2WloaI4ZCZBeA2LgwMpg5c+Z/rF7AZisyOz09nXH69OkNTExM9f/+/QtiZGQ0BQcikAHGxIDMzMwGcOgzMa0D6qkEuwBXCOMDINeQnQ5gmskyAOj3GIx0API/csjiAkB1ZsCoPI3VAPTowedsqqZEijMTQIABAO7NWyhHRpXVAAAAAElFTkSuQmCC"); + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjQ2OUMyQTlEQzA3RjExRUNBRjc0QjI4QkM0QUMxRDBBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjQ2OUMyQTlFQzA3RjExRUNBRjc0QjI4QkM0QUMxRDBBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NDY5QzJBOUJDMDdGMTFFQ0FGNzRCMjhCQzRBQzFEMEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NDY5QzJBOUNDMDdGMTFFQ0FGNzRCMjhCQzRBQzFEMEEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz606BQhAAAAn0lEQVR42mL8//8/AyWAiYFCQB8DZs2a9R+EsckxUhoGLPhshVkCxGB2WloaI4ZCZBeA2LgwMpg5c+Z/rF7AZisyOz09nXH69OkNTExM9f/+/QtiZGQ0BQcikAHGxIDMzMwGcOgzMa0D6qkEuwBXCOMDINeQnQ5gmskyAOj3GIx0API/csjiAkB1ZsCoPI3VAPTowedsqqZEijMTQIABAO7NWyhHRpXVAAAAAElFTkSuQmCC'); } html .menu .menu_docker:hover { - background-image: url("data:image/gif;base64,R0lGODlhEAAQAJEDAJmZmSClOpiYmJmZmSH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIzQURGQkRFQzA3RTExRUNBNUIyOUQ0OTNDNTk5MjFEIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIzQURGQkRGQzA3RTExRUNBNUIyOUQ0OTNDNTk5MjFEIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjNBREZCRENDMDdFMTFFQ0E1QjI5RDQ5M0M1OTkyMUQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjNBREZCRERDMDdFMTFFQ0E1QjI5RDQ5M0M1OTkyMUQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQFHgADACwAAAAAEAAQAAACHZyPqcvtFsKbtII6rgWX+/8d4KgZZJicZTpi7lIAACH5BAUeAAMALAYABQAFAAEAAAIDTGYFACH5BAUeAAMALAMABwAIAAIAAAIFTGZol1YAOw==") + background-image: url('data:image/gif;base64,R0lGODlhEAAQAJEDAJmZmSClOpiYmJmZmSH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIzQURGQkRFQzA3RTExRUNBNUIyOUQ0OTNDNTk5MjFEIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIzQURGQkRGQzA3RTExRUNBNUIyOUQ0OTNDNTk5MjFEIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjNBREZCRENDMDdFMTFFQ0E1QjI5RDQ5M0M1OTkyMUQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjNBREZCRERDMDdFMTFFQ0E1QjI5RDQ5M0M1OTkyMUQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQFHgADACwAAAAAEAAQAAACHZyPqcvtFsKbtII6rgWX+/8d4KgZZJicZTpi7lIAACH5BAUeAAMALAYABQAFAAEAAAIDTGYFACH5BAUeAAMALAMABwAIAAIAAAIFTGZol1YAOw=='); } .pos-box { - height: 50px; + display: flex; width: 100%; + height: 45px; box-shadow: 0 3px 2px 0 rgba(0, 0, 0, 5%) !important; border-radius: 4px; } -.conter-box{ - box-shadow: 0 1px 2px 0 rgba(0,0,0,.1); +.conter-box { + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1); } .position { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKwwAACsMBNCkkqwAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAFZSURBVDiNpdO9a1VBEAXw3zOioIUQEdFGkQdWVtr6D1ikERtRppLU6awUsUkh2CgoBNwhoPhsLESxERR7wcI2XSBNMAHRNFmLbB6Xa64RXFjYOXvmzMfOjmqt/mcd2I+QmUuZOcgbDWWQmTN4iFms4wGu4jC+RMT7wQwy8xBe4FtE3MBXPMdqE5sfLCEzj+Il3kXEE4iIJTzFFbzB9z0FMvMYJphExLPuXUQs4y1eYfmPHmTmbHN+FBGv92zMDm+ulXAzItZHtVaZeRH3sBgRn4ecOyKXcRt3dkuYwyJOZeaJfZyP42TjX1Nrne5SyqSUMu5ho559tpQy2bUP9gL8wHYnzbtYzczTuB8RHzs8/H0Sz+ETbuEDxg3f7pL6AhW/2vknNiNiCxvY6uDT8e2XMINLmbmC89js3I0z8wLOdP36Aht43KIcwULD1+w82/WGT+dk8DP96/oNlqecb6uu8YEAAAAASUVORK5CYII="); + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKwwAACsMBNCkkqwAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAFZSURBVDiNpdO9a1VBEAXw3zOioIUQEdFGkQdWVtr6D1ikERtRppLU6awUsUkh2CgoBNwhoPhsLESxERR7wcI2XSBNMAHRNFmLbB6Xa64RXFjYOXvmzMfOjmqt/mcd2I+QmUuZOcgbDWWQmTN4iFms4wGu4jC+RMT7wQwy8xBe4FtE3MBXPMdqE5sfLCEzj+Il3kXEE4iIJTzFFbzB9z0FMvMYJphExLPuXUQs4y1eYfmPHmTmbHN+FBGv92zMDm+ulXAzItZHtVaZeRH3sBgRn4ecOyKXcRt3dkuYwyJOZeaJfZyP42TjX1Nrne5SyqSUMu5ho559tpQy2bUP9gL8wHYnzbtYzczTuB8RHzs8/H0Sz+ETbuEDxg3f7pL6AhW/2vknNiNiCxvY6uDT8e2XMINLmbmC89js3I0z8wLOdP36Aht43KIcwULD1+w82/WGT+dk8DP96/oNlqecb6uu8YEAAAAASUVORK5CYII='); background-position: 17px 13px; background-repeat: no-repeat; background-size: 20px auto; @@ -1151,7 +1191,7 @@ html .menu .menu_docker:hover { } .search { - width: 306px + width: 306px; } .ser-text { @@ -1159,28 +1199,29 @@ html .menu .menu_docker:hover { height: 30px; width: 250px; padding: 0 8px; - margin-top: 10px + margin-top: 10px; } .ser-sub { width: 38px; height: 30px; border: 0; - background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxAAAAMQBz4pYTAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAE2SURBVDiNndJBS1VRFMXx9UzNQUQD0caFk6YhEUFCOPETiJQfIygQbNQgCCeOGjYLGjRJkPoKoSGIRKADs1nQoEIEfw3cry6v+3oPN2z2ufuu8z/7nruC9ORNvMRXHOIFbrTogjQfOniKX87iR2P9HSv/A1zA+xK/wRwmMYV5vKt3r/sBnpTgcb9R8aw0D3sB1/GzTum3uZsfSnupCVgr8vwQgKXSLnR7I0nuJJFkN4PjY9WZbmMkyXGtx4YAjFY9aQI2knSS3B4CMFd1508HV3CE3QHfP17G2sdo7298UJfzChMtmy9jszTLbT4InpfgCx6Vme5hFd/8jW1cbQME93Hg39jDYmOKT5hGOmi7rNkk15KcJvmcZKv6E0k2k9xNsp1keZBx2vIi3tYkG+cBxJmV13HrN6Szg7ZCfX3NAAAAAElFTkSuQmCC") no-repeat center #20a53a; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxAAAAMQBz4pYTAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAE2SURBVDiNndJBS1VRFMXx9UzNQUQD0caFk6YhEUFCOPETiJQfIygQbNQgCCeOGjYLGjRJkPoKoSGIRKADs1nQoEIEfw3cry6v+3oPN2z2ufuu8z/7nruC9ORNvMRXHOIFbrTogjQfOniKX87iR2P9HSv/A1zA+xK/wRwmMYV5vKt3r/sBnpTgcb9R8aw0D3sB1/GzTum3uZsfSnupCVgr8vwQgKXSLnR7I0nuJJFkN4PjY9WZbmMkyXGtx4YAjFY9aQI2knSS3B4CMFd1508HV3CE3QHfP17G2sdo7298UJfzChMtmy9jszTLbT4InpfgCx6Vme5hFd/8jW1cbQME93Hg39jDYmOKT5hGOmi7rNkk15KcJvmcZKv6E0k2k9xNsp1keZBx2vIi3tYkG+cBxJmV13HrN6Szg7ZCfX3NAAAAAElFTkSuQmCC') + no-repeat center #20a53a; cursor: pointer; margin-right: 2px; - margin-top: 10px + margin-top: 10px; } .title { height: 50px; line-height: 50px; - border-bottom: 1px solid #eee + border-bottom: 1px solid #eee; } .title { height: 50px; line-height: 50px; - border-bottom: 1px solid #eee + border-bottom: 1px solid #eee; } .title.tabs-nav { padding: 0; @@ -1206,7 +1247,6 @@ html .menu .menu_docker:hover { display: inline-block; } - .title.tabs-nav span { padding: 0 25px; height: 100%; @@ -1215,12 +1255,11 @@ html .menu .menu_docker:hover { } .title.tabs-nav span.active { border-bottom: 2px solid #20a53a; - } .title h3 { display: inline-block; line-height: 50px; - margin-right: 12px + margin-right: 12px; } .tablescroll { overflow: auto; @@ -1232,13 +1271,13 @@ html .menu .menu_docker:hover { font-size: 12px; margin-bottom: 0; } -.divtable{ +.divtable { position: relative; } -.table-fixed-box{ - overflow-y:auto; +.table-fixed-box { + overflow-y: auto; } -.ui-selectable{ +.ui-selectable { padding-bottom: 0; } @@ -1248,7 +1287,7 @@ html .menu .menu_docker:hover { border-bottom: 1px solid #e6e6e6; color: #666; font-weight: normal; - padding: 8px 10px; + padding: 8px; font-size: 12.5px; } .divtable .table_toolbar { @@ -1256,7 +1295,7 @@ html .menu .menu_docker:hover { bottom: 6px; position: absolute; } -.table .btlink{ +.table .btlink { word-break: break-word; } .table .btlinkbed { @@ -1266,11 +1305,11 @@ html .menu .menu_docker:hover { white-space: nowrap; overflow: hidden; float: left; - display: block + display: block; } .table .btlinkbed:hover { - border: #ddd 1px solid + border: #ddd 1px solid; } .dataTables_paginate { @@ -1278,9 +1317,9 @@ html .menu .menu_docker:hover { height: 30px; margin-bottom: 10px; margin-top: 15px; - position:relative; + position: relative; } -#filePage{ +#filePage { margin-bottom: 10px; } .page { @@ -1305,7 +1344,7 @@ html .menu .menu_docker:hover { height: 30px; line-height: 30px; padding: 0 10px; - font-family: "Arial"; + font-family: 'Arial'; font-size: 13px; color: #666; float: left; @@ -1313,28 +1352,28 @@ html .menu .menu_docker:hover { border-right: none; /* border: 1px solid #ececec; */ } -.site_type select{ +.site_type select { border-radius: 0px; outline: none; } -.site_type_table{ +.site_type_table { padding: 15px; min-height: 100px; } -.edit_site_type{ - padding:0 15px; +.edit_site_type { + padding: 0 15px; } -.edit_site_type .line .info-r{ - margin-left:0px; +.edit_site_type .line .info-r { + margin-left: 0px; } -.edit_site_type input{ +.edit_site_type input { width: 80% !important; } -.edit_site_type .btn{ +.edit_site_type .btn { margin-right: 0px; } .page div { - float: right + float: right; } .page span, @@ -1343,7 +1382,7 @@ html .menu .menu_docker:hover { height: 28px; line-height: 28px; padding: 0 10px; - font-family: "Arial"; + font-family: 'Arial'; font-size: 13px; color: #666; float: left; @@ -1352,19 +1391,19 @@ html .menu .menu_docker:hover { } .page a.prev { - border-left: #ddd solid 1px + border-left: #ddd solid 1px; } .page a:hover { background: #e8e8e8; color: #20a53a; text-shadow: 0 1px 0 #fff; - cursor: pointer + cursor: pointer; } .page spanold { font-size: 12px; - padding: 4px 10px!important; + padding: 4px 10px !important; border-style: solid; border-width: 1px; border-color: #ddd #ddd #ccc; @@ -1373,7 +1412,7 @@ html .menu .menu_docker:hover { line-height: 16px; background: #f5f5f5; color: #333; - text-shadow: 0 1px 0 #fff + text-shadow: 0 1px 0 #fff; } .page .Pcurrent { @@ -1391,32 +1430,32 @@ html .menu .menu_docker:hover { } .system-info-con { - width: 100% + width: 100%; } -.sys-li-box{ - height:100px; - background-color:#f9f9f9; - border:#f0f0f0 1px solid; - margin-left:20px; - max-width:230px; +.sys-li-box { + height: 100px; + background-color: #f9f9f9; + border: #f0f0f0 1px solid; + margin-left: 20px; + max-width: 230px; } -.sys-li-box .name{ - line-height:40px; - margin-top:8px; +.sys-li-box .name { + line-height: 40px; + margin-top: 8px; } -.sys-li-box .val a{ - font-size:26px; - font-family:arial; +.sys-li-box .val a { + font-size: 26px; + font-family: arial; } .sys-i-c-box { box-sizing: border-box; - max-width: 350px + max-width: 350px; } .sys-i-c-box .siteinfo-box { height: 110px; position: relative; - width: 100% + width: 100%; } .sys-i-c-box .siteinfo-box h3 { @@ -1429,7 +1468,7 @@ html .menu .menu_docker:hover { position: absolute; text-align: center; top: 0; - width: 56px + width: 56px; } .siteinfo-box-right { @@ -1438,7 +1477,7 @@ html .menu .menu_docker:hover { border-top: 1px solid #ddd; height: 110px; margin-left: 56px; - overflow: hidden + overflow: hidden; } .siteinfo-box-right h4 { @@ -1447,7 +1486,7 @@ html .menu .menu_docker:hover { line-height: 60px; overflow: hidden; padding-top: 8px; - text-align: center + text-align: center; } .siteinfo-box-right .sbr-btn { @@ -1457,18 +1496,18 @@ html .menu .menu_docker:hover { height: 27px; line-height: 22px; padding-top: 5px; - text-align: center + text-align: center; } .siteinfo-box-right .sbr-btn a { color: #20a53a; font-size: 16px; - padding: 0 10px + padding: 0 10px; } .circle-box h3, .circle-box h4 { - line-height: 30px + line-height: 30px; } .circle { @@ -1477,7 +1516,7 @@ html .menu .menu_docker:hover { position: relative; border-radius: 50%; background: #20a53a; - margin: 0 auto + margin: 0 auto; } .pie_left, @@ -1486,7 +1525,7 @@ html .menu .menu_docker:hover { height: 100px; position: absolute; top: 0; - left: 0 + left: 0; } /*.left, @@ -1504,14 +1543,14 @@ html .menu .menu_docker:hover { clip: rect(0, auto, auto, 50px); transition: transform 1s ease-in 0s; -webkit-transition: -webkit-transform 1s ease-in 0s; - -moz-transition: -moz-transform 1s ease-in 0s + -moz-transition: -moz-transform 1s ease-in 0s; } -.pie_left{ +.pie_left { clip: rect(0, 50px, auto, 0); - transition: transform .4s ease-in 1s; - -webkit-transition: -webkit-transform .4s ease-in 1s; - -moz-transition: -moz-transform .4s ease-in 1s + transition: transform 0.4s ease-in 1s; + -webkit-transition: -webkit-transform 0.4s ease-in 1s; + -moz-transition: -moz-transform 0.4s ease-in 1s; } .mask { @@ -1520,33 +1559,33 @@ html .menu .menu_docker:hover { border-radius: 50%; left: 6px; top: 6px; - background: #FFF; + background: #fff; position: absolute; line-height: 88px; font-size: 18px; - color: #20a53a + color: #20a53a; } @-webkit-keyframes shineGreen { from { - -webkit-box-shadow: 0 0 10px #999 + -webkit-box-shadow: 0 0 10px #999; } 50% { - -webkit-box-shadow: 0 0 15px #20a53a + -webkit-box-shadow: 0 0 15px #20a53a; } to { - -webkit-box-shadow: 0 0 10px #999 + -webkit-box-shadow: 0 0 10px #999; } } .shine_green { -webkit-animation-name: shineGreen; -webkit-animation-duration: 3s; - -webkit-animation-iteration-count: infinite + -webkit-animation-iteration-count: infinite; } .mem-release { - cursor: pointer + cursor: pointer; } .mem-re-min { @@ -1557,7 +1596,7 @@ html .menu .menu_docker:hover { top: 2px; width: 20px; z-index: 9; - opacity: .9; + opacity: 0.9; } .mem-re-con { @@ -1567,11 +1606,11 @@ html .menu .menu_docker:hover { position: absolute; z-index: 9; display: none; - top: 15px + top: 15px; } .mem-release:hover .mem-re-con { - display: block + display: block; } .soft-man .col-lg-3 { @@ -1582,46 +1621,46 @@ html .menu .menu_docker:hover { margin-bottom: -1px; height: 148px; cursor: pointer; - padding: 0 + padding: 0; } .soft-man .col-lg-3:hover { - box-shadow: 0 0 38px rgba(0, 0, 0, .08) inset; - -webkit-transition: all .25s ease; - transition: all .25s ease + box-shadow: 0 0 38px rgba(0, 0, 0, 0.08) inset; + -webkit-transition: all 0.25s ease; + transition: all 0.25s ease; } -.soft-man .col-lg-3:nth-child(4n+1){ - border-left:0 none; +.soft-man .col-lg-3:nth-child(4n + 1) { + border-left: 0 none; } .soft-man .dashed-border { border: 1px dashed #20a53a; - z-index: 1 + z-index: 1; } .soft-man .no-bg:hover { - box-shadow: 0 0 38px rgba(0, 0, 0, .01) inset; - -webkit-transition: all .15s ease; - transition: all .15s ease + box-shadow: 0 0 38px rgba(0, 0, 0, 0.01) inset; + -webkit-transition: all 0.15s ease; + transition: all 0.15s ease; } .soft-man .image { height: 40px; margin: 30px 0 20px; - text-align: center + text-align: center; } .soft-man .sname { text-align: center; - color: #999 + color: #999; } -.soft-man .col-sm-3>div { +.soft-man .col-sm-3 > div { height: 100%; left: 0; position: absolute; top: 0; width: 100%; - z-index: 0 + z-index: 0; } .soft-man .spanmove { @@ -1632,11 +1671,11 @@ html .menu .menu_docker:hover { position: absolute; top: 5px; right: 5px; - z-index: 3 + z-index: 3; } .soft-man .col-lg-3:hover .spanmove { - display: block + display: block; } .soft-man .text { @@ -1646,7 +1685,7 @@ html .menu .menu_docker:hover { position: absolute; top: 0; width: 100%; - display: none + display: none; } .soft-man .text a { @@ -1657,51 +1696,51 @@ html .menu .menu_docker:hover { line-height: 30px; margin: 59px auto; text-align: center; - width: 100px + width: 100px; } .soft-man-con p.status { line-height: 40px; margin-bottom: 10px; - font-size: 14px + font-size: 14px; } .soft-man-con .sfm-opt .btn { - margin-right: 15px + margin-right: 15px; } .soft-man .sname .glyphicon-True { color: #20a53a; - margin-left: 10px + margin-left: 10px; } .soft-man .sname .glyphicon-False { color: red; - margin-left: 10px + margin-left: 10px; } .soft-man { - position: relative + position: relative; } .soft-man .rowbg { position: absolute; top: 0; width: 100%; - z-index: 0 + z-index: 0; } .soft-man .rowbg .col-lg-3 { - cursor: default + cursor: default; } .soft-man .rowbg .col-lg-3:hover { - box-shadow: 0 0 38px rgba(0, 0, 0, .01) inset; - -webkit-transition: all .15s ease; - transition: all .15s ease + box-shadow: 0 0 38px rgba(0, 0, 0, 0.01) inset; + -webkit-transition: all 0.15s ease; + transition: all 0.15s ease; } -.bw-info{ - height:80px; +.bw-info { + height: 80px; } .bw-info > div { float: left; @@ -1709,13 +1748,11 @@ html .menu .menu_docker:hover { text-align: center; } - - -.bw-info > div p{ - margin-bottom:7px; +.bw-info > div p { + margin-bottom: 7px; } -.bw-info > div a{ - font-size:14px; +.bw-info > div a { + font-size: 14px; color: #666; } .bw-info .ico-down, @@ -1735,23 +1772,23 @@ html .menu .menu_docker:hover { background-color: #f7b851; } .bw-info .ico-write { - background-color: #6CC0CF; + background-color: #6cc0cf; } .bw-info .ico-read { - background-color: #FF4683; + background-color: #ff4683; } .bw-info ul li { height: 56px; - line-height: 56px + line-height: 56px; } .bw-info ul li.bi-line { - border-bottom: #ddd solid 1px + border-bottom: #ddd solid 1px; } .bw-info ul li span { display: block; - margin-right: 15px + margin-right: 15px; } .btn-zhm { @@ -1759,17 +1796,17 @@ html .menu .menu_docker:hover { display: none; position: absolute; right: 42px; - top: 0 + top: 0; } .line { - padding: 5px 0 + padding: 5px 0; } .line .span_tit { display: inline-block; text-align: right; - width: 64px + width: 64px; } .line .tname { @@ -1782,15 +1819,13 @@ html .menu .menu_docker:hover { text-align: right; text-overflow: ellipsis; white-space: nowrap; - width: 125px + width: 125px; } .line .info-r { margin-bottom: 5px; margin-left: 125px; position: relative; - min-height: 30px; - line-height: 30px; } .placeholder { @@ -1798,7 +1833,7 @@ html .menu .menu_docker:hover { left: 20px; line-height: 18px; position: absolute; - top: 27px + top: 27px; } .bt-form-submit-btn { @@ -1809,25 +1844,25 @@ html .menu .menu_docker:hover { padding: 8px 20px 10px; position: absolute; text-align: right; - width: 100% + width: 100%; } .bt-form-submit-btn .btn:first-child { - margin-right: 4px + margin-right: 4px; } .btn-danger { background-color: #cbcbcb; border-color: #cbcbcb; - color: #fff + color: #fff; } .bt-w-main { - height: 555px + height: 555px; } .bt-form { - height: 100% + height: 100%; } .bt-w-menu { @@ -1852,11 +1887,11 @@ html .menu .menu_docker:hover { } .bt-w-menu p a { - display: block + display: block; } .bt-w-menu p .spanmove { - display: none + display: none; } .bt-w-con { @@ -1891,43 +1926,43 @@ html .menu .menu_docker:hover { .label-input-group input { margin-top: 0; margin-right: 5px; - vertical-align: -2px + vertical-align: -2px; } .label-input-group label { margin-bottom: 0; - font-weight: normal + font-weight: normal; } .bingfa .line { - margin-bottom: 10px + margin-bottom: 10px; } .bingfa .line .span_tit { text-align: right; width: 120px; - display: inline-block + display: inline-block; } .bingfa .bt-input-text { - width: 100px + width: 100px; } .ssl-con-key { - width: 47% + width: 47%; } .ssl-con-key textarea { height: 240px; line-height: 18px; width: 100%; - margin-top: 5px + margin-top: 5px; } .ssh-item { float: left; margin-left: 10px; - padding-top: 5px + padding-top: 5px; } .ss-text em { @@ -1935,23 +1970,24 @@ html .menu .menu_docker:hover { float: left; font-style: normal; line-height: 32px; - padding-right: 2px + padding-right: 2px; } .view1, .view2 { - margin-bottom: 15px + margin-bottom: 15px; } .searcTime { - position: relative:z-index:999; - margin-top: 11px + position: relative; + z-index: 999; + margin-top: 11px; } .searcTime .tit { float: left; padding: 5px 10px; - display: none + display: none; } .searcTime .gt { @@ -1960,7 +1996,7 @@ html .menu .menu_docker:hover { margin-right: -1px; cursor: pointer; float: left; - line-height: 16px + line-height: 16px; } .searcTime .gt.on, @@ -1968,14 +2004,14 @@ html .menu .menu_docker:hover { .searcTime .ss .st:hover, .searcTime .ss .st.on { background-color: #20a53a; - color: #fff + color: #fff; } .searcTime .ss { display: inline-block; position: relative; float: left; - line-height: 16px + line-height: 16px; } .searcTime .ss .st { @@ -1983,7 +2019,7 @@ html .menu .menu_docker:hover { border: #ddd 1px solid; margin-right: -1px; cursor: pointer; - float: left + float: left; } .searcTime .ss .time { @@ -1995,25 +2031,25 @@ html .menu .menu_docker:hover { right: -1px; top: 27px; width: 230px; - z-index: 99 + z-index: 99; } .searcTime .ss .time span { margin-bottom: 10px; - display: block + display: block; } .searcTime .ss .time input { border: 1px solid #ddd; height: 22px; padding: 0 5px; - width: 132px + width: 132px; } .searcTime .ss .time input:focus { border: #66afe9 1px solid; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6) + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } .searcTime .ss .sbtn { @@ -2022,77 +2058,77 @@ html .menu .menu_docker:hover { color: #fff; line-height: 24px; text-align: center; - cursor: pointer + cursor: pointer; } .plan { padding: 10px 20px; - margin-bottom: 10px + margin-bottom: 10px; } .plan .typename { line-height: 34px; - width: 120px + width: 120px; } .plan .textname { height: 34px; line-height: 34px; - float: left + float: left; } .plan .planname input { height: 34px; width: 260px; - padding: 0 12px + padding: 0 12px; } .plan .dropdown button b { - font-weight: normal + font-weight: normal; } .plan .dropdown-menu { - min-width: 100px + min-width: 100px; } -.dropdown-menu>li>a { - padding: 3px 12px +.dropdown-menu > li > a { + padding: 3px 12px; } .plan-submit { - margin-left: 141px + margin-left: 141px; } .plan_hms { position: relative; - height: 34px + height: 34px; } .plan_hms span { float: left; height: 32px; line-height: 32px; - position: relative + position: relative; } .plan_hms .name { border-left: 1px solid #ccc; width: 44px; text-align: center; - background-color: #f6f6f6 + background-color: #f6f6f6; } .planSign { margin-left: 10px; height: 35px; - line-height: 35px + line-height: 35px; } .planSign i { margin-right: 8px; font-size: 12px; font-style: initial; - color: red + color: red; } .plan_hms span input { @@ -2102,35 +2138,35 @@ html .menu .menu_docker:hover { line-height: 32px; border: 0; text-align: center; - font-size: 12px + font-size: 12px; } .plan_hms span:first-child input { - border-radius: 4px 0 0 4px + border-radius: 4px 0 0 4px; } .plan_hms span:last-child { - border-radius: 0 4px 4px 0 + border-radius: 0 4px 4px 0; } .plan .dropdown button { - width: 94px + width: 94px; } .txtsjs { width: 260px; - height: 80px + height: 80px; } .rec-install { padding: 16px; width: 100%; - float: left + float: left; } .rec-install .rec-box { width: 305px; - float: left + float: left; } .rec-install h3 { @@ -2145,19 +2181,20 @@ html .menu .menu_docker:hover { padding: 20px 15px 5px 15px; } -.rec-install .rec-box:hover .rec-box-con,.rec-box-con-hover { +.rec-install .rec-box:hover .rec-box-con, +.rec-box-con-hover { background-color: #f9f9f9; - border: #20a53a 1px solid + border: #20a53a 1px solid; } .rec-box-con .ico img { width: 28px; - margin-right: 10px + margin-right: 10px; } .rec-box-con ul li { line-height: 26px; - margin-bottom: 10px + margin-bottom: 10px; } .fangshi { @@ -2182,14 +2219,14 @@ html .menu .menu_docker:hover { font-weight: normal; margin: 0 10px; } -.fangshi1 label span{ +.fangshi1 label span { font-size: 14px; cursor: pointer; } -.fangshi1 .bt_checkbox_group{ +.fangshi1 .bt_checkbox_group { width: 18px; height: 18px; - vertical-align:-8px; + vertical-align: -8px; } .fangshi1 .bt_checkbox_group.active:after { width: 10px; @@ -2199,9 +2236,9 @@ html .menu .menu_docker:hover { } .fangshi label input { vertical-align: -2px; - margin-left: 5px + margin-left: 5px; } -.bt_select_group{ +.bt_select_group { height: 28px; line-height: 26px; border: 1px solid #c2c2c2; @@ -2212,12 +2249,12 @@ html .menu .menu_docker:hover { width: 190px; transition: all 500ms; } -.bt_select_active{ +.bt_select_active { height: 100%; max-width: 240px; width: 100%; } -.bt_select_active .select_val{ +.bt_select_active .select_val { cursor: pointer; height: 100%; width: 100%; @@ -2225,23 +2262,23 @@ html .menu .menu_docker:hover { padding-left: 15px; color: #555; } -.bt_select_active .select_val.default{ - color: #D2D2D2; +.bt_select_active .select_val.default { + color: #d2d2d2; } -.bt_select_active .glyphicon{ +.bt_select_active .glyphicon { color: #aaa; font-size: 12px; position: absolute; right: 10px; - top:50%; - margin-top:-6px; + top: 50%; + margin-top: -6px; transition: all 400ms; } .bt_select_ul { border: 1px solid #d2d2d2; padding: 5px 0; border-radius: 2px; - box-shadow: 0 2px 4px rgba(0, 0, 0, .12); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12); position: absolute; z-index: 9999; background: #fff; @@ -2251,24 +2288,24 @@ html .menu .menu_docker:hover { border-radius: 2px; display: none; } -.bt_select_ul.active{ +.bt_select_ul.active { display: block; } -.bt_select_ul li{ +.bt_select_ul li { padding-left: 15px; cursor: pointer; color: #555; - margin:0 !important; + margin: 0 !important; } -.bt_select_ul li.active{ +.bt_select_ul li.active { background: #20a53a !important; color: #fff; } -.bt_select_ul li:hover{ +.bt_select_ul li:hover { background: #f2f2f2; - transition: .2s all; + transition: 0.2s all; } -.bt_checkbox_group::active{ +.bt_checkbox_group::active { background: #1b8c31; border-color: #1b8c31; } @@ -2285,7 +2322,7 @@ html .menu .menu_docker:hover { margin: 4px; vertical-align: top; } -.bt_checkbox_group.active{ +.bt_checkbox_group.active { background: #20a53a; border-color: #20a53a; } @@ -2311,27 +2348,27 @@ html .menu .menu_docker:hover { .zun-form-new .fangshi { padding: 0 30px 0; - line-height: 30px + line-height: 30px; } .zun-form-new .fangshi label { height: 20px; line-height: 20px; - margin: 4px 20px 0 0 + margin: 4px 20px 0 0; } .zun-form-new .version { - padding: 0 30px + padding: 0 30px; } .zun-form-new .version select { height: 28px; margin-left: 30px; - width: 120px + width: 120px; } .sec-install-btn { - font-family: "宋体"; + font-family: '宋体'; width: 90px; height: 30px; line-height: 30px; @@ -2340,11 +2377,11 @@ html .menu .menu_docker:hover { border-radius: 3px; color: #fff; cursor: pointer; - margin-top: 10px + margin-top: 10px; } .rec-box-con .onekey { - font-family: "宋体"; + font-family: '宋体'; width: 90px; height: 30px; line-height: 30px; @@ -2353,21 +2390,21 @@ html .menu .menu_docker:hover { border-radius: 3px; color: #fff; margin: 20px auto 15px; - cursor: pointer + cursor: pointer; } .rec-box-con .onekey:hover, .sec-install-btn:hover { background: #10952a; - background: linear-gradient(#10952a, #088d22) + background: linear-gradient(#10952a, #088d22); } .phppz { - margin: 14px 0 + margin: 14px 0; } .phppz span { - padding: 10px + padding: 10px; } .phppz textarea { @@ -2376,22 +2413,22 @@ html .menu .menu_docker:hover { vertical-align: bottom; padding: 0 5px; height: 38px; - margin-right: 20px + margin-right: 20px; } .soft-man-con .user_pw { display: none; - margin-top: 30px + margin-top: 30px; } .soft-man-con .user_pw_tit { margin-top: 30px; padding-top: 30px; - border-top: #ccc 1px dashed + border-top: #ccc 1px dashed; } .soft-man-con .user_pw p { - margin-bottom: 15px + margin-bottom: 15px; } .soft-man-con .user_pw_tit .tit { @@ -2406,39 +2443,39 @@ html .menu .menu_docker:hover { display: inline-block; text-align: right; } -.soft-man-con .user_pw .btn_password_get{ +.soft-man-con .user_pw .btn_password_get { margin-left: 135px; } .soft-man-con .user_pw input { - width: 250px + width: 250px; } .soft-man-con .conf_p { - margin-bottom: 10px + margin-bottom: 10px; } .soft-man-con .conf_p input { - width: 100px + width: 100px; } .soft-man-con .funarea { width: 100%; height: 80px; line-height: 22px; - margin-bottom: 10px + margin-bottom: 10px; } .soft-man-con .ver .btn { vertical-align: 0; - margin-left: 10px + margin-left: 10px; } .webEdit-box .soft-man-con .phpmyadmindk { width: 100px; display: inline-block; margin: 0; - padding-right: 0 + padding-right: 0; } .softlist td img { @@ -2452,33 +2489,33 @@ html .menu .menu_docker:hover { .softlist .glyphicon-folder-open { cursor: pointer; - color: #efd566 + color: #efd566; } -.softlist .btswitch+.btswitch-btn { +.softlist .btswitch + .btswitch-btn { width: 2.4em; height: 1.4em; - margin-bottom: 0 + margin-bottom: 0; } .wafConf_checkbox label { font-weight: normal; - margin-right: 20px + margin-right: 20px; } .wafConf button { - vertical-align: 0 + vertical-align: 0; } .wafConf_cc { border-bottom: 1px solid #ddd; border-top: 1px solid #ddd; margin: 10px 0; - padding: 15px 0 + padding: 15px 0; } .wafConf_cc span { - margin-right: 5px + margin-right: 5px; } .wafConf fieldset { @@ -2486,11 +2523,11 @@ html .menu .menu_docker:hover { border-radius: 3px; float: left; padding-bottom: 0; - width: 240px + width: 240px; } .wafConf fieldset:nth-of-type(2) { - margin: 0 10px + margin: 0 10px; } .wafConf legend { @@ -2498,61 +2535,61 @@ html .menu .menu_docker:hover { font-size: 14px; margin: 0 6px; padding: 3px; - width: auto + width: auto; } .wafConf fieldset input { - margin-left: 4px + margin-left: 4px; } .wafConf fieldset .table { margin-top: -1px; - margin-bottom: 0 + margin-bottom: 0; } .wafConf fieldset .table tr td:nth-of-type(2) { - width: 42px + width: 42px; } .wafConf fieldset .table-overflow { height: 210px; overflow: auto; margin-top: 10px; - border-top: #ddd 1px solid + border-top: #ddd 1px solid; } .wafConf-btn { border-bottom: #ddd 1px solid; margin-bottom: 12px; padding-bottom: 15px; - height: 45px + height: 45px; } .wafConf-btn span { float: left; margin-right: 8px; - line-height: 33px + line-height: 33px; } .wafConf-btn .btn { - margin-right: 10px + margin-right: 10px; } .wafConf-btn .ssh-item { - margin-right: 50px + margin-right: 50px; } .gzEdit { - padding: 13px 20px + padding: 13px 20px; } .gzEdit button { margin: 8px; - width: 140px + width: 140px; } .setting-con div.mtb15 { - line-height: 30px + line-height: 30px; } .setting-con div.mtb15 .set-tit { @@ -2563,15 +2600,15 @@ html .menu .menu_docker:hover { text-overflow: ellipsis; white-space: nowrap; vertical-align: -2px; - width: 120px + width: 120px; } .setting-con div.mtb15 .disable { - background-color: #ededed + background-color: #ededed; } .setting-con div.mtb15 .inputtxt { - width: 260px + width: 260px; } .setting-con div.mtb15 .modify { @@ -2585,111 +2622,111 @@ html .menu .menu_docker:hover { } .setting-con div.mtb15 .set-info { - margin-left: 20px + margin-left: 20px; } -.setting-con .btn_tips{ +.setting-con .btn_tips { display: inline-block; position: relative; - z-index: 10 + z-index: 10; } .setting-con p .set-info { - margin-left: 20px + margin-left: 20px; } .set-submit { - margin: 20px 0 10px 135px + margin: 20px 0 10px 135px; } .changepath { - height: 500px + height: 500px; } .changepath .path-top { height: 50px; line-height: 50px; padding-left: 10px; - border-bottom: #aaa 1px solid + border-bottom: #aaa 1px solid; } .changepath .path-top .btn { - margin-right: 10px + margin-right: 10px; } .changepath .path-top .btn span { -moz-transform: scaleX(-1); -webkit-transform: scaleX(-1); -o-transform: scaleX(-1); - transform: scaleX(-1); + transform: scaleX(-1) ;; } .changepath .path-top .place { - display: inline-block + display: inline-block; } .changepath .path-top .place span { - color: #444; - font-size: 12px; - font-weight: bold; - display: inline-block; - width: 450px; - white-space: pre; - text-overflow: ellipsis; - overflow: hidden; - vertical-align: middle; + color: #444; + font-size: 12px; + font-weight: bold; + display: inline-block; + width: 450px; + white-space: pre; + text-overflow: ellipsis; + overflow: hidden; + vertical-align: middle; } .changepath .path-con-left { - float: left; - width: 150px; - height: 450px; - border-right: #aaa 1px solid; - padding: 12px 0; - overflow-y: auto; + float: left; + width: 150px; + height: 450px; + border-right: #aaa 1px solid; + padding: 12px 0; + overflow-y: auto; } .changepath .path-con-left dl { - width: 100%; - height: 100%; - margin-bottom: 0; - padding-left: 12px; + width: 100%; + height: 100%; + margin-bottom: 0; + padding-left: 12px; } .changepath .path-con-left dl dt { - width: 100%; - height: 100%; - padding-left: 22px; - background: url("../img/ico-computer.png") no-repeat left top; - font-size: 14px; - font-weight: normal; + width: 100%; + height: 100%; + padding-left: 22px; + background: url('../img/ico-computer.png') no-repeat left top; + font-size: 14px; + font-weight: normal; } .changepath .path-con-left dl dd { - width: 100%; - line-height: 16px; - padding-left: 6px; - padding-right: 6px; - cursor: pointer; + width: 100%; + line-height: 16px; + padding-left: 6px; + padding-right: 6px; + cursor: pointer; } .changepath .path-con-left dl dd + dd { - margin-top: 12px; + margin-top: 12px; } .changepath .path-con-left dl dd span { - color: #666; + color: #666; } .changepath .path-con-left dl dd span:first-child { - display: inline-block; - margin-right: 6px; + display: inline-block; + margin-right: 6px; } .changepath .path-con-right { - float: left; - height: 450px; - overflow: auto; - width: 530px; + float: left; + height: 450px; + overflow: auto; + width: 530px; } .changepath .path-con-right .default li { @@ -2697,12 +2734,12 @@ html .menu .menu_docker:hover { float: left; text-align: center; margin-top: 20px; - cursor: pointer + cursor: pointer; } .changepath .path-con-right .default li span { font-size: 40px; - color: #666 + color: #666; } .path-con-right .file-list { @@ -2711,10 +2748,10 @@ html .menu .menu_docker:hover { overflow: auto; } -.list-list tr:last-child{ - border-bottom: 1px solid #ececec +.list-list tr:last-child { + border-bottom: 1px solid #ececec; } -.list-list tr input{ +.list-list tr input { border-color: #ddd; margin-top: 6px; } @@ -2733,7 +2770,7 @@ html .menu .menu_docker:hover { border-top: 1px solid #ececec; white-space: pre; } -.path-con-right .list-list tr{ +.path-con-right .list-list tr { box-sizing: border-box; } @@ -2744,23 +2781,23 @@ html .menu .menu_docker:hover { vertical-align: middle; top: 1px; } -.list-list span.glyphicon-file{ +.list-list span.glyphicon-file { font-size: 18px; } .list-list span.glyphicon-folder-open { - color: #edca5c + color: #edca5c; } .list-list span.glyphicon-cloud-download { - font-size: 12px + font-size: 12px; } .newFolderName { border: #ccc 1px solid; height: 30px; padding: 0 5px; - width: 90% + width: 90%; } .path-con-right .list-list td .delfile-btn { @@ -2768,19 +2805,19 @@ html .menu .menu_docker:hover { float: right; font-size: 14px; text-align: center; - width: 18px + width: 18px; } .path-con-right .list-list td .delfile-btn:hover { - color: red + color: red; } .path-con-right .list-list tr:hover .delfile-btn { - display: block + display: block; } .path-con-right .list-list td .btn-xs { - margin-top: 4px + margin-top: 4px; } .getfile-btn { @@ -2788,52 +2825,52 @@ html .menu .menu_docker:hover { border-top: 1px solid #edf1f2; padding: 8px 20px 10px; text-align: right; - width: 100% + width: 100%; } .success-msg { width: 100%; padding: 30px 50px; - font-family: "Microsoft Yahei"; + font-family: 'Microsoft Yahei'; float: left; - position: relative + position: relative; } .success-msg .pic { position: absolute; top: 50%; - margin-top: -100px + margin-top: -100px; } .success-msg .pic img { - width: 158px + width: 158px; } .success-msg .suc-con { float: right; - width: 260px + width: 260px; } .success-msg .suc-con h3 { font-size: 16px; - margin-bottom: 15px + margin-bottom: 15px; } .success-msg .suc-con p { - line-height: 23px + line-height: 23px; } .success-msg .suc-con .p1 { border-bottom: 1px dashed #aaa; color: #000; height: 30px; - margin-bottom: 8px + margin-bottom: 8px; } .success-msg .bottom-btn { margin-top: 60px; width: 100%; - float: left + float: left; } .success-msg .bottom-btn a { @@ -2846,26 +2883,59 @@ html .menu .menu_docker:hover { margin-left: 30px; color: #fff; font-size: 16px; - cursor: pointer + cursor: pointer; } .success-msg .bottom-btn .close-btn { - background-color: #cbcbcb + background-color: #cbcbcb; } .success-msg .bottom-btn .blue-btn { - background-color: #5cb85c + background-color: #5cb85c; } .tasklist { - padding: 15px + padding: 15px; +} + +.tab-nav-border { + border-bottom: #cacad9 1px solid; + font-size: 0; + height: 37px; +} + +.tab-nav-border span { + height: 36px; + line-height: 36px; + padding: 0 18px; + color: #444; + display: inline-block; + cursor: pointer; + position: relative; + bottom: -1px; + border: 1px solid transparent; + font-size: 12px; +} + +.tab-nav-border .on { + border: 1px solid #cacad9; + border-bottom: 1px solid #fff; + color: #444; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + position: relative; +} + +.tab-nav-con { + position: relative; } .tab-nav { - border-bottom: #cacad9 1px solid + border-bottom: #cacad9 1px solid; } .tab-nav span { + position: relative; background-color: #ddd; background: -moz-linear-gradient(top, #f6f6f6, #ddd); background: -webkit-gradient(linear, 0% 0, 0% 100%, from(#f6f6f6), to(#ddd)); @@ -2877,38 +2947,38 @@ html .menu .menu_docker:hover { color: #444; display: inline-block; margin: 0 3px -1px 0; - cursor: pointer + cursor: pointer; } .tab-nav .on { background: #fff; border-bottom: #fff 1px solid; - color: #444 + color: #444; } .tab-con { position: relative; - overflow: auto; - padding: 10px + padding: 10px; } -.tab-con .tab-block{ +.tab-con .tab-block { display: none; + width: 100%; height: 100%; } -.tab-con .tab-block.on{ +.tab-con .tab-block.on { display: inline-block; } .tab-con ul.cmdlist { - list-style-type: decimal + list-style-type: decimal; } ul.cmdlist { - list-style-type: decimal; - height: 480px; - overflow-y: auto; + list-style-type: decimal; + height: 480px; + overflow-y: auto; } .tab-con ul.cmdlist li { @@ -2917,7 +2987,7 @@ ul.cmdlist { list-style-position: inside; line-height: 40px; border-bottom: #dbdbea 1px solid; - margin-top: 6px + margin-top: 6px; } .tab-con ul.cmdlist li .com-progress, @@ -2925,7 +2995,7 @@ ul.cmdlist { .opencmd { float: right; margin-left: 20px; - color: #535362 + color: #535362; } .tab-con ul.cmdlist li .line-progress { @@ -2933,7 +3003,7 @@ ul.cmdlist { bottom: -1px; left: 0; height: 1px; - background-color: #20a53a + background-color: #20a53a; } .tab-con ul.cmdlist li .cmd { @@ -2946,7 +3016,7 @@ ul.cmdlist { padding: 0 10px; background-color: #333; color: #eee; - overflow: auto + overflow: auto; } .yuandian { @@ -2954,29 +3024,29 @@ ul.cmdlist { height: 10px; border-radius: 5px; background-color: #20a53a; - z-index: 999999 + z-index: 999999; } .DrawRecordL i, .DrawRecordR-T i { - background: url(/static/img/Detailsbg.png) no-repeat + background: url(/static/img/Detailsbg.png) no-repeat; } .DrawRecordCon { font-size: 14px; height: 422px; - overflow: auto + overflow: auto; } .DrawRecord { background: url(/static/img/DrawRecordord.png) repeat-y -204px center; margin: 0 auto; overflow: hidden; - line-height: 22px + line-height: 22px; } .DrawRecordlist { - padding-top: 6px + padding-top: 6px; } .DrawRecord .DrawRecordL { @@ -2986,7 +3056,7 @@ ul.cmdlist { padding-right: 22px; position: relative; text-align: right; - width: 110px + width: 110px; } .DrawRecord .DrawRecordL i { @@ -2997,19 +3067,19 @@ ul.cmdlist { position: absolute; right: 0; top: 9px; - width: 16px + width: 16px; } .DrawRecord .DrawRecordR { margin: 1px 1px 30px 112px; color: #666; - padding-right: 5px + padding-right: 5px; } .DrawRecord .DrawRecordR h3 { font-size: 14px; font-weight: normal; - margin-bottom: 5px + margin-bottom: 5px; } .footer { @@ -3022,17 +3092,17 @@ ul.cmdlist { } .bingfa { - padding: 10px 0 60px 0 + padding: 10px 0 60px 0; } .bingfa p { - margin-bottom: 10px + margin-bottom: 10px; } .bingfa p .span_tit { display: inline-block; text-align: right; - width: 120px + width: 120px; } .bingfa p input { @@ -3041,16 +3111,16 @@ ul.cmdlist { line-height: 30px; padding-left: 5px; border-radius: 3px; - -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 + -webkit-transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s; + -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; } .bingfa p input:focus, .bingfa p input:active { border: #66afe9 1px solid; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6) + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } .bingfa .submit-btn { @@ -3061,41 +3131,41 @@ ul.cmdlist { padding: 8px 20px 10px; position: absolute; text-align: right; - width: 100% + width: 100%; } .bingfa .submit-btn .btn-danger { - margin-right: 5px + margin-right: 5px; } .transfer .backupdata { - height: 150px + height: 150px; } .selectdata .slabel { font-weight: normal; - margin: 10px 41px 10px 0 + margin: 10px 41px 10px 0; } .selectdata .slabel input { margin-right: 5px; margin-top: 0; - vertical-align: -2px + vertical-align: -2px; } .backupbtn { margin: 20px 0; - width: 100% + width: 100%; } .neice_con { - padding: 7px 20px 20px + padding: 7px 20px 20px; } .neice_con .tit { font-weight: bold; line-height: 30px; - color: #777 + color: #777; } .neice_con .nc_con { @@ -3103,32 +3173,32 @@ ul.cmdlist { border: 1px solid #ddd; line-height: 28px; padding: 10px; - border-radius: 3px + border-radius: 3px; } .nc_opt { padding-top: 6px; text-align: right; - height: 24px + height: 24px; } .neice_con .nc_opt input { margin-right: 6px; - vertical-align: -2px + vertical-align: -2px; } .neice_con .nc_opt label { float: right; - width: 150px + width: 150px; } .nc_con_user p { - margin: 15px 0 + margin: 15px 0; } .nc_con p span { width: 80px; - display: inline-block + display: inline-block; } .nc_con p input { @@ -3137,36 +3207,36 @@ ul.cmdlist { height: 30px; line-height: 30px; padding: 0 5px; - width: 280px + width: 280px; } .nc_con p input.disabled { - background-color: #eee + background-color: #eee; } .nc-tips { - padding: 20px + padding: 20px; } .nc-tips p { - line-height: 30px + line-height: 30px; } .nc-tips p span { font-size: 14px; - font-weight: bold + font-weight: bold; } .nc-tips p a { - color: #20a53a + color: #20a53a; } #BarTools .glyphicon { - color: #666 + color: #666; } #BarTools .glyphicon:hover { - color: #fff + color: #fff; } .list-list .ico { @@ -3177,7 +3247,7 @@ ul.cmdlist { margin-right: 10px; width: 33px; z-index: 1; - float: left + float: left; } .fileList .ico { @@ -3187,7 +3257,7 @@ ul.cmdlist { height: 80px; margin: 12px auto 4px; width: 84px; - z-index: 1 + z-index: 1; } .list-list .column-name .text { @@ -3196,22 +3266,19 @@ ul.cmdlist { max-width: 85%; overflow: hidden; text-overflow: ellipsis; - line-height: 30px + line-height: 30px; } .list-list .column-name .cursor { display: inline-block; cursor: pointer; - width: 200px\9 + width: 200px\9; } -.table>tbody>tr>td { +.table > tbody > tr > td { vertical-align: middle; - padding: 5px 10px; - height: 40px; - box-sizing: border-box; } -.databaseImportTable>tbody>tr>td { +.databaseImportTable > tbody > tr > td { vertical-align: middle; padding: 5px 10px; height: 40px; @@ -3223,46 +3290,46 @@ ul.cmdlist { .showpicdiv { max-height: 500px; overflow: hidden; - width: 500px + width: 500px; } #BarTools { font-size: 16px; float: left; - margin-right: 20px + margin-right: 20px; } -#BarTools>button { - top: 0 +#BarTools > button { + top: 0; } .comlist { float: left; line-height: 28px; - margin-right: 10px + margin-right: 10px; } -.comlist>span { +.comlist > span { margin-right: 20px; font-size: 14px; float: left; padding: 0 10px; border: #fff 1px solid; border-radius: 3px; - cursor: pointer + cursor: pointer; } -.comlist>span:hover { +.comlist > span:hover { border: #ccc 1px solid; border-radius: 3px; - background-color: #f3f3f3 + background-color: #f3f3f3; } .PathPlaceText { position: absolute; right: 0; top: 0; - background-color: #fff + background-color: #fff; } .PathPlace { @@ -3274,7 +3341,7 @@ ul.cmdlist { width: 170px\9; overflow: hidden; text-overflow: ellipsis; - white-space: nowrap + white-space: nowrap; } .PathPlaceInfo { @@ -3282,51 +3349,51 @@ ul.cmdlist { line-height: 30px; float: left; margin-right: 20px; - color: #999 + color: #999; } .onPath { float: left; line-height: 30px; font-size: 14px; - color: #666 + color: #666; } .editmenu span { display: none; text-align: right; - width: 300px + width: 300px; } .table tr.hover, .table tr.on, .ui-selecting, .ui-selected { - background-color: #f5f5f5 + background-color: #f5f5f5; } .table tr.on .editmenu span, .table tr.ui-selected .editmenu span, .table tr.ui-selecting .editmenu span, .table tr:hover .editmenu span { - display: inline + display: inline; } .ui-selectable-helper { background: #6bb0c9; border: 1px dotted #072246; - opacity: .25; + opacity: 0.25; overflow: hidden; position: absolute; - z-index: 99999 + z-index: 99999; } .list-list .ico-folder { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNpi/P//P8NAAiaGAQYD7gAWdIFPpxIoMS8ZiOcQqfY5SD0LFT1jAsRTuaU0GZjZuAgq/vPto+S3V3fmUssBokC8llNEjp2ZFWjk/1+Eg56TE0RJsgCD3BPImAvikGs7IzMLAxuvKAMrNz9ZaWAul5iKJAsXPwUBAMzK//9AaDIcIAkODiKCbbQcGHXAqANGHTDqgFEHjDpg1AGjDqCVA57/+f6Z7hZD7XwBahOmfHv1ANQqlqCzG54CcRrjaOd0oB0AEGAAscwsxMSUtNsAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNpi/P//P8NAAiaGAQYD7gAWdIFPpxIoMS8ZiOcQqfY5SD0LFT1jAsRTuaU0GZjZuAgq/vPto+S3V3fmUssBokC8llNEjp2ZFWjk/1+Eg56TE0RJsgCD3BPImAvikGs7IzMLAxuvKAMrNz9ZaWAul5iKJAsXPwUBAMzK//9AaDIcIAkODiKCbbQcGHXAqANGHTDqgFEHjDpg1AGjDqCVA57/+f6Z7hZD7XwBahOmfHv1ANQqlqCzG54CcRrjaOd0oB0AEGAAscwsxMSUtNsAAAAASUVORK5CYII='); } .list-list .ico-folder-unempty { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQRJREFUeNpi/P//P8NAAiaGAQYD7gAWcjR9OpWASyoZiOcQacxzkHoWKnrGBIincktpMjCzcRFU/OfbR8lvr+7MZSQnEbIzosbc65NxokDqDKeInBwrNz/xIfnwMgPjx5PxnkD2XCCWJNfrjMwsDGy8ogzs/CKkRSXQAaAomMslpiLJwsVPQegDQ/H/HwhNRiKUZOHkZPjx4xvD799/6ZLyWVmZGTjYWVBzAchybsUKujjg6/0OuAMGvBwAJcL/A14Q8SkYD4jlnx6chaaB/79GK6NRB4w6YNQBow4YdcDIdsDfP98/0d1iqJ1/QdVx47dXDxsGIDRADdBGxtHO6UA7ACDAAIASR69Q0kB9AAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQRJREFUeNpi/P//P8NAAiaGAQYD7gAWcjR9OpWASyoZiOcQacxzkHoWKnrGBIincktpMjCzcRFU/OfbR8lvr+7MZSQnEbIzosbc65NxokDqDKeInBwrNz/xIfnwMgPjx5PxnkD2XCCWJNfrjMwsDGy8ogzs/CKkRSXQAaAomMslpiLJwsVPQegDQ/H/HwhNRiKUZOHkZPjx4xvD799/6ZLyWVmZGTjYWVBzAchybsUKujjg6/0OuAMGvBwAJcL/A14Q8SkYD4jlnx6chaaB/79GK6NRB4w6YNQBow4YdcDIdsDfP98/0d1iqJ1/QdVx47dXDxsGIDRADdBGxtHO6UA7ACDAAIASR69Q0kB9AAAAAElFTkSuQmCC'); } .list-list .ico-access, @@ -3334,169 +3401,169 @@ ul.cmdlist { .list-list .ico-accdb, .list-list .ico-db, .list-list .ico-sql { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAwZJREFUeNrMV0trE1EU/jKJkzTTR4oJCX1lqq6q+GwriiLarS4VfCwqFEFxKShYUKE+Kv4GcVkquBE3glq0Vqt9iGg3qfZhSVttU0tNJk2aGc+9dGSSJmlaJqkfHG7OvZOc757v3HMnFk3TsJGwGZ2hoaEjNNwnazQxxh6yT8aJurq69AQIHT5CSUmJKZEDgQAbHpOdTCWhQ0jxfZIkQVVVU4zB7/c/XyaxOxcCpkMUxUtEojsTCaEQhUYkmmVZHkhHwpbPwKWlpXodMJxaHgfJLOsiEB4eRqi7B+HvI1CjUUQnp/i8o7ICgihC2rYVmw8fgrNW5vMejwderzddYa49A7NvujHzsgvlBw+gnIJYHXbYfT6+Fg0GocbiiAx/w/jDR/CdOA5XYz1f04sxpz6QDTMvXqHy7Gk4t9SuWHNUVPDRKft5NqafPvtHYE2NKBvUpSVYbDaEet5B2CRCS5BvoRoWBKjxGKx2OxKLi7C73dDo2XV1wmxQxsZRVFPNLRsSigJlYsJ8Aq76fZjvH4CtrIzLYBGSTzDbdYSKMzo1BVdDg/kEfvf1Q758EbFfM5j/2M/TzqRgEiSUCEnggJNOgaO6CsGOTvhbzptLgOnPdil63NwyShAOr8iOSRLsJQkGYS2WYKX7wkFHUKCjqOu+OP0TSwsLiM+G1iRBzlTn3n+Aa38DP2oMf6ihzHa95sa0Z5CoNtgzc7295mdAl4Dt3klWcAk8TUcRaLvLOyHLgoVaLxs16nTK+A/empXRMd4n3E3HzCdQde4MIiOjCL3twWQfOwVx7rPdFvlrIFAjYneAfKGF+6YT4K2WAugXjVkoyPvAf00gSYJQ602EChH1SWfmGrDa8vqShETKTZkx2s57t/H52vUkXwebN/pG6N/R143PGn8vp1Ogk0hHJlc/dS1vRcgCZdp1pmyZSoAFMu40VxJJEgjFxQlNUay72u+sSOFqNbDa7tln9keYxUi6Y4z/jvvaH7TGvny9pYbDeekPgiSp4o7tN+qvXmlLS2Aj8FeAAQC23WzgeNtzYAAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAwZJREFUeNrMV0trE1EU/jKJkzTTR4oJCX1lqq6q+GwriiLarS4VfCwqFEFxKShYUKE+Kv4GcVkquBE3glq0Vqt9iGg3qfZhSVttU0tNJk2aGc+9dGSSJmlaJqkfHG7OvZOc757v3HMnFk3TsJGwGZ2hoaEjNNwnazQxxh6yT8aJurq69AQIHT5CSUmJKZEDgQAbHpOdTCWhQ0jxfZIkQVVVU4zB7/c/XyaxOxcCpkMUxUtEojsTCaEQhUYkmmVZHkhHwpbPwKWlpXodMJxaHgfJLOsiEB4eRqi7B+HvI1CjUUQnp/i8o7ICgihC2rYVmw8fgrNW5vMejwderzddYa49A7NvujHzsgvlBw+gnIJYHXbYfT6+Fg0GocbiiAx/w/jDR/CdOA5XYz1f04sxpz6QDTMvXqHy7Gk4t9SuWHNUVPDRKft5NqafPvtHYE2NKBvUpSVYbDaEet5B2CRCS5BvoRoWBKjxGKx2OxKLi7C73dDo2XV1wmxQxsZRVFPNLRsSigJlYsJ8Aq76fZjvH4CtrIzLYBGSTzDbdYSKMzo1BVdDg/kEfvf1Q758EbFfM5j/2M/TzqRgEiSUCEnggJNOgaO6CsGOTvhbzptLgOnPdil63NwyShAOr8iOSRLsJQkGYS2WYKX7wkFHUKCjqOu+OP0TSwsLiM+G1iRBzlTn3n+Aa38DP2oMf6ihzHa95sa0Z5CoNtgzc7295mdAl4Dt3klWcAk8TUcRaLvLOyHLgoVaLxs16nTK+A/empXRMd4n3E3HzCdQde4MIiOjCL3twWQfOwVx7rPdFvlrIFAjYneAfKGF+6YT4K2WAugXjVkoyPvAf00gSYJQ602EChH1SWfmGrDa8vqShETKTZkx2s57t/H52vUkXwebN/pG6N/R143PGn8vp1Ogk0hHJlc/dS1vRcgCZdp1pmyZSoAFMu40VxJJEgjFxQlNUay72u+sSOFqNbDa7tln9keYxUi6Y4z/jvvaH7TGvny9pYbDeekPgiSp4o7tN+qvXmlLS2Aj8FeAAQC23WzgeNtzYAAAAABJRU5ErkJggg=='); } .list-list .ico-c { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmlJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwx4gIUp4F/wHIsfu9Tht//yCvQSHLA9fc/Ge58/IUidvHtDwZtIXYGViZGsBxIDdUd8Ovvf4bpV94xzLj6nkGQnRlFbuejLwyusjxgNkgOpAakFqSHKg648u4nQ9ah5wxiXCwME2wkGIQ5EA4ABfs1oLy+MAeYD5IDqQGpBekB6SWpLsAGqk+8ZJjhIMUgyYWp9NiL7wyWEpwMTIwIMRAzWImPwUqCiyHjwDOGjV5ylIWALA8rw9YHn7Emst2PvzC4yfFgiIPUgvSA9FIcBZNsJRl42ZjAQYqcwL78/sfw4tsfBmU+NoyEClIL0gPSS3EUgII3XIWfwRoYpN0X3jKkagky6ABT/YGnXxnspbgw0svsa+8ZGkxFGaS5WambDWWAwQlKYIq8EIP3PPkKT/0wAJIDqSHWcpJLQlAC42aFuBlkETqAydGsIKIFGHXAgDsAJRHGnP0LbL/eorml57Tw5AImFuKz0K4QDTjbbc0N4qrvP7+p0yABWY5sKTqf7mmAHMuHVy5ATg9k5wJ+VoZ/n/79Z2JkZCQqyElNhKCOMB8Lwz+cDjAVYGw69f5P3ac/xIWMy4rLJPkW6MG/QDuaUeqXge6eAwQYABvvATpIEEu4AAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmlJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwx4gIUp4F/wHIsfu9Tht//yCvQSHLA9fc/Ge58/IUidvHtDwZtIXYGViZGsBxIDdUd8Ovvf4bpV94xzLj6nkGQnRlFbuejLwyusjxgNkgOpAakFqSHKg648u4nQ9ah5wxiXCwME2wkGIQ5EA4ABfs1oLy+MAeYD5IDqQGpBekB6SWpLsAGqk+8ZJjhIMUgyYWp9NiL7wyWEpwMTIwIMRAzWImPwUqCiyHjwDOGjV5ylIWALA8rw9YHn7Emst2PvzC4yfFgiIPUgvSA9FIcBZNsJRl42ZjAQYqcwL78/sfw4tsfBmU+NoyEClIL0gPSS3EUgII3XIWfwRoYpN0X3jKkagky6ABT/YGnXxnspbgw0svsa+8ZGkxFGaS5WambDWWAwQlKYIq8EIP3PPkKT/0wAJIDqSHWcpJLQlAC42aFuBlkETqAydGsIKIFGHXAgDsAJRHGnP0LbL/eorml57Tw5AImFuKz0K4QDTjbbc0N4qrvP7+p0yABWY5sKTqf7mmAHMuHVy5ATg9k5wJ+VoZ/n/79Z2JkZCQqyElNhKCOMB8Lwz+cDjAVYGw69f5P3ac/xIWMy4rLJPkW6MG/QDuaUeqXge6eAwQYABvvATpIEEu4AAAAAElFTkSuQmCC'); } .list-list .ico-cpp { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoBJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwx4gIUp4F/wHIsfu9Tht//yCvQSHLA9fc/Ge58/IUidvHtDwZtIXYGViZGsBxIDdUd8Ovvf4bpV94xzLj6nkGQnRlFbuejLwyusjxgNkgOpAakFqSHKg648u4nQ9ah5wxiXCwME2wkGIQ5EA4ABfs1oLy+MAeYD5IDqQGpBekB6SWpLsAGqk+8ZJjhIMUgyYWp9NiL7wyWEpwMTIwIMRAzWImPwUqCiyHjwDOGjV5ylIWALA8rw9YHn7Emst2PvzC4yfFgiIPUgvSA9FIcBZNsJRl42ZjAQYqcwL78/sfw4tsfBmU+NoyEClIL0gPSS3EUgII3XIWfwRoYpN0X3jKkagky6ABT/YGnXxnspbgw0svsa+8ZGkxFGaS5WambDWWAwQlKYIq8EIP3PPkKT/0wAJIDqSHWcpJLQlAC42aFuBlkETqAydGsIKIFGHXAgDsAJRHGnP0LbL/eorml57Tw5AImFuxZaFeIBpzttuYGSWIo1fef36RnQ5ChyIYh85EtxidG1TRAyFCy0wA5ABbk6CFErENZyLUUPbjJDSEUB/CzMvz79O8/EyMjI4aBhBIXMQDUEeZjYUBppTIi947LdlypP/X+f92nP7QpH4Ae/GsqwNjc5aHTiNUBAwEAAgwALWAgpic4qfUAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoBJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwx4gIUp4F/wHIsfu9Tht//yCvQSHLA9fc/Ge58/IUidvHtDwZtIXYGViZGsBxIDdUd8Ovvf4bpV94xzLj6nkGQnRlFbuejLwyusjxgNkgOpAakFqSHKg648u4nQ9ah5wxiXCwME2wkGIQ5EA4ABfs1oLy+MAeYD5IDqQGpBekB6SWpLsAGqk+8ZJjhIMUgyYWp9NiL7wyWEpwMTIwIMRAzWImPwUqCiyHjwDOGjV5ylIWALA8rw9YHn7Emst2PvzC4yfFgiIPUgvSA9FIcBZNsJRl42ZjAQYqcwL78/sfw4tsfBmU+NoyEClIL0gPSS3EUgII3XIWfwRoYpN0X3jKkagky6ABT/YGnXxnspbgw0svsa+8ZGkxFGaS5WambDWWAwQlKYIq8EIP3PPkKT/0wAJIDqSHWcpJLQlAC42aFuBlkETqAydGsIKIFGHXAgDsAJRHGnP0LbL/eorml57Tw5AImFuxZaFeIBpzttuYGSWIo1fef36RnQ5ChyIYh85EtxidG1TRAyFCy0wA5ABbk6CFErENZyLUUPbjJDSEUB/CzMvz79O8/EyMjI4aBhBIXMQDUEeZjYUBppTIi947LdlypP/X+f92nP7QpH4Ae/GsqwNjc5aHTiNUBAwEAAgwALWAgpic4qfUAAAAASUVORK5CYII='); } .list-list .ico-cs { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoFJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwx4gIUp4F/wHIsfu9Tht//yCvQSHLA9fc/Ge58/IUidvHtDwZtIXYGViZGsBxIDdUd8Ovvf4bpV94xzLj6nkGQnRlFbuejLwyusjxgNkgOpAakFqSHKg648u4nQ9ah5wxiXCwME2wkGIQ5EA4ABfs1oLy+MAeYD5IDqQGpBekB6SWpLsAGqk+8ZJjhIMUgyYWp9NiL7wyWEpwMTIwIMRAzWImPwUqCiyHjwDOGjV5ylIWALA8rw9YHn7Emst2PvzC4yfFgiIPUgvSA9FIcBZNsJRl42ZjAQYqcwL78/sfw4tsfBmU+NoyEClIL0gPSS3EUgII3XIWfwRoYpN0X3jKkagky6ABT/YGnXxnspbgw0svsa+8ZGkxFGaS5WambDWWAwQlKYIq8EIP3PPkKT/0wAJIDqSHWcpJLQlAC42aFuBlkETqAydGsIKIFGHXAgDsAJRHGnP0LbL/eorml57Tw5AImFvxZaFeIBpzttuYGhjiyGNbq+89v8rMhyBJ0S0F8ZHF0NTRNAzCLYI4gJgRolgiRHUE3B8AsRPY9qY5gRO6cOq64/PfTPxYmRkZGmiRCkF28jH/+HYjUZcaaCE0FGJtOvf9T9+kP7pBxWXGZJHFkwM/K8BdoRzPOEBgIABBgAMrJHxYdaBS2AAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoFJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwx4gIUp4F/wHIsfu9Tht//yCvQSHLA9fc/Ge58/IUidvHtDwZtIXYGViZGsBxIDdUd8Ovvf4bpV94xzLj6nkGQnRlFbuejLwyusjxgNkgOpAakFqSHKg648u4nQ9ah5wxiXCwME2wkGIQ5EA4ABfs1oLy+MAeYD5IDqQGpBekB6SWpLsAGqk+8ZJjhIMUgyYWp9NiL7wyWEpwMTIwIMRAzWImPwUqCiyHjwDOGjV5ylIWALA8rw9YHn7Emst2PvzC4yfFgiIPUgvSA9FIcBZNsJRl42ZjAQYqcwL78/sfw4tsfBmU+NoyEClIL0gPSS3EUgII3XIWfwRoYpN0X3jKkagky6ABT/YGnXxnspbgw0svsa+8ZGkxFGaS5WambDWWAwQlKYIq8EIP3PPkKT/0wAJIDqSHWcpJLQlAC42aFuBlkETqAydGsIKIFGHXAgDsAJRHGnP0LbL/eorml57Tw5AImFvxZaFeIBpzttuYGhjiyGNbq+89v8rMhyBJ0S0F8ZHF0NTRNAzCLYI4gJgRolgiRHUE3B8AsRPY9qY5gRO6cOq64/PfTPxYmRkZGmiRCkF28jH/+HYjUZcaaCE0FGJtOvf9T9+kP7pBxWXGZJHFkwM/K8BdoRzPOEBgIABBgAMrJHxYdaBS2AAAAAElFTkSuQmCC'); } .list-list .ico-fla, .list-list .ico-flv { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYFJREFUeNpi/P//P8NAAhZkzrVr1+yBVBcQm1HRDkMgvoAsoKWlhd0BQLBCAgh4eXmpYvPt27dB1GogDkV3BAwwofEluLm5Gf79+0cVDALy8vK7oI4wIMYBVAdsbGxZQEccweUIJnokNKAjEhQUFM5hcwQLLS3m4+ODpQMQCIPS54GYkS4OEBUVZRAXF8eWMMkLgZf1fQx/37yD85lFhBjEG4sYPizfCOYLRPpj6IElRqLKAWIAyBIuG1OqhRITwwCDAXcAyVEAim9YnLNrKDMI5ybS1wGjaWDA0wAu8O3IaTCGAVDaAKURQoARuUECbA/8V1ZWpqmP7969C2oPMI6mgVEHDM5syNI+k+EhkXn0DyUWLp6I2w5cliq1laDw71X1gMVANDa12MSxOZykggiXoXRLAyCfoYcELt8TUkfTECDWcqo3StHjHl9awB4F3Fx//5NhKbE+/g+1A2dldGPCrBqm6/caGb59Z6JJNuTi/PdPU6leoyCtBasDBgIABBgAWP2ttPWI30cAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYFJREFUeNpi/P//P8NAAhZkzrVr1+yBVBcQm1HRDkMgvoAsoKWlhd0BQLBCAgh4eXmpYvPt27dB1GogDkV3BAwwofEluLm5Gf79+0cVDALy8vK7oI4wIMYBVAdsbGxZQEccweUIJnokNKAjEhQUFM5hcwQLLS3m4+ODpQMQCIPS54GYkS4OEBUVZRAXF8eWMMkLgZf1fQx/37yD85lFhBjEG4sYPizfCOYLRPpj6IElRqLKAWIAyBIuG1OqhRITwwCDAXcAyVEAim9YnLNrKDMI5ybS1wGjaWDA0wAu8O3IaTCGAVDaAKURQoARuUECbA/8V1ZWpqmP7969C2oPMI6mgVEHDM5syNI+k+EhkXn0DyUWLp6I2w5cliq1laDw71X1gMVANDa12MSxOZykggiXoXRLAyCfoYcELt8TUkfTECDWcqo3StHjHl9awB4F3Fx//5NhKbE+/g+1A2dldGPCrBqm6/caGb59Z6JJNuTi/PdPU6leoyCtBasDBgIABBgAWP2ttPWI30cAAAAASUVORK5CYII='); } .list-list .ico-css { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAALdSURBVFiF7ZfLTxNRFMZ/M/RBnwik0FYpoJIYhJioLFSIupCoWzVqotGNCeEPcGPiI+50Q9xAYli5MaEbFyTiI0EWhhghGkohlgVREVzQhpfals64qB067ZRpoaALv6Rp73dPzvnuud/cOxVkWeZvwpA+CAaDZ4BewFPEGoeBkXSisbFRWwDQ6/V6PTabrSiVQ6EQQB9woaGhYUQrRswYeywWC5IkFeUD4PP5BoC+UCh0KB8BRYfZbO6ora19A/i1RGy5AACTyXS9rq5uWEtEpgeKCqfTmfIBwKU/3+8BYVsEuFwuqqurVVyaoK0XAChmzIVNe0CS4drrGeLSxg60ggRMRKJMLcRU3Mf5X+yvMGMUBaYWYkxEosUXEEvIdAfC9IxHKDeXqOYGPi9zqsYOQLm5hJ7xCN2BMLFEfh3RFRAIR+kcmqXKaqCr1U1l6ZqAuCQTDEc5UFkKQGVpCV2tbqqsBjqHZgmE9buha8Jbw9/pOeHFY80OfTv3kyNuC6KwxgnAud1OjrqtdAx+49lZ37r5dTtQYzfSP72kabKXX5Zp99mz+Lgk0z+9RI3dqJdeX8CjNg8Ok0jn0KzKYMtxibkfq+xxmlTxE5HkljlMIo/a9C9V3S0QBbi4t4xjbisPP8xzo7GcpgozgzMrHPdaVbGBcJTHwQh3W1zstOmvHgp4DHfZjXS1uql3JBO/+rqiuD+FekcyJt/iUOBJKAA2Y1JzV6s7az41Vwi25Tb8L+CfFqAy4ZWRBIx8UsaiIX835wNpNQ7A6NpLcfZToFX0xfl9yu92/+SGedFgVETkFKBVPDN5u3+yYD4XhPR/RgefjMmZHVgvQWqlmfO5eEhuw+jVZuX62pQJ2/2Tyqrz4bVQsIBU0sx91uNzQbUFJ5+OJRYlgygIgiqoWCaUZRmHsCoNXm5W3mpUAm4+D9x5F5FvL65uzflQZiTRskO4/+B00z1NAQqZ0YFiI73mb2NmSwowsJSgAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAALdSURBVFiF7ZfLTxNRFMZ/M/RBnwik0FYpoJIYhJioLFSIupCoWzVqotGNCeEPcGPiI+50Q9xAYli5MaEbFyTiI0EWhhghGkohlgVREVzQhpfals64qB067ZRpoaALv6Rp73dPzvnuud/cOxVkWeZvwpA+CAaDZ4BewFPEGoeBkXSisbFRWwDQ6/V6PTabrSiVQ6EQQB9woaGhYUQrRswYeywWC5IkFeUD4PP5BoC+UCh0KB8BRYfZbO6ora19A/i1RGy5AACTyXS9rq5uWEtEpgeKCqfTmfIBwKU/3+8BYVsEuFwuqqurVVyaoK0XAChmzIVNe0CS4drrGeLSxg60ggRMRKJMLcRU3Mf5X+yvMGMUBaYWYkxEosUXEEvIdAfC9IxHKDeXqOYGPi9zqsYOQLm5hJ7xCN2BMLFEfh3RFRAIR+kcmqXKaqCr1U1l6ZqAuCQTDEc5UFkKQGVpCV2tbqqsBjqHZgmE9buha8Jbw9/pOeHFY80OfTv3kyNuC6KwxgnAud1OjrqtdAx+49lZ37r5dTtQYzfSP72kabKXX5Zp99mz+Lgk0z+9RI3dqJdeX8CjNg8Ok0jn0KzKYMtxibkfq+xxmlTxE5HkljlMIo/a9C9V3S0QBbi4t4xjbisPP8xzo7GcpgozgzMrHPdaVbGBcJTHwQh3W1zstOmvHgp4DHfZjXS1uql3JBO/+rqiuD+FekcyJt/iUOBJKAA2Y1JzV6s7az41Vwi25Tb8L+CfFqAy4ZWRBIx8UsaiIX835wNpNQ7A6NpLcfZToFX0xfl9yu92/+SGedFgVETkFKBVPDN5u3+yYD4XhPR/RgefjMmZHVgvQWqlmfO5eEhuw+jVZuX62pQJ2/2Tyqrz4bVQsIBU0sx91uNzQbUFJ5+OJRYlgygIgiqoWCaUZRmHsCoNXm5W3mpUAm4+D9x5F5FvL65uzflQZiTRskO4/+B00z1NAQqZ0YFiI73mb2NmSwowsJSgAAAAAElFTkSuQmCC'); } .list-list .ico-js { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAALFSURBVFiF7ZfLTxNRFIe/GTotffJKoa1SQCUx1cSFslBLdKFNdKtGFya6MSH8CybG6NJNwwYS496EblywwEeCLAwx1mgshVgWREVwQRteamk746K2dNopM5WCLvwlTXvPPTn3u+f+5lFBURT+pkylg3g8fgF4BHjruMYJIFoaCAQC2gDAI5/P57Xb7XVZOZFIAIwCV3p7e6NaOWLZ2Gu1WpFluS4fAL/fPw6MJhKJ40YA6i6LxTLQ1dX1EohoQew6AIDZbL7Z3d09pQVR7oG6yuVyFXwAcO339xtA2BMAt9tNR0eHKlYCtPsAQNGM1bRjD8gK3HixQEb+sxtaTQAzqTRzK5uq2PvlnxxptSCJAnMrm8yk0vUH2MwpDMeSjEynaLE0qObGP61zvtMBQIulgZHpFMOxJJs5Yx3RBYgl0wxOLtJuMxEOemhr3ALIyArxZJpjbY0AtDU2EA56aLeZGJxcJJbU74auCW9PfWPkrA+vrTL11dIPTnqsiMJWTAAuHXBxymNjYOIrTy76t62v24FOh8TY/JqmyZ59Xifkd1TEM7LC2PwanQ5Jr7w+wFC/F6dZZHByUWWw9YzM0vcsB11mVf5MKn9kTrPIUL/+Q1X3CEQBrh5q4rTHxoN3y9wKtHC01cLEwgZnfDZVbiyZ5mE8xd0+N/vs+ruHGi7D/Q6JcNBDjzNf+PmXjaL7C+px5nOMLg413gkFwC7lmcNBT8V8Ya4W7cnT8D/APw2gMuH1aA6iH4tj0WTczUYkZzMAvN16Ka68Cowu+vTyYUKR2eLvggoxLYkmqQhRFaBWlYJojfVUFw8Y7YCWdtyBWo+hXDV1oHSR8lgoMlvz7qGsA00S8qqsiIIgVMuvgAhFZg3vXlEUXCZUb6kqgL5m4d7rVPbOala7M+cef9AsXC1eriaJXF+zcL80Jhj5e75dR7aTkdq/AFCYGAYKWHWoAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAALFSURBVFiF7ZfLTxNRFIe/GTotffJKoa1SQCUx1cSFslBLdKFNdKtGFya6MSH8CybG6NJNwwYS496EblywwEeCLAwx1mgshVgWREVwQRteamk746K2dNopM5WCLvwlTXvPPTn3u+f+5lFBURT+pkylg3g8fgF4BHjruMYJIFoaCAQC2gDAI5/P57Xb7XVZOZFIAIwCV3p7e6NaOWLZ2Gu1WpFluS4fAL/fPw6MJhKJ40YA6i6LxTLQ1dX1EohoQew6AIDZbL7Z3d09pQVR7oG6yuVyFXwAcO339xtA2BMAt9tNR0eHKlYCtPsAQNGM1bRjD8gK3HixQEb+sxtaTQAzqTRzK5uq2PvlnxxptSCJAnMrm8yk0vUH2MwpDMeSjEynaLE0qObGP61zvtMBQIulgZHpFMOxJJs5Yx3RBYgl0wxOLtJuMxEOemhr3ALIyArxZJpjbY0AtDU2EA56aLeZGJxcJJbU74auCW9PfWPkrA+vrTL11dIPTnqsiMJWTAAuHXBxymNjYOIrTy76t62v24FOh8TY/JqmyZ59Xifkd1TEM7LC2PwanQ5Jr7w+wFC/F6dZZHByUWWw9YzM0vcsB11mVf5MKn9kTrPIUL/+Q1X3CEQBrh5q4rTHxoN3y9wKtHC01cLEwgZnfDZVbiyZ5mE8xd0+N/vs+ruHGi7D/Q6JcNBDjzNf+PmXjaL7C+px5nOMLg413gkFwC7lmcNBT8V8Ya4W7cnT8D/APw2gMuH1aA6iH4tj0WTczUYkZzMAvN16Ka68Cowu+vTyYUKR2eLvggoxLYkmqQhRFaBWlYJojfVUFw8Y7YCWdtyBWo+hXDV1oHSR8lgoMlvz7qGsA00S8qqsiIIgVMuvgAhFZg3vXlEUXCZUb6kqgL5m4d7rVPbOala7M+cef9AsXC1eriaJXF+zcL80Jhj5e75dR7aTkdq/AFCYGAYKWHWoAAAAAElFTkSuQmCC'); } .list-list .ico-htm { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnhJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwx4gIUp4F/wHIsfu9Tht//yCvQSHLA9fc/Ge58/IUidvHtDwZtIXYGViZGsBxIDdUd8Ovvf4bpV94xzLj6nkGQnRlFbuejLwyusjxgNkgOpAakFqSHKg648u4nQ9ah5wxiXCwME2wkGIQ5EA4ABfs1oLy+MAeYD5IDqQGpBekB6SWpLsAGqk+8ZJjhIMUgyYWp9NiL7wyWEpwMTIwIMRAzWImPwUqCiyHjwDOGjV5ylIWALA8rw9YHn7Emst2PvzC4yfFgiIPUgvSA9FIcBZNsJRl42ZjAQYqcwL78/sfw4tsfBmU+NoyEClIL0gPSS3EUgII3XIWfwRoYpN0X3jKkagky6ABT/YGnXxnspbgw0svsa+8ZGkxFGaS5WambDWWAwQlKYIq8EIP3PPkKT/0wAJIDqSHWcpJLQlAC42aFuBlkETqAydGsIKIFGHXAgDsAJRHGnP0LbL/eorml57Tw5AImFtQstCtEg8FtzQ04GxsAycPkYGqR1SOL/fvzm7IGCbJjkA2maRoAWYbL97hCglgHMhHra2r4li65ABYKxDoYxQH8rMAmHg07qyCz+VgYUFqpjMgWlu24Un/q/f+6T39oUz4APfjXVICxuctDpxGrAwYCAAQYAPufFoHFXwuVAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnhJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwx4gIUp4F/wHIsfu9Tht//yCvQSHLA9fc/Ge58/IUidvHtDwZtIXYGViZGsBxIDdUd8Ovvf4bpV94xzLj6nkGQnRlFbuejLwyusjxgNkgOpAakFqSHKg648u4nQ9ah5wxiXCwME2wkGIQ5EA4ABfs1oLy+MAeYD5IDqQGpBekB6SWpLsAGqk+8ZJjhIMUgyYWp9NiL7wyWEpwMTIwIMRAzWImPwUqCiyHjwDOGjV5ylIWALA8rw9YHn7Emst2PvzC4yfFgiIPUgvSA9FIcBZNsJRl42ZjAQYqcwL78/sfw4tsfBmU+NoyEClIL0gPSS3EUgII3XIWfwRoYpN0X3jKkagky6ABT/YGnXxnspbgw0svsa+8ZGkxFGaS5WambDWWAwQlKYIq8EIP3PPkKT/0wAJIDqSHWcpJLQlAC42aFuBlkETqAydGsIKIFGHXAgDsAJRHGnP0LbL/eorml57Tw5AImFtQstCtEg8FtzQ04GxsAycPkYGqR1SOL/fvzm7IGCbJjkA2maRoAWYbL97hCglgHMhHra2r4li65ABYKxDoYxQH8rMAmHg07qyCz+VgYUFqpjMgWlu24Un/q/f+6T39oUz4APfjXVICxuctDpxGrAwYCAAQYAPufFoHFXwuVAAAAAElFTkSuQmCC'); } .list-list .ico-html { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnpJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwx4gIUp4F/wHIsfu9Tht//yCvQSHLA9fc/Ge58/IUidvHtDwZtIXYGViZGsBxIDdUd8Ovvf4bpV94xzLj6nkGQnRlFbuejLwyusjxgNkgOpAakFqSHKg648u4nQ9ah5wxiXCwME2wkGIQ5EA4ABfs1oLy+MAeYD5IDqQGpBekB6SWpLsAGqk+8ZJjhIMUgyYWp9NiL7wyWEpwMTIwIMRAzWImPwUqCiyHjwDOGjV5ylIWALA8rw9YHn7Emst2PvzC4yfFgiIPUgvSA9FIcBZNsJRl42ZjAQYqcwL78/sfw4tsfBmU+NoyEClIL0gPSS3EUgII3XIWfwRoYpN0X3jKkagky6ABT/YGnXxnspbgw0svsa+8ZGkxFGaS5WambDWWAwQlKYIq8EIP3PPkKT/0wAJIDqSHWcpJLQlAC42aFuBlkETqAydGsIKIFGHXAgDsAJRHGnP0LbL/eorml57Tw5AImFkgW2hWiweC25gacjQ2A5GFyMLXI6mHyyHL//vwmLxsiOwbZQJqmAZBluHyPKyRIdSATIYOp6Vua5gJs8U2yA/hZgU08GnRWYVEJMpuPhQGllcqIbGHZjiv1p97/r/v0hzblA9CDf00FGJu7PHQasTpgIABAgAEAooAb7fMLYAoAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnpJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwx4gIUp4F/wHIsfu9Tht//yCvQSHLA9fc/Ge58/IUidvHtDwZtIXYGViZGsBxIDdUd8Ovvf4bpV94xzLj6nkGQnRlFbuejLwyusjxgNkgOpAakFqSHKg648u4nQ9ah5wxiXCwME2wkGIQ5EA4ABfs1oLy+MAeYD5IDqQGpBekB6SWpLsAGqk+8ZJjhIMUgyYWp9NiL7wyWEpwMTIwIMRAzWImPwUqCiyHjwDOGjV5ylIWALA8rw9YHn7Emst2PvzC4yfFgiIPUgvSA9FIcBZNsJRl42ZjAQYqcwL78/sfw4tsfBmU+NoyEClIL0gPSS3EUgII3XIWfwRoYpN0X3jKkagky6ABT/YGnXxnspbgw0svsa+8ZGkxFGaS5WambDWWAwQlKYIq8EIP3PPkKT/0wAJIDqSHWcpJLQlAC42aFuBlkETqAydGsIKIFGHXAgDsAJRHGnP0LbL/eorml57Tw5AImFkgW2hWiweC25gacjQ2A5GFyMLXI6mHyyHL//vwmLxsiOwbZQJqmAZBluHyPKyRIdSATIYOp6Vua5gJs8U2yA/hZgU08GnRWYVEJMpuPhQGllcqIbGHZjiv1p97/r/v0hzblA9CDf00FGJu7PHQasTpgIABAgAEAooAb7fMLYAoAAAAASUVORK5CYII='); } .list-list .ico-java { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAvRJREFUeNrUV0toE1EUPfPJTJNp82lNY1PaBGwtpn6q9bNQQRFFpSAKgrgQu3PpXlBEBMGNWwU3LtwoxYULhSoKgkJbawVDta3WT5XWEPpL2iSTifeNjqY6TeNkavDA5c375N1z7z3v8cLlcjmUE2J+JxqNHqDmOlmdjT42k/XlD0QiEXMCzHkwGKxTFMUWz0NDQ6y5RXa0ubm5z2wN/1u/zul0QtM0W4yhsbHxPiNBZNqLIWAZI+PzpuOyLJ8KhUKP6fO2GQlbCLyPpfAhll50XpKkk+Fw+JkZCbFU56qWw72BKRxq9/0x53a7DR0wHPvR9pJxthCYSmbR1RPHnlY32GEei6cRrJZ+7u73+xEIBMyEWXoJBt4ncfXBOLavrkLv2wSVIIX6POcGzIRZMoGZ+Szu9MbRuasW/aMJ+BQB25oqLQViiYDIcwj7ZfirRF0D6az129QSAafEY+uqSnyZzKBjow89IwlEx+b+HQGGNfVOVDg4uJ0C2kIuVMr88hNgwnv+LoHYjKr3fYoIjlS3b71Hzwq7jNJqDk9ez+Bu/yS0IipT9DFkG8dnVYxPZ/DyYxJM0FnyUOHg4RA5NNRIlAkFEn3vaKnCtYcTiH5KYm2Dyx4CbOPddN5Hv6b0aAMex4J5Rkbgvx9ClURpCNW2DBiYoAw8fTMLmerPiLhkQXfICO7f4NXHWIlO7FwBUeDsIZBMaxj8PId6n6Srn1kheFyCnhHbCDyKTuMFXThNKyvgdYkUNdWdNmcOHMKvtCdSml4iNn94S/Xfv4gWw8E2L/au8+jpj02rmJrLIp5QkSFhZsixTOmXSYw1dDF1bPLqp8PSk6wQWKSsBMzsBI8yo+wEFpTgUjddXd3Dy+70RqRABiRZXmCXO1tt7f/fGrh4vAlnbg7rrYH8vjFfaH3JGSi0mZX14lLRFtM3oix2/aIZUCT2btSW/JFVsL1d5CN/jMv/d3yl69W5wQmcTaaXR5wUYLalFhdOH2k9b0qgHPgmwABqjFw0GGyiFAAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAvRJREFUeNrUV0toE1EUPfPJTJNp82lNY1PaBGwtpn6q9bNQQRFFpSAKgrgQu3PpXlBEBMGNWwU3LtwoxYULhSoKgkJbawVDta3WT5XWEPpL2iSTifeNjqY6TeNkavDA5c375N1z7z3v8cLlcjmUE2J+JxqNHqDmOlmdjT42k/XlD0QiEXMCzHkwGKxTFMUWz0NDQ6y5RXa0ubm5z2wN/1u/zul0QtM0W4yhsbHxPiNBZNqLIWAZI+PzpuOyLJ8KhUKP6fO2GQlbCLyPpfAhll50XpKkk+Fw+JkZCbFU56qWw72BKRxq9/0x53a7DR0wHPvR9pJxthCYSmbR1RPHnlY32GEei6cRrJZ+7u73+xEIBMyEWXoJBt4ncfXBOLavrkLv2wSVIIX6POcGzIRZMoGZ+Szu9MbRuasW/aMJ+BQB25oqLQViiYDIcwj7ZfirRF0D6az129QSAafEY+uqSnyZzKBjow89IwlEx+b+HQGGNfVOVDg4uJ0C2kIuVMr88hNgwnv+LoHYjKr3fYoIjlS3b71Hzwq7jNJqDk9ez+Bu/yS0IipT9DFkG8dnVYxPZ/DyYxJM0FnyUOHg4RA5NNRIlAkFEn3vaKnCtYcTiH5KYm2Dyx4CbOPddN5Hv6b0aAMex4J5Rkbgvx9ClURpCNW2DBiYoAw8fTMLmerPiLhkQXfICO7f4NXHWIlO7FwBUeDsIZBMaxj8PId6n6Srn1kheFyCnhHbCDyKTuMFXThNKyvgdYkUNdWdNmcOHMKvtCdSml4iNn94S/Xfv4gWw8E2L/au8+jpj02rmJrLIp5QkSFhZsixTOmXSYw1dDF1bPLqp8PSk6wQWKSsBMzsBI8yo+wEFpTgUjddXd3Dy+70RqRABiRZXmCXO1tt7f/fGrh4vAlnbg7rrYH8vjFfaH3JGSi0mZX14lLRFtM3oix2/aIZUCT2btSW/JFVsL1d5CN/jMv/d3yl69W5wQmcTaaXR5wUYLalFhdOH2k9b0qgHPgmwABqjFw0GGyiFAAAAABJRU5ErkJggg=='); } .list-list .ico-log { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVBJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkLQSevnqLU05aTBivXlhiJKocINcSSgATwwADiqOA0pAbjYLRKBiNgtEoGHXA4MoFE+fsooulM/twt4pBzScMDY3VmQz1rdMxxGAAWQ6XOAz8+vWL9GxIyEEwPi7xAUsDhCynqQNAvkeODro7gBjfY6QBLk62f79+/2MCAqw+ghkMi290y9DFsTVQQXYgizEi946nzllbf+f+y7pv33/RJGS4ONn/qiiKNWenBDdidcBAAIAAAwBHPa+btF94QQAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVBJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkLQSevnqLU05aTBivXlhiJKocINcSSgATwwADiqOA0pAbjYLRKBiNgtEoGHXA4MoFE+fsooulM/twt4pBzScMDY3VmQz1rdMxxGAAWQ6XOAz8+vWL9GxIyEEwPi7xAUsDhCynqQNAvkeODro7gBjfY6QBLk62f79+/2MCAqw+ghkMi290y9DFsTVQQXYgizEi946nzllbf+f+y7pv33/RJGS4ONn/qiiKNWenBDdidcBAAIAAAwBHPa+btF94QQAAAABJRU5ErkJggg=='); } .list-list .ico-mht { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnVJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwx4gIUp4F/wHIsfu9Tht//yCvQSHLA9fc/Ge58/IUidvHtDwZtIXYGViZGsBxIDdUd8Ovvf4bpV94xzLj6nkGQnRlFbuejLwyusjxgNkgOpAakFqSHKg648u4nQ9ah5wxiXCwME2wkGIQ5EA4ABfs1oLy+MAeYD5IDqQGpBekB6SWpLsAGqk+8ZJjhIMUgyYWp9NiL7wyWEpwMTIwIMRAzWImPwUqCiyHjwDOGjV5ylIWALA8rw9YHn7Emst2PvzC4yfFgiIPUgvSA9FIcBZNsJRl42ZjAQYqcwL78/sfw4tsfBmU+NoyEClIL0gPSS3EUgII3XIWfwRoYpN0X3jKkagky6ABT/YGnXxnspbgw0svsa+8ZGkxFGaS5WambDWWAwQlKYIq8EIP3PPkKT/0wAJIDqSHWcpJLQlAC42aFuBlkETqAydGsIKIFGHXAgDsAJRHGnP0LbL/eorml57Tw5AImFtQstCtEA0y7rbmBVQzEhsnBxNEBst5/f37TtkGC7BhkiylKAzCf4jIYJIbL93RJhCAHEeNbihyAHt80yYb8rMAmHg07qyCz+VgYUFqpjMgWlu24Un/q/f+6T39oUz4APfjXVICxuctDpxGrAwYCAAQYAIH+FoEeflonAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnVJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwx4gIUp4F/wHIsfu9Tht//yCvQSHLA9fc/Ge58/IUidvHtDwZtIXYGViZGsBxIDdUd8Ovvf4bpV94xzLj6nkGQnRlFbuejLwyusjxgNkgOpAakFqSHKg648u4nQ9ah5wxiXCwME2wkGIQ5EA4ABfs1oLy+MAeYD5IDqQGpBekB6SWpLsAGqk+8ZJjhIMUgyYWp9NiL7wyWEpwMTIwIMRAzWImPwUqCiyHjwDOGjV5ylIWALA8rw9YHn7Emst2PvzC4yfFgiIPUgvSA9FIcBZNsJRl42ZjAQYqcwL78/sfw4tsfBmU+NoyEClIL0gPSS3EUgII3XIWfwRoYpN0X3jKkagky6ABT/YGnXxnspbgw0svsa+8ZGkxFGaS5WambDWWAwQlKYIq8EIP3PPkKT/0wAJIDqSHWcpJLQlAC42aFuBlkETqAydGsIKIFGHXAgDsAJRHGnP0LbL/eorml57Tw5AImFtQstCtEA0y7rbmBVQzEhsnBxNEBst5/f37TtkGC7BhkiylKAzCf4jIYJIbL93RJhCAHEeNbihyAHt80yYb8rMAmHg07qyCz+VgYUFqpjMgWlu24Un/q/f+6T39oUz4APfjXVICxuctDpxGrAwYCAAQYAIH+FoEeflonAAAAAElFTkSuQmCC'); } .list-list .ico-php { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA1ZJREFUeNrsVktPU0EUPn3dPq73QmmbFlRaAw1Q5KUiYCIkmmjUGEMUdGWMSze6cmViTFwYVv4Aw8KNRhe6kA0SAonRGGNBHpWkBAXFIFAeLS307ZyB1ku90EJvdeOXTO7c6XS+b8755tyRxeNx+JdQCl9cLlcLeXSQdlRCjjrSBoUDDodDXADBUwsBx3GSMLvdbnw8J63NbrcPis2Rp7xbWJaFWCwmSUNYrdZuFEHE1GYiQHIwDHODiHizlQj53zAaEXHNZrM5xUQoc0nM83zCB4j2jecAabJdCVgLx8D5xQ9j06swOR+CGDnCkWgcWLUCrCY1VO3XQlWxDhTy9fVNJhOYzWYxY+48Akj8eniZkOjgdE0+mHgVMMp1In8wBnPeMJ3TM+KFC0f0YLdo6G8JM2ZUB7ZCn8tLCW6esYBG9ds27pk1sns5FOkZYEkEbKShmGfvPOBbjcKhA2zatdOacGI2SMIdhLZGwyZyBI5j+IVAQVebjfB+fIWK3lElFEM/2f3Zunzax0WnF0IgI5E/V6eHmaUwdA8tQa2N1A5S0Ycm/RAhET9RycOp6jzo/+yDSw0F2UVgZjkM5jwV7X+dC0JLBQ+lZg18J0ICJNwXGwzwaTJAhVXs1dL8D5H3YqMapkiEsk6B8GPl8UVAv0cJPxZDNNScVgFoeJVCRsONXvjmCdHxTJFWgJFTUUKaL0L08sMC5OmUEIrEwWpkqOlYzfoyvaNeGJ4KQH0JS71TSARl7YGTB3l45VyC9sYCKCvS0BQkaoKJV9LdN9k56B1ZhvOH9clj2eVchCvHDNlHoITku5Sc6SdvPVBWqE2O44nAhkUH09G8IQzT9Kh3Fo6XczQlWUcAga42kNx39s3SAlNtZYHTyJMEaEDfWhS6Bvy0QrbW66G8SLvzC8l2qLHqwLFPS3P8cWIF5slOkRhNiLnGyohV8nKTIVmKJRWAwHxjdcukwkl2CnKN/wI2eeBBD6l6PeM5J33s2MaEjFr9xx86rpcm+7c7x5NjqX2xeakIBYO7SwEumEqSzTxJ7oSZkkgiIEEmDK0wBdvNk0RApgtmOk/UAywD0XSXyGyAayOHcEwmvHA8fDF6Z+wn3AuEclMfdAzEys1w91Zr5X1RAf8CvwQYAB0rcvQMbg3OAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA1ZJREFUeNrsVktPU0EUPn3dPq73QmmbFlRaAw1Q5KUiYCIkmmjUGEMUdGWMSze6cmViTFwYVv4Aw8KNRhe6kA0SAonRGGNBHpWkBAXFIFAeLS307ZyB1ku90EJvdeOXTO7c6XS+b8755tyRxeNx+JdQCl9cLlcLeXSQdlRCjjrSBoUDDodDXADBUwsBx3GSMLvdbnw8J63NbrcPis2Rp7xbWJaFWCwmSUNYrdZuFEHE1GYiQHIwDHODiHizlQj53zAaEXHNZrM5xUQoc0nM83zCB4j2jecAabJdCVgLx8D5xQ9j06swOR+CGDnCkWgcWLUCrCY1VO3XQlWxDhTy9fVNJhOYzWYxY+48Akj8eniZkOjgdE0+mHgVMMp1In8wBnPeMJ3TM+KFC0f0YLdo6G8JM2ZUB7ZCn8tLCW6esYBG9ds27pk1sns5FOkZYEkEbKShmGfvPOBbjcKhA2zatdOacGI2SMIdhLZGwyZyBI5j+IVAQVebjfB+fIWK3lElFEM/2f3Zunzax0WnF0IgI5E/V6eHmaUwdA8tQa2N1A5S0Ycm/RAhET9RycOp6jzo/+yDSw0F2UVgZjkM5jwV7X+dC0JLBQ+lZg18J0ICJNwXGwzwaTJAhVXs1dL8D5H3YqMapkiEsk6B8GPl8UVAv0cJPxZDNNScVgFoeJVCRsONXvjmCdHxTJFWgJFTUUKaL0L08sMC5OmUEIrEwWpkqOlYzfoyvaNeGJ4KQH0JS71TSARl7YGTB3l45VyC9sYCKCvS0BQkaoKJV9LdN9k56B1ZhvOH9clj2eVchCvHDNlHoITku5Sc6SdvPVBWqE2O44nAhkUH09G8IQzT9Kh3Fo6XczQlWUcAga42kNx39s3SAlNtZYHTyJMEaEDfWhS6Bvy0QrbW66G8SLvzC8l2qLHqwLFPS3P8cWIF5slOkRhNiLnGyohV8nKTIVmKJRWAwHxjdcukwkl2CnKN/wI2eeBBD6l6PeM5J33s2MaEjFr9xx86rpcm+7c7x5NjqX2xeakIBYO7SwEumEqSzTxJ7oSZkkgiIEEmDK0wBdvNk0RApgtmOk/UAywD0XSXyGyAayOHcEwmvHA8fDF6Z+wn3AuEclMfdAzEys1w91Zr5X1RAf8CvwQYAB0rcvQMbg3OAAAAAElFTkSuQmCC'); } .list-list .ico-url { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAr5JREFUeNpi/P//P8NAAhZkzrVr1+yBVBcQm1HRDkMgvoAsoKWlhd0BQLBCAgh4eXmpYvPt27dB1GogDlVVVb2ATQ0TGl+Cm5ub4d+/f1TBICAvL78L5AigYwyIcQDVARsbWxbQEUdwOYKJHgkN6IgEBQWFc9gcwUJLi/n4+GDpAATCoPR5IGakmgP+/P/LsP/FJYZzb+8wMDEyMchyizD4yVgwcLGwM4iKijKIi4tjS5jkh8DLHx8Ytj45xXDj4xOG59/fMfCwcDBYi2kxBMpZMajxSYPVgMRBDgABWGIkqhwgBO5+fs7QcWUVw4+/vxn42bgZtATkGAwElRjWPDzCsPf5RYZcTT8GIyFlBklOIfIKInwAZOnE6xsZ/gB9FKfszOAqaYgoWIAOmXlrG8P0m1sYuoyTGQTZeIh2ANG54Oirqwzvf31hiFC0R7EcnNe5xRhKtUMY/gGL9d3PzpNfFOMN/i8vGJR5JYHBfZhhyb19eNQ9J8kBRIeAOIcAgzA7Lzgq8IGfBOTJDgE9QUVwYmszTABnNWoBokPg+OvrYHrD42NY5S+9v88Qe6SH4dy7u7RxAMgCHQF5hlNvboFzw+sfH8Hiv/79AWbBC2AxDX5ZcDakSRR8+v2dockglmHu7Z0Mx4ChcebtbXBh8+3PT7A8yHHZGr6UNUjwATEOfgYWRmaGTHVvBlMRNYbTwJB4+u0tg7iAANByBQZHCT3KW0T4QISCHcPBl5eBiVGBwUBIicFEWJX6TTJ8ABS/IExtQJf2wKB2AEoUTHixg4HhBe0tnYXUKiYqBNqdMrDyQTQyxqWeau0BbKBy3wwUi5H5Qy8NkAOQg5tU3w+KKEBxADcT+9+v/34yY7OEVJ/C1KOrBdmBzGdE7h1PPbGm5vaPF43f/v2iSdrgYmL7p8ohUZ9tEdKC1QEDAQACDADzFSd59WqSKgAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAr5JREFUeNpi/P//P8NAAhZkzrVr1+yBVBcQm1HRDkMgvoAsoKWlhd0BQLBCAgh4eXmpYvPt27dB1GogDlVVVb2ATQ0TGl+Cm5ub4d+/f1TBICAvL78L5AigYwyIcQDVARsbWxbQEUdwOYKJHgkN6IgEBQWFc9gcwUJLi/n4+GDpAATCoPR5IGakmgP+/P/LsP/FJYZzb+8wMDEyMchyizD4yVgwcLGwM4iKijKIi4tjS5jkh8DLHx8Ytj45xXDj4xOG59/fMfCwcDBYi2kxBMpZMajxSYPVgMRBDgABWGIkqhwgBO5+fs7QcWUVw4+/vxn42bgZtATkGAwElRjWPDzCsPf5RYZcTT8GIyFlBklOIfIKInwAZOnE6xsZ/gB9FKfszOAqaYgoWIAOmXlrG8P0m1sYuoyTGQTZeIh2ANG54Oirqwzvf31hiFC0R7EcnNe5xRhKtUMY/gGL9d3PzpNfFOMN/i8vGJR5JYHBfZhhyb19eNQ9J8kBRIeAOIcAgzA7Lzgq8IGfBOTJDgE9QUVwYmszTABnNWoBokPg+OvrYHrD42NY5S+9v88Qe6SH4dy7u7RxAMgCHQF5hlNvboFzw+sfH8Hiv/79AWbBC2AxDX5ZcDakSRR8+v2dockglmHu7Z0Mx4ChcebtbXBh8+3PT7A8yHHZGr6UNUjwATEOfgYWRmaGTHVvBlMRNYbTwJB4+u0tg7iAANByBQZHCT3KW0T4QISCHcPBl5eBiVGBwUBIicFEWJX6TTJ8ABS/IExtQJf2wKB2AEoUTHixg4HhBe0tnYXUKiYqBNqdMrDyQTQyxqWeau0BbKBy3wwUi5H5Qy8NkAOQg5tU3w+KKEBxADcT+9+v/34yY7OEVJ/C1KOrBdmBzGdE7h1PPbGm5vaPF43f/v2iSdrgYmL7p8ohUZ9tEdKC1QEDAQACDADzFSd59WqSKgAAAABJRU5ErkJggg=='); } .list-list .ico-xml { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnhJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwx4gIUp4F/wHIsfu9Tht//yCvQSHLA9fc/Ge58/IUidvHtDwZtIXYGViZGsBxIDdUd8Ovvf4bpV94xzLj6nkGQnRlFbuejLwyusjxgNkgOpAakFqSHKg648u4nQ9ah5wxiXCwME2wkGIQ5EA4ABfs1oLy+MAeYD5IDqQGpBekB6SWpLsAGqk+8ZJjhIMUgyYWp9NiL7wyWEpwMTIwIMRAzWImPwUqCiyHjwDOGjV5ylIWALA8rw9YHn7Emst2PvzC4yfFgiIPUgvSA9FIcBZNsJRl42ZjAQYqcwL78/sfw4tsfBmU+NoyEClIL0gPSS3EUgII3XIWfwRoYpN0X3jKkagky6ABT/YGnXxnspbgw0svsa+8ZGkxFGaS5WambDWWAwQlKYIq8EIP3PPkKT/0wAJIDqSHWcpJLQlAC42aFuBlkETqAydGsIKIFGHXAgDsAJRHGnP0LbL/eorml57TwhAATCysK3hOhi5UPorHJIcujmwXCJEeB25obDLtCNMBsEA3i0z0NwByBbjk1HDc0cgHMdzDfEhM6ZDmAnxXYxEPrrCIbjssR+ByOrB5kNh8LA0orlRHZwrIdV+pPvf9f9+kPbaIG6MG/pgKMzV0eOo1YHTAQACDAAOGRHaFJlGXVAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnhJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwx4gIUp4F/wHIsfu9Tht//yCvQSHLA9fc/Ge58/IUidvHtDwZtIXYGViZGsBxIDdUd8Ovvf4bpV94xzLj6nkGQnRlFbuejLwyusjxgNkgOpAakFqSHKg648u4nQ9ah5wxiXCwME2wkGIQ5EA4ABfs1oLy+MAeYD5IDqQGpBekB6SWpLsAGqk+8ZJjhIMUgyYWp9NiL7wyWEpwMTIwIMRAzWImPwUqCiyHjwDOGjV5ylIWALA8rw9YHn7Emst2PvzC4yfFgiIPUgvSA9FIcBZNsJRl42ZjAQYqcwL78/sfw4tsfBmU+NoyEClIL0gPSS3EUgII3XIWfwRoYpN0X3jKkagky6ABT/YGnXxnspbgw0svsa+8ZGkxFGaS5WambDWWAwQlKYIq8EIP3PPkKT/0wAJIDqSHWcpJLQlAC42aFuBlkETqAydGsIKIFGHXAgDsAJRHGnP0LbL/eorml57TwhAATCysK3hOhi5UPorHJIcujmwXCJEeB25obDLtCNMBsEA3i0z0NwByBbjk1HDc0cgHMdzDfEhM6ZDmAnxXYxEPrrCIbjssR+ByOrB5kNh8LA0orlRHZwrIdV+pPvf9f9+kPbaIG6MG/pgKMzV0eOo1YHTAQACDAAOGRHaFJlGXVAAAAAElFTkSuQmCC'); } .list-list .ico-ai { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAg9JREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByK7ggYYELjS3JycjL8+/ePKhgE5OTkdkIdYUyMA6gO2NnZM+Tl5Q8CmWuwOYKJHgmNjY0tQUFB4QQ2R7DQ0mI+Pj5YOgCBCCh9BogZ6eIAAQEBsCMYGRnh+OHDh7SLgvdXNjK82N8K57OysjIwMzMTXw4QC96dX87w7elRBin3HgYmVg64uKCOP5D0R7WAhYXh79+/OM0iOQT+/f4BtpyJjZfh65MzROkBhQITExM4Cih2AMhSNkFVBl5Vb4bvz1DLljen5oCjARuApQGKHQCylFPKmIFTQofh1/vbDL8/vSBaL8UOAFkGspRbxoSBhVOAgUPMgOHbi8sUJVySHACyDGQpLOGxi2owfH2wj3q1IcH4B1r279dnhidbclCj5cU1YJRo0dYBIEtAAD3rgbLk9+cXyXYA0VEAsoRDVA/FchDglNQHZ0tQ9iQHMCK3iIANkv/Kyso0rZju3r0LapAw0rU2pFouGHUAzVvFLEfSGR4eoYOFWodxhwA7C3FYLWweXj4uPDzSgHzQPIaH65LA9IAlQmpYTlaTDOZ7XHzKQoCV798/GvZVwWaz8v7DWRfc2Fxbz/TmbB3D78+0SZxsfH//CRs1a/g2N2J1wEAAgAADAIk82p3e8s5qAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAg9JREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByK7ggYYELjS3JycjL8+/ePKhgE5OTkdkIdYUyMA6gO2NnZM+Tl5Q8CmWuwOYKJHgmNjY0tQUFB4QQ2R7DQ0mI+Pj5YOgCBCCh9BogZ6eIAAQEBsCMYGRnh+OHDh7SLgvdXNjK82N8K57OysjIwMzMTXw4QC96dX87w7elRBin3HgYmVg64uKCOP5D0R7WAhYXh79+/OM0iOQT+/f4BtpyJjZfh65MzROkBhQITExM4Cih2AMhSNkFVBl5Vb4bvz1DLljen5oCjARuApQGKHQCylFPKmIFTQofh1/vbDL8/vSBaL8UOAFkGspRbxoSBhVOAgUPMgOHbi8sUJVySHACyDGQpLOGxi2owfH2wj3q1IcH4B1r279dnhidbclCj5cU1YJRo0dYBIEtAAD3rgbLk9+cXyXYA0VEAsoRDVA/FchDglNQHZ0tQ9iQHMCK3iIANkv/Kyso0rZju3r0LapAw0rU2pFouGHUAzVvFLEfSGR4eoYOFWodxhwA7C3FYLWweXj4uPDzSgHzQPIaH65LA9IAlQmpYTlaTDOZ7XHzKQoCV798/GvZVwWaz8v7DWRfc2Fxbz/TmbB3D78+0SZxsfH//CRs1a/g2N2J1wEAAgAADAIk82p3e8s5qAAAAAElFTkSuQmCC'); } .list-list .ico-bmp { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmtJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgTqTi1guPH+MVkO0BCUZWgySyC+HMAGQJavcq8lywFhO5tJK4gIgfNv7jDMuLIZzM7Q8WUwFFGhOJpIygUgywv1Q8AY5hC6OgAGGIFpmFo1CElRkKHty9B3cQ0DE9AFmUA23R1gKKrCMMuhEKvc+59fGA49u8Tw5MtrBjZmFgZNQXnqOwAXAFm88f5xBjdZYwYXIP725wfDqZc3qeeAv///MRx5foXh3OvbDF9+f2eQ4BJicJDWZ1Dll2a48OYuw9EXVxlaLRIZOJjZEKEFzCF7n5yjjgOaTi9m4GblYHCVMWYQYOdhePb1DcP86zuAYpwMr769Z2ixSEKxnOppQFVAmiFGzQXOV+STYLCQ0GK49OYegxS3MAMv0CE0S4SsTCwMm4DxC8KkAnUBWcodsNS1kqZVNV3aA4PaAShRMOHFDgaGF7S3dBaeVjEDFzM7anvAKhs1Sx6biiIO46OLIetDVvPt708yygE0S5D5xOjDp4eoNAAyAIaRDUL2KSkOo1sIYIsmqldGsFDAZgkxDkVxABcT2z9gxcPEzMiEMyGSE8zIlRrIDpTGDXLveOqJNfW3f7yo+/bvF03KB24m9r8qHOLN2RYhjVgdMBAAIMAA9C4L2PHEWagAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmtJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgTqTi1guPH+MVkO0BCUZWgySyC+HMAGQJavcq8lywFhO5tJK4gIgfNv7jDMuLIZzM7Q8WUwFFGhOJpIygUgywv1Q8AY5hC6OgAGGIFpmFo1CElRkKHty9B3cQ0DE9AFmUA23R1gKKrCMMuhEKvc+59fGA49u8Tw5MtrBjZmFgZNQXnqOwAXAFm88f5xBjdZYwYXIP725wfDqZc3qeeAv///MRx5foXh3OvbDF9+f2eQ4BJicJDWZ1Dll2a48OYuw9EXVxlaLRIZOJjZEKEFzCF7n5yjjgOaTi9m4GblYHCVMWYQYOdhePb1DcP86zuAYpwMr769Z2ixSEKxnOppQFVAmiFGzQXOV+STYLCQ0GK49OYegxS3MAMv0CE0S4SsTCwMm4DxC8KkAnUBWcodsNS1kqZVNV3aA4PaAShRMOHFDgaGF7S3dBaeVjEDFzM7anvAKhs1Sx6biiIO46OLIetDVvPt708yygE0S5D5xOjDp4eoNAAyAIaRDUL2KSkOo1sIYIsmqldGsFDAZgkxDkVxABcT2z9gxcPEzMiEMyGSE8zIlRrIDpTGDXLveOqJNfW3f7yo+/bvF03KB24m9r8qHOLN2RYhjVgdMBAAIMAA9C4L2PHEWagAAAAASUVORK5CYII='); } .list-list .ico-cdr { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmRJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgTqTi1guPH+MVkO0BCUZWgySyC+HMAGQJavcq8lywFhO5tJK4gIgfNv7jDMuLIZzM7Q8WUwFFGhOJpIygUgywv1Q8AY5hC6OgAGGIFpmFo1CElRkKHty9B3cQ0DE9AFmUA23R1gKKrCMMuhEKvc+59fGA49u8Tw5MtrBjZmFgZNQXnqOwAXAFm88f5xBjdZYwYXIP725wfDqZc3qeeAv///MRx5foXh3OvbDF9+f2eQ4BJicJDWZ1Dll2a48OYuw9EXVxlaLRIZOJjZEKEFzCF7n5yjjgOaTi9m4GblYHCVMWYQYOdhePb1DcP86zuAYpwMr769Z2ixSEKxnOppQFVAmiFGzQXOV+STYLCQ0GK49OYegxS3MAMv0CE0S4SsTCwMm4DxC8KkAnUBWcodsNS1kqZVNV3aA4PaAShRMOHFDgaGF7S3dBaeVjEDFzM7Cr/WPhHObj44H0OMGHFk8O3vT+ITIchAZEOQ+aSKUyUNEDKM5pURMQBblFEtBNDjGFcowTAx6lFCgIuJ7R+w4mFiZmSCG4bLR6T6FFapgexAadwg946nnlhTf/vHi7pv/37RpHzgZmL/q8Ih3pxtEdKI1QEDAQACDAD7sQauaYXLQgAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmRJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgTqTi1guPH+MVkO0BCUZWgySyC+HMAGQJavcq8lywFhO5tJK4gIgfNv7jDMuLIZzM7Q8WUwFFGhOJpIygUgywv1Q8AY5hC6OgAGGIFpmFo1CElRkKHty9B3cQ0DE9AFmUA23R1gKKrCMMuhEKvc+59fGA49u8Tw5MtrBjZmFgZNQXnqOwAXAFm88f5xBjdZYwYXIP725wfDqZc3qeeAv///MRx5foXh3OvbDF9+f2eQ4BJicJDWZ1Dll2a48OYuw9EXVxlaLRIZOJjZEKEFzCF7n5yjjgOaTi9m4GblYHCVMWYQYOdhePb1DcP86zuAYpwMr769Z2ixSEKxnOppQFVAmiFGzQXOV+STYLCQ0GK49OYegxS3MAMv0CE0S4SsTCwMm4DxC8KkAnUBWcodsNS1kqZVNV3aA4PaAShRMOHFDgaGF7S3dBaeVjEDFzM7Cr/WPhHObj44H0OMGHFk8O3vT+ITIchAZEOQ+aSKUyUNEDKM5pURMQBblFEtBNDjGFcowTAx6lFCgIuJ7R+w4mFiZmSCG4bLR6T6FFapgexAadwg946nnlhTf/vHi7pv/37RpHzgZmL/q8Ih3pxtEdKI1QEDAQACDAD7sQauaYXLQgAAAABJRU5ErkJggg=='); } .list-list .ico-gif { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmBJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgTqTi1guPH+MVkO0BCUZWgySyC+HMAGQJavcq8lywFhO5tJK4gIgfNv7jDMuLIZzM7Q8WUwFFGhOJpIygUgywv1Q8AY5hC6OgAGGIFpmFo1CElRkKHty9B3cQ0DE9AFmUA23R1gKKrCMMuhEKvc+59fGA49u8Tw5MtrBjZmFgZNQXnqOwAXAFm88f5xBjdZYwYXIP725wfDqZc3qeeAv///MRx5foXh3OvbDF9+f2eQ4BJicJDWZ1Dll2a48OYuw9EXVxlaLRIZOJjZEKEFzCF7n5yjjgOaTi9m4GblYHCVMWYQYOdhePb1DcP86zuAYpwMr769Z2ixSEKxnOppQFVAmiFGzQXOV+STYLCQ0GK49OYegxS3MAMv0CE0S4SsTCwMm4DxC8KkAnUBWcodsNS1kqZVNV3aA4PaAShRMOHFDgaGF7S3dBaeVjEDFzM77raBVTYiax6bChcDsZHlkOXRwbe/P8krCWEW4eLjs5QmaQCbZSBHoYcETeoCmCUDFgLkWERUCHAxsf0DVjxMzIxMWC0lNXixVWogO1AaN8i946kn1tTf/vGi7tu/XzQpH7iZ2P+qcIg3Z1uENGJ1wEAAgAADACWJ9+r79LDyAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmBJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgTqTi1guPH+MVkO0BCUZWgySyC+HMAGQJavcq8lywFhO5tJK4gIgfNv7jDMuLIZzM7Q8WUwFFGhOJpIygUgywv1Q8AY5hC6OgAGGIFpmFo1CElRkKHty9B3cQ0DE9AFmUA23R1gKKrCMMuhEKvc+59fGA49u8Tw5MtrBjZmFgZNQXnqOwAXAFm88f5xBjdZYwYXIP725wfDqZc3qeeAv///MRx5foXh3OvbDF9+f2eQ4BJicJDWZ1Dll2a48OYuw9EXVxlaLRIZOJjZEKEFzCF7n5yjjgOaTi9m4GblYHCVMWYQYOdhePb1DcP86zuAYpwMr769Z2ixSEKxnOppQFVAmiFGzQXOV+STYLCQ0GK49OYegxS3MAMv0CE0S4SsTCwMm4DxC8KkAnUBWcodsNS1kqZVNV3aA4PaAShRMOHFDgaGF7S3dBaeVjEDFzM77raBVTYiax6bChcDsZHlkOXRwbe/P8krCWEW4eLjs5QmaQCbZSBHoYcETeoCmCUDFgLkWERUCHAxsf0DVjxMzIxMWC0lNXixVWogO1AaN8i946kn1tTf/vGi7tu/XzQpH7iZ2P+qcIg3Z1uENGJ1wEAAgAADACWJ9+r79LDyAAAAAElFTkSuQmCC'); } .list-list .ico-ico { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAaVJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLBSZ/Pc3w+/HVxhYZHUYGJlZMaT5+Phg6QAEIqD0GSBmpIoDfl7Zx/Dt4EIGLvt4BnZ9dwx5UVFRBnFxcWwJkzohwKpoxMD+9gmYxgVgiZGocoBUwMQnysDllEy9gogU8H5SFJzN5ZjEwK7rQp4nyHUAl1MKGFMKyHYAu44TGA+YA6gFRh0w4A5goTQLgsC3/fPAGAQE85bR3gGc1pEDGwIcxr6jiXD4OIARuVn+sECTLm10+QnX8TRIWNixa6rewvCw1QfOhjsaKoZPHAX8+UlZLkB2CDIflzjN0wAxlgzvXIAc7xSXhP85Bf4x/vrKxMDIhDfIsSU2XOIo4P8/oB38/3BmwzuzCutZ7h+vY/z+kSZR859L4O8fBYtmlbT+RqwOGAgAEGAAjiC9hXL1ZWMAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAaVJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLBSZ/Pc3w+/HVxhYZHUYGJlZMaT5+Phg6QAEIqD0GSBmpIoDfl7Zx/Dt4EIGLvt4BnZ9dwx5UVFRBnFxcWwJkzohwKpoxMD+9gmYxgVgiZGocoBUwMQnysDllEy9gogU8H5SFJzN5ZjEwK7rQp4nyHUAl1MKGFMKyHYAu44TGA+YA6gFRh0w4A5goTQLgsC3/fPAGAQE85bR3gGc1pEDGwIcxr6jiXD4OIARuVn+sECTLm10+QnX8TRIWNixa6rewvCw1QfOhjsaKoZPHAX8+UlZLkB2CDIflzjN0wAxlgzvXIAc7xSXhP85Bf4x/vrKxMDIhDfIsSU2XOIo4P8/oB38/3BmwzuzCutZ7h+vY/z+kSZR859L4O8fBYtmlbT+RqwOGAgAEGAAjiC9hXL1ZWMAAAAASUVORK5CYII='); } .list-list .ico-jpeg { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnpJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgTqTi1guPH+MVkO0BCUZWgySyC+HMAGQJavcq8lywFhO5tJK4gIgfNv7jDMuLIZzM7Q8WUwFFGhOJpIygUgywv1Q8AY5hC6OgAGGIFpmFo1CElRkKHty9B3cQ0DE9AFmUA23R1gKKrCMMuhEKvc+59fGA49u8Tw5MtrBjZmFgZNQXnqOwAXAFm88f5xBjdZYwYXIP725wfDqZc3qeeAv///MRx5foXh3OvbDF9+f2eQ4BJicJDWZ1Dll2a48OYuw9EXVxlaLRIZOJjZEKEFzCF7n5yjjgOaTi9m4GblYHCVMWYQYOdhePb1DcP86zuAYpwMr769Z2ixSEKxnOppQFVAmiFGzQXOV+STYLCQ0GK49OYegxS3MAMv0CE0S4SsTCwMm4DxC8KkAnUBWcodsNS1kqZVNV3aA4PaAShRMOHFDgaGF7S3dBaeVjEDFzM7hoZa+0SG5oPzwTQMgPgwOWSATRwmBgLf/v6krCREtgDGRrYAXQ4bn+ppAGQBekhgczRV6gKYRciG4rMAm3qiQwCbr0AG4bOQFN9jhAAXE9s/YMXDxMzIRFT8YXMozIHYHA+q1EB2oDRukHvHU0+sqb/940Xdt3+/aFI+cDOx/1XhEG/OtghpxOqAgQAAAQYA3ogNywRusk8AAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnpJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgTqTi1guPH+MVkO0BCUZWgySyC+HMAGQJavcq8lywFhO5tJK4gIgfNv7jDMuLIZzM7Q8WUwFFGhOJpIygUgywv1Q8AY5hC6OgAGGIFpmFo1CElRkKHty9B3cQ0DE9AFmUA23R1gKKrCMMuhEKvc+59fGA49u8Tw5MtrBjZmFgZNQXnqOwAXAFm88f5xBjdZYwYXIP725wfDqZc3qeeAv///MRx5foXh3OvbDF9+f2eQ4BJicJDWZ1Dll2a48OYuw9EXVxlaLRIZOJjZEKEFzCF7n5yjjgOaTi9m4GblYHCVMWYQYOdhePb1DcP86zuAYpwMr769Z2ixSEKxnOppQFVAmiFGzQXOV+STYLCQ0GK49OYegxS3MAMv0CE0S4SsTCwMm4DxC8KkAnUBWcodsNS1kqZVNV3aA4PaAShRMOHFDgaGF7S3dBaeVjEDFzM7hoZa+0SG5oPzwTQMgPgwOWSATRwmBgLf/v6krCREtgDGRrYAXQ4bn+ppAGQBekhgczRV6gKYRciG4rMAm3qiQwCbr0AG4bOQFN9jhAAXE9s/YMXDxMzIRFT8YXMozIHYHA+q1EB2oDRukHvHU0+sqb/940Xdt3+/aFI+cDOx/1XhEG/OtghpxOqAgQAAAQYA3ogNywRusk8AAAAASUVORK5CYII='); } .list-list .ico-jpg, .list-list .ico-JPG { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAm1JREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgTqTi1guPH+MVkO0BCUZWgySyC+HMAGQJavcq8lywFhO5tJK4gIgfNv7jDMuLIZzM7Q8WUwFFGhOJpIygUgywv1Q8AY5hC6OgAGGIFpmFo1CElRkKHty9B3cQ0DE9AFmUA23R1gKKrCMMuhEKvc+59fGA49u8Tw5MtrBjZmFgZNQXnqOwAXAFm88f5xBjdZYwYXIP725wfDqZc3qeeAv///MRx5foXh3OvbDF9+f2eQ4BJicJDWZ1Dll2a48OYuw9EXVxlaLRIZOJjZEKEFzCF7n5yjjgOaTi9m4GblYHCVMWYQYOdhePb1DcP86zuAYpwMr769Z2ixSEKxnOppQFVAmiFGzQXOV+STYLCQ0GK49OYegxS3MAMv0CE0S4SsTCwMm4DxC8KkAnUBWcodsNS1kqZVNV3aA4PaAShRMOHFDgaGF7S3dBaeVjEDFzM7/vaBVTZD07GpYBqeTYF8ZHls4jDw7e9P6pWEMAuQHYXuGGyOoFsaIGQ5xSEAC25sFuGTIysEkOMW2Ye4LCDG9xghwMXE9g9Y8TAxMzLhTYD4ghybQ5ErNZAdKI0b5N7x1BNr6m//eFH37d8vmqQNbib2vyoc4s3ZFiGNWB0wEAAgwADnlgGzkKaAXwAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAm1JREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgTqTi1guPH+MVkO0BCUZWgySyC+HMAGQJavcq8lywFhO5tJK4gIgfNv7jDMuLIZzM7Q8WUwFFGhOJpIygUgywv1Q8AY5hC6OgAGGIFpmFo1CElRkKHty9B3cQ0DE9AFmUA23R1gKKrCMMuhEKvc+59fGA49u8Tw5MtrBjZmFgZNQXnqOwAXAFm88f5xBjdZYwYXIP725wfDqZc3qeeAv///MRx5foXh3OvbDF9+f2eQ4BJicJDWZ1Dll2a48OYuw9EXVxlaLRIZOJjZEKEFzCF7n5yjjgOaTi9m4GblYHCVMWYQYOdhePb1DcP86zuAYpwMr769Z2ixSEKxnOppQFVAmiFGzQXOV+STYLCQ0GK49OYegxS3MAMv0CE0S4SsTCwMm4DxC8KkAnUBWcodsNS1kqZVNV3aA4PaAShRMOHFDgaGF7S3dBaeVjEDFzM7/vaBVTZD07GpYBqeTYF8ZHls4jDw7e9P6pWEMAuQHYXuGGyOoFsaIGQ5xSEAC25sFuGTIysEkOMW2Ye4LCDG9xghwMXE9g9Y8TAxMzLhTYD4ghybQ5ErNZAdKI0b5N7x1BNr6m//eFH37d8vmqQNbib2vyoc4s3ZFiGNWB0wEAAgwADnlgGzkKaAXwAAAABJRU5ErkJggg=='); } .list-list .ico-png { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmhJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgTqTi1guPH+MVkO0BCUZWgySyC+HMAGQJavcq8lywFhO5tJK4gIgfNv7jDMuLIZzM7Q8WUwFFGhOJpIygUgywv1Q8AY5hC6OgAGGIFpmFo1CElRkKHty9B3cQ0DE9AFmUA23R1gKKrCMMuhEKvc+59fGA49u8Tw5MtrBjZmFgZNQXnqOwAXAFm88f5xBjdZYwYXIP725wfDqZc3qeeAv///MRx5foXh3OvbDF9+f2eQ4BJicJDWZ1Dll2a48OYuw9EXVxlaLRIZOJjZEKEFzCF7n5yjjgOaTi9m4GblYHCVMWYQYOdhePb1DcP86zuAYpwMr769Z2ixSEKxnOppQFVAmiFGzQXOV+STYLCQ0GK49OYegxS3MAMv0CE0S4SsTCwMm4DxC8KkAnUBWcodsNS1kqZVNV3aA4PaAShRMOHFDgaGF7S3dBaeVjEDFzM7anvAKhuRHY9NRRFD5qPLIcsjg29/f5JRDmCxCGvjBU2ekHqK0gDIYGTf4nM4xQURepBTUw8Tsb7FZhC+UCDWsSghwMXE9g9Y8TAxMzLRJFpAlRrIDpTGDXLveOqJNfW3f7yo+/bvF03KB24m9r8qHOLN2RYhjVgdMBAAIMAADIwGkBp21VIAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmhJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgTqTi1guPH+MVkO0BCUZWgySyC+HMAGQJavcq8lywFhO5tJK4gIgfNv7jDMuLIZzM7Q8WUwFFGhOJpIygUgywv1Q8AY5hC6OgAGGIFpmFo1CElRkKHty9B3cQ0DE9AFmUA23R1gKKrCMMuhEKvc+59fGA49u8Tw5MtrBjZmFgZNQXnqOwAXAFm88f5xBjdZYwYXIP725wfDqZc3qeeAv///MRx5foXh3OvbDF9+f2eQ4BJicJDWZ1Dll2a48OYuw9EXVxlaLRIZOJjZEKEFzCF7n5yjjgOaTi9m4GblYHCVMWYQYOdhePb1DcP86zuAYpwMr769Z2ixSEKxnOppQFVAmiFGzQXOV+STYLCQ0GK49OYegxS3MAMv0CE0S4SsTCwMm4DxC8KkAnUBWcodsNS1kqZVNV3aA4PaAShRMOHFDgaGF7S3dBaeVjEDFzM7anvAKhuRHY9NRRFD5qPLIcsjg29/f5JRDmCxCGvjBU2ekHqK0gDIYGTf4nM4xQURepBTUw8Tsb7FZhC+UCDWsSghwMXE9g9Y8TAxMzLRJFpAlRrIDpTGDXLveOqJNfW3f7yo+/bvF03KB24m9r8qHOLN2RYhjVgdMBAAIMAADIwGkBp21VIAAAAASUVORK5CYII='); } .list-list .ico-psd { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkRJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByK7ggYYELjS3JycjL8+/ePKhgE5OTkdkIdYUyMA6gO2NnZM+Tl5Q8CmWuwOYKJHgmNjY0tQUFB4QQ2R7DQ0mI+Pj5YOgCBCCh9BogZ6eIAAQEBsCMYGRnh+OHDh/SLAlZWVgZmZmbiywFCYMKxewyvvv1CZHAJPoYgHSn8FrCwMPz9+5c6DgCBcC1JBn0pfoaXn38wLL/8jOHA3dcMDsqiePWAQgFU4mIrdclOA+K8HAyWMgIMl15+Ajvg5KN3DBtvvYLLt7looKgHxT9VQgAbAIUGyPIMYzkGOUEunOqwOYLsRPjo/TeGPfffMuiJ8zEIcLKCxd5//01ZZUQMWHntORiDgL+aGIO5nBA8bex/8JZhy+1XDC6KwnBxqjsAlgjRAUgMhC8++wh2oCQwjeCLDpqVAwpCXAzcrMwM3//8pU0I4EoPM84+gvPdgFGgLspLlF5G5LwJbJD8V1ZWpmnFdPfuXVCDhJGutSFd08CoAygqiGLOArPO2Vs0t/ScFp5syMTCiqFhmZ8anB216RaGOEwMWR26Whj49+c3eeUAsiUgNoxGFsPmQGyOoEoagDkCl0+pnghBlqH7CNkRNHcAyDJc8U+JI1DSAD8rw79P//4z4Wq9EBMFuBIsCICKfT4Whn8464KyHVfqT73/X/fpD23KB6AH/5oKMDZ3eeg0YnXAQACAAAMAI0n+E64by+4AAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkRJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByK7ggYYELjS3JycjL8+/ePKhgE5OTkdkIdYUyMA6gO2NnZM+Tl5Q8CmWuwOYKJHgmNjY0tQUFB4QQ2R7DQ0mI+Pj5YOgCBCCh9BogZ6eIAAQEBsCMYGRnh+OHDh/SLAlZWVgZmZmbiywFCYMKxewyvvv1CZHAJPoYgHSn8FrCwMPz9+5c6DgCBcC1JBn0pfoaXn38wLL/8jOHA3dcMDsqiePWAQgFU4mIrdclOA+K8HAyWMgIMl15+Ajvg5KN3DBtvvYLLt7looKgHxT9VQgAbAIUGyPIMYzkGOUEunOqwOYLsRPjo/TeGPfffMuiJ8zEIcLKCxd5//01ZZUQMWHntORiDgL+aGIO5nBA8bex/8JZhy+1XDC6KwnBxqjsAlgjRAUgMhC8++wh2oCQwjeCLDpqVAwpCXAzcrMwM3//8pU0I4EoPM84+gvPdgFGgLspLlF5G5LwJbJD8V1ZWpmnFdPfuXVCDhJGutSFd08CoAygqiGLOArPO2Vs0t/ScFp5syMTCiqFhmZ8anB216RaGOEwMWR26Whj49+c3eeUAsiUgNoxGFsPmQGyOoEoagDkCl0+pnghBlqH7CNkRNHcAyDJc8U+JI1DSAD8rw79P//4z4Wq9EBMFuBIsCICKfT4Whn8464KyHVfqT73/X/fpD23KB6AH/5oKMDZ3eeg0YnXAQACAAAMAI0n+E64by+4AAAAASUVORK5CYII='); } .list-list .ico-webp { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAo1JREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgTqTi1guPH+MVkO0BCUZWgySyC+HMAGQJavcq8lywFhO5tJK4gIgfNv7jDMuLIZzM7Q8WUwFFGhOJpIygUgywv1Q8AY5hC6OgAGGIFpmFo1CElRkKHty9B3cQ0DE9AFmUA23R1gKKrCMMuhEKvc+59fGA49u8Tw5MtrBjZmFgZNQXnqOwAXAFm88f5xBjdZYwYXIP725wfDqZc3qeeAv///MRx5foXh3OvbDF9+f2eQ4BJicJDWZ1Dll2a48OYuw9EXVxlaLRIZOJjZEKEFzCF7n5yjjgOaTi9m4GblYHCVMWYQYOdhePb1DcP86zuAYpwMr769Z2ixSEKxnOppQFVAmiFGzQXOV+STYLCQ0GK49OYegxS3MAMv0CE0S4SsTCwMm4DxC8KkAnUBWcodsNS1kqZVNV3aA4PaAShRMOHFDgaGF7S3dBaeVjEDFzM7Q5V9PEPbwYUYGmHitfaJKOLNB+eD5ZABTD+yWpC6b39/UqckBBmGDpAdjewJmFqQYyr3zSCcBkAaYT5CppEtABmGHhIgNTCMLQSpWheQEgIwh2LTg9MBsFBApqnpWKwO4GJi+weseJiYGQnnTvTEhRxd6KGBXKmB7EBp3CD3jqeeWFN/+8eLum//ftGkfOBmYv+rwiHenG0R0ojVAQMBAAIMAErgG/MeljhhAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAo1JREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgTqTi1guPH+MVkO0BCUZWgySyC+HMAGQJavcq8lywFhO5tJK4gIgfNv7jDMuLIZzM7Q8WUwFFGhOJpIygUgywv1Q8AY5hC6OgAGGIFpmFo1CElRkKHty9B3cQ0DE9AFmUA23R1gKKrCMMuhEKvc+59fGA49u8Tw5MtrBjZmFgZNQXnqOwAXAFm88f5xBjdZYwYXIP725wfDqZc3qeeAv///MRx5foXh3OvbDF9+f2eQ4BJicJDWZ1Dll2a48OYuw9EXVxlaLRIZOJjZEKEFzCF7n5yjjgOaTi9m4GblYHCVMWYQYOdhePb1DcP86zuAYpwMr769Z2ixSEKxnOppQFVAmiFGzQXOV+STYLCQ0GK49OYegxS3MAMv0CE0S4SsTCwMm4DxC8KkAnUBWcodsNS1kqZVNV3aA4PaAShRMOHFDgaGF7S3dBaeVjEDFzM7Q5V9PEPbwYUYGmHitfaJKOLNB+eD5ZABTD+yWpC6b39/UqckBBmGDpAdjewJmFqQYyr3zSCcBkAaYT5CppEtABmGHhIgNTCMLQSpWheQEgIwh2LTg9MBsFBApqnpWKwO4GJi+weseJiYGQnnTvTEhRxd6KGBXKmB7EBp3CD3jqeeWFN/+8eLum//ftGkfOBmYv+rwiHenG0R0ojVAQMBAAIMAErgG/MeljhhAAAAAElFTkSuQmCC'); } .list-list .ico-ape { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZNJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwxElUOEAM+dpYTpY6/vJP0gohYQMhwYh1Jt1ww6oBB7QCiE+Gn/lqG/79+DZwDiLH887Q2hn+fP9ImChjZ2FBorIUOiZaTFAJ8hc2EfcPLD3YEiKa6A4gBvFlVo9lw6DmAEblZ/rwwhi5tdMn+JbgbJGyMjFg1Cdf0MbxtKULhwwBMHFkMWRwZ/ELrh1CUC5AthrGxWUpxGoBZgO5DXGqJUUdyCGAzFCaG7GtSQ4CFWN9j45NqGUEH/OPk/vfvxzcmSvImtsQJNx9UqQHtwJkNH8zur2e7f6OO8ftXmpQP/7i4//5W0GhWSC1sxOqAgQAAAQYADkDCgkQGXJUAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZNJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwxElUOEAM+dpYTpY6/vJP0gohYQMhwYh1Jt1ww6oBB7QCiE+Gn/lqG/79+DZwDiLH887Q2hn+fP9ImChjZ2FBorIUOiZaTFAJ8hc2EfcPLD3YEiKa6A4gBvFlVo9lw6DmAEblZ/rwwhi5tdMn+JbgbJGyMjFg1Cdf0MbxtKULhwwBMHFkMWRwZ/ELrh1CUC5AthrGxWUpxGoBZgO5DXGqJUUdyCGAzFCaG7GtSQ4CFWN9j45NqGUEH/OPk/vfvxzcmSvImtsQJNx9UqQHtwJkNH8zur2e7f6OO8ftXmpQP/7i4//5W0GhWSC1sxOqAgQAAAQYADkDCgkQGXJUAAAAASUVORK5CYII='); } .list-list .ico-avi { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtpJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLKQa9vXnP4ajNz8z3Hj2g+HN5z9gMVE+FgZNaU4GS1UeBm52hJ/4+Phg6QAEIqD0GSBmJMsBV558Z9h45j2DvjwXQ6CpIIM4PytY/OXH3wwXH31jmLD9BYO/iSCDjgwnxGGiogzi4uLYEibpIQCyfOv5DwxJDqIMkgKsKHKywmxgbKzIzbDo8BuwGMwRsMSICzARG+wgn8fZimBYjpKFgHIgNSC1X378I8pjRDng+O0vDHpyXBiWzz3wmuH91z8YjgCpPXbrM/UccP3pdwYDYLyjg7svfzJM3fWK4faLHyjiILWgREo1B7z+9IdBShB70H/79Y9hwaE3DAeuIXwsCVT7+vMf6jmAIADWZ/+QKjVQumMm0mSicgEonz97/xuc0tEBBysTQ5iFEIOGFAdcDJQthXhYqOcAUCEDyufoDlAQZWcINhNkEEazDKRWQ5KDelFgocLDcPHhN4bnH36jiKc5iWJY/gKoBqTWSo2Xeg7g4WACl3CgQgbdEcgAJLcQqAakFqSHalEAL9mA6Wzu/tcMBgpcDIbArCbKxwrNJb8ZzgN9feHBN4YAU0RRTFUHgB0hy8mgKMYOrozWnHoProxAqV2El4VBXZKTodBLAqUyoroDQABkgZsePxhTA9ClPTCoHYASBR17gKlszx2aW7pIC08IsLGz48SdqZpE8dHFkfHQTQPNcUoMtYvugWkYQObD5GmaCJEtp0kiJOR7bHxYKJDje4wQ4GYDtSH/0Sy+QWZzAe1AFmNE7h1PWHe1/sYrhrpvv2iTOIEe/KsuxtBcEKTdiNUBAwEAAgwAcCQxq0cx9U0AAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtpJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLKQa9vXnP4ajNz8z3Hj2g+HN5z9gMVE+FgZNaU4GS1UeBm52hJ/4+Phg6QAEIqD0GSBmJMsBV558Z9h45j2DvjwXQ6CpIIM4PytY/OXH3wwXH31jmLD9BYO/iSCDjgwnxGGiogzi4uLYEibpIQCyfOv5DwxJDqIMkgKsKHKywmxgbKzIzbDo8BuwGMwRsMSICzARG+wgn8fZimBYjpKFgHIgNSC1X378I8pjRDng+O0vDHpyXBiWzz3wmuH91z8YjgCpPXbrM/UccP3pdwYDYLyjg7svfzJM3fWK4faLHyjiILWgREo1B7z+9IdBShB70H/79Y9hwaE3DAeuIXwsCVT7+vMf6jmAIADWZ/+QKjVQumMm0mSicgEonz97/xuc0tEBBysTQ5iFEIOGFAdcDJQthXhYqOcAUCEDyufoDlAQZWcINhNkEEazDKRWQ5KDelFgocLDcPHhN4bnH36jiKc5iWJY/gKoBqTWSo2Xeg7g4WACl3CgQgbdEcgAJLcQqAakFqSHalEAL9mA6Wzu/tcMBgpcDIbArCbKxwrNJb8ZzgN9feHBN4YAU0RRTFUHgB0hy8mgKMYOrozWnHoProxAqV2El4VBXZKTodBLAqUyoroDQABkgZsePxhTA9ClPTCoHYASBR17gKlszx2aW7pIC08IsLGz48SdqZpE8dHFkfHQTQPNcUoMtYvugWkYQObD5GmaCJEtp0kiJOR7bHxYKJDje4wQ4GYDtSH/0Sy+QWZzAe1AFmNE7h1PWHe1/sYrhrpvv2iTOIEe/KsuxtBcEKTdiNUBAwEAAgwAcCQxq0cx9U0AAAAASUVORK5CYII='); } .list-list .ico-flv { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAuNJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLKQa9vXnP4ajNz8z3Hj2g+HN5z9gMVE+FgZNaU4GS1UeBm52hJ/4+Phg6QAEIqD0GSBmJMsBV558Z9h45j2DvjwXQ6CpIIM4PytY/OXH3wwXH31jmLD9BYO/iSCDjgwnxGGiogzi4uLYEibpIQCyfOv5DwxJDqIMkgKsKHKywmxgbKzIzbDo8BuwGMwRsMSICzARG+wgn8fZimBYjpKFgHIgNSC1X378I8pjRDng+O0vDHpyXBiWzz3wmuH91z8YjgCpPXbrM/UccP3pdwYDYLyjg7svfzJM3fWK4faLHyjiILWgREo1B7z+9IdBShB70H/79Y9hwaE3DAeuIXwsCVT7+vMf6jmAIADWZ/+QKjVQumMm0mSicgEonz97/xuc0tEBBysTQ5iFEIOGFAdcDJQthXhYqOcAUCEDyufoDlAQZWcINhNkEEazDKRWQ5KDelFgocLDcPHhN4bnH36jiKc5iWJY/gKoBqTWSo2Xeg7g4WACl3CgQgbdEcgAJLcQqAakFqSHalEAL9mA6Wzu/tcMBgpcDIbArCbKxwrNJb8ZzgN9feHBN4YAU0RRTFUHgB0hy8mgKMYOrozWnHoProxAqV2El4VBXZKTodBLAqUyoroDQABkgZsePxhTA9ClPTCoHYASBR17gKlszx2aW7pIC08aYGNnx9DQHKeEwq9ddA8sBqKR1eDjw8Cvnz/JS4TYDKNrGgD5CD0ksIUKPt9TlA0HPASIdSQpvsdwADcbqA35j4Fa0YIOQGZzAe1AFmNE7h1PWHe1/sYrhrpvv2hTPgA9+FddjKG5IEi7EasDBgIABBgAhSU3wy5Zmw0AAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAuNJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLKQa9vXnP4ajNz8z3Hj2g+HN5z9gMVE+FgZNaU4GS1UeBm52hJ/4+Phg6QAEIqD0GSBmJMsBV558Z9h45j2DvjwXQ6CpIIM4PytY/OXH3wwXH31jmLD9BYO/iSCDjgwnxGGiogzi4uLYEibpIQCyfOv5DwxJDqIMkgKsKHKywmxgbKzIzbDo8BuwGMwRsMSICzARG+wgn8fZimBYjpKFgHIgNSC1X378I8pjRDng+O0vDHpyXBiWzz3wmuH91z8YjgCpPXbrM/UccP3pdwYDYLyjg7svfzJM3fWK4faLHyjiILWgREo1B7z+9IdBShB70H/79Y9hwaE3DAeuIXwsCVT7+vMf6jmAIADWZ/+QKjVQumMm0mSicgEonz97/xuc0tEBBysTQ5iFEIOGFAdcDJQthXhYqOcAUCEDyufoDlAQZWcINhNkEEazDKRWQ5KDelFgocLDcPHhN4bnH36jiKc5iWJY/gKoBqTWSo2Xeg7g4WACl3CgQgbdEcgAJLcQqAakFqSHalEAL9mA6Wzu/tcMBgpcDIbArCbKxwrNJb8ZzgN9feHBN4YAU0RRTFUHgB0hy8mgKMYOrozWnHoProxAqV2El4VBXZKTodBLAqUyoroDQABkgZsePxhTA9ClPTCoHYASBR17gKlszx2aW7pIC08aYGNnx9DQHKeEwq9ddA8sBqKR1eDjw8Cvnz/JS4TYDKNrGgD5CD0ksIUKPt9TlA0HPASIdSQpvsdwADcbqA35j4Fa0YIOQGZzAe1AFmNE7h1PWHe1/sYrhrpvv2hTPgA9+FddjKG5IEi7EasDBgIABBgAhSU3wy5Zmw0AAAAASUVORK5CYII='); } .list-list .ico-mkv { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAq1JREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYkayHfD333+GE4/fMVx88ZHhxecfYDEJXg4GfQl+BgtZIQZmJrjZDKKiogzi4uLYEiZ5IfDpx2+GBeceMvBzsDK4q4ozyPJzgsUff/zOcOTBG4azT98zJBjJM/AB5WEAlhiJKgcI+RxkuQ7Qp05KomCxGafugekMMyUGZSFuhn33XjPMB6rJtlBmYEEKCXyA6ER48sk7sM9hlsMAckEKkhMAqjkFVEtWSYgPXHj+ERzsyADkc3RgoyDCsPP2SwYrOWHqOuDpp+8MMnycKMGOjZ1opMDwDKiWWEBWOYAc7OhsRmDUMzEyUj8KpIG+fwL0GXKwY2PfffcVnC2pHgKgfA7KasgAFOywoIcBkBp1ER7qO8AcWMh8AJYDoKyGKzpAcg8/fAOnF2IBI3KDBNge+K+srEywIBLgZGWwlhfBKIhADowzlGNYevExgwgXO4OzsiiDKDc7ihl3794FtQcYyXIAclF8/tkHhldff4LFxICWGEoJwIviP0A1oLLg5OP3DIXWKngdQHJdALLAWl4YjHGmbKAaUDlATFlAl+p41AFEF0QxZ/8C26+3aG7pOS08IcDEwoqCt4ZogzEuMWQ5bGLofJpFweYANQbfDbdokwZABoMswGURuhgh9UMzF8B8hc03yD4mRj1OB/CzMvwjt7OKzRGY7Yj/DHwsDP9wVkZlO67Un3r/v+7TH9pEDdCDf00FGJu7PHQasTpgIABAgAEAZzJTrgcAEqEAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAq1JREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYkayHfD333+GE4/fMVx88ZHhxecfYDEJXg4GfQl+BgtZIQZmJrjZDKKiogzi4uLYEiZ5IfDpx2+GBeceMvBzsDK4q4ozyPJzgsUff/zOcOTBG4azT98zJBjJM/AB5WEAlhiJKgcI+RxkuQ7Qp05KomCxGafugekMMyUGZSFuhn33XjPMB6rJtlBmYEEKCXyA6ER48sk7sM9hlsMAckEKkhMAqjkFVEtWSYgPXHj+ERzsyADkc3RgoyDCsPP2SwYrOWHqOuDpp+8MMnycKMGOjZ1opMDwDKiWWEBWOYAc7OhsRmDUMzEyUj8KpIG+fwL0GXKwY2PfffcVnC2pHgKgfA7KasgAFOywoIcBkBp1ER7qO8AcWMh8AJYDoKyGKzpAcg8/fAOnF2IBI3KDBNge+K+srEywIBLgZGWwlhfBKIhADowzlGNYevExgwgXO4OzsiiDKDc7ihl3794FtQcYyXIAclF8/tkHhldff4LFxICWGEoJwIviP0A1oLLg5OP3DIXWKngdQHJdALLAWl4YjHGmbKAaUDlATFlAl+p41AFEF0QxZ/8C26+3aG7pOS08IcDEwoqCt4ZogzEuMWQ5bGLofJpFweYANQbfDbdokwZABoMswGURuhgh9UMzF8B8hc03yD4mRj1OB/CzMvwjt7OKzRGY7Yj/DHwsDP9wVkZlO67Un3r/v+7TH9pEDdCDf00FGJu7PHQasTpgIABAgAEAZzJTrgcAEqEAAAAASUVORK5CYII='); } .list-list .ico-mov { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAupJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLKQa9vXnP4ajNz8z3Hj2g+HN5z9gMVE+FgZNaU4GS1UeBm52hJ/4+Phg6QAEIqD0GSBmJMsBV558Z9h45j2DvjwXQ6CpIIM4PytY/OXH3wwXH31jmLD9BYO/iSCDjgwnxGGiogzi4uLYEibpIQCyfOv5DwxJDqIMkgKsKHKywmxgbKzIzbDo8BuwGMwRsMSICzARG+wgn8fZimBYjpKFgHIgNSC1X378I8pjRDng+O0vDHpyXBiWzz3wmuH91z8YjgCpPXbrM/UccP3pdwYDYLyjg7svfzJM3fWK4faLHyjiILWgREo1B7z+9IdBShB70H/79Y9hwaE3DAeuIXwsCVT7+vMf6jmAIADWZ/+QKjVQumMm0mSicgEonz97/xuc0tEBBysTQ5iFEIOGFAdcDJQthXhYqOcAUCEDyufoDlAQZWcINhNkEEazDKRWQ5KDelFgocLDcPHhN4bnH36jiKc5iWJY/gKoBqTWSo2Xeg7g4WACl3CgQgbdEcgAJLcQqAakFqSHalEAL9mA6Wzu/tcMBgpcDIbArCbKxwrNJb8ZzgN9feHBN4YAU0RRTFUHgB0hy8mgKMYOrozWnHoProxAqV2El4VBXZKTodBLAqUyoroDQABkgZsePxhTA9ClPTCoHYASBR17gKlszx2aW7pIC08aYGNnh7Ob45TAdO2iezjFYHx0MXQ9MP6vnz8pS4TIAJ9FVEsDIANhviTWAlL0DI1cAPMRKcFLrB6UNMDNxvDv579/TEBAkiXoiRAXADVQuYB2IIsxIveOJ6y7Wn/jFUPdt1+0iRqgB/+qizE0FwRpN2J1wEAAgAADAIjpSLqXWcBIAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAupJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLKQa9vXnP4ajNz8z3Hj2g+HN5z9gMVE+FgZNaU4GS1UeBm52hJ/4+Phg6QAEIqD0GSBmJMsBV558Z9h45j2DvjwXQ6CpIIM4PytY/OXH3wwXH31jmLD9BYO/iSCDjgwnxGGiogzi4uLYEibpIQCyfOv5DwxJDqIMkgKsKHKywmxgbKzIzbDo8BuwGMwRsMSICzARG+wgn8fZimBYjpKFgHIgNSC1X378I8pjRDng+O0vDHpyXBiWzz3wmuH91z8YjgCpPXbrM/UccP3pdwYDYLyjg7svfzJM3fWK4faLHyjiILWgREo1B7z+9IdBShB70H/79Y9hwaE3DAeuIXwsCVT7+vMf6jmAIADWZ/+QKjVQumMm0mSicgEonz97/xuc0tEBBysTQ5iFEIOGFAdcDJQthXhYqOcAUCEDyufoDlAQZWcINhNkEEazDKRWQ5KDelFgocLDcPHhN4bnH36jiKc5iWJY/gKoBqTWSo2Xeg7g4WACl3CgQgbdEcgAJLcQqAakFqSHalEAL9mA6Wzu/tcMBgpcDIbArCbKxwrNJb8ZzgN9feHBN4YAU0RRTFUHgB0hy8mgKMYOrozWnHoProxAqV2El4VBXZKTodBLAqUyoroDQABkgZsePxhTA9ClPTCoHYASBR17gKlszx2aW7pIC08aYGNnh7Ob45TAdO2iezjFYHx0MXQ9MP6vnz8pS4TIAJ9FVEsDIANhviTWAlL0DI1cAPMRKcFLrB6UNMDNxvDv579/TEBAkiXoiRAXADVQuYB2IIsxIveOJ6y7Wn/jFUPdt1+0iRqgB/+qizE0FwRpN2J1wEAAgAADAIjpSLqXWcBIAAAAAElFTkSuQmCC'); } .list-list .ico-mp3 { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZBJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwxElUOEAM+dpYTpY6/vJP0gohYQMhwYh1Jt1ww6oBB7QCiE+Gn/lqG/79+DZwDiLH887Q2hn+fP9ImChjZ2FBorIUOiZaTFAJ8hc2EfcPLD3YEiKa6A4gBvFlVo9lw6DmAEblZ/rwwhi5tdMn+JbgbJGyMjCh84Zo+MP22pQirGIyNTw0y+IXWD6FKFIAsQXYMiEYXoygNYDOckHpi1VIlBEAWYbOMaiGAbBg2H8GCGz3+SS4J/3Fy//v34xsTExXSBLZECGqe/gfagTMbPpjdX892/0Yd4/evNCkf/nFx//2toNGskFrYiNUBAwEAAgwArNbTCDlVe6IAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZBJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwxElUOEAM+dpYTpY6/vJP0gohYQMhwYh1Jt1ww6oBB7QCiE+Gn/lqG/79+DZwDiLH887Q2hn+fP9ImChjZ2FBorIUOiZaTFAJ8hc2EfcPLD3YEiKa6A4gBvFlVo9lw6DmAEblZ/rwwhi5tdMn+JbgbJGyMjCh84Zo+MP22pQirGIyNTw0y+IXWD6FKFIAsQXYMiEYXoygNYDOckHpi1VIlBEAWYbOMaiGAbBg2H8GCGz3+SS4J/3Fy//v34xsTExXSBLZECGqe/gfagTMbPpjdX892/0Yd4/evNCkf/nFx//2toNGskFrYiNUBAwEAAgwArNbTCDlVe6IAAAAASUVORK5CYII='); } .list-list .ico-mp4 { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAvBJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLKQa9vXnP4ajNz8z3Hj2g+HN5z9gMVE+FgZNaU4GS1UeBm52hJ/4+Phg6QAEIqD0GSBmJMsBV558Z9h45j2DvjwXQ6CpIIM4PytY/OXH3wwXH31jmLD9BYO/iSCDjgwnxGGiogzi4uLYEibpIQCyfOv5DwxJDqIMkgKsKHKywmxgbKzIzbDo8BuwGMwRsMSICzARG+wgn8fZimBYjpKFgHIgNSC1X378I8pjRDng+O0vDHpyXBiWzz3wmuH91z8YjgCpPXbrM/UccP3pdwYDYLyjg7svfzJM3fWK4faLHyjiILWgREo1B7z+9IdBShB70H/79Y9hwaE3DAeuIXwsCVT7+vMf6jmAIADWZ/+QKjVQumMm0mSicgEonz97/xuc0tEBBysTQ5iFEIOGFAdcDJQthXhYqOcAUCEDyufoDlAQZWcINhNkEEazDKRWQ5KDelFgocLDcPHhN4bnH36jiKc5iWJY/gKoBqTWSo2Xeg7g4WACl3CgQgbdEcgAJLcQqAakFqSHalEAL9mA6Wzu/tcMBgpcDIbArCbKxwrNJb8ZzgN9feHBN4YAU0RRTFUHgB0hy8mgKMYOrozWnHoProxAqV2El4VBXZKTodBLAqUyoroDQABkgZsePxhTA9ClPTCoHYASBR17gKlszx2aW7pIC08aYGNnx9DQHKcEpmsX3cMqBmOjq4GpQxb79fMnbaIAZAm6Y5DZFKcBZMPRfTUoEiHIUcgOI9aRTKQGMy6DYVGALe3giwoUB3CzgdqQ/6iaJpATJshsLqAdyOoYkXvHE9Zdrb/xiqHu2y/alA9AD/5VF2NoLgjSbsTqgIEAAAEGAKRaSLN4Zv7KAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAvBJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLKQa9vXnP4ajNz8z3Hj2g+HN5z9gMVE+FgZNaU4GS1UeBm52hJ/4+Phg6QAEIqD0GSBmJMsBV558Z9h45j2DvjwXQ6CpIIM4PytY/OXH3wwXH31jmLD9BYO/iSCDjgwnxGGiogzi4uLYEibpIQCyfOv5DwxJDqIMkgKsKHKywmxgbKzIzbDo8BuwGMwRsMSICzARG+wgn8fZimBYjpKFgHIgNSC1X378I8pjRDng+O0vDHpyXBiWzz3wmuH91z8YjgCpPXbrM/UccP3pdwYDYLyjg7svfzJM3fWK4faLHyjiILWgREo1B7z+9IdBShB70H/79Y9hwaE3DAeuIXwsCVT7+vMf6jmAIADWZ/+QKjVQumMm0mSicgEonz97/xuc0tEBBysTQ5iFEIOGFAdcDJQthXhYqOcAUCEDyufoDlAQZWcINhNkEEazDKRWQ5KDelFgocLDcPHhN4bnH36jiKc5iWJY/gKoBqTWSo2Xeg7g4WACl3CgQgbdEcgAJLcQqAakFqSHalEAL9mA6Wzu/tcMBgpcDIbArCbKxwrNJb8ZzgN9feHBN4YAU0RRTFUHgB0hy8mgKMYOrozWnHoProxAqV2El4VBXZKTodBLAqUyoroDQABkgZsePxhTA9ClPTCoHYASBR17gKlszx2aW7pIC08aYGNnx9DQHKcEpmsX3cMqBmOjq4GpQxb79fMnbaIAZAm6Y5DZFKcBZMPRfTUoEiHIUcgOI9aRTKQGMy6DYVGALe3giwoUB3CzgdqQ/6iaJpATJshsLqAdyOoYkXvHE9Zdrb/xiqHu2y/alA9AD/5VF2NoLgjSbsTqgIEAAAEGAKRaSLN4Zv7KAAAAAElFTkSuQmCC'); } .list-list .ico-mpeg { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAwJJREFUeNrMV01ME0EUftS2221LscBSt0pbjBWsBjGAQRMT48FEL/5F44kYD8ajnjypMVw8cvFkSJSrxMSDMRoSUeNPDARJtKBVo0Sx0CZFC6Wldeu8laWz2y0sMoAvedmZN1/nfe/NezNQls/nYS3FTE/C4fAh8ukiKjL00UJ0gDaEQiF9Aujc6/WKDoeDiedIJIKfO0RPBoPBAT2MSTMXeZ4HSZKYKIrP53uIJAiZZiMEmAvHcef9fv8TMuzRI2FajUKzWq1nAoHAKz0S5qVuNp2R4Pn7JIyMpSGezMk2wWWGbRt52BN0goMrxORyuZQ6QDk99+0nWvZPBN5+m4F7/QnY6bfDsVY3eCossn38ZxaGRlPQ+SAKR1rcsGMT/5eYIIDH49ErzKVnAJ3fH5yEs/sFENdbVGu1VVZZm+sc0P0sLtsUEkoxlhKT0bRj5O37qoucq1qIrCEGsVNpyVBghgi8jExBo89e5LyrLwaJ6VwRCcS++JBkR2D4+ww0kXPXyqfxDNx4NAGRaFplRywWKTMCsV858Lr1U5+aleDW0zj0hQsRiwQbS+bYEVhUyHsmUY8a1t06gzsb6gLs87FEVq50rdgsJjjVVgkNXtu8Dduy0mlmRwAvGexzLYGAwMGJ3W6o0jhDbINoY3cEbVucMPQ1BT8msyr7uQNCkfMowSB279ZydgScNpN8w+EloyVBC67dJhjE4m+YHcH8zUbqrOtxDJoCdthFWk1wWea6JAuDJOo3X1JwtLVwFTMlIJOo5aGuhpMfo57XCfkxwmqvLjdDvcjDxcMbVI8RcwIo6OBgY4WsLGRV/h74rwmojuB6L6my3o8r7rQ7tEANWDkOOto3y+PL3Z/n7bRNGdMY2lbKjrbZTGZ5RajnQBnThLVryvzSzWFjNUBHqt2olCBOmwk90kwyoHdMC5FU8IYzQGdBb2O0GcnKYuRUGXBYQcpIkmm5WaEJao/ETnzQ8zL6v+POu++ujkzAldTsytwPJMDf9TXQceH49mu6BNZC/ggwAJR8VIseM6jsAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAwJJREFUeNrMV01ME0EUftS2221LscBSt0pbjBWsBjGAQRMT48FEL/5F44kYD8ajnjypMVw8cvFkSJSrxMSDMRoSUeNPDARJtKBVo0Sx0CZFC6Wldeu8laWz2y0sMoAvedmZN1/nfe/NezNQls/nYS3FTE/C4fAh8ukiKjL00UJ0gDaEQiF9Aujc6/WKDoeDiedIJIKfO0RPBoPBAT2MSTMXeZ4HSZKYKIrP53uIJAiZZiMEmAvHcef9fv8TMuzRI2FajUKzWq1nAoHAKz0S5qVuNp2R4Pn7JIyMpSGezMk2wWWGbRt52BN0goMrxORyuZQ6QDk99+0nWvZPBN5+m4F7/QnY6bfDsVY3eCossn38ZxaGRlPQ+SAKR1rcsGMT/5eYIIDH49ErzKVnAJ3fH5yEs/sFENdbVGu1VVZZm+sc0P0sLtsUEkoxlhKT0bRj5O37qoucq1qIrCEGsVNpyVBghgi8jExBo89e5LyrLwaJ6VwRCcS++JBkR2D4+ww0kXPXyqfxDNx4NAGRaFplRywWKTMCsV858Lr1U5+aleDW0zj0hQsRiwQbS+bYEVhUyHsmUY8a1t06gzsb6gLs87FEVq50rdgsJjjVVgkNXtu8Dduy0mlmRwAvGexzLYGAwMGJ3W6o0jhDbINoY3cEbVucMPQ1BT8msyr7uQNCkfMowSB279ZydgScNpN8w+EloyVBC67dJhjE4m+YHcH8zUbqrOtxDJoCdthFWk1wWea6JAuDJOo3X1JwtLVwFTMlIJOo5aGuhpMfo57XCfkxwmqvLjdDvcjDxcMbVI8RcwIo6OBgY4WsLGRV/h74rwmojuB6L6my3o8r7rQ7tEANWDkOOto3y+PL3Z/n7bRNGdMY2lbKjrbZTGZ5RajnQBnThLVryvzSzWFjNUBHqt2olCBOmwk90kwyoHdMC5FU8IYzQGdBb2O0GcnKYuRUGXBYQcpIkmm5WaEJao/ETnzQ8zL6v+POu++ujkzAldTsytwPJMDf9TXQceH49mu6BNZC/ggwAJR8VIseM6jsAAAAAElFTkSuQmCC'); } .list-list .ico-mpg { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAvlJREFUeNrMV81PE0EUf61tt9uWYoGlbpW2GCtYDWIAgyYmxoOJXvyKxhMxHoxH/QPUGC4euXhsor1KTDwYoyERNX7EQJBEK1o1ahQLbVK0UPrl1nkr2+5ut7CVAfwlLzP75nXfb2Z+b2ZrKBaLsJYwyR8ikcgh0oSI8RRzdBMblTuCwaA2AUzu8Xh4u91OJXM0GsXmFrGTgUBgVCvGqHrmWZYFQRCoGMLr9d5HEoRMlx4C1MEwzHmfz/eIdAe1SBhXQ2gWi+WM3+9/oUXCVOvL5rICPH2XgonJDCRSBdHHOU2wbSMLewIOsDPlOTmdTkkHiNML7Qgxwz8ReP1tHu6MJGGnzwbHelzgrjeL/qmfeRj/moaBezE40u2CHZvYv8Q4Dtxut5Ywa18BTH53bAbO7ueAX29WjLU0WkTrarVD+ElC9EkkJDFWg1HvsuPM+/Y1VSRXlBAZwxiMnc0Iuiami8Dz6Cx0eG0VyUPDcUjOFSpIYOyz9yl6BN5+n4dOsu9qfJzKwvUH0xCNZRR+jEWRUiMQ/1UAj0t76dM5AW48TsBwpDxjnsTGUwV6BJYEuc8E2aWGulun8826qgDrfDKZF5WuhtVshFO9DdDusZZ8WJYNDhM9AnjIYJ2rCfg5Bk7sdkGjKhnGtvNWelvQu8UB41/S8GMmr/CfO8BVJI+RGIzdu7WOHgGH1SiecHjIqEnIgWM3SQzG4m+obUHpZCM6Cz2MQ6ffBrtIqXFO80KV5GGMzPrV5zQc7SkfxVQJiCRaWGhtZsTLaPBlUryMUO1NdSZo41m4eHiD4jKiTgCBCQ521ItGA6vyPfBfE1BswbUhorKhDyueNBxcRAMWhin1+/s2i+2l8CdNn9SvFqP2I3LZ7PJEqIaUAJNKpNRk1CRq0oB8pku9bDGC1MpQDa1t0jNWUxVoLa18rFoCPaulWAG7BYSsIBgJlqUJuQjlwA9UG8kh9xnk/44Hbr+5MjENl9O5lTkfyAR/tzVD/4Xj269qElgL/BFgADHlS7OoZ6a9AAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAvlJREFUeNrMV81PE0EUf61tt9uWYoGlbpW2GCtYDWIAgyYmxoOJXvyKxhMxHoxH/QPUGC4euXhsor1KTDwYoyERNX7EQJBEK1o1ahQLbVK0UPrl1nkr2+5ut7CVAfwlLzP75nXfb2Z+b2ZrKBaLsJYwyR8ikcgh0oSI8RRzdBMblTuCwaA2AUzu8Xh4u91OJXM0GsXmFrGTgUBgVCvGqHrmWZYFQRCoGMLr9d5HEoRMlx4C1MEwzHmfz/eIdAe1SBhXQ2gWi+WM3+9/oUXCVOvL5rICPH2XgonJDCRSBdHHOU2wbSMLewIOsDPlOTmdTkkHiNML7Qgxwz8ReP1tHu6MJGGnzwbHelzgrjeL/qmfeRj/moaBezE40u2CHZvYv8Q4Dtxut5Ywa18BTH53bAbO7ueAX29WjLU0WkTrarVD+ElC9EkkJDFWg1HvsuPM+/Y1VSRXlBAZwxiMnc0Iuiami8Dz6Cx0eG0VyUPDcUjOFSpIYOyz9yl6BN5+n4dOsu9qfJzKwvUH0xCNZRR+jEWRUiMQ/1UAj0t76dM5AW48TsBwpDxjnsTGUwV6BJYEuc8E2aWGulun8826qgDrfDKZF5WuhtVshFO9DdDusZZ8WJYNDhM9AnjIYJ2rCfg5Bk7sdkGjKhnGtvNWelvQu8UB41/S8GMmr/CfO8BVJI+RGIzdu7WOHgGH1SiecHjIqEnIgWM3SQzG4m+obUHpZCM6Cz2MQ6ffBrtIqXFO80KV5GGMzPrV5zQc7SkfxVQJiCRaWGhtZsTLaPBlUryMUO1NdSZo41m4eHiD4jKiTgCBCQ521ItGA6vyPfBfE1BswbUhorKhDyueNBxcRAMWhin1+/s2i+2l8CdNn9SvFqP2I3LZ7PJEqIaUAJNKpNRk1CRq0oB8pku9bDGC1MpQDa1t0jNWUxVoLa18rFoCPaulWAG7BYSsIBgJlqUJuQjlwA9UG8kh9xnk/44Hbr+5MjENl9O5lTkfyAR/tzVD/4Xj269qElgL/BFgADHlS7OoZ6a9AAAAAElFTkSuQmCC'); } .list-list .ico-rm { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAuNJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLKQa9vXnP4ajNz8z3Hj2g+HN5z9gMVE+FgZNaU4GS1UeBm52hJ/4+Phg6QAEIqD0GSBmJMsBV558Z9h45j2DvjwXQ6CpIIM4PytY/OXH3wwXH31jmLD9BYO/iSCDjgwnxGGiogzi4uLYEibpIQCyfOv5DwxJDqIMkgKsKHKywmxgbKzIzbDo8BuwGMwRsMSICzARG+wgn8fZimBYjpKFgHIgNSC1X378I8pjRDng+O0vDHpyXBiWzz3wmuH91z8YjgCpPXbrM/UccP3pdwYDYLyjg7svfzJM3fWK4faLHyjiILWgREo1B7z+9IdBShB70H/79Y9hwaE3DAeuIXwsCVT7+vMf6jmAIADWZ/+QKjVQumMm0mSicgEonz97/xuc0tEBBysTQ5iFEIOGFAdcDJQthXhYqOcAUCEDyufoDlAQZWcINhNkEEazDKRWQ5KDelFgocLDcPHhN4bnH36jiKc5iWJY/gKoBqTWSo2Xeg7g4WACl3CgQgbdEcgAJLcQqAakFqSHalEAL9mA6Wzu/tcMBgpcDIbArCbKxwrNJb8ZzgN9feHBN4YAU0RRTFUHgB0hy8mgKMYOrozWnHoProxAqV2El4VBXZKTodBLAqUyoroDQABkgZsePxhTA9ClPTCoHYASBR17gKlszx2aW7pIC08aYGNnx9DQHKeEwq9ddA9FHMbHJYYMfv38SV4iRLcElwV0TwMgh8B8TY7DiA4B5Giglu+pFgWwUCDHYShRwM0GakP+o1nqB5nNBbQDWYwRuXc8Yd3V+huvGOq+/aJN+QD04F91MYbmgiDtRqwOGAgAEGAAnMw5uSNz54cAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAuNJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLKQa9vXnP4ajNz8z3Hj2g+HN5z9gMVE+FgZNaU4GS1UeBm52hJ/4+Phg6QAEIqD0GSBmJMsBV558Z9h45j2DvjwXQ6CpIIM4PytY/OXH3wwXH31jmLD9BYO/iSCDjgwnxGGiogzi4uLYEibpIQCyfOv5DwxJDqIMkgKsKHKywmxgbKzIzbDo8BuwGMwRsMSICzARG+wgn8fZimBYjpKFgHIgNSC1X378I8pjRDng+O0vDHpyXBiWzz3wmuH91z8YjgCpPXbrM/UccP3pdwYDYLyjg7svfzJM3fWK4faLHyjiILWgREo1B7z+9IdBShB70H/79Y9hwaE3DAeuIXwsCVT7+vMf6jmAIADWZ/+QKjVQumMm0mSicgEonz97/xuc0tEBBysTQ5iFEIOGFAdcDJQthXhYqOcAUCEDyufoDlAQZWcINhNkEEazDKRWQ5KDelFgocLDcPHhN4bnH36jiKc5iWJY/gKoBqTWSo2Xeg7g4WACl3CgQgbdEcgAJLcQqAakFqSHalEAL9mA6Wzu/tcMBgpcDIbArCbKxwrNJb8ZzgN9feHBN4YAU0RRTFUHgB0hy8mgKMYOrozWnHoProxAqV2El4VBXZKTodBLAqUyoroDQABkgZsePxhTA9ClPTCoHYASBR17gKlszx2aW7pIC08aYGNnx9DQHKeEwq9ddA9FHMbHJYYMfv38SV4iRLcElwV0TwMgh8B8TY7DiA4B5Giglu+pFgWwUCDHYShRwM0GakP+o1nqB5nNBbQDWYwRuXc8Yd3V+huvGOq+/aJN+QD04F91MYbmgiDtRqwOGAgAEGAAnMw5uSNz54cAAAAASUVORK5CYII='); } .list-list .ico-rmvb { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAvNJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLKQa9vXnP4ajNz8z3Hj2g+HN5z9gMVE+FgZNaU4GS1UeBm52hJ/4+Phg6QAEIqD0GSBmJMsBV558Z9h45j2DvjwXQ6CpIIM4PytY/OXH3wwXH31jmLD9BYO/iSCDjgwnxGGiogzi4uLYEibpIQCyfOv5DwxJDqIMkgKsKHKywmxgbKzIzbDo8BuwGMwRsMSICzARG+wgn8fZimBYjpKFgHIgNSC1X378I8pjRDng+O0vDHpyXBiWzz3wmuH91z8YjgCpPXbrM/UccP3pdwYDYLyjg7svfzJM3fWK4faLHyjiILWgREo1B7z+9IdBShB70H/79Y9hwaE3DAeuIXwsCVT7+vMf6jmAIADWZ/+QKjVQumMm0mSicgEonz97/xuc0tEBBysTQ5iFEIOGFAdcDJQthXhYqOcAUCEDyufoDlAQZWcINhNkEEazDKRWQ5KDelFgocLDcPHhN4bnH36jiKc5iWJY/gKoBqTWSo2Xeg7g4WACl3CgQgbdEcgAJLcQqAakFqSHalEAL9mA6Wzu/tcMBgpcDIbArCbKxwrNJb8ZzgN9feHBN4YAU0RRTFUHgB0hy8mgKMYOrozWnHoProxAqV2El4VBXZKTodBLAqUyoroDQABkgZsePxhTA9ClPTCoHYASBR17gKlszx2aW7pIC08a6EzVROHXLroHppvjlFD46GIgNrocTBwZlM++TjgRYjOIEoCsH92DTKQaBPMRusPwyYH4MExUCCAHG6W+JxQCJEcBtvgmRo6oXMDNxvCPFlkTOUQbF17/NyNDG85nRO4dT1h3tf7GK4a6b79oUz4APfhXXYyhuSBIuxGrAwYCAAQYAPSMU/fnJ99KAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAvNJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLKQa9vXnP4ajNz8z3Hj2g+HN5z9gMVE+FgZNaU4GS1UeBm52hJ/4+Phg6QAEIqD0GSBmJMsBV558Z9h45j2DvjwXQ6CpIIM4PytY/OXH3wwXH31jmLD9BYO/iSCDjgwnxGGiogzi4uLYEibpIQCyfOv5DwxJDqIMkgKsKHKywmxgbKzIzbDo8BuwGMwRsMSICzARG+wgn8fZimBYjpKFgHIgNSC1X378I8pjRDng+O0vDHpyXBiWzz3wmuH91z8YjgCpPXbrM/UccP3pdwYDYLyjg7svfzJM3fWK4faLHyjiILWgREo1B7z+9IdBShB70H/79Y9hwaE3DAeuIXwsCVT7+vMf6jmAIADWZ/+QKjVQumMm0mSicgEonz97/xuc0tEBBysTQ5iFEIOGFAdcDJQthXhYqOcAUCEDyufoDlAQZWcINhNkEEazDKRWQ5KDelFgocLDcPHhN4bnH36jiKc5iWJY/gKoBqTWSo2Xeg7g4WACl3CgQgbdEcgAJLcQqAakFqSHalEAL9mA6Wzu/tcMBgpcDIbArCbKxwrNJb8ZzgN9feHBN4YAU0RRTFUHgB0hy8mgKMYOrozWnHoProxAqV2El4VBXZKTodBLAqUyoroDQABkgZsePxhTA9ClPTCoHYASBR17gKlszx2aW7pIC08a6EzVROHXLroHppvjlFD46GIgNrocTBwZlM++TjgRYjOIEoCsH92DTKQaBPMRusPwyYH4MExUCCAHG6W+JxQCJEcBtvgmRo6oXMDNxvCPFlkTOUQbF17/NyNDG85nRO4dT1h3tf7GK4a6b79oUz4APfhXXYyhuSBIuxGrAwYCAAQYAPSMU/fnJ99KAAAAAElFTkSuQmCC'); } .list-list .ico-swf { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAfVJREFUeNpi/P//P8NAAhZkzrVr1+yBVBcQm1HRDkMgvoAsoKWlhd0BQLBCAgh4eXmpYvPt27dB1GogDlVVVb2ATQ0TGl+Cm5ub4d+/f1TBICAvL78L5AigYwyIcQDVARsbWxbQEUdwOYKJHgkN6IgEBQWFc9gcwUKp4d/3H2D4tm8fw/9fPxlEOjtR5Pj4+GDpAATCoPR5IGakigM+LVrM8PfdWwbBokIGJkFBDHlRUVEGcXFxbAmT8hD4+/Ytw69LlxhEuoC+ZsIdk7DEiAuQnQZ+Xb3KwGFpgddykgsiUsCfR48ZPq9eDY4GEOAJDmbgi4ulnwP+fvrIINLezsCmpUlRCJAdfv+//2Bg5OSgOIuS7QBQ6mfi4hoYB/z/9Yvh78tXDMzAbEZ/BwCz1ad58xg4rawozgFkOeB1UTFQFzMDX0I89dsDxADRCf1UrSfoUhmNOmDUAfgAI3Kz/KaTM13a6Or79uJukACbTxgaFGfPAtP3U9PgfBgbXR1IHKYeBpDV/gKWoiSVA8iW4bIYGyBWHRMxBqGHALIYMo1sKYiPHhJkJ0JswUqMHmJCgYmYKMDmCBgfmaa8LuDj+/vv2zdmJqRaDlsUkAvADVSgHTiz4Y2GxhrG8+cbGT5/pk35wMv777+hYb1GQ30LVgcMBAAIMACmqfNs4ifjnwAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAfVJREFUeNpi/P//P8NAAhZkzrVr1+yBVBcQm1HRDkMgvoAsoKWlhd0BQLBCAgh4eXmpYvPt27dB1GogDlVVVb2ATQ0TGl+Cm5ub4d+/f1TBICAvL78L5AigYwyIcQDVARsbWxbQEUdwOYKJHgkN6IgEBQWFc9gcwUKp4d/3H2D4tm8fw/9fPxlEOjtR5Pj4+GDpAATCoPR5IGakigM+LVrM8PfdWwbBokIGJkFBDHlRUVEGcXFxbAmT8hD4+/Ytw69LlxhEuoC+ZsIdk7DEiAuQnQZ+Xb3KwGFpgddykgsiUsCfR48ZPq9eDY4GEOAJDmbgi4ulnwP+fvrIINLezsCmpUlRCJAdfv+//2Bg5OSgOIuS7QBQ6mfi4hoYB/z/9Yvh78tXDMzAbEZ/BwCz1ad58xg4rawozgFkOeB1UTFQFzMDX0I89dsDxADRCf1UrSfoUhmNOmDUAfgAI3Kz/KaTM13a6Or79uJukACbTxgaFGfPAtP3U9PgfBgbXR1IHKYeBpDV/gKWoiSVA8iW4bIYGyBWHRMxBqGHALIYMo1sKYiPHhJkJ0JswUqMHmJCgYmYKMDmCBgfmaa8LuDj+/vv2zdmJqRaDlsUkAvADVSgHTiz4Y2GxhrG8+cbGT5/pk35wMv777+hYb1GQ30LVgcMBAAIMACmqfNs4ifjnwAAAABJRU5ErkJggg=='); } .list-list .ico-wav { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYVJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwxElUOEAM+dpYTpY6/vJP0gohYQMhwYh1Jt1ww6oBB7QCiE+Gn/lqG/79+DZwDiLH887Q2hn+fP9ImChjZ2FBorIUOiZaTFAJ8hc2EfcPLD3YEiKa6A4gBvFlVo9lw6DmAEblZ/rwwhi5tdMn+JYw4Q4CNkRGOJWv7Ufi4xEnhD6008LaliEG4pg/MRqZB4jAA48PkselDVk+TEEC2nOJEiC2ekH2JzffE8kHgF9A+nInwHyc3gSYkhQ1UUKUGtANnCDyY3V/Pdv9GHeP3rzRJnP+4uP/+VtBoVkgtbMTqgIEAAAEGAH8AyCqN8wbhAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYVJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwxElUOEAM+dpYTpY6/vJP0gohYQMhwYh1Jt1ww6oBB7QCiE+Gn/lqG/79+DZwDiLH887Q2hn+fP9ImChjZ2FBorIUOiZaTFAJ8hc2EfcPLD3YEiKa6A4gBvFlVo9lw6DmAEblZ/rwwhi5tdMn+JYw4Q4CNkRGOJWv7Ufi4xEnhD6008LaliEG4pg/MRqZB4jAA48PkselDVk+TEEC2nOJEiC2ekH2JzffE8kHgF9A+nInwHyc3gSYkhQ1UUKUGtANnCDyY3V/Pdv9GHeP3rzRJnP+4uP/+VtBoVkgtbMTqgIEAAAEGAH8AyCqN8wbhAAAAAElFTkSuQmCC'); } .list-list .ico-webm { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAwxJREFUeNrMV81PE0EUf137tbQUCyx1q7TFWEE0iAEMmpgYDyZ68SsaLxKjifGof4Aaw8UjHky8NFGuEhMPxmhIRI0fMRAkwYpWDRothTYpWmgLLVvnrSzdr2JLBuoveZndt2/m/ebNezOzhlwuB+WEUf4SDAYPkSZAhKfoo53IkFzR3NysTwCdu91u3mazUfEcCoWwuUfkpN/vH9KzYVTvPMuyIAgCFUF4PJ7HSIKQaSuGAHVYLJaLXq/3GXns0yPBrEWimc3msz6f740eCWOpg83OCfDyYwLGwmmIJbKijnMYYdtGFvb47WCz5OfkcDikPECcXmwHiRhWRGD0RwoeDMZhp7cCjnU4wVVlEvWTvzIw8j0JPY8icKTdCTs2sX+JcRy4XC69xCw9Auj84fA0nNvPAb/epPhWX2MWpa3BBr0vYqJOIiElYyEwxYYdZ961r1bjXFFC5BvaoO1MWihqYkUReB2agRZPhcZ5YCAK8dmshgTavvqUoEfgw88UtJJ1V+PL5BzcejIFoUhaoUdbTFJqBKK/s+B26oc+OS/AnecxGAjmZ8wT22giS4/AP0HOM0F2qGHerSty5KKqAOs8HM+Ima6G1cTAqc5qaHJbl3RYltV2Iz0CuMlgnasJ+DgLnNjthBqVM7Rt4q30lqBzix1GviVhYjqj0F84wGmcR4gN2u7dWkmPgN3KiDscbjJqEnLgt7vEBm2xD7UlWNrZSJ4Fnkah1VcBu0ipcQ7TYpVkYJjM+t14Eo525LdiqgREEvUsNNRZxMOo721cPIww22srjdDIs3D58AbFYUSdAAIdHGypEoUG1uQ+8F8TUCzBjX6SZf2fV91pb/5SDAb5f8FESshd6f2q6dDdtRlQj60chXRSH/m7XMezjGHFSahHUO1Ez6bwOUIiIMmZm6O5cHIhd/52SNNKz5Lo6dT6Qq3cZ9kjwOgNJl/zksJZgPBy4ygiYDODMCcIy5amPOnUCVcoQvl7gvaeqKiCnvvvr41NwdXk/OrsD2SCC4110H3p+PbrugTKgT8CDACPHLU9lTMolQAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAwxJREFUeNrMV81PE0EUf137tbQUCyx1q7TFWEE0iAEMmpgYDyZ68SsaLxKjifGof4Aaw8UjHky8NFGuEhMPxmhIRI0fMRAkwYpWDRothTYpWmgLLVvnrSzdr2JLBuoveZndt2/m/ebNezOzhlwuB+WEUf4SDAYPkSZAhKfoo53IkFzR3NysTwCdu91u3mazUfEcCoWwuUfkpN/vH9KzYVTvPMuyIAgCFUF4PJ7HSIKQaSuGAHVYLJaLXq/3GXns0yPBrEWimc3msz6f740eCWOpg83OCfDyYwLGwmmIJbKijnMYYdtGFvb47WCz5OfkcDikPECcXmwHiRhWRGD0RwoeDMZhp7cCjnU4wVVlEvWTvzIw8j0JPY8icKTdCTs2sX+JcRy4XC69xCw9Auj84fA0nNvPAb/epPhWX2MWpa3BBr0vYqJOIiElYyEwxYYdZ961r1bjXFFC5BvaoO1MWihqYkUReB2agRZPhcZ5YCAK8dmshgTavvqUoEfgw88UtJJ1V+PL5BzcejIFoUhaoUdbTFJqBKK/s+B26oc+OS/AnecxGAjmZ8wT22giS4/AP0HOM0F2qGHerSty5KKqAOs8HM+Ima6G1cTAqc5qaHJbl3RYltV2Iz0CuMlgnasJ+DgLnNjthBqVM7Rt4q30lqBzix1GviVhYjqj0F84wGmcR4gN2u7dWkmPgN3KiDscbjJqEnLgt7vEBm2xD7UlWNrZSJ4Fnkah1VcBu0ipcQ7TYpVkYJjM+t14Eo525LdiqgREEvUsNNRZxMOo721cPIww22srjdDIs3D58AbFYUSdAAIdHGypEoUG1uQ+8F8TUCzBjX6SZf2fV91pb/5SDAb5f8FESshd6f2q6dDdtRlQj60chXRSH/m7XMezjGHFSahHUO1Ez6bwOUIiIMmZm6O5cHIhd/52SNNKz5Lo6dT6Qq3cZ9kjwOgNJl/zksJZgPBy4ygiYDODMCcIy5amPOnUCVcoQvl7gvaeqKiCnvvvr41NwdXk/OrsD2SCC4110H3p+PbrugTKgT8CDACPHLU9lTMolQAAAABJRU5ErkJggg=='); } .list-list .ico-wma { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAeFJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgSmX93C8ODzC6IsVOCVYMjU9oHzf//7w3DgySUGVxkj4soBbABkeadFClEOKD8xB85+9f0Dw9LbexlefHuP1wE0SYRnXt9imAEMOWsJbYJqaeKA1XcPMaRpeTOYiWkMjANAQIJLkCh1dCkHBsQBz76+HTgHhCrbMcy+vo3h3Js7pFXHVKt/RdUYZLhFGZbd3ke5A0CFC3L+xq9WHCUR5ur6Mxx4dokyByCXbKQCViYWvIXQ8M4Fow4gq1U84cUOBoYXtLd0FlKrGCMEuJjZwbjFKQ3ORsYwcRCNrgaXGDJ/6KSBtoMLGars48FsZBokjksNshyyGEzNgCRCfJYTLAlhrkem8anB5ntcfKwhwMXE9u/v/380Cw2Q2SA7kMUYkXvHU0+sqb/940Xdt3+/aBI13Ezsf1U4xJuzLUIasTpgIABAgAEAkufcCgWFyTcAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAeFJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgSmX93C8ODzC6IsVOCVYMjU9oHzf//7w3DgySUGVxkj4soBbABkeadFClEOKD8xB85+9f0Dw9LbexlefHuP1wE0SYRnXt9imAEMOWsJbYJqaeKA1XcPMaRpeTOYiWkMjANAQIJLkCh1dCkHBsQBz76+HTgHhCrbMcy+vo3h3Js7pFXHVKt/RdUYZLhFGZbd3ke5A0CFC3L+xq9WHCUR5ur6Mxx4dokyByCXbKQCViYWvIXQ8M4Fow4gq1U84cUOBoYXtLd0FlKrGCMEuJjZwbjFKQ3ORsYwcRCNrgaXGDJ/6KSBtoMLGars48FsZBokjksNshyyGEzNgCRCfJYTLAlhrkem8anB5ntcfKwhwMXE9u/v/380Cw2Q2SA7kMUYkXvHU0+sqb/940Xdt3+/aBI13Ezsf1U4xJuzLUIasTpgIABAgAEAkufcCgWFyTcAAAAASUVORK5CYII='); } .list-list .ico-wmv { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAt9JREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLKQa9vXnP4ajNz8z3Hj2g+HN5z9gMVE+FgZNaU4GS1UeBm52hJ/4+Phg6QAEIqD0GSBmJMsBV558Z9h45j2DvjwXQ6CpIIM4PytY/OXH3wwXH31jmLD9BYO/iSCDjgwnxGGiogzi4uLYEibpIQCyfOv5DwxJDqIMkgKsKHKywmxgbKzIzbDo8BuwGMwRsMSICzARG+wgn8fZimBYjpKFgHIgNSC1X378I8pjRDng+O0vDHpyXBiWzz3wmuH91z8YjgCpPXbrM/UccP3pdwYDYLyjg7svfzJM3fWK4faLHyjiILWgREo1B7z+9IdBShB70H/79Y9hwaE3DAeuIXwsCVT7+vMf6jmAIADWZ/+QKjVQumMm0mSicgEonz97/xuc0tEBBysTQ5iFEIOGFAdcDJQthXhYqOcAUCEDyufoDlAQZWcINhNkEEazDKRWQ5KDelFgocLDcPHhN4bnH36jiKc5iWJY/gKoBqTWSo2Xeg7g4WACl3CgQgbdEcgAJLcQqAakFqSHalEAL9mA6Wzu/tcMBgpcDIbArCbKxwrNJb8ZzgN9feHBN4YAU0RRTFUHgB0hy8mgKMYOrozWnHoProxAqV2El4VBXZKTodBLAqUyoroDQABkgZsePxhTA9ClPTCoHYASBR17gKlszx2aW7pIC08IsLGzg3FnqiacjYxh4iAaXQ2yGDY5ED100kDtonsMzXFKYDYyDRLHpYZYuaGTC2C+QKbxqSFFDqsDuNlAbch/NPMtyGwuoB3IYozIveMJ667W33jFUPftF22iBujBv+piDM0FQdqNWB0wEAAgwAD570Ssrd8AngAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAt9JREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLKQa9vXnP4ajNz8z3Hj2g+HN5z9gMVE+FgZNaU4GS1UeBm52hJ/4+Phg6QAEIqD0GSBmJMsBV558Z9h45j2DvjwXQ6CpIIM4PytY/OXH3wwXH31jmLD9BYO/iSCDjgwnxGGiogzi4uLYEibpIQCyfOv5DwxJDqIMkgKsKHKywmxgbKzIzbDo8BuwGMwRsMSICzARG+wgn8fZimBYjpKFgHIgNSC1X378I8pjRDng+O0vDHpyXBiWzz3wmuH91z8YjgCpPXbrM/UccP3pdwYDYLyjg7svfzJM3fWK4faLHyjiILWgREo1B7z+9IdBShB70H/79Y9hwaE3DAeuIXwsCVT7+vMf6jmAIADWZ/+QKjVQumMm0mSicgEonz97/xuc0tEBBysTQ5iFEIOGFAdcDJQthXhYqOcAUCEDyufoDlAQZWcINhNkEEazDKRWQ5KDelFgocLDcPHhN4bnH36jiKc5iWJY/gKoBqTWSo2Xeg7g4WACl3CgQgbdEcgAJLcQqAakFqSHalEAL9mA6Wzu/tcMBgpcDIbArCbKxwrNJb8ZzgN9feHBN4YAU0RRTFUHgB0hy8mgKMYOrozWnHoProxAqV2El4VBXZKTodBLAqUyoroDQABkgZsePxhTA9ClPTCoHYASBR17gKlszx2aW7pIC08IsLGzg3FnqiacjYxh4iAaXQ2yGDY5ED100kDtonsMzXFKYDYyDRLHpYZYuaGTC2C+QKbxqSFFDqsDuNlAbch/NPMtyGwuoB3IYozIveMJ667W33jFUPftF22iBujBv+piDM0FQdqNWB0wEAAgwAD570Ssrd8AngAAAABJRU5ErkJggg=='); } .list-list .ico-doc, @@ -3505,126 +3572,127 @@ ul.cmdlist { .list-list .ico-dotm, .list-list .ico-dot, .list-list .ico-rtf { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAArdJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByK7ggYYELjS3JycjL8+/ePKhgE5OTkdkIdYUyMA6gO2NnZM+Tl5Q8CmWuwOYKJHgmNjY0tQUFB4QQ2R7DQ0mI+Pj5YOgCBCCh9BogZ6eIAAQEBsCMYGRnh+OHDh/SLAlZWVgZmZmbiywFcYPnW+ww/f/1lSAhUQRFfsP4OmIaJP3j6hWHGiptgtoQIJ0NBvBYDCwsLw9+/f3GaTVQI6KkLMtx99Jnh959/cDEQ+97jz2AMExcWYGcIcpVn4OFiYdDXEIKrBYUCExMTOArIcoC6Ah/QAEawI2AAxJYU5QJjmDgvNyuDGlDt1+9/gA4QRDEDlgbIcgALCxODhhI/w417H+FiILamMj8YI4tfuf2eQVaSm0GInx3DHLIdAAK6aoIM1+5+YIBVXTfuf2TQVhFg0FIWQBG/fOsDgwFS8JNUGeGNBkU+hh8//zI8e/mNAeQRFmZGBlEhDkhqB4YQSBwUBU9efGWI9VeivgNYYdFwHxLcmkCfwwA4GoDinOzMDEqyvMBEyEq0A0gqB0C5ARTfIKyF4gABsNgVUPBrCpFUVpDkAHUFfoZXb38wvPvwk0FeGlFlK0jzMLx9/5Ph8cuvDDqqAuQ3SAiXbEzgbMYGpJmQUjQzMIuqAdPInz//GdjZmGnnABCI9sWewCK8FMkqrulSHY86gOg0MGHJIyD5iOaWzmrD3SoGNZ9Q+JU5Dij89ikHsMoRIw4Cv379Ij0XoBsO4sNoYsUHLA3gs3xk5AL0NIQ3F3BxMP/79ecfE6j5hMsQWJDC4ptYcRAA9ZZAdqA0UpB7x1MXHKm//eh73bcff2kSMtyczH9VZDmbsxNsGrE6YCAAQIABAHOPGcK/91HrAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAArdJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByK7ggYYELjS3JycjL8+/ePKhgE5OTkdkIdYUyMA6gO2NnZM+Tl5Q8CmWuwOYKJHgmNjY0tQUFB4QQ2R7DQ0mI+Pj5YOgCBCCh9BogZ6eIAAQEBsCMYGRnh+OHDh/SLAlZWVgZmZmbiywFcYPnW+ww/f/1lSAhUQRFfsP4OmIaJP3j6hWHGiptgtoQIJ0NBvBYDCwsLw9+/f3GaTVQI6KkLMtx99Jnh959/cDEQ+97jz2AMExcWYGcIcpVn4OFiYdDXEIKrBYUCExMTOArIcoC6Ah/QAEawI2AAxJYU5QJjmDgvNyuDGlDt1+9/gA4QRDEDlgbIcgALCxODhhI/w417H+FiILamMj8YI4tfuf2eQVaSm0GInx3DHLIdAAK6aoIM1+5+YIBVXTfuf2TQVhFg0FIWQBG/fOsDgwFS8JNUGeGNBkU+hh8//zI8e/mNAeQRFmZGBlEhDkhqB4YQSBwUBU9efGWI9VeivgNYYdFwHxLcmkCfwwA4GoDinOzMDEqyvMBEyEq0A0gqB0C5ARTfIKyF4gABsNgVUPBrCpFUVpDkAHUFfoZXb38wvPvwk0FeGlFlK0jzMLx9/5Ph8cuvDDqqAuQ3SAiXbEzgbMYGpJmQUjQzMIuqAdPInz//GdjZmGnnABCI9sWewCK8FMkqrulSHY86gOg0MGHJIyD5iOaWzmrD3SoGNZ9Q+JU5Dij89ikHsMoRIw4Cv379Ij0XoBsO4sNoYsUHLA3gs3xk5AL0NIQ3F3BxMP/79ecfE6j5hMsQWJDC4ptYcRAA9ZZAdqA0UpB7x1MXHKm//eh73bcff2kSMtyczH9VZDmbsxNsGrE6YCAAQIABAHOPGcK/91HrAAAAAElFTkSuQmCC'); } .list-list .ico-docx { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAphJREFUeNpi/P//P8NAAhZkzrVr1+yBVBcQm1HRDkMgvoAsoKWlhd0BQLBCAgh4eXmpYvPt27dB1GogDlVVVb2ATQ0TGl+Cm5ub4d+/f1TBICAvL78L5AigYwyIcQDVARsbWxbQEUdwOYKJHgkN6IgEBQWFc9gcwUJLi/n4+GDpAATCoPR5IGakiwMEBAQYQAmakZERjEHg8ePH9IsCVlZWBhYWhB9hjiA5ClZsu8/w4+dfhoRAFRTxBevvgGmY+IOnXxhmrLgJyU4inAwF8VpgB4AsBuUKbA4gKgR0VQUZ7j76zPD7zz+4GIh97/FnMIaJCwuwMwS5yjPwcrMy6GkIwtUyMzODMdkOUFPkA9MgR8AAiC0lxgXGMHGQxWoKfAyfv/5mMNAQQrWIiQmMyXIAKwsTg7aqAMONex/hYiC2hhI/GCOLX779nkFOiptBiJ8dwxyyQwAWDTfuIzngPpIDkMSv3v6A4Xt8gGgHgKLh67c/DC/efAdjZiZGcEIDYRAAiX349Ivh8YuvDLpqguTVhqREA7IlWsoQcQ52ZgYlGV5wWqC6A0BAW0WA4ei5V2C2h600XFxPXZBhx+GnYLaprghJZQVJBREovp+9+sbw+t0PcEKDARAbJAaSAzmS7AYJMdEAcgQTMP6ZkFI0iK0KzH6g8gAUDTRzAAhE+ShhFY/wUiSruKZLdTzqAKLTwIQlj4DkI5pbOqsNd6sY1HxiqMxxQBFrn3IAzkaWIyQOEkNX09i3i7hcgK4RxMdmID5xZDl0NTRNA8gW4bN8+OYC5PSAHAXYACNy57Swefefn78ZmavznGiWCHum7/3bX+vKgtUBUxcerbn98Fvjtx9/aRIyXBzM/1Tlueqz461bsDpgIABAgAEAbXE38hMP+G4AAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAphJREFUeNpi/P//P8NAAhZkzrVr1+yBVBcQm1HRDkMgvoAsoKWlhd0BQLBCAgh4eXmpYvPt27dB1GogDlVVVb2ATQ0TGl+Cm5ub4d+/f1TBICAvL78L5AigYwyIcQDVARsbWxbQEUdwOYKJHgkN6IgEBQWFc9gcwUJLi/n4+GDpAATCoPR5IGakiwMEBAQYQAmakZERjEHg8ePH9IsCVlZWBhYWhB9hjiA5ClZsu8/w4+dfhoRAFRTxBevvgGmY+IOnXxhmrLgJyU4inAwF8VpgB4AsBuUKbA4gKgR0VQUZ7j76zPD7zz+4GIh97/FnMIaJCwuwMwS5yjPwcrMy6GkIwtUyMzODMdkOUFPkA9MgR8AAiC0lxgXGMHGQxWoKfAyfv/5mMNAQQrWIiQmMyXIAKwsTg7aqAMONex/hYiC2hhI/GCOLX779nkFOiptBiJ8dwxyyQwAWDTfuIzngPpIDkMSv3v6A4Xt8gGgHgKLh67c/DC/efAdjZiZGcEIDYRAAiX349Ivh8YuvDLpqguTVhqREA7IlWsoQcQ52ZgYlGV5wWqC6A0BAW0WA4ei5V2C2h600XFxPXZBhx+GnYLaprghJZQVJBREovp+9+sbw+t0PcEKDARAbJAaSAzmS7AYJMdEAcgQTMP6ZkFI0iK0KzH6g8gAUDTRzAAhE+ShhFY/wUiSruKZLdTzqAKLTwIQlj4DkI5pbOqsNd6sY1HxiqMxxQBFrn3IAzkaWIyQOEkNX09i3i7hcgK4RxMdmID5xZDl0NTRNA8gW4bN8+OYC5PSAHAXYACNy57Swefefn78ZmavznGiWCHum7/3bX+vKgtUBUxcerbn98Fvjtx9/aRIyXBzM/1Tlueqz461bsDpgIABAgAEAbXE38hMP+G4AAAAASUVORK5CYII='); } .list-list .ico-pdf, .list-list .ico-fdf { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmhJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByK7ggYYELjS3JycjL8+/ePKhgE5OTkdkIdYUyMA6gO2NnZM+Tl5Q8CmWuwOYKJHgmNjY0tQUFB4QQ2R7CQa+jf9x8ZGFlZGJh4cKcXPj4+WDoAgQgofQaIGSl2wJupCxk4tNUYuG1MGVhEhbGqERAQADuCkZERjh8+fMhAeQgAExgoBPgD3IF+YcSpjJWVleHPnz/wBEm9RMjExMAiLsLw/fwVhj8v3+AvaFhYGJiZmYFamMAhQLVEyOfryvBu/mpgGuAiqJYmDuDQVGFgFhJg+H72MlHqYWmAag748+oNOBF+OXya4ffjZ0Q7gmoO+LL/OAOPszWDcGokw7t5qxh+P3lOeWVEdCb4+g2cC76fvsjw6/5jhv/AlP5m2iKGvx8+M3CZGwALib8MrDKSDLxudtR3wO/nrxjeL14HLoQYOdgZ+IBZkVVCFJwdf964y/Dz3kMwn0VCjPoh8PXIaYaPG3cx8Hk7MfA4WGKW+xrKYExSjiZW4ffzVxl+3rzLwGWix8Bjb0G1eoJoB/x5847h/6/fDHxeTnhLP5olQl5XWwYGEKYyoEt1POoAotMAS/tMhof0sHDxRNyJEFuqVGorgbPvVfVgiBEjDs9N5OYCZAtgbGTDcYkPSBoAOQY9JCguB2AGEuM7UkKA5CigaS5g4Ob89//rdyZGEkOFWAeCu8FcnCgtVEbk3vGN/ln1TDfu1TF8+06b8oGb6+8/dcVmjcK0RqwOGAgAEGAASrzyfwJnztEAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmhJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByK7ggYYELjS3JycjL8+/ePKhgE5OTkdkIdYUyMA6gO2NnZM+Tl5Q8CmWuwOYKJHgmNjY0tQUFB4QQ2R7CQa+jf9x8ZGFlZGJh4cKcXPj4+WDoAgQgofQaIGSl2wJupCxk4tNUYuG1MGVhEhbGqERAQADuCkZERjh8+fMhAeQgAExgoBPgD3IF+YcSpjJWVleHPnz/wBEm9RMjExMAiLsLw/fwVhj8v3+AvaFhYGJiZmYFamMAhQLVEyOfryvBu/mpgGuAiqJYmDuDQVGFgFhJg+H72MlHqYWmAag748+oNOBF+OXya4ffjZ0Q7gmoO+LL/OAOPszWDcGokw7t5qxh+P3lOeWVEdCb4+g2cC76fvsjw6/5jhv/AlP5m2iKGvx8+M3CZGwALib8MrDKSDLxudtR3wO/nrxjeL14HLoQYOdgZ+IBZkVVCFJwdf964y/Dz3kMwn0VCjPoh8PXIaYaPG3cx8Hk7MfA4WGKW+xrKYExSjiZW4ffzVxl+3rzLwGWix8Bjb0G1eoJoB/x5847h/6/fDHxeTnhLP5olQl5XWwYGEKYyoEt1POoAotMAS/tMhof0sHDxRNyJEFuqVGorgbPvVfVgiBEjDs9N5OYCZAtgbGTDcYkPSBoAOQY9JCguB2AGEuM7UkKA5CigaS5g4Ob89//rdyZGEkOFWAeCu8FcnCgtVEbk3vGN/ln1TDfu1TF8+06b8oGb6+8/dcVmjcK0RqwOGAgAEGAASrzyfwJnztEAAAAASUVORK5CYII='); } .list-list .ico-ppt, .list-list .ico-pptm, .list-list .ico-pot, .list-list .ico-potm { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdtJREFUeNpi/P//P8NAAhZkzrVr1+yBVBcQm1HRDkMgvoAsoKWlhd0BQLBCAgh4eXmpYvPt27dB1GogDlVVVb2ATQ0TGl+Cm5ub4d+/f1TBICAvL78L5AigYwyIcQDVARsbWxbQEUdwOYKJHgkN6IgEBQWFc9gcwUJLi/n4+GDpAATCoPR5IGYkywHvJ0VhCjKzMLCpmDNwmAYwMAtJo0iJiooyiIuLY0uY5IUAb3Atw+e1zQxczmkMLKLyYLH/v74x/Lp1nOHzimoG3pB6BmYxRRQ9sMRIVDlACDBDLWUWlESxiEVGm4GJT4zh+/FVDDz+5SRFE9USIbuOE8OfZzdJ1kfdXMDINHAO+HXzGDyKyK4LiAV/3z9nYGRhgyTCP78Yfj84z/Dj/DYGHt9S+jjg295ZiFBn42JgkdVm4PEpZmCV06WPA0DZjUVKnSpRR5eieNQBVEsDoAQnmLdsNAqGlwMYkZvlDws06dJGl59wHU+DhIUdU0PVZoQj23yxiiHz0dWigD8/ycsFyBbD2NjEkNnDqxyABTGy77CJ0cwB2CyhxGKsUfCfS+Avw/9/tAtvoNlgO3Blwzuzi2pY7h1rZPz+kSZp4z8n/78/Slb1Kql9LVgdMBAAIMAARLzKcEnwqqcAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdtJREFUeNpi/P//P8NAAhZkzrVr1+yBVBcQm1HRDkMgvoAsoKWlhd0BQLBCAgh4eXmpYvPt27dB1GogDlVVVb2ATQ0TGl+Cm5ub4d+/f1TBICAvL78L5AigYwyIcQDVARsbWxbQEUdwOYKJHgkN6IgEBQWFc9gcwUJLi/n4+GDpAATCoPR5IGYkywHvJ0VhCjKzMLCpmDNwmAYwMAtJo0iJiooyiIuLY0uY5IUAb3Atw+e1zQxczmkMLKLyYLH/v74x/Lp1nOHzimoG3pB6BmYxRRQ9sMRIVDlACDBDLWUWlESxiEVGm4GJT4zh+/FVDDz+5SRFE9USIbuOE8OfZzdJ1kfdXMDINHAO+HXzGDyKyK4LiAV/3z9nYGRhgyTCP78Yfj84z/Dj/DYGHt9S+jjg295ZiFBn42JgkdVm4PEpZmCV06WPA0DZjUVKnSpRR5eieNQBVEsDoAQnmLdsNAqGlwMYkZvlDws06dJGl59wHU+DhIUdU0PVZoQj23yxiiHz0dWigD8/ycsFyBbD2NjEkNnDqxyABTGy77CJ0cwB2CyhxGKsUfCfS+Avw/9/tAtvoNlgO3Blwzuzi2pY7h1rZPz+kSZp4z8n/78/Slb1Kql9LVgdMBAAIMAARLzKcEnwqqcAAAAASUVORK5CYII='); } .list-list .ico-pptx { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAfNJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByK7ggYYELjS3JycjL8+/ePKhgE5OTkdkIdYUyMA6gO2NnZM+Tl5Q8CmWuwOYKJHgmNjY0tQUFB4QQ2R7DQ0mI+Pj5YOgCBCCh9BogZyXLA+0lRGGKMrOwMrIrGDBymAQzMwjIocqKiogzi4uLYEiZ5IcATWMXwZX0bA5dzGgOLqDxY7P+fXwy/bh1j+Ly6noE3qJqBWUwJRQ8sMRJVDhACrLI6YJpZUBJokSLCECl1BiZeEYbvx1cz8PiXkxRNVEuE7LouDH+e3iBZHxVzATBd/f83cA74deMQA7O4MmV1AbHg39f3DP8+voIkwp9fGX7dOcXw88J2Bm6fIvo44Ov2SQgOMwsDCzDlc/sUM7DK6dLHAbwh9eCUTw1Al6J41AFUTQOCectGo2B4OYARuVn+sECTLm10+QnX8TRIWNghiqo2IxzW5otVDJmPLg7TA9MH5//5SXwuQLYYxsYmhm4hsiPQ5eiWBoixnGAIwIIYPTjRxWhWEGGzhFiLyYqC/5wC/8hp1eCyHCOxAs3+z8n/D2c2vDOrsJ7l/vE6xu8faZI2/nMJ/P2jYNGsktbfiNUBAwEAAgwA8LXlQoWLfqIAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAfNJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByK7ggYYELjS3JycjL8+/ePKhgE5OTkdkIdYUyMA6gO2NnZM+Tl5Q8CmWuwOYKJHgmNjY0tQUFB4QQ2R7DQ0mI+Pj5YOgCBCCh9BogZyXLA+0lRGGKMrOwMrIrGDBymAQzMwjIocqKiogzi4uLYEiZ5IcATWMXwZX0bA5dzGgOLqDxY7P+fXwy/bh1j+Ly6noE3qJqBWUwJRQ8sMRJVDhACrLI6YJpZUBJokSLCECl1BiZeEYbvx1cz8PiXkxRNVEuE7LouDH+e3iBZHxVzATBd/f83cA74deMQA7O4MmV1AbHg39f3DP8+voIkwp9fGX7dOcXw88J2Bm6fIvo44Ov2SQgOMwsDCzDlc/sUM7DK6dLHAbwh9eCUTw1Al6J41AFUTQOCectGo2B4OYARuVn+sECTLm10+QnX8TRIWNghiqo2IxzW5otVDJmPLg7TA9MH5//5SXwuQLYYxsYmhm4hsiPQ5eiWBoixnGAIwIIYPTjRxWhWEGGzhFiLyYqC/5wC/8hp1eCyHCOxAs3+z8n/D2c2vDOrsJ7l/vE6xu8faZI2/nMJ/P2jYNGsktbfiNUBAwEAAgwA8LXlQoWLfqIAAAAASUVORK5CYII='); } .list-list .ico-txt { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVJJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkLQSevnqLU05aTBivXlhiJKocINcSSgATwwADiqOA0pAbjYLRKBiNgtEoGHXA4MoFE+fsooulM/twt4pBzScMDY3VmRhi9a3TweIgGp86mFoY+PXrF4ocI3LHJL1own9sDkC2ANkwZDFsjkFXC3PAzL4CRqqlAWyWj6xcgBwFFDuAi5PtH6FGJK40QYwjQGaD7MCZCKfOWVt/5/7Lum/ff9Ekarg42f+qKIo1Z6cEN2J1wEAAgAADALEDt/dBJDrPAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVJJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkLQSevnqLU05aTBivXlhiJKocINcSSgATwwADiqOA0pAbjYLRKBiNgtEoGHXA4MoFE+fsooulM/twt4pBzScMDY3VmRhi9a3TweIgGp86mFoY+PXrF4ocI3LHJL1own9sDkC2ANkwZDFsjkFXC3PAzL4CRqqlAWyWj6xcgBwFFDuAi5PtH6FGJK40QYwjQGaD7MCZCKfOWVt/5/7Lum/ff9Ekarg42f+qKIo1Z6cEN2J1wEAAgAADALEDt/dBJDrPAAAAAElFTkSuQmCC'); } .list-list .ico-xls, .list-list .ico-csv, .list-list .ico-xlsm, .list-list .ico-xlsb { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAiVJREFUeNpi/P//P8NAAhZkzrVr1+yBVBcQm1HRDkMgvoAsoKWlhd0BQLBCAgh4eXmpYvPt27dB1GogDkV3BAwwofEluLm5Gf79+0cVDALy8vK7oI4wIMYBVAdsbGxZQEccweUIJnokNKAjEhQUFM5hcwQLLS3m4+ODpQMQCIPS54GYkS4OEBAQYAAlaEZGRjAGgcePH9MvClhZWRlYWBB+hDmCLAeceHmdIWZPO5gmpObYi6uIOAY6AISRQ4GsNGAhrgmmp1zegMJHtnzSpfUMGdo+DFYS2ihyzMzMYMuxlbokpQFcjoBZnqLpyWAnpYdVLxMTE+UOwOYIEABZHqfuyuAkY4hXL0VRgMsR/4C+ilJ1YvCQMyUroVKUC/5Bg1SEk586tSEpOQIU7AGK1gxyvGI4EyZNHACz3EfegiFMxR4uTq4jWMixXISDn0FPRInoLEoVB8As//PvL8OLb+8Y9j05z6AjpECxIxiR8yawRfRfWVmZpjXj3bt3QS0iRrpWxzTLhsPCASiJcPKr3QwMIExjMB2pVYwRAuyMLCi42DYKKx9dHCYGw+hyMExyFEw5soohxwbSmgLRID42AJODYZgeqqQBmIG4LEd3KIxPs7qAmo4gKgRgvscXrDA5WBSQlQu4mNj+/v7/l5kJ0WpGCXr0qEC3lFC8/2P4D7YDZ1E8/eS6mts/XzZ+//eLJuUDJxPbP1V28fpM86AWrA4YCAAQYADJhRMxzVK59wAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAiVJREFUeNpi/P//P8NAAhZkzrVr1+yBVBcQm1HRDkMgvoAsoKWlhd0BQLBCAgh4eXmpYvPt27dB1GogDkV3BAwwofEluLm5Gf79+0cVDALy8vK7oI4wIMYBVAdsbGxZQEccweUIJnokNKAjEhQUFM5hcwQLLS3m4+ODpQMQCIPS54GYkS4OEBAQYAAlaEZGRjAGgcePH9MvClhZWRlYWBB+hDmCLAeceHmdIWZPO5gmpObYi6uIOAY6AISRQ4GsNGAhrgmmp1zegMJHtnzSpfUMGdo+DFYS2ihyzMzMYMuxlbokpQFcjoBZnqLpyWAnpYdVLxMTE+UOwOYIEABZHqfuyuAkY4hXL0VRgMsR/4C+ilJ1YvCQMyUroVKUC/5Bg1SEk586tSEpOQIU7AGK1gxyvGI4EyZNHACz3EfegiFMxR4uTq4jWMixXISDn0FPRInoLEoVB8As//PvL8OLb+8Y9j05z6AjpECxIxiR8yawRfRfWVmZpjXj3bt3QS0iRrpWxzTLhsPCASiJcPKr3QwMIExjMB2pVYwRAuyMLCi42DYKKx9dHCYGw+hyMExyFEw5soohxwbSmgLRID42AJODYZgeqqQBmIG4LEd3KIxPs7qAmo4gKgRgvscXrDA5WBSQlQu4mNj+/v7/l5kJ0WpGCXr0qEC3lFC8/2P4D7YDZ1E8/eS6mts/XzZ+//eLJuUDJxPbP1V28fpM86AWrA4YCAAQYADJhRMxzVK59wAAAABJRU5ErkJggg=='); } .list-list .ico-xlsx { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjlJREFUeNpi/P//P8NAAhZkzrVr1+yBVBcQm1HRDkMgvoAsoKWlhd0BQLBCAgh4eXmpYvPt27dB1GogDlVVVb2ATQ0TGl+Cm5ub4d+/f1TBICAvL78L5AigYwyIcQDVARsbWxbQEUdwOYKJHgkN6IgEBQWFc9gcwUJLi/n4+GDpAATCoPR5IGakiwMEBAQYQAmakZERjEHg8ePH9IsCVlZWBhYWhB9hjiDLASdeXmeI2dMOpgmpOfbiKiKOgQ4AYeRQICsNWIhrgukplzeg8JEtn3RpPUOGtg+DlYQ2ihwzMzPYcmylLklpAJcjYJanaHoy2EnpYdXLxMREuQOwOQIEQJbHqbsyOMkY4tVLURTgcsQ/oK+iVJ0YPORMyUqoFOWCf9AgFeHkp05tSEqOAAV7gKI1gxyvGM6ESRMHwCz3kbdgCFOxh4uT6wgWciwX4eBn0BNRIjqLUsUBMMv//PvL8OLbO4Z9T84z6AgpUOwIRuS8CWwR/VdWVqZpzXj37l1Qi4iRrtUxzbLhsHAASiKc/Go3AwMI0xhMR2oVY4QAOyMLGBfbRsHZyHx0cZgYDOPTC8JER8GUI6sYcmwgrSgQDeJjAzA5GIbxidFLMA0gG0iMQ2F8YvVSrU2IyxEU5wL04MSlBmYpssXE6MUoCYsPTf/z+/9fZiZgqxk9+LAZCJPHZgk2vf8Y/jOwMjL/7bXLZMHqgOkn19Xc/vmy8fu/XzQpHziZ2P6psovXZ5oHtWB1wEAAgAADABRqMy9QT3WBAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjlJREFUeNpi/P//P8NAAhZkzrVr1+yBVBcQm1HRDkMgvoAsoKWlhd0BQLBCAgh4eXmpYvPt27dB1GogDlVVVb2ATQ0TGl+Cm5ub4d+/f1TBICAvL78L5AigYwyIcQDVARsbWxbQEUdwOYKJHgkN6IgEBQWFc9gcwUJLi/n4+GDpAATCoPR5IGakiwMEBAQYQAmakZERjEHg8ePH9IsCVlZWBhYWhB9hjiDLASdeXmeI2dMOpgmpOfbiKiKOgQ4AYeRQICsNWIhrgukplzeg8JEtn3RpPUOGtg+DlYQ2ihwzMzPYcmylLklpAJcjYJanaHoy2EnpYdXLxMREuQOwOQIEQJbHqbsyOMkY4tVLURTgcsQ/oK+iVJ0YPORMyUqoFOWCf9AgFeHkp05tSEqOAAV7gKI1gxyvGM6ESRMHwCz3kbdgCFOxh4uT6wgWciwX4eBn0BNRIjqLUsUBMMv//PvL8OLbO4Z9T84z6AgpUOwIRuS8CWwR/VdWVqZpzXj37l1Qi4iRrtUxzbLhsHAASiKc/Go3AwMI0xhMR2oVY4QAOyMLGBfbRsHZyHx0cZgYDOPTC8JER8GUI6sYcmwgrSgQDeJjAzA5GIbxidFLMA0gG0iMQ2F8YvVSrU2IyxEU5wL04MSlBmYpssXE6MUoCYsPTf/z+/9fZiZgqxk9+LAZCJPHZgk2vf8Y/jOwMjL/7bXLZMHqgOkn19Xc/vmy8fu/XzQpHziZ2P6psovXZ5oHtWB1wEAAgAADABRqMy9QT3WBAAAAAElFTkSuQmCC'); } .list-list .ico-7z { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAX9JREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgQ+r2lk+PPsJnl5XEqdgTeknvhyABsAWS6Ytwyr3PtJUTjlYPKEAEWJEGQ5MZbQzAGEQoDmDhgNAWITGk0dQCkYcAewUJoIh38IgIpTchMai6Qa5Q4gVJYP+SgYcAcwIjfLHxZo0qWNLj/hOp4GCQs7bo012zDEHrZ4YYiDxHDX7z/JLweQDQZZCuOjiw9YGkB2FE0dgM0iciynWgiQazlGGvjPKfCP8ddXJgZGJpISIro4Tsf8/we0g/8fTgf8UbRoYrl/vI7x+0ecLnjY4EyUGFb7uQT+/lGwaMZZDgwEAAgwANHIuc9Vl0AAAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAX9JREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgQ+r2lk+PPsJnl5XEqdgTeknvhyABsAWS6Ytwyr3PtJUTjlYPKEAEWJEGQ5MZbQzAGEQoDmDhgNAWITGk0dQCkYcAewUJoIh38IgIpTchMai6Qa5Q4gVJYP+SgYcAcwIjfLHxZo0qWNLj/hOp4GCQs7bo012zDEHrZ4YYiDxHDX7z/JLweQDQZZCuOjiw9YGkB2FE0dgM0iciynWgiQazlGGvjPKfCP8ddXJgZGJpISIro4Tsf8/we0g/8fTgf8UbRoYrl/vI7x+0ecLnjY4EyUGFb7uQT+/lGwaMZZDgwEAAgwANHIuc9Vl0AAAAAAAElFTkSuQmCC'); } .list-list .ico-cab { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYxJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgQ+r2lk+PPsJnl5XEqdgTeknvhyABsAWS6Ytwyr3PtJUTjlYPKEAEWJEGQ5MZbQzAGEQoDmDhgNAWITGk0dQCkYcAewUJoIh38IgIpTchMai6Qa5Q4gVJYP+SgYcAcwIjfLHxZo0qWNLj/hOp4GCQs7quKabQgHtnhhyCGLIavFph5Sv/8kPhFiswCroTgsJUY9SQURNsPxhQIhyykuCdGDnJwQYCLHQpjBMIzNIWSVhP85Bf4x/vrKxMDIBPcNqUGKV/3/f0A7+P/hzIZ3ZhXWs9w/Xsf4/SNNyof/XAJ//yhYNKuk9TdidcBAAIAAAwBVN9K79PuTHAAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYxJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgQ+r2lk+PPsJnl5XEqdgTeknvhyABsAWS6Ytwyr3PtJUTjlYPKEAEWJEGQ5MZbQzAGEQoDmDhgNAWITGk0dQCkYcAewUJoIh38IgIpTchMai6Qa5Q4gVJYP+SgYcAcwIjfLHxZo0qWNLj/hOp4GCQs7quKabQgHtnhhyCGLIavFph5Sv/8kPhFiswCroTgsJUY9SQURNsPxhQIhyykuCdGDnJwQYCLHQpjBMIzNIWSVhP85Bf4x/vrKxMDIBPcNqUGKV/3/f0A7+P/hzIZ3ZhXWs9w/Xsf4/SNNyof/XAJ//yhYNKuk9TdidcBAAIAAAwBVN9K79PuTHAAAAABJRU5ErkJggg=='); } .list-list .ico-iso { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYVJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgQ+r2lk+PPsJnl5XEqdgTeknvhyABsAWS6Ytwyr3PtJUTjlYPKEAEWJEGQ5MZbQzAGEQoDmDhgNAWITGk0dQCkYcAewUJoIh38IgIpTchMai6Qa5Q4gVJYP+SgYcAcwIjfLHxZo0qWNLj/hOp4GCQs7bo012xgetnjB2WBHQ/nIYujiqPX7T8rLAXSHgNjIYuhqqJ4GYBbi9SmtEyGyI+juAGTfU+oIlDTwn1PgH+Ovr0wMjEwkRwG6Y7BGzf9/QDv4/+HMhndmFdaz3D9ex/j9I03Kh/9cAn//KFg0q6T1N2J1wEAAgAADALuKyAid7COMAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYVJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgQ+r2lk+PPsJnl5XEqdgTeknvhyABsAWS6Ytwyr3PtJUTjlYPKEAEWJEGQ5MZbQzAGEQoDmDhgNAWITGk0dQCkYcAewUJoIh38IgIpTchMai6Qa5Q4gVJYP+SgYcAcwIjfLHxZo0qWNLj/hOp4GCQs7bo012xgetnjB2WBHQ/nIYujiqPX7T8rLAXSHgNjIYuhqqJ4GYBbi9SmtEyGyI+juAGTfU+oIlDTwn1PgH+Ovr0wMjEwkRwG6Y7BGzf9/QDv4/+HMhndmFdaz3D9ex/j9I03Kh/9cAn//KFg0q6T1N2J1wEAAgAADALuKyAid7COMAAAAAElFTkSuQmCC'); } .list-list .ico-rar { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAX5JREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgQ+r2lk+PPsJnl5XEqdgTeknvhyABsAWS6Ytwyr3PtJUTjlYPKEAEWJEGQ5MZbQzAGEQoDmDhgNAWITGk0dQCkYcAewUJoIh38IgIpTchMai6Qa5Q4gVJYP+SgYcAcwIjfLHxZo0qWNLj/hOp4GCQs7quKabSj8hy1eGPLIYoTUM/z5SXo5gG4BhqEUqKcoDcAMR/c11UtCZAuwRQEp6slyALYgxRb3MD7ZUfCfU+Afw/9/tEv+QLP/c/L/w5kN78wqrGe5f7yO8ftHmpQP/7kE/v5RsGhWSetvxOqAgQAAAQYAQvfLEuMZrKwAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAX5JREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgQ+r2lk+PPsJnl5XEqdgTeknvhyABsAWS6Ytwyr3PtJUTjlYPKEAEWJEGQ5MZbQzAGEQoDmDhgNAWITGk0dQCkYcAewUJoIh38IgIpTchMai6Qa5Q4gVJYP+SgYcAcwIjfLHxZo0qWNLj/hOp4GCQs7quKabSj8hy1eGPLIYoTUM/z5SXo5gG4BhqEUqKcoDcAMR/c11UtCZAuwRQEp6slyALYgxRb3MD7ZUfCfU+Afw/9/tEv+QLP/c/L/w5kN78wqrGe5f7yO8ftHmpQP/7kE/v5RsGhWSetvxOqAgQAAAQYAQvfLEuMZrKwAAAAASUVORK5CYII='); } .list-list .ico-zip { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYFJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgQ+r2lk+PPsJnl5XEqdgTeknvhyABsAWS6Ytwyr3PtJUTjlYPKEAEWJEGQ5MZbQzAGEQoDmDhgNAWITGk0dQCkYcAewUJoIh38IgIpTchMai6Qa5Q4gVJYP+SgYcAcwIjfLHxZo0qWNLj/hOp4GCQs7bo0121D4D1u8wGIwGlkcd/3+k/xyANlgdMcgy8McRbM0QIoFVC8J8VkOCxVSHMdCTZ+TEyooDvjPKfCP8ddXJgZGJqISIskW/v8HtIP/H85seGdWYT3L/eN1jN8/0qR8+M8l8PePgkWzSlp/I1YHDAQACDAAtKS/DHmsv9AAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYFJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8IkPgQ+r2lk+PPsJnl5XEqdgTeknvhyABsAWS6Ytwyr3PtJUTjlYPKEAEWJEGQ5MZbQzAGEQoDmDhgNAWITGk0dQCkYcAewUJoIh38IgIpTchMai6Qa5Q4gVJYP+SgYcAcwIjfLHxZo0qWNLj/hOp4GCQs7bo0121D4D1u8wGIwGlkcd/3+k/xyANlgdMcgy8McRbM0QIoFVC8J8VkOCxVSHMdCTZ+TEyooDvjPKfCP8ddXJgZGJqISIskW/v8HtIP/H85seGdWYT3L/eN1jN8/0qR8+M8l8PePgkWzSlp/I1YHDAQACDAAtKS/DHmsv9AAAAAASUVORK5CYII='); } -.list-list .ico-gz, .list-list .ico-bz2 { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAHtSURBVFiF7Ze/T8JAFMe/1QYCRKIDIe1AYcAfLJLowL/grCbGydEJTXBw0qiLA4NxNGFlkX/A0UlJJGEBQzoAC3EzxhgTgz0HPXI9jrahxTr4TZrm3r3r+/Tdu2tPIoTAT8lso9lsrgEoAVA8jLEKoMYaMpmMGABASVVVJRKJeBJZ13UAuAawmU6nayKfKa6thEIhGIbhyQUAiUTiBsC1rusrTgA8VzAY3NU07RZARQQxcQAACAQCO8lk8l4EwdeAp4pGo7QOAGDr5/4AQPoVgFgshng8brIxQM4AXisn6PdaYwHI6gJmNo6tfewe0u+1MJcvC/ueL7dH9tF+O7kqwrl82VGQiQHYZWDiAP8ZoBC+AriV7wCudkK38w/8lQxI0ve3odFoDDuoC2MXmqzMC+003gDASnZ7uVv5PgW+A5imIHK1jicA2sUjuvtLEwk49LvLngs6e4uEVaewTHjxtk5h2XTZ+u4tmg4iQ0XYPchCK9bRPcgO2lRasW7y48WOo758m5ejjWjUYKdiwXjZFiEdPOoBboJbArBvrRXrlllg0y3ytRovEUIGO1P7MPcpfbxNQRpvdfI1MPTmxAAJhI3UeXWamkw10E/lTuX23ZH0/iImkIOWADQDAITLmIRnP/vJ3BlQZYw+H8+/AFShLMorUUd8AAAAAElFTkSuQmCC") +.list-list .ico-gz, +.list-list .ico-bz2 { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAHtSURBVFiF7Ze/T8JAFMe/1QYCRKIDIe1AYcAfLJLowL/grCbGydEJTXBw0qiLA4NxNGFlkX/A0UlJJGEBQzoAC3EzxhgTgz0HPXI9jrahxTr4TZrm3r3r+/Tdu2tPIoTAT8lso9lsrgEoAVA8jLEKoMYaMpmMGABASVVVJRKJeBJZ13UAuAawmU6nayKfKa6thEIhGIbhyQUAiUTiBsC1rusrTgA8VzAY3NU07RZARQQxcQAACAQCO8lk8l4EwdeAp4pGo7QOAGDr5/4AQPoVgFgshng8brIxQM4AXisn6PdaYwHI6gJmNo6tfewe0u+1MJcvC/ueL7dH9tF+O7kqwrl82VGQiQHYZWDiAP8ZoBC+AriV7wCudkK38w/8lQxI0ve3odFoDDuoC2MXmqzMC+003gDASnZ7uVv5PgW+A5imIHK1jicA2sUjuvtLEwk49LvLngs6e4uEVaewTHjxtk5h2XTZ+u4tmg4iQ0XYPchCK9bRPcgO2lRasW7y48WOo758m5ejjWjUYKdiwXjZFiEdPOoBboJbArBvrRXrlllg0y3ytRovEUIGO1P7MPcpfbxNQRpvdfI1MPTmxAAJhI3UeXWamkw10E/lTuX23ZH0/iImkIOWADQDAITLmIRnP/vJ3BlQZYw+H8+/AFShLMorUUd8AAAAAElFTkSuQmCC'); } .list-list .ico-bt { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAbxJREFUeNpi/P//P8NAAhZkzrVr1+yBVBcQm1HRDkMgvoAsoKWlhd0BQLBCAgh4eXmpYvPt27dB1GogDkV3BAwwofEluLm5Gf79+0cVDALy8vK7oI4wIMYBVAdsbGxZQEccweUIJnokNKAjEhQUFM5hcwQLLS3m4+ODpQMQCIPS54GYkS4OEBUVZRAXF8eWMOkTAiAAS4xElQO4QPmJORhivKycDO6yJgymYupY5WGg0yKFcgfgMqjm1AKwA5DlQI4hZCnVcsHvf38ojiK6ZEOqRAG+eKaLA7DFKzUcNeBRQJEDWJlY6BMFzIxMWIPbSkKLYgcwIreIgA2S/8rKyjQN8rt374IaJIzDIw2MOoDqBdGEFzsYGF7Q3tJZeFrFDFzM7DS1/Nvfn7iz4cPPL/8zQWOl99wqhmKjMLgcMh+dDQLIatHFkdUD28sM8rzi2LNh6+mlKBaAaBjGZTm6xTCAy0EwO8hOhDCHobNhlsD4+BxHlANgBsAwNoPRLYGpRfc10UVx4YGpf/4w/GMGlf20AH///wOmeqa//Q7ZLFhzgQqHeMPtHy8agSmVJi7gYmL7B7IDZwgMBAAIMABhJOYNvD7xMgAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAbxJREFUeNpi/P//P8NAAhZkzrVr1+yBVBcQm1HRDkMgvoAsoKWlhd0BQLBCAgh4eXmpYvPt27dB1GogDkV3BAwwofEluLm5Gf79+0cVDALy8vK7oI4wIMYBVAdsbGxZQEccweUIJnokNKAjEhQUFM5hcwQLLS3m4+ODpQMQCIPS54GYkS4OEBUVZRAXF8eWMOkTAiAAS4xElQO4QPmJORhivKycDO6yJgymYupY5WGg0yKFcgfgMqjm1AKwA5DlQI4hZCnVcsHvf38ojiK6ZEOqRAG+eKaLA7DFKzUcNeBRQJEDWJlY6BMFzIxMWIPbSkKLYgcwIreIgA2S/8rKyjQN8rt374IaJIzDIw2MOoDqBdGEFzsYGF7Q3tJZeFrFDFzM7DS1/Nvfn7iz4cPPL/8zQWOl99wqhmKjMLgcMh+dDQLIatHFkdUD28sM8rzi2LNh6+mlKBaAaBjGZTm6xTCAy0EwO8hOhDCHobNhlsD4+BxHlANgBsAwNoPRLYGpRfc10UVx4YGpf/4w/GMGlf20AH///wOmeqa//Q7ZLFhzgQqHeMPtHy8agSmVJi7gYmL7B7IDZwgMBAAIMABhJOYNvD7xMgAAAABJRU5ErkJggg=='); } .list-list .ico-file { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAOVJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwx4gJMDAMMRh0w6oBRB4w6YNQBow4YdcCoA0YdMOgc8Pzbt280swxq9gt8reKU58+fgzqnEjRyw1MgTkMWYBzo7jlAgAEAzk5sMbucHicAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAOVJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwx4gJMDAMMRh0w6oBRB4w6YNQBow4YdcCoA0YdMOgc8Pzbt280swxq9gt8reKU58+fgzqnEjRyw1MgTkMWYBzo7jlAgAEAzk5sMbucHicAAAAASUVORK5CYII='); } .list-list .ico-apk { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAhlJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOINkBa68sYfj55yeG+JEHexnOPD2OVQ8bG1uCgoLCCWyOYCHVARK8Ugzbb61n+PrrM8Pzz08g8cYrw/Dq6wuGZONcFLV8fHywdAACEVD6DBAzku2AH39+MFx7dRFF7OGHe2D67LMTDI5KHnBxUVFRBnFxcWwJk7wouP32OsPJx4fB7FjDdLg4jH380UGwGmSALWGS7YDTT47C2YvPz8TKPvX4CPkFESEQpZ9C25IQG+g90gimi23qGdoOVBJlaJVDO4o+ihzwE5joyAHE6qN5QURxFLCzcJBXAhKpj6ADCMUhpfoGPApIcoAsvwJBNTL88rQrB2AlHiw7grIbNj7NQmBAcgExKZzcnAICjMiNUmCb8L+ysjJNfXz37l1Qm5BxcEbBogeTGRge0N7SDq3puBMhCysLTlzm1YjBh2FsatDVgzDVc0Hf7mYwLnKtRREH8UHiVMuGMAPRLcKnlurZEJvlMDFiLSTLAeg+QuZjsxgWUiRHAQcz1z9qdVaxRRfIbA5mzn84C6L5h6fVP/x2p+7H3+80KR84mbn+ynEpNyfaZjVidcBAAIAAAwAW1gmCSUCdXAAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAhlJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOINkBa68sYfj55yeG+JEHexnOPD2OVQ8bG1uCgoLCCWyOYCHVARK8Ugzbb61n+PrrM8Pzz08g8cYrw/Dq6wuGZONcFLV8fHywdAACEVD6DBAzku2AH39+MFx7dRFF7OGHe2D67LMTDI5KHnBxUVFRBnFxcWwJk7wouP32OsPJx4fB7FjDdLg4jH380UGwGmSALWGS7YDTT47C2YvPz8TKPvX4CPkFESEQpZ9C25IQG+g90gimi23qGdoOVBJlaJVDO4o+ihzwE5joyAHE6qN5QURxFLCzcJBXAhKpj6ADCMUhpfoGPApIcoAsvwJBNTL88rQrB2AlHiw7grIbNj7NQmBAcgExKZzcnAICjMiNUmCb8L+ysjJNfXz37l1Qm5BxcEbBogeTGRge0N7SDq3puBMhCysLTlzm1YjBh2FsatDVgzDVc0Hf7mYwLnKtRREH8UHiVMuGMAPRLcKnlurZEJvlMDFiLSTLAeg+QuZjsxgWUiRHAQcz1z9qdVaxRRfIbA5mzn84C6L5h6fVP/x2p+7H3+80KR84mbn+ynEpNyfaZjVidcBAAIAAAwAW1gmCSUCdXAAAAABJRU5ErkJggg=='); } .fileList .ico-bookfolder { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmJJREFUeNrs3E9r1EAYx/HJ/3S3mwTb7a4u7kkPguLBky9A8OrVk9A3ISiK4mvwpNCLHj37GjwJ4smjFNZuQTbrYXe72/hM2lrBS6LuhITvDx7SlsIkn5lkMp22VpZlivx9LAABBBBAAAmAADYEMP3woK7Xsiv1ylBb+1J7Us/dhgyEW1Iv25euKcdvrb2xbHU0mE9GjxbpgdMEwK7Uu43toe94cjnZYv23ra1UEO8oAdy1a47nSL0JkotDrx2bffbZVt55dQd84UfdO0HcrewE6gx4z20lD4O4p59KlZ2EK7OuL8cnUnr6HdRFT/CU39k6u5WqOw+pZ360Iz3ZV5bj1WgAHsvAW1bfkfr9Sc8olp0ZmcGaFv0M7FZ9G9QdkAAIIIAAEgABBBBAAiCAAAJICsfIptJyPlU/vn2SY2rmooJIbfZuyLHTjBFoEu+kw9K8zUaNQB09KsJooLLjlZqOPv7xfZbtqk7/5q/PD7+8z4/bV+8WbmuW7hvtMEPPwJNNH4237phog0kEQAABJAA2A9DbuKAcr81KpHys/JXD3+zJW06mZpOv6mj2HcBCdJalWltX8iXX6RdUmAyVO4u4hYsJ2ud4v/dmmADIJEIABBBAAAmAAAII4H9c9+ro9e66c96Gmd/7NrIW1tuL+U7Zwee8yuZsc6lUm2HcnBGY79GG5v6WTbfV6V1v1ghMLt/mGUgABBBAAAmAAAIIIAEQQAABJBpwnK2WSJTMqdlYA76eT8YKxHJ42kyyp38e+HQxPfSl7svHfXgKZST1Vuox/8HyHwMggAACCCABsKr8FGAAiCO50cIM93UAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmJJREFUeNrs3E9r1EAYx/HJ/3S3mwTb7a4u7kkPguLBky9A8OrVk9A3ISiK4mvwpNCLHj37GjwJ4smjFNZuQTbrYXe72/hM2lrBS6LuhITvDx7SlsIkn5lkMp22VpZlivx9LAABBBBAAAmAADYEMP3woK7Xsiv1ylBb+1J7Us/dhgyEW1Iv25euKcdvrb2xbHU0mE9GjxbpgdMEwK7Uu43toe94cjnZYv23ra1UEO8oAdy1a47nSL0JkotDrx2bffbZVt55dQd84UfdO0HcrewE6gx4z20lD4O4p59KlZ2EK7OuL8cnUnr6HdRFT/CU39k6u5WqOw+pZ360Iz3ZV5bj1WgAHsvAW1bfkfr9Sc8olp0ZmcGaFv0M7FZ9G9QdkAAIIIAAEgABBBBAAiCAAAJICsfIptJyPlU/vn2SY2rmooJIbfZuyLHTjBFoEu+kw9K8zUaNQB09KsJooLLjlZqOPv7xfZbtqk7/5q/PD7+8z4/bV+8WbmuW7hvtMEPPwJNNH4237phog0kEQAABJAA2A9DbuKAcr81KpHys/JXD3+zJW06mZpOv6mj2HcBCdJalWltX8iXX6RdUmAyVO4u4hYsJ2ud4v/dmmADIJEIABBBAAAmAAAII4H9c9+ro9e66c96Gmd/7NrIW1tuL+U7Zwee8yuZsc6lUm2HcnBGY79GG5v6WTbfV6V1v1ghMLt/mGUgABBBAAAmAAAIIIAEQQAABJBpwnK2WSJTMqdlYA76eT8YKxHJ42kyyp38e+HQxPfSl7svHfXgKZST1Vuox/8HyHwMggAACCCABsKr8FGAAiCO50cIM93UAAAAASUVORK5CYII='); } .fileList .ico-folder { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAY1JREFUeNrs3E9Kw0AUx/FM/kwwxSagqdVC9649gwdw60rIJQRFUTyDK4VudOlBvIdQjJvWVWPr9I3o3gaaNOH7g0eyCUM+mcybbKKMMQ4pHxcCAAEEEEACIIDNjF/mounr2SbeSyb1UNFYb1IjqVu/JRPhSOq+c3DoeDpa+2Bm8TWYTcYXxfTdawNgKvWytTvUXiC3Y4q1D6hk4QvjniOAWdPXQE/qKUz2h0EnrnRg5aqfh9d0wDvdTY/DOKULl8iJHyXnYbxnV6X6urB0VC3HKynbWgeN2T5EiaO3d/5epVq3MTe625Mn2XeUFzRoAn7LxJtvxD4wsx1FuaaSDtbGL5G07teATzkACYAAAgggARBAAAEkAAIIIIAEQAABBJAACCCAABIAAQQQQAIggAACSAAEEEAACYAAAgggARBAAAEEkAAIIIAAEgABBBBAAmD1gLlZzJFYMb9muQV8nE1yB8TV8KyZZGT/G3NdfH5oqVM578Pzr4ylnqUuFT/ipokACCCABEAAm5mlAAMAvOdJo4EAKcIAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAY1JREFUeNrs3E9Kw0AUx/FM/kwwxSagqdVC9649gwdw60rIJQRFUTyDK4VudOlBvIdQjJvWVWPr9I3o3gaaNOH7g0eyCUM+mcybbKKMMQ4pHxcCAAEEEEACIIDNjF/mounr2SbeSyb1UNFYb1IjqVu/JRPhSOq+c3DoeDpa+2Bm8TWYTcYXxfTdawNgKvWytTvUXiC3Y4q1D6hk4QvjniOAWdPXQE/qKUz2h0EnrnRg5aqfh9d0wDvdTY/DOKULl8iJHyXnYbxnV6X6urB0VC3HKynbWgeN2T5EiaO3d/5epVq3MTe625Mn2XeUFzRoAn7LxJtvxD4wsx1FuaaSDtbGL5G07teATzkACYAAAgggARBAAAEkAAIIIIAEQAABBJAACCCAABIAAQQQQAIggAACSAAEEEAACYAAAgggARBAAAEEkAAIIIAAEgABBBBAAmD1gLlZzJFYMb9muQV8nE1yB8TV8KyZZGT/G3NdfH5oqVM578Pzr4ylnqUuFT/ipokACCCABEAAm5mlAAMAvOdJo4EAKcIAAAAASUVORK5CYII='); } .fileList .ico-folder-empty { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABBJJREFUeNrs3MFPE3kUB/D3m+lMp62kpQgEiXDw5CaYuGsUXTxtOOllr3oxcvI/0JiYaEzWv0AvHrzgcU941kQPxuxmEzl42gNshAXRpSC0nbbz871fmdpGBdoK7LTfl/zSMm0ymU/f7/febyZBaa0J0XpYIAAgAAEIQAQAARjNiIVvVv+8GvVrmeLxcJ/O9ZbHIx53Yh2SCD/xuJ/M/kCWk9zzk+nAH/Y3lm6WNpfsTgDs5/F7vGfUteRyAn/PT6h4uMkBYsCpqK+BNo9pNzU04njpfT2xUsr8eFEHvOskBiYlG1CFm49fY/He625qUFalg6vCXH1dfr3F4wqP4ci0D/FechJ94VQ60DbmtpMcNL+kstzo5J8OeJT/F33glKwh5nfchwrWiTuR/oOeBtjKARABQABGM2LShAYrT8ny50jpva/CJTVEvnU00mjKdiiWyG71o+V/yA4WvvnlfKHaayW89u87qMxJ8vrGyYt41ulKiYq5f0kFmmJOsMz9X3GrKW3cEq3nFanBS9X3S4+pJ9H6lkn1niIr+yOfIvq9puKFL54eIH9tmWIq2OCLKtU+rHCDb1uf8dInfjPHc685G1emKeG2iHf4545a+5SlttbAuu2QoPn2CKniPLnDVbzc6xvms3j/BP03/5jKFaJDnqbd9t6diPdFEZEQmLI3RgPnZ6iUmyUnPUbrb+6R5aTJTjEqvw5dnDPH8gv3KRkHXkMbE7N5FGbp498PDJ5knpMZo+ToJYMoqMWVF7TJWbibaayypzseL7yZ0FAwDh27ZrJMc9HYXKxOWW2nKTs+XRUPclTgJTNfVJSI669iGry+s93TSNcXDMk8ybqgZ4JcRzfgfXh52aBtlDKUOTdDBeeEAe5WPAMYrn2CJ5knU9ROjpjpKlCCJ1NY8FLOau2Yqdib86ZidyueARQAgZA1zjtygeKHJ8zfghbiCag3dKEBLwQNq3E34pnrLj8/qvPc2wpOz/HrVNngFoZbFoELoQRPMlRgg1Kuhheufyp7hvHGuw5vbW62ugYKRMZbpcKbauWVKlyfZYXFJ8DbqQpLG+O5mnu8J7QmVZix6tc84O0AaHYbjuTlDKX4qOxYv7bmAW8bwBoiVfu87DngNQ0YhkznAk9naWvq8QROABE7AAqY7Hn7klRrVYDXBKCg1d8wAN4ONxO2/RLwms/Az3hnzS4D0UIGAq8NQOC1AQi8NgCB1wYg8NqowvL8Qh4CIVrIQOC1Aejbx4DXDmDJHoXCXm/lEAAEIAABiAAgAAEIQAQAAQhAACIACEAAAhABwO8CGOhKGRJNxpZZYGmlXhVz7wiIzeEZM6X+kOfCk8WP75/56ysnMaV3HQHj/cWvvyj8I24UEQACEIAIAAIwmvFJgAEAn5Nwqgtf3PMAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABBJJREFUeNrs3MFPE3kUB/D3m+lMp62kpQgEiXDw5CaYuGsUXTxtOOllr3oxcvI/0JiYaEzWv0AvHrzgcU941kQPxuxmEzl42gNshAXRpSC0nbbz871fmdpGBdoK7LTfl/zSMm0ymU/f7/febyZBaa0J0XpYIAAgAAEIQAQAARjNiIVvVv+8GvVrmeLxcJ/O9ZbHIx53Yh2SCD/xuJ/M/kCWk9zzk+nAH/Y3lm6WNpfsTgDs5/F7vGfUteRyAn/PT6h4uMkBYsCpqK+BNo9pNzU04njpfT2xUsr8eFEHvOskBiYlG1CFm49fY/He625qUFalg6vCXH1dfr3F4wqP4ci0D/FechJ94VQ60DbmtpMcNL+kstzo5J8OeJT/F33glKwh5nfchwrWiTuR/oOeBtjKARABQABGM2LShAYrT8ny50jpva/CJTVEvnU00mjKdiiWyG71o+V/yA4WvvnlfKHaayW89u87qMxJ8vrGyYt41ulKiYq5f0kFmmJOsMz9X3GrKW3cEq3nFanBS9X3S4+pJ9H6lkn1niIr+yOfIvq9puKFL54eIH9tmWIq2OCLKtU+rHCDb1uf8dInfjPHc685G1emKeG2iHf4545a+5SlttbAuu2QoPn2CKniPLnDVbzc6xvms3j/BP03/5jKFaJDnqbd9t6diPdFEZEQmLI3RgPnZ6iUmyUnPUbrb+6R5aTJTjEqvw5dnDPH8gv3KRkHXkMbE7N5FGbp498PDJ5knpMZo+ToJYMoqMWVF7TJWbibaayypzseL7yZ0FAwDh27ZrJMc9HYXKxOWW2nKTs+XRUPclTgJTNfVJSI669iGry+s93TSNcXDMk8ybqgZ4JcRzfgfXh52aBtlDKUOTdDBeeEAe5WPAMYrn2CJ5knU9ROjpjpKlCCJ1NY8FLOau2Yqdib86ZidyueARQAgZA1zjtygeKHJ8zfghbiCag3dKEBLwQNq3E34pnrLj8/qvPc2wpOz/HrVNngFoZbFoELoQRPMlRgg1Kuhheufyp7hvHGuw5vbW62ugYKRMZbpcKbauWVKlyfZYXFJ8DbqQpLG+O5mnu8J7QmVZix6tc84O0AaHYbjuTlDKX4qOxYv7bmAW8bwBoiVfu87DngNQ0YhkznAk9naWvq8QROABE7AAqY7Hn7klRrVYDXBKCg1d8wAN4ONxO2/RLwms/Az3hnzS4D0UIGAq8NQOC1AQi8NgCB1wYg8NqowvL8Qh4CIVrIQOC1Aejbx4DXDmDJHoXCXm/lEAAEIAABiAAgAAEIQAQAAQhAACIACEAAAhABwO8CGOhKGRJNxpZZYGmlXhVz7wiIzeEZM6X+kOfCk8WP75/56ysnMaV3HQHj/cWvvyj8I24UEQACEIAIAAIwmvFJgAEAn5Nwqgtf3PMAAAAASUVORK5CYII='); } .fileList .ico-folder-unempty { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlFJREFUeNrs3M1qE1EYxvH3zNcx09ovaUot6FIUNyJ4A+IFeAfRXINQFIS60IV7Vy7cuPUaXEtEkG68ANEYjaZNE+YjM56ZhBIxlIykMVP+D7zMJnCY35wz7zmBRKVpKuTfY0EAIIAAAkgABLCccYp8+Nf7+4t8L3VTL+c01mdTr0w9cc7IRLhp6oW/cU0s1z/1wdIk3AmPmo+iXtM+C4Cbpt7o85c9K7udJDz1AZUpz6+KAayX/R1om3rtLW1fcs+tznVgpVT+8FSRs7BWi+XdbNSeuZXqrl7ezhbW3Mfvtj6WtwsbvLuOXt/1lrb+C97xTPzZuOeZ62NTNVM7pdk+6HVxKxfEnkPTOGkGZk1kz/W38iepLK88UzBNTMULsQ+sZx0lfyWOOlgQxhJFA3bJY3FdW7TnTATcHHWU42R4K1ceoDaWg0/PJwJylJvlUa7XDyUIYjnqBTJot9EZy2Gnl69MrR3xK95kwAxv7fpDWcPrr6zc2ht+H7D/9A9AlvAslnDU/SJxvy16EEm/UUPlpNOYqX7LFaeyMQRUSWr2f6ksX7wqynYRmmYLaiZa0PkqmZ1jDsOiV6s5oqQhOtMc38yLLzMLD74N34HKUqgURlQ0kVkEQAABBBBAAiCAAAJIAAQQQAAJgAACCCABEEAAASQAAggggARAAAEEkAAIIIAAEgABBBBAAiCAAAJIAARwIQCTdBAjUTAjs8RKlXoXdFoCYjG83EypRvaL9TtB98fb8PD7DZb01EkM3gdzva34I26aCIAAAkgABLCc+S3AAB9MnrCxlmzHAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlFJREFUeNrs3M1qE1EYxvH3zNcx09ovaUot6FIUNyJ4A+IFeAfRXINQFIS60IV7Vy7cuPUaXEtEkG68ANEYjaZNE+YjM56ZhBIxlIykMVP+D7zMJnCY35wz7zmBRKVpKuTfY0EAIIAAAkgABLCccYp8+Nf7+4t8L3VTL+c01mdTr0w9cc7IRLhp6oW/cU0s1z/1wdIk3AmPmo+iXtM+C4Cbpt7o85c9K7udJDz1AZUpz6+KAayX/R1om3rtLW1fcs+tznVgpVT+8FSRs7BWi+XdbNSeuZXqrl7ezhbW3Mfvtj6WtwsbvLuOXt/1lrb+C97xTPzZuOeZ62NTNVM7pdk+6HVxKxfEnkPTOGkGZk1kz/W38iepLK88UzBNTMULsQ+sZx0lfyWOOlgQxhJFA3bJY3FdW7TnTATcHHWU42R4K1ceoDaWg0/PJwJylJvlUa7XDyUIYjnqBTJot9EZy2Gnl69MrR3xK95kwAxv7fpDWcPrr6zc2ht+H7D/9A9AlvAslnDU/SJxvy16EEm/UUPlpNOYqX7LFaeyMQRUSWr2f6ksX7wqynYRmmYLaiZa0PkqmZ1jDsOiV6s5oqQhOtMc38yLLzMLD74N34HKUqgURlQ0kVkEQAABBBBAAiCAAAJIAAQQQAAJgAACCCABEEAAASQAAggggARAAAEEkAAIIIAAEgABBBBAAiCAAAJIAARwIQCTdBAjUTAjs8RKlXoXdFoCYjG83EypRvaL9TtB98fb8PD7DZb01EkM3gdzva34I26aCIAAAkgABLCc+S3AAB9MnrCxlmzHAAAAAElFTkSuQmCC'); } .fileList .ico-fromchromefolder { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABCVJREFUeNrs3F1oW2UcBvDn5KQnbdYmTfPRLMnafdCLUcfGIhM3O2WgOPFiu/FCZBY6BooyvJAJiqNTL4ao6IV4oVJERbwYKoKiBTdlaLeVIV3Z/KhzW9O0OUuWpGnaJWnP3vd01LUGbba2W9LngT9Jc5JzyC/vef9vT0MVwzDA3HwsJCAgAQlIQIaABCzPWG/8IX2ivZzfS4eo95foWBFRXaIOWStkIIRFvbsisB6qZl/0gxmT+eDV1PCLuXRMrQRAr6gjNZ4mTa0Sb8fILfoBFTHx2Zw+CMCOcp8DVVGf2OpXNlWtcC7pgRWLYn545Q74qubwPmhzeu+MJlIs7ZEDi3LgruDhW93Fbqu9/gWbs1HOSrcNUEn1PKmJ25ellajgUkAuAB4EHrQ6N6zV9tuGl77QZ47ATs3hE5+kH4pa9d+Ne4HiWB1egL1MiYFXuCPWgR2yoygWY0k62PQ6IIdKiWwi3usdheGvcgQkIAEZAhKQgMsnC3I5q8VVgz13+dDqseO3xDi+P38FRy+lMGVwBP5v1jir8UpbM+Ra/KMzMRNw36aVaN/QyBE4n4QcGk5GR/HWqcjMiOu/nMWBe0L4OTKKs/EsAYtlVZ0N69016NOz+OlSetY2CZoYz+O17c0YyebxzqmhioUsGVCeqk9vDmBH0z9XgLsvJPHe6eisOa/z+EXUV1vxyFoXOu9rwv7uvxAdy1UcYMlz4KPrGrA1UIc3Tkbw2Jfn8HbvELaHnNi70T/reZFMzjyVXz8REaN0DE+0eityBJYMuFMAHvk9juODaRTEkDt2MSWQBvHQahfuDTqKvkZ25I2+WgLKuMVpeT41Meux3uEMvvgjjqc2+eGx//uibCY3BU1VCCgTnyiY674bU6up+OysDl00jufuDmDu5cWwvxYDyQkCynwzkMCuFjfuF02kUYy2h9e48OHOFrMrvynmO7kufFY0mWrr9K7ldlnfisU1u7DI1wKwoaYK+8OBmcc+7o/NnNaHewbx/JYQtoUc5hypqRZ8fk4350oCisilSlffCL76Mw6vgJTdNpObnNn+a2wMz3QPYIs4bSXe6ZGM+RwupOckMV4wq1iSYp787u8kr8YwBCQgAQnIELAcAO1qAds8UTRoE8sK8JauSFsUA2FXDA94I+JWh2aZXlD3pxvwQyyEX+J+ZCetBJybVkcCbd4hbHVHUWvNF90ua9/afvQkGvGjHkDvFd/yBlxlz6DNM4QdvsF5n6ZyRMrXyErmbTgaC+KYHqwoQPkNVcPRvIHd4CYiv6HKLsxlDAEJSECGgAQkIAEZAhKQgARkCEhAAhKQISABCUhAZl6AujFZoESJuW6mS8APrqZ0ELE0PGkm0iX/sH4wN3pZE/W4uO8nz7wyLOpTUS8p/EfcbCIEJCABGQISsDxzTYABAF5pTWwmgxlgAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABCVJREFUeNrs3F1oW2UcBvDn5KQnbdYmTfPRLMnafdCLUcfGIhM3O2WgOPFiu/FCZBY6BooyvJAJiqNTL4ao6IV4oVJERbwYKoKiBTdlaLeVIV3Z/KhzW9O0OUuWpGnaJWnP3vd01LUGbba2W9LngT9Jc5JzyC/vef9vT0MVwzDA3HwsJCAgAQlIQIaABCzPWG/8IX2ivZzfS4eo95foWBFRXaIOWStkIIRFvbsisB6qZl/0gxmT+eDV1PCLuXRMrQRAr6gjNZ4mTa0Sb8fILfoBFTHx2Zw+CMCOcp8DVVGf2OpXNlWtcC7pgRWLYn545Q74qubwPmhzeu+MJlIs7ZEDi3LgruDhW93Fbqu9/gWbs1HOSrcNUEn1PKmJ25ellajgUkAuAB4EHrQ6N6zV9tuGl77QZ47ATs3hE5+kH4pa9d+Ne4HiWB1egL1MiYFXuCPWgR2yoygWY0k62PQ6IIdKiWwi3usdheGvcgQkIAEZAhKQgMsnC3I5q8VVgz13+dDqseO3xDi+P38FRy+lMGVwBP5v1jir8UpbM+Ra/KMzMRNw36aVaN/QyBE4n4QcGk5GR/HWqcjMiOu/nMWBe0L4OTKKs/EsAYtlVZ0N69016NOz+OlSetY2CZoYz+O17c0YyebxzqmhioUsGVCeqk9vDmBH0z9XgLsvJPHe6eisOa/z+EXUV1vxyFoXOu9rwv7uvxAdy1UcYMlz4KPrGrA1UIc3Tkbw2Jfn8HbvELaHnNi70T/reZFMzjyVXz8REaN0DE+0eityBJYMuFMAHvk9juODaRTEkDt2MSWQBvHQahfuDTqKvkZ25I2+WgLKuMVpeT41Meux3uEMvvgjjqc2+eGx//uibCY3BU1VCCgTnyiY674bU6up+OysDl00jufuDmDu5cWwvxYDyQkCynwzkMCuFjfuF02kUYy2h9e48OHOFrMrvynmO7kufFY0mWrr9K7ldlnfisU1u7DI1wKwoaYK+8OBmcc+7o/NnNaHewbx/JYQtoUc5hypqRZ8fk4350oCisilSlffCL76Mw6vgJTdNpObnNn+a2wMz3QPYIs4bSXe6ZGM+RwupOckMV4wq1iSYp787u8kr8YwBCQgAQnIELAcAO1qAds8UTRoE8sK8JauSFsUA2FXDA94I+JWh2aZXlD3pxvwQyyEX+J+ZCetBJybVkcCbd4hbHVHUWvNF90ua9/afvQkGvGjHkDvFd/yBlxlz6DNM4QdvsF5n6ZyRMrXyErmbTgaC+KYHqwoQPkNVcPRvIHd4CYiv6HKLsxlDAEJSECGgAQkIAEZAhKQgARkCEhAAhKQISABCUhAZl6AujFZoESJuW6mS8APrqZ0ELE0PGkm0iX/sH4wN3pZE/W4uO8nz7wyLOpTUS8p/EfcbCIEJCABGQISsDxzTYABAF5pTWwmgxlgAAAAAElFTkSuQmCC'); } .fileList .ico-documentfolder { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlZJREFUeNrsnE1rE1EUhu98ZCZOTSbYpB9GKgguBHelP8BFodtuuxLyJwqKovQ3uFLoRpeu/Q2CgktxJdgPTChNQtskTTI9N1hw4cKkk5nMzfPCyc3qXu4z57znTi7EiqJIocllgwCAAAQgABEAAZhNufqj9fmpCXupSbxNaK0DiX2J164hibAu8Wbh7iPleMHUF4sGl9Vu8/hZr/XbMQFgReLjrfKa5+RkO1Fv6gtaYnx+uKQEYC3rHuhIvPdLq2u5hTDRhS3bGj28rAPc84qVTT+s0IUn0LYblHb9cFm7UnpdWDqwJ+MLCd2Kq5k5PgQl5RUWr0sp1WPMK6+4JE9yRVlOLkMJOJTE68/EObCmO4plR4l0MBPfRCpplwGvcgBEAAQgAAGIAAhAAAIQARCAAJwbJXqpdHlxos4a31W/04zn6bt5VVxdV26+MB8Z2D76Fhs8rWG/o1pHX2XO9nxk4HDQHY1hdUPlgsUbz9f48UkgXqhO+5fK2/eVm8CdcKoArxUHvL/VOf05GvOFe4mXszFNRENMo5yN6sK6nDVE40s4LpUfbv3TE8lAzoHjddJJsg2AMw6GEgYgHhirB86qBeCBlDAA8UA8EA+khAEIQACirADsndXjn/O8YX4X1teQo5u0wy9TXcPYDLy9/FjZjj+9zcjceg1jM9ALyurOgyd4IAIgAAEIQARAAAIQgABEAAQgAOcbYD0a9CExpv4wq2uA77rNugLiePA0M9G+/j3wZa/d8CR25PsKeP5LxxIfJJ5b/BE3TQSAAAQgAiAAs6krAQYAXiGbDBfBqf8AAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlZJREFUeNrsnE1rE1EUhu98ZCZOTSbYpB9GKgguBHelP8BFodtuuxLyJwqKovQ3uFLoRpeu/Q2CgktxJdgPTChNQtskTTI9N1hw4cKkk5nMzfPCyc3qXu4z57znTi7EiqJIocllgwCAAAQgABEAAZhNufqj9fmpCXupSbxNaK0DiX2J164hibAu8Wbh7iPleMHUF4sGl9Vu8/hZr/XbMQFgReLjrfKa5+RkO1Fv6gtaYnx+uKQEYC3rHuhIvPdLq2u5hTDRhS3bGj28rAPc84qVTT+s0IUn0LYblHb9cFm7UnpdWDqwJ+MLCd2Kq5k5PgQl5RUWr0sp1WPMK6+4JE9yRVlOLkMJOJTE68/EObCmO4plR4l0MBPfRCpplwGvcgBEAAQgAAGIAAhAAAIQARCAAJwbJXqpdHlxos4a31W/04zn6bt5VVxdV26+MB8Z2D76Fhs8rWG/o1pHX2XO9nxk4HDQHY1hdUPlgsUbz9f48UkgXqhO+5fK2/eVm8CdcKoArxUHvL/VOf05GvOFe4mXszFNRENMo5yN6sK6nDVE40s4LpUfbv3TE8lAzoHjddJJsg2AMw6GEgYgHhirB86qBeCBlDAA8UA8EA+khAEIQACirADsndXjn/O8YX4X1teQo5u0wy9TXcPYDLy9/FjZjj+9zcjceg1jM9ALyurOgyd4IAIgAAEIQARAAAIQgABEAAQgAOcbYD0a9CExpv4wq2uA77rNugLiePA0M9G+/j3wZa/d8CR25PsKeP5LxxIfJJ5b/BE3TQSAAAQgAiAAs6krAQYAXiGbDBfBqf8AAAAASUVORK5CYII='); } .fileList .ico-fromphonefolder { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjNJREFUeNrs3E1O20AYxvGxndgQq04ESfhIxaalgjVnQOq2264q5RJIIKoiztBVkdi0S9acoVfox6qoEQkgjNriNLF5J1Cpm6glJHEm/j/SqySbsfLzeGZsTWIlSaLI4LEhABBAAAEkAAJoZnJ/fwg/vjL5u9Sl3o3pWCdSh1J7uSnpCBtSb/3ldeW4hZEfLOn+rkWXje12eOpMA2BF6mi2vOI6efk6SXvkB7Rk4POKVSWAddPHQEfqvVdaWsn7xbEe2LKt3skzHXDfDSqbXrHCLDxAXuQKpS2vuKBHpfRmYZl5XXndldJTcM2Y5UOhpNxH838upVSXMW/coCpnclFZTt6gDhhLx+tMxDqwrmcUy07GMoNN451IJe3LgFs5AAmAAAIIIAEQQNOSzvPAJFY/z7+o6/BExZ3rh/WA3IyaCWqqMPfk9kFdFgB/nH1Wvy6+DueOWE6APhl6i4pffpaNSzgKvxnR5sQCxt22EW1O7hh4l/Lq86G00/p0zCzMMgZAAiCAAAJIAAQQQAAJgAACCCABEEAAASQAAggggARAAAGcwqS6tSPNLRlGA9qO23cz0L/2y/RD121mBtALHvfdHzhor/SCWnYA/fmnSv9YMAq/S0+MHtibPcFbkjZXMzQGWrbyy2u9YhZmGUMABBBAAAmAAJoK2Ey6HSTumTuzpgY8iC6bCsT74WkzyaG+lXvdvmq5Ui/l/SI8/5WG1AepHYs/4mYSARBAAAmAAJqZGwEGAN+Yh/QHkxJLAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjNJREFUeNrs3E1O20AYxvGxndgQq04ESfhIxaalgjVnQOq2264q5RJIIKoiztBVkdi0S9acoVfox6qoEQkgjNriNLF5J1Cpm6glJHEm/j/SqySbsfLzeGZsTWIlSaLI4LEhABBAAAEkAAJoZnJ/fwg/vjL5u9Sl3o3pWCdSh1J7uSnpCBtSb/3ldeW4hZEfLOn+rkWXje12eOpMA2BF6mi2vOI6efk6SXvkB7Rk4POKVSWAddPHQEfqvVdaWsn7xbEe2LKt3skzHXDfDSqbXrHCLDxAXuQKpS2vuKBHpfRmYZl5XXndldJTcM2Y5UOhpNxH838upVSXMW/coCpnclFZTt6gDhhLx+tMxDqwrmcUy07GMoNN451IJe3LgFs5AAmAAAIIIAEQQNOSzvPAJFY/z7+o6/BExZ3rh/WA3IyaCWqqMPfk9kFdFgB/nH1Wvy6+DueOWE6APhl6i4pffpaNSzgKvxnR5sQCxt22EW1O7hh4l/Lq86G00/p0zCzMMgZAAiCAAAJIAAQQQAAJgAACCCABEEAAASQAAggggARAAAGcwqS6tSPNLRlGA9qO23cz0L/2y/RD121mBtALHvfdHzhor/SCWnYA/fmnSv9YMAq/S0+MHtibPcFbkjZXMzQGWrbyy2u9YhZmGUMABBBAAAmAAJoK2Ey6HSTumTuzpgY8iC6bCsT74WkzyaG+lXvdvmq5Ui/l/SI8/5WG1AepHYs/4mYSARBAAAmAAJqZGwEGAN+Yh/QHkxJLAAAAAElFTkSuQmCC'); } .fileList .ico-mix { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAhFJREFUeNrsnL9KA0EQh/fukjtNNBc08S9oJSJo5TMItrY2CnkJQVEUn8FKwUZLa19BO7ESKwtRTBASEU1Mcs4GtVFRA5u44fvBcOF2YG+/m53Z4SBOFEUKNS8XBAAEIAABiAAIQDsV+8mhdLpsy1pyYrstmutabF9sK9YhgTArtpMcmVKenzA+WVR7GS0Xb1crpTuvEwBmxY66M2O+F5flRBXjEzqS+IJwQAnAnO050BM7CNLDY/Fk2NKJHddpvDzbAW77qexcEGapwk1oIZZIrwThoM5K7avCUmV9ua6L6XI7as3xIZFWfm//+1Zq6zFm008NyJscUo4XtygA6xJ41X9xDszpiuK4UUsqWCd2Itl2bwNaOQAiAAIQgABEAAQgAAGIAAhAAAIQARCANqgl34Vfnu7VY+FCVZ+Lnx+gK1TJzKSKd/cZ9bU6Ah9uzr5cpJa+r8dN+1odgfVauXHNTMx/GitcHn+Mm/QlB1JEAIgAaGkRcWNdql59biT278ZN+1odgT2D08r1gq8fQO7rcdO+puQUT5ai1PgMe7EJla7OyYG0crRytHK0cgiAAAQgxxhaOVo5WjlaOYoIAiAAAQhABEAAAhCACIAABCAAEQANA8xHtSok/qg3ZnkNcK9czCsg/g2eZiba199ENioPBV9sUX4PgedXuhU7FFtz+CNuiggAAQhABEAA2qlXAQYAvkAprthin2kAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAhFJREFUeNrsnL9KA0EQh/fukjtNNBc08S9oJSJo5TMItrY2CnkJQVEUn8FKwUZLa19BO7ESKwtRTBASEU1Mcs4GtVFRA5u44fvBcOF2YG+/m53Z4SBOFEUKNS8XBAAEIAABiAAIQDsV+8mhdLpsy1pyYrstmutabF9sK9YhgTArtpMcmVKenzA+WVR7GS0Xb1crpTuvEwBmxY66M2O+F5flRBXjEzqS+IJwQAnAnO050BM7CNLDY/Fk2NKJHddpvDzbAW77qexcEGapwk1oIZZIrwThoM5K7avCUmV9ua6L6XI7as3xIZFWfm//+1Zq6zFm008NyJscUo4XtygA6xJ41X9xDszpiuK4UUsqWCd2Itl2bwNaOQAiAAIQgABEAAQgAAGIAAhAAAIQARCANqgl34Vfnu7VY+FCVZ+Lnx+gK1TJzKSKd/cZ9bU6Ah9uzr5cpJa+r8dN+1odgfVauXHNTMx/GitcHn+Mm/QlB1JEAIgAaGkRcWNdql59biT278ZN+1odgT2D08r1gq8fQO7rcdO+puQUT5ai1PgMe7EJla7OyYG0crRytHK0cgiAAAQgxxhaOVo5WjlaOYoIAiAAAQhABEAAAhCACIAABCAAEQANA8xHtSok/qg3ZnkNcK9czCsg/g2eZiba199ENioPBV9sUX4PgedXuhU7FFtz+CNuiggAAQhABEAA2qlXAQYAvkAprthin2kAAAAASUVORK5CYII='); } .fileList .ico-musicfolder { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAexJREFUeNrs3L9OwlAUx/HbFopCBKKAKImJg4OzPoCLiaurkwkvYaLRaHwGJ01cdHR28An0EYwjCREYwMTI33qukcVJVHq59ftLTiAMtP309B5yB5wgCBT5eRwAAQQQQAAJgAD+A8DW/e4kX0tZ6jykY1WkLqVOYhFphDWps9TiqvL85NgPFvS7pXazut9pPXtRAMxL3UznlnwvLpcTdMb/2LpKJTIFJYBl13I8T+oqkV1Yiqcy4a59rvNx82wHPPXT+c1EJm/sBGwG3I4ls3uJzLxelYydREwmqy+vh1J6xJZs0RM85c/MDR8lc+chdeynC3Ini8rx4hY14EAar2f+RurfT3qiOG4QygSLWvQamDf9GNgOSAAEEEAACYAAAgggARBAq2JsS7/xdKeCwfh2U9zYlJpd3ohuB44TT2fQe4t2Bw6TW9n68++sP96yBjJEACQAAggggARAAAEEkAAIIICRTCjbWc3Kg+q+NujAnyaqeKF1YJS72/o10HR3M0RsAPSTuZE+Zw38knRpnQ6c1JjubuunsOnuZogACCCAABIAAQQQQAIggAACSAAE0DLAWtDvITFiPs1qGvCi3awpEEfD02aSS70jfdR5qftSO/K+CM+3UpW6ljrgHyx/GQABBBBAAAmApvIuwAAZ2pRkuq79SQAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAexJREFUeNrs3L9OwlAUx/HbFopCBKKAKImJg4OzPoCLiaurkwkvYaLRaHwGJ01cdHR28An0EYwjCREYwMTI33qukcVJVHq59ftLTiAMtP309B5yB5wgCBT5eRwAAQQQQAAJgAD+A8DW/e4kX0tZ6jykY1WkLqVOYhFphDWps9TiqvL85NgPFvS7pXazut9pPXtRAMxL3UznlnwvLpcTdMb/2LpKJTIFJYBl13I8T+oqkV1Yiqcy4a59rvNx82wHPPXT+c1EJm/sBGwG3I4ls3uJzLxelYydREwmqy+vh1J6xJZs0RM85c/MDR8lc+chdeynC3Ini8rx4hY14EAar2f+RurfT3qiOG4QygSLWvQamDf9GNgOSAAEEEAACYAAAgggARBAq2JsS7/xdKeCwfh2U9zYlJpd3ohuB44TT2fQe4t2Bw6TW9n68++sP96yBjJEACQAAggggARAAAEEkAAIIICRTCjbWc3Kg+q+NujAnyaqeKF1YJS72/o10HR3M0RsAPSTuZE+Zw38knRpnQ6c1JjubuunsOnuZogACCCAABIAAQQQQAIggAACSAAE0DLAWtDvITFiPs1qGvCi3awpEEfD02aSS70jfdR5qftSO/K+CM+3UpW6ljrgHyx/GQABBBBAAAmApvIuwAAZ2pRkuq79SQAAAABJRU5ErkJggg=='); } .fileList .ico-picturefolder { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA+tJREFUeNrsnE1PE2EQx2d3u7vttts3WlqKKYrBiO8Rj179AF49mfAlTDQajZ/BkyZc9OgX8O7BA0ExctGIECmlon2DvnedeaAQA9JW0227nX+YLIGQ7v52npn/PLtBsiwLWP8uiQEyQAbIABkgiwEywBEAmH93d5CvZR7juU2f9R1jAeOJyyGJMIfxzJuYBUUzev5hVqM2Wclt3q/mtxQnAIxivPZEkpqi4uVY1d4vWxlAD4wDApyXhxyegvFSD04kVW/A3tonS+LmDTvAp5o/eksPRPt2AsMM8LbLCN7TAzGqSn07CRd2Vg2PDzGoxU4OCz2EB5o51lpK/TsPjMeafxzvZBwkRR2iBGxi4tX7fyPJP1FHkWTLlg7mNFENjPZ7GQw7QBYDZIAMkAGyGCADZIAMkMUAGSADZICsjtXzh0r1SgGK6WU85u25IN0PvtglcXREBtoJb++G5fEzPzorA0n+xBxo3t4+/KkUUlDYfG/rDbOhBlogya6ewyPp5oTzamBbvFYD6qUsNOolUN0hUDQvN5FO1ajuQD61KI4tuQNJ8I1fYICdiOpVs1be65qaCaVfX6GcWwOXOwBu/3A8Ye2bD6RCT+EJnUZYpwQ0M34FZEXHZrDBRrqD4icO1GAOJMn4peDvmgywbe1w+0F2uXHZru7bDgt2f36GRm0XVCPCNbC9JGwWF7EOLkF27e3BT1VPCIzQGQbYicgbBpM3oVpMoY0pCxvTqZejzt3Ev6GMdemmyGaKkfOBiurBRjLdsSmnJV/KfhPwjs7B5ugB7MYzFtIfoF7OYf0MgieYRNPtE1lH42KjWoBKPsUA/zbjig0CSUKrc/XIMm/tvBjhGdj+8sb5AKs7Gax76T+Gfsom3YyDRh1Yko/srtCI509cP7HOCQvk5Ays7W5DMbOCy614eNGKSm+9C1BkoBXVACNyDnRfXCzN/MYiKLoPAokbA/n+om0Ay9k1AY8ageaLYQ2bQssSPqxxtRKOcevYIFahkFqCImYTZRs1CzN2eWBf/rQHIE4dxcwnHNM08EZnj7Uq1I29mHme0BTsbK1ApbgpvKI3ch6N9dho+0DasiIYtKlKM++JoxHOwubENRCGhEY6abAf29h2dkZ4ui28Y7pCt7fKuQCpOfS+zq4fjImOWMLUGFoqpJdF2HJRNk4kPc1A8mVG+KzwePbt8gTAh13bERlIXdcYmxHhVPGbCQyQATJABshigAyQATJAFgNkgAyQAbIYoN0AM1ajziS61D6zDAF8UcllgCF2B4+YoRZoQ/VRtfBDw7iD38cZT0eiZ66vMB7wf7D8TzFABsgAGSADZDHAfum3AAMAO2tj3VmRR4EAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA+tJREFUeNrsnE1PE2EQx2d3u7vttts3WlqKKYrBiO8Rj179AF49mfAlTDQajZ/BkyZc9OgX8O7BA0ExctGIECmlon2DvnedeaAQA9JW0227nX+YLIGQ7v52npn/PLtBsiwLWP8uiQEyQAbIABkgiwEywBEAmH93d5CvZR7juU2f9R1jAeOJyyGJMIfxzJuYBUUzev5hVqM2Wclt3q/mtxQnAIxivPZEkpqi4uVY1d4vWxlAD4wDApyXhxyegvFSD04kVW/A3tonS+LmDTvAp5o/eksPRPt2AsMM8LbLCN7TAzGqSn07CRd2Vg2PDzGoxU4OCz2EB5o51lpK/TsPjMeafxzvZBwkRR2iBGxi4tX7fyPJP1FHkWTLlg7mNFENjPZ7GQw7QBYDZIAMkAGyGCADZIAMkMUAGSADZICsjtXzh0r1SgGK6WU85u25IN0PvtglcXREBtoJb++G5fEzPzorA0n+xBxo3t4+/KkUUlDYfG/rDbOhBlogya6ewyPp5oTzamBbvFYD6qUsNOolUN0hUDQvN5FO1ajuQD61KI4tuQNJ8I1fYICdiOpVs1be65qaCaVfX6GcWwOXOwBu/3A8Ye2bD6RCT+EJnUZYpwQ0M34FZEXHZrDBRrqD4icO1GAOJMn4peDvmgywbe1w+0F2uXHZru7bDgt2f36GRm0XVCPCNbC9JGwWF7EOLkF27e3BT1VPCIzQGQbYicgbBpM3oVpMoY0pCxvTqZejzt3Ev6GMdemmyGaKkfOBiurBRjLdsSmnJV/KfhPwjs7B5ugB7MYzFtIfoF7OYf0MgieYRNPtE1lH42KjWoBKPsUA/zbjig0CSUKrc/XIMm/tvBjhGdj+8sb5AKs7Gax76T+Gfsom3YyDRh1Yko/srtCI509cP7HOCQvk5Ays7W5DMbOCy614eNGKSm+9C1BkoBXVACNyDnRfXCzN/MYiKLoPAokbA/n+om0Ay9k1AY8ageaLYQ2bQssSPqxxtRKOcevYIFahkFqCImYTZRs1CzN2eWBf/rQHIE4dxcwnHNM08EZnj7Uq1I29mHme0BTsbK1ApbgpvKI3ch6N9dho+0DasiIYtKlKM++JoxHOwubENRCGhEY6abAf29h2dkZ4ui28Y7pCt7fKuQCpOfS+zq4fjImOWMLUGFoqpJdF2HJRNk4kPc1A8mVG+KzwePbt8gTAh13bERlIXdcYmxHhVPGbCQyQATJABshigAyQATJAFgNkgAyQAbIYoN0AM1ajziS61D6zDAF8UcllgCF2B4+YoRZoQ/VRtfBDw7iD38cZT0eiZ66vMB7wf7D8TzFABsgAGSADZDHAfum3AAMAO2tj3VmRR4EAAAAASUVORK5CYII='); } .fileList .ico-videofolder { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABSdJREFUeNrsnNtuG2UQgGft9a7Ph8R27KQyLVSgCCICBSTENQ/ALVdIeQkkEAjEM3BFpd7AJQ9RiQsqJGgJIIFapS0hjp3E8dler73MjO3QSNheO+na3sxIv7KKvPNrP88/x00Uy7JAZHbxCAIBKAAFoAAUEYACcDlFneWmyr2PFvFZdnB949Be+7ju4PpSdYkh3ML1dWh9E7xa8LlvZnU7G+1y/hOjUvC6AWAK1/eBZE7z+vBxLOO5b6ig49NjaUCAO8vuA724vtXj2ZwvFHN0Y8Wj8Je37AC/0qKp9/VYSqLwDPKBGox/rMfWyCvNLwpjRNXw52e4KLRuLE36EIyDFlkdHqW5pjFfaNE0fpMZULy+JTLAHhqeuRB54A5FFMVjORLB3FiJpOZ9DKSUE4AiAlAACkABKCIABaAAFIAiAlAACsArI4szVLJ6YDSOwagXwGyVwTRq/DsWxQOqFgbVHwMtlAYtuNqf7AhAZGR1oVnag+bpHo0LR8I12xVerfJTbvwG4tchkLgOiuK9ugA7zRLUDh9At9Ps+xPVD3okgxaWYkiqHiV6CK4Kva4BRq2A6xCv29A4/othRjKvgy+QuHoAW5V9hLfLgAhccPUm+KPX/ueTygAkINgkQHqTwdURYM9sQfnvexBeew3v3bg6ANvVA4T3K1/r4QwC2EKXZvcoKuCP5fC+LFTyv0AH/SbpUtAn6pGs+6MwBYjqAF4g/gJEsttTwHsGIx7x2MZbZ1ZLOs3WqdsBWlDN3+egQJYXSm1eUJ+C1vsq+Cgqo85q/gE4PSN2FCD5rm6nwT4vnNm6JK0KRDPbbJGkm/ZwJ0C0kMbxQ74MJV8Zm36cPvkBaoXfOMWxe5yDiRf5unHy6L/80U0AjcYRpx/DVGWsn8S0hSyp/PRHjrR2hPwpgaTPG/WiCwHWj/pRN7LOx85WwMHEuYTWSJF2shl6ODL3v6xj9wEcRkgtlJzu5GN1Ut7/CY/mw4mf9QVXzu3lKoDk4Dnx1CIzRW+qPCoHP6N7G+0XqV5+di8XAbTwwc0zhz+zG8AyrlbYHRNMtEG8Mh1LZxwCeHnv3li2I6ziriPsGVrHqI6LDaGmQXhM8m11jQtb+eIC9PXfnjeN6kz3BzDPi117h9OgkYGKeogoXl/IfQCHLadpczSypuj6LUy+X554LDuNk3N7uQqgFkqddWLsOngCkci9d3bvpEqnXTs4t5cTojpngSvg1ULQNeoMsZ9Qj4AdXgNVj0Bw5SXbwaB5+pj9K+1Be7mymRBI3OCf9aM/x9a50ewbCO+mbXjUrW6UHp3bw5UAqWus+uNcr1YP7l9ak4JaZGR9pNvpzrTD/UAFrWubUxqavtWLf1wc3uEu18qkk3Q7lf/NCWB/cBRdf5PbWeS3KljnjivPJtXI7eo/rIt0jktxXAOQIxceNc7pvDq3uUp7d6FVfmIvOqPV0Rj05PFd6DRPWAfpIp1zeRaYk9CQPJ57l2cZPBgq/M4NVy2c5uG5R9UxIQ5S7QZds9nv82EtTHlkb1BxUCs/srY1F8ubO8DhcY5tvM1W2MDIPBycT2rL05gziIk1jznnLAvxageB0HJJHrAbmAx3WmXo4fXQ0ihAeHwB8NGrHeEsWmYAFkUW6g+uCQzVvAFYHpG3swSgABSAAlBEAApAASgARQTgfAAWra4pJKaUAbMiAbzdLhdBIE4Hj5ih3KFmwudG9UjD9SFeZwSPLcnj+g7Xp4r8I24JIgJQAApAEQEoAJdT/hVgAK5f795U9dlNAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABSdJREFUeNrsnNtuG2UQgGft9a7Ph8R27KQyLVSgCCICBSTENQ/ALVdIeQkkEAjEM3BFpd7AJQ9RiQsqJGgJIIFapS0hjp3E8dler73MjO3QSNheO+na3sxIv7KKvPNrP88/x00Uy7JAZHbxCAIBKAAFoAAUEYACcDlFneWmyr2PFvFZdnB949Be+7ju4PpSdYkh3ML1dWh9E7xa8LlvZnU7G+1y/hOjUvC6AWAK1/eBZE7z+vBxLOO5b6ig49NjaUCAO8vuA724vtXj2ZwvFHN0Y8Wj8Je37AC/0qKp9/VYSqLwDPKBGox/rMfWyCvNLwpjRNXw52e4KLRuLE36EIyDFlkdHqW5pjFfaNE0fpMZULy+JTLAHhqeuRB54A5FFMVjORLB3FiJpOZ9DKSUE4AiAlAACkABKCIABaAAFIAiAlAACsArI4szVLJ6YDSOwagXwGyVwTRq/DsWxQOqFgbVHwMtlAYtuNqf7AhAZGR1oVnag+bpHo0LR8I12xVerfJTbvwG4tchkLgOiuK9ugA7zRLUDh9At9Ps+xPVD3okgxaWYkiqHiV6CK4Kva4BRq2A6xCv29A4/othRjKvgy+QuHoAW5V9hLfLgAhccPUm+KPX/ueTygAkINgkQHqTwdURYM9sQfnvexBeew3v3bg6ANvVA4T3K1/r4QwC2EKXZvcoKuCP5fC+LFTyv0AH/SbpUtAn6pGs+6MwBYjqAF4g/gJEsttTwHsGIx7x2MZbZ1ZLOs3WqdsBWlDN3+egQJYXSm1eUJ+C1vsq+Cgqo85q/gE4PSN2FCD5rm6nwT4vnNm6JK0KRDPbbJGkm/ZwJ0C0kMbxQ74MJV8Zm36cPvkBaoXfOMWxe5yDiRf5unHy6L/80U0AjcYRpx/DVGWsn8S0hSyp/PRHjrR2hPwpgaTPG/WiCwHWj/pRN7LOx85WwMHEuYTWSJF2shl6ODL3v6xj9wEcRkgtlJzu5GN1Ut7/CY/mw4mf9QVXzu3lKoDk4Dnx1CIzRW+qPCoHP6N7G+0XqV5+di8XAbTwwc0zhz+zG8AyrlbYHRNMtEG8Mh1LZxwCeHnv3li2I6ziriPsGVrHqI6LDaGmQXhM8m11jQtb+eIC9PXfnjeN6kz3BzDPi117h9OgkYGKeogoXl/IfQCHLadpczSypuj6LUy+X554LDuNk3N7uQqgFkqddWLsOngCkci9d3bvpEqnXTs4t5cTojpngSvg1ULQNeoMsZ9Qj4AdXgNVj0Bw5SXbwaB5+pj9K+1Be7mymRBI3OCf9aM/x9a50ewbCO+mbXjUrW6UHp3bw5UAqWus+uNcr1YP7l9ak4JaZGR9pNvpzrTD/UAFrWubUxqavtWLf1wc3uEu18qkk3Q7lf/NCWB/cBRdf5PbWeS3KljnjivPJtXI7eo/rIt0jktxXAOQIxceNc7pvDq3uUp7d6FVfmIvOqPV0Rj05PFd6DRPWAfpIp1zeRaYk9CQPJ57l2cZPBgq/M4NVy2c5uG5R9UxIQ5S7QZds9nv82EtTHlkb1BxUCs/srY1F8ubO8DhcY5tvM1W2MDIPBycT2rL05gziIk1jznnLAvxageB0HJJHrAbmAx3WmXo4fXQ0ihAeHwB8NGrHeEsWmYAFkUW6g+uCQzVvAFYHpG3swSgABSAAlBEAApAASgARQTgfAAWra4pJKaUAbMiAbzdLhdBIE4Hj5ih3KFmwudG9UjD9SFeZwSPLcnj+g7Xp4r8I24JIgJQAApAEQEoAJdT/hVgAK5f795U9dlNAAAAAElFTkSuQmCC'); } .fileList .ico-sefolder { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA/9JREFUeNrs3G9IG2ccB/Dv5ZKLuUSN1miMq3/atVU6aauu615so6ulY+2gK0ihrFhwZRR801LGcLJRcXtRxmAwBhtzyFYHZUPYi/XNBlspdK3rnznHWitpFfvHNkprUqOJJrfnuZYiYiA6tRq/X/jhn3uSI588d7/nzqBiGAaY2cdCAgISkIAEZAhIwKUZa7IDgx0HFvtrqRP19QLt65aoVlFN1hSZCJWivnD6yqBq+rzvzIiNF0SGB96PBu+pqQDoEdXuyCnUVJt4OUZ03neoiBOfPTMXArBuqZ8DVVFtdnd+oc2ZuaA7ViyK+eYtdcBmLcOz3Z7pWbxNpP5c0bzs+GPL1v/7FG9adfd79sw8eVZ6aoDK8PlaTXz9QJRsswWJBjbEf1tMeBB40NJXwJqmPzW8YF+XOQOPaRm54p30QlFtiUdfnzvAjOLKOXiWuJh4E4tiHVgnO4piMRakgz1aB0SRKpFNxPO4ozC8lCMgAQnIEJCABFw+mfPbWT69FNW+d5Cl+TAWC6F7+Cx+H/iGgNNFVWzYln8QG7J34BnnevN3ofEhE6zN/y5ixjgcajqy7D7cj9wm4OR4HWtwcO1XyHOsMn8eivTjzmgP7BYduwsbsDlnD1p6DuHu6HVE42OcgZOjW92oLzsBt+bFucAPaO9rRnjigblNzridK4/g5bxa1Je2ofnvakRiI2wik7Mt/20TTx6qJ/xHn+DJjIrz3o+9x/DrnS/NQ/dVMZZdeEo2Zu80oU7d/CzhmJ/7PzVhN2S9xi48NTlpK3F6oBXHqzq5DpzNg87c/Q7lWduTGpvKDWTWM9Af/NNsEg0XqxAcD3AGzjQVOW/AoqioKWlKOKamuAmfb+lLeqYuK8ASVwX6Hv6FTdmv463Vn8CuOp9ss1nSsKeoEa94a9F1/xezeAhPiVzrfXSlGvtWH8cWT425aO4f6ULciKPQVW5eoXQMtuPkjUZeC0+X2+FuqBYNLdcO4cXcvXgpbz+KXBvNbTdCl8wmIwF5MyFBvvUfRuWKXbg8dAoXBn/CH/dO8m7MTBIY6xXrwF4wvB9IQAISkIBzEodY1lQ418KtutiFk9dXsF4vwWZXKZ7Ti2FTHj1dz9gtnA/9i86wH6PxKAGnZk1aAapc67DJ+Sx0cek23XZZe42t6Bzx48JIN/4J9y5vQK8tG88LtBfSy5I+TOWMlNCygrEwOh5eFXUlpQDlJ1SNjKJydoNZRH5ClV2YyxgCEpCADAEJSEACMgQkIAEJyBCQgAQkIENAAhKQgExSgAEjNkGJGeaxWUACtkSGAyDizPCkmUir/MP6h9HQoCZqn/jeS56kMiDqe1GNCv8RN5sIAQlIQIaABFya+U+AAQBLjB3QxtGdmwAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA/9JREFUeNrs3G9IG2ccB/Dv5ZKLuUSN1miMq3/atVU6aauu615so6ulY+2gK0ihrFhwZRR801LGcLJRcXtRxmAwBhtzyFYHZUPYi/XNBlspdK3rnznHWitpFfvHNkprUqOJJrfnuZYiYiA6tRq/X/jhn3uSI588d7/nzqBiGAaY2cdCAgISkIAEZAhIwKUZa7IDgx0HFvtrqRP19QLt65aoVlFN1hSZCJWivnD6yqBq+rzvzIiNF0SGB96PBu+pqQDoEdXuyCnUVJt4OUZ03neoiBOfPTMXArBuqZ8DVVFtdnd+oc2ZuaA7ViyK+eYtdcBmLcOz3Z7pWbxNpP5c0bzs+GPL1v/7FG9adfd79sw8eVZ6aoDK8PlaTXz9QJRsswWJBjbEf1tMeBB40NJXwJqmPzW8YF+XOQOPaRm54p30QlFtiUdfnzvAjOLKOXiWuJh4E4tiHVgnO4piMRakgz1aB0SRKpFNxPO4ozC8lCMgAQnIEJCABFw+mfPbWT69FNW+d5Cl+TAWC6F7+Cx+H/iGgNNFVWzYln8QG7J34BnnevN3ofEhE6zN/y5ixjgcajqy7D7cj9wm4OR4HWtwcO1XyHOsMn8eivTjzmgP7BYduwsbsDlnD1p6DuHu6HVE42OcgZOjW92oLzsBt+bFucAPaO9rRnjigblNzridK4/g5bxa1Je2ofnvakRiI2wik7Mt/20TTx6qJ/xHn+DJjIrz3o+9x/DrnS/NQ/dVMZZdeEo2Zu80oU7d/CzhmJ/7PzVhN2S9xi48NTlpK3F6oBXHqzq5DpzNg87c/Q7lWduTGpvKDWTWM9Af/NNsEg0XqxAcD3AGzjQVOW/AoqioKWlKOKamuAmfb+lLeqYuK8ASVwX6Hv6FTdmv463Vn8CuOp9ss1nSsKeoEa94a9F1/xezeAhPiVzrfXSlGvtWH8cWT425aO4f6ULciKPQVW5eoXQMtuPkjUZeC0+X2+FuqBYNLdcO4cXcvXgpbz+KXBvNbTdCl8wmIwF5MyFBvvUfRuWKXbg8dAoXBn/CH/dO8m7MTBIY6xXrwF4wvB9IQAISkIBzEodY1lQ418KtutiFk9dXsF4vwWZXKZ7Ti2FTHj1dz9gtnA/9i86wH6PxKAGnZk1aAapc67DJ+Sx0cek23XZZe42t6Bzx48JIN/4J9y5vQK8tG88LtBfSy5I+TOWMlNCygrEwOh5eFXUlpQDlJ1SNjKJydoNZRH5ClV2YyxgCEpCADAEJSEACMgQkIAEJyBCQgAQkIENAAhKQgExSgAEjNkGJGeaxWUACtkSGAyDizPCkmUir/MP6h9HQoCZqn/jeS56kMiDqe1GNCv8RN5sIAQlIQIaABFya+U+AAQBLjB3QxtGdmwAAAABJRU5ErkJggg=='); } .fileList .ico-access, @@ -3632,165 +3700,165 @@ ul.cmdlist { .fileList .ico-accdb, .fileList .ico-sql, .fileList .ico-db { - background-image: url("../img/ico/ico-access.png") + background-image: url('../img/ico/ico-access.png'); } .fileList .ico-c { - background-image: url("../img/ico/ico-c.png") + background-image: url('../img/ico/ico-c.png'); } .fileList .ico-cpp { - background-image: url("../img/ico/ico-cpp.png") + background-image: url('../img/ico/ico-cpp.png'); } .fileList .ico-cs { - background-image: url("../img/ico/ico-cs.png") + background-image: url('../img/ico/ico-cs.png'); } .fileList .ico-js { - background-image: url("../img/ico/ico-js.png") + background-image: url('../img/ico/ico-js.png'); } .fileList .ico-fla, .fileList .ico-flv { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAz5JREFUeNrsnL1vEmEcxx8OOE1LEUyKthATgqYJ6eKEM8QRZ1+WmrropJs6mLjof6CJL9HFl7nMJY7SmLg0JIaBRBKrkBhDW2Io3Hm/B69eT6D3Qjm4+36TJwcctL1Pvr+3p+F8siwzyLoEIABARxUYdrJcLovK4YGyVpQVd8tFxxOJp8rhltH3nwiHrQFU9DASidyNRqMsEAi4Al6lUmGNev3mfCzGzEC0CnCV4AmCwCRJck3YnV5YYN+3tkYC8bAcOE/w3KZjosghkhOVp09QRByE6OkqPAqInm9j7EJEH2gTIgDahAiANiECoE2IAGgTom/YdpYyC8upVMpVcBqNBms2m6Y+k06nfVZHOddJme1ZKBTqucf3j8ugx7VaDSGsVTAY3N8Y0Uaf1Y1lzzlQhUjqdrv/uW6QEwGwD0QC1Ol0+NEsOM8D5Bf/N5S1W3UT78AfK9dNvf/U61d9P69/3Q5ECmVa+jBGCBuU3+/fd6IZeI4CHJWDRgmRoGmrsRGImES0MATBtAMBsA9EM//GAMB+862urUERsQgRDhwDRAC0mzOBAACdHQed+sWHjXST1mjDgW5z4LQ4DA4EQAAEQAgAARAAARCaqEb6KEfBcTbpcOC0OdCuOyZtBIQDARAAARAAIQAEQAAEQAgAARAAARACQACcIg39tuaXbA53JlO0VFy3/m1NURQ9Da/dbiOEj1Jj3dIP5/MscuVy33P1R4+ZmEzy81+vXhv6c44vL7PY/XusU6+zb7fveAegqkGACKARzVzIMGl3lwViMQ7z9+YmqrDhP3h2loWyWdZcK3AHEky0MSZE8Eg7xSJrlUpsJpPhUD0VwmfevjnwnGD8fPHScPi2PpZ4CNOR8ip3ZKGAHHhoS6XkSFo768Vei1Gt8kVQPQXQcvjmeuF78sYqX3q4BBMAhxQPynfktF/v3h94PfH8GXehEwCnpoioxYLynlZqLqQ86EQxmUgH6ouMCkrNeXq1NkrcgU4Uk+GbCflLXXFvz9PjXjsYlJYKa35LISyfO7tBd7Pw4u3i6Zr5tadSn6yH8OLixY4kf/BVq+fZ9ra3nDg3J8nJ5GeWiOcshzDkwlEOAF2mPwIMAMxjFWM7SdA6AAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAz5JREFUeNrsnL1vEmEcxx8OOE1LEUyKthATgqYJ6eKEM8QRZ1+WmrropJs6mLjof6CJL9HFl7nMJY7SmLg0JIaBRBKrkBhDW2Io3Hm/B69eT6D3Qjm4+36TJwcctL1Pvr+3p+F8siwzyLoEIABARxUYdrJcLovK4YGyVpQVd8tFxxOJp8rhltH3nwiHrQFU9DASidyNRqMsEAi4Al6lUmGNev3mfCzGzEC0CnCV4AmCwCRJck3YnV5YYN+3tkYC8bAcOE/w3KZjosghkhOVp09QRByE6OkqPAqInm9j7EJEH2gTIgDahAiANiECoE2IAGgTom/YdpYyC8upVMpVcBqNBms2m6Y+k06nfVZHOddJme1ZKBTqucf3j8ugx7VaDSGsVTAY3N8Y0Uaf1Y1lzzlQhUjqdrv/uW6QEwGwD0QC1Ol0+NEsOM8D5Bf/N5S1W3UT78AfK9dNvf/U61d9P69/3Q5ECmVa+jBGCBuU3+/fd6IZeI4CHJWDRgmRoGmrsRGImES0MATBtAMBsA9EM//GAMB+862urUERsQgRDhwDRAC0mzOBAACdHQed+sWHjXST1mjDgW5z4LQ4DA4EQAAEQAgAARAAARCaqEb6KEfBcTbpcOC0OdCuOyZtBIQDARAAARAAIQAEQAAEQAgAARAAARACQACcIg39tuaXbA53JlO0VFy3/m1NURQ9Da/dbiOEj1Jj3dIP5/MscuVy33P1R4+ZmEzy81+vXhv6c44vL7PY/XusU6+zb7fveAegqkGACKARzVzIMGl3lwViMQ7z9+YmqrDhP3h2loWyWdZcK3AHEky0MSZE8Eg7xSJrlUpsJpPhUD0VwmfevjnwnGD8fPHScPi2PpZ4CNOR8ip3ZKGAHHhoS6XkSFo768Vei1Gt8kVQPQXQcvjmeuF78sYqX3q4BBMAhxQPynfktF/v3h94PfH8GXehEwCnpoioxYLynlZqLqQ86EQxmUgH6ouMCkrNeXq1NkrcgU4Uk+GbCflLXXFvz9PjXjsYlJYKa35LISyfO7tBd7Pw4u3i6Zr5tadSn6yH8OLixY4kf/BVq+fZ9ra3nDg3J8nJ5GeWiOcshzDkwlEOAF2mPwIMAMxjFWM7SdA6AAAAAElFTkSuQmCC'); } .fileList .ico-htm { - background-image: url("../img/ico/ico-htm.png") + background-image: url('../img/ico/ico-htm.png'); } .fileList .ico-html { - background-image: url("../img/ico/ico-html.png") + background-image: url('../img/ico/ico-html.png'); } .fileList .ico-java { - background-image: url("../img/ico/ico-java.png") + background-image: url('../img/ico/ico-java.png'); } .fileList .ico-log { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA9lJREFUeNrsnE9IFFEcx9/srlMbq+2fXHZdD8pG0WIHKQ92iP6QYhRFtzyVHiI7FJ2KIAiMTkoeMoSwTnoqhKLQQ0kHgzI8FAaZGIiu7JKKRVuLO9P83jrjpOu4M7Pu6rzfF5aZffNmYT78/nzfWxhOFEWCMi4bIkCABZVD6+Lo6CgvHW5LnwvSJ2SVhw6Vlz+UDi3Zzt9ZUmIMoKQ7brf7hsfjIQ6HwxLwxsbGSDwWu1zq9xM9EI0CbAZ4NpuNCIJgmbQLBINkJhrNCcT1amApwLOatvE8hQiRKH3txCZSQIhMd+FcQGTexpiFiD7QJEQEaBIiAjQJEQGahIgATULktLazpLWwGA6HLQUnHo+ThYUFXfdEIhHO6FLOcpLW9sTlcqWjh1vmstb55OQkprBaRUVFysaIOvuMbiwzF4EyRFAqlVoVdWtFYt4BTsV+5AVGyO8zDBEALS4u0qNecBsO0OiD5VNyKqu36vSCZN7GAES73b4qjVdGJdZADckAIRIz1UIEmCVEgKbuxpjCOgW773ojEAFmgKjnbwxmbYzm+nYp+rIx10zbmGwgYgpvMEQEaLZmIgIEiAC39FJwq9uYQrsCtDGYwggQASJAFAJEG4M2Bm0MCgEiQASIAFFoY9DGYApjDUQhQASIABEgCgEiQASIAFEIEAFuWmluJnQ8GkBCkrraI8YAgnieZxpeMpnEFC5YCudKh2urSP2xg+TW3SdrzvF6iknd0QNk/74KZezbxDQZePORTEX/35wNBX107u7KsnXnWgLgegIgFxvryOzcT9LZ/ZxCAKBnGmpJS9Np0t3TT8YnonRuuDJImhrrKbDWth6S+JOk98tz2zqf0t9hqgtDNCUSSQneCyWCAMLjngEK6mzDIWUunMMYXAN4ILgn/f0vjXamIhCiB1Kx//VwxusfRr6S8+eOkKql1IbI7JdSdaUAZmtbrzVroJY87uJ0FM1krl3TS+Net0sZG5cikKkmspGC2qluJpD6UAeZATg3ny74oYBPaRRqlQXS/+7Nzv9aHgsuz4Xap9THk7UkXFHG1lIOGgA0hZrqvRmv11TvoVH1+ct3mrrQKDLNdW7n8w5v03Rh8G9OJy/ZkFO0qcjNQk7PvldDSqPofTZIvSJcA2hqGwT35Fuaby66dP2+mIulnGykM6nv5RDttGaN9Nt3n+i8emk8lzUQlnJd7dc4QwCv3nyQEkSO6eWejROFjntX7IZSuDzofQ8vp2HxdfHwzPDsoYBn2HAX9nldJwRRHJyJzVf/TiSZisQdTl4I+H0ju3zFxw3XQNQW6cIIkGH9E2AAawxpPqroZK8AAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA9lJREFUeNrsnE9IFFEcx9/srlMbq+2fXHZdD8pG0WIHKQ92iP6QYhRFtzyVHiI7FJ2KIAiMTkoeMoSwTnoqhKLQQ0kHgzI8FAaZGIiu7JKKRVuLO9P83jrjpOu4M7Pu6rzfF5aZffNmYT78/nzfWxhOFEWCMi4bIkCABZVD6+Lo6CgvHW5LnwvSJ2SVhw6Vlz+UDi3Zzt9ZUmIMoKQ7brf7hsfjIQ6HwxLwxsbGSDwWu1zq9xM9EI0CbAZ4NpuNCIJgmbQLBINkJhrNCcT1amApwLOatvE8hQiRKH3txCZSQIhMd+FcQGTexpiFiD7QJEQEaBIiAjQJEQGahIgATULktLazpLWwGA6HLQUnHo+ThYUFXfdEIhHO6FLOcpLW9sTlcqWjh1vmstb55OQkprBaRUVFysaIOvuMbiwzF4EyRFAqlVoVdWtFYt4BTsV+5AVGyO8zDBEALS4u0qNecBsO0OiD5VNyKqu36vSCZN7GAES73b4qjVdGJdZADckAIRIz1UIEmCVEgKbuxpjCOgW773ojEAFmgKjnbwxmbYzm+nYp+rIx10zbmGwgYgpvMEQEaLZmIgIEiAC39FJwq9uYQrsCtDGYwggQASJAFAJEG4M2Bm0MCgEiQASIAFFoY9DGYApjDUQhQASIABEgCgEiQASIAFEIEAFuWmluJnQ8GkBCkrraI8YAgnieZxpeMpnEFC5YCudKh2urSP2xg+TW3SdrzvF6iknd0QNk/74KZezbxDQZePORTEX/35wNBX107u7KsnXnWgLgegIgFxvryOzcT9LZ/ZxCAKBnGmpJS9Np0t3TT8YnonRuuDJImhrrKbDWth6S+JOk98tz2zqf0t9hqgtDNCUSSQneCyWCAMLjngEK6mzDIWUunMMYXAN4ILgn/f0vjXamIhCiB1Kx//VwxusfRr6S8+eOkKql1IbI7JdSdaUAZmtbrzVroJY87uJ0FM1krl3TS+Net0sZG5cikKkmspGC2qluJpD6UAeZATg3ny74oYBPaRRqlQXS/+7Nzv9aHgsuz4Xap9THk7UkXFHG1lIOGgA0hZrqvRmv11TvoVH1+ct3mrrQKDLNdW7n8w5v03Rh8G9OJy/ZkFO0qcjNQk7PvldDSqPofTZIvSJcA2hqGwT35Fuaby66dP2+mIulnGykM6nv5RDttGaN9Nt3n+i8emk8lzUQlnJd7dc4QwCv3nyQEkSO6eWejROFjntX7IZSuDzofQ8vp2HxdfHwzPDsoYBn2HAX9nldJwRRHJyJzVf/TiSZisQdTl4I+H0ju3zFxw3XQNQW6cIIkGH9E2AAawxpPqroZK8AAAAASUVORK5CYII='); } .fileList .ico-mht { - background-image: url("../img/ico/ico-mht.png") + background-image: url('../img/ico/ico-mht.png'); } .fileList .ico-php { - background-image: url("../img/ico/ico-php.png") + background-image: url('../img/ico/ico-php.png'); } .fileList .ico-url { - background-image: url("../img/ico/ico-url.png") + background-image: url('../img/ico/ico-url.png'); } .fileList .ico-xml { - background-image: url("../img/ico/ico-xml.png") + background-image: url('../img/ico/ico-xml.png'); } .fileList .ico-ai { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABLNJREFUeNrsml2LE1cYx59MZpKNSTYb2tUsG0trqsX0YrVUL1pvpNSXFgr1poIgpUVEP4FXgvQ72ItCL7wuxStxlQVfSxFBS+lCXSPupl2XTeu62d1uncyL5zmzEyfZ3UlmEpJJzvOHw8mZOSdkfjxv52RCpmkCyb8kQkAAuyrZ7ebk5GSEdedZ+5q10X556NFs9nvWnW12fmpw0B9ApgtDQ0Pn0uk0yLLcF/CmpqagND9/ZnjrVvAC0S/AbxGeJElgGEbfuF1mZATmnj1rC8RGMXAY4fWbopEIh4iWyIYXKYl0EaLQWbgdEIUvY1qFSHVgixAJYIsQCWCLEAlgixAJYIsQQ27HWWwvbOZyub6CUyqVoFwue1qTz+dDfrdyfSe2t4dEImFZT+g1l80+F4tFcmGnFEWpHow4vc/vwbJwFmhDROm6vs7qNrNEArgBRASkaRrvvYITHiB/+DVXdh7V9bwFlsdPgbH0F0jJLAwe/qEjENGVsdW7cTMAA5VEtH/+4PC4VbAex51QOBzmzSu8wAFUn45bDzS0o2bcSYjOeNhTFmhWVqBSvMk/x/ZYp+w4xuudEp6+96wFqjM3wNRVCKfeBvnN93mPY7zeSSFEL39jSEFzX2Vkf02vTl9vav3yrXO8tUP1ZU3gAeqLT0FfmLKyYmZ/Ta8//5Pfb/jQksJbu9QsRDlI1heKJEF+Y7f1w1iPY1Nd4vdjY6ddvyN+4Lu2/66eSCI8zk1PWG6b+RBNyTYpa8zdeILPC6K6DrDy911uZZbb7qt1j7Ux3sd5bnrx01HehANYrfUcFlfdrzosspM1Yc8ANJZnQZv/rSbm1cQgR0zEeTifADqtz1Gi2Fl3XZZzXG+2pBEDoGkwt3wNxK776uW8zuebwXrJqWtlTGXuPhir/1bHS9fPNHZ5Nh/XbQZbKAv0mxSClky6YoHG/wtQmf3VShTRFAx+dglC4YhrrVi+chLMl4t8Ha6XBtLiWqAzlkVzn7vC45DZ/Wjuiw1jp6AAx9eDaSAn6CC5cccBaqXfq/Vc5J0j3IWb2peyeTi/vn4UDmC1lmM7jOjOLz2t5fPtncnMhHgAnafOSvYASPGMtx/L5uM6XgZ1+LQ6EADtU2fUwHtf+foOe103Tqu7D3At+MvbPqj+ceRVuA7XByWZCPd2llcVCgXXt7Po/cBePo0hgCQCSAAJIAEkgCQCSAAJIAEkEUACSACFk+v/wvKd0zB9hwBB/rY/gKioLDbAlxq5sHgxcPjgBcgevwzx3KFab9g2tuF1AuiMKYkMB2VUlmHLWx+TBXoVWhfCW3x4iYNEoATQC8B3D8HK42uwWrReKo9t/4gANqsYc1lJSXB4hrrC+2T+GAFsVluYtWnLc6A+L/Dxf8VfONBYgGNhYKo8jHWx7RYozLT1YFdn7hJAV/ddi3WzP5/g7msrNXYSkruPgRS5SC7cKPvasc8pO5nEc4cJoFvyQBfGmFcvjIfqQoEDlpSBwAF0fbno0Y9H9AisSCEQU0hGhbix65urYV8WaKZ23dMN64tEhMefPbXzvu8kYsZHP9XAuKGXn+yFypJYBw9K0jDTOx6Y8ewnvl2Y1INbOQIomF4JMACqJM9nuTUMmgAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABLNJREFUeNrsml2LE1cYx59MZpKNSTYb2tUsG0trqsX0YrVUL1pvpNSXFgr1poIgpUVEP4FXgvQ72ItCL7wuxStxlQVfSxFBS+lCXSPupl2XTeu62d1uncyL5zmzEyfZ3UlmEpJJzvOHw8mZOSdkfjxv52RCpmkCyb8kQkAAuyrZ7ebk5GSEdedZ+5q10X556NFs9nvWnW12fmpw0B9ApgtDQ0Pn0uk0yLLcF/CmpqagND9/ZnjrVvAC0S/AbxGeJElgGEbfuF1mZATmnj1rC8RGMXAY4fWbopEIh4iWyIYXKYl0EaLQWbgdEIUvY1qFSHVgixAJYIsQCWCLEAlgixAJYIsQQ27HWWwvbOZyub6CUyqVoFwue1qTz+dDfrdyfSe2t4dEImFZT+g1l80+F4tFcmGnFEWpHow4vc/vwbJwFmhDROm6vs7qNrNEArgBRASkaRrvvYITHiB/+DVXdh7V9bwFlsdPgbH0F0jJLAwe/qEjENGVsdW7cTMAA5VEtH/+4PC4VbAex51QOBzmzSu8wAFUn45bDzS0o2bcSYjOeNhTFmhWVqBSvMk/x/ZYp+w4xuudEp6+96wFqjM3wNRVCKfeBvnN93mPY7zeSSFEL39jSEFzX2Vkf02vTl9vav3yrXO8tUP1ZU3gAeqLT0FfmLKyYmZ/Ta8//5Pfb/jQksJbu9QsRDlI1heKJEF+Y7f1w1iPY1Nd4vdjY6ddvyN+4Lu2/66eSCI8zk1PWG6b+RBNyTYpa8zdeILPC6K6DrDy911uZZbb7qt1j7Ux3sd5bnrx01HehANYrfUcFlfdrzosspM1Yc8ANJZnQZv/rSbm1cQgR0zEeTifADqtz1Gi2Fl3XZZzXG+2pBEDoGkwt3wNxK776uW8zuebwXrJqWtlTGXuPhir/1bHS9fPNHZ5Nh/XbQZbKAv0mxSClky6YoHG/wtQmf3VShTRFAx+dglC4YhrrVi+chLMl4t8Ha6XBtLiWqAzlkVzn7vC45DZ/Wjuiw1jp6AAx9eDaSAn6CC5cccBaqXfq/Vc5J0j3IWb2peyeTi/vn4UDmC1lmM7jOjOLz2t5fPtncnMhHgAnafOSvYASPGMtx/L5uM6XgZ1+LQ6EADtU2fUwHtf+foOe103Tqu7D3At+MvbPqj+ceRVuA7XByWZCPd2llcVCgXXt7Po/cBePo0hgCQCSAAJIAEkgCQCSAAJIAEkEUACSACFk+v/wvKd0zB9hwBB/rY/gKioLDbAlxq5sHgxcPjgBcgevwzx3KFab9g2tuF1AuiMKYkMB2VUlmHLWx+TBXoVWhfCW3x4iYNEoATQC8B3D8HK42uwWrReKo9t/4gANqsYc1lJSXB4hrrC+2T+GAFsVluYtWnLc6A+L/Dxf8VfONBYgGNhYKo8jHWx7RYozLT1YFdn7hJAV/ddi3WzP5/g7msrNXYSkruPgRS5SC7cKPvasc8pO5nEc4cJoFvyQBfGmFcvjIfqQoEDlpSBwAF0fbno0Y9H9AisSCEQU0hGhbix65urYV8WaKZ23dMN64tEhMefPbXzvu8kYsZHP9XAuKGXn+yFypJYBw9K0jDTOx6Y8ewnvl2Y1INbOQIomF4JMACqJM9nuTUMmgAAAABJRU5ErkJggg=='); } .fileList .ico-bmp { - background-image: url("../img/ico/ico-bmp.png") + background-image: url('../img/ico/ico-bmp.png'); } .fileList .ico-cdr { - background-image: url("../img/ico/ico-cdr.png") + background-image: url('../img/ico/ico-cdr.png'); } .fileList .ico-gif { - background-image: url("../img/ico/ico-gif.png") + background-image: url('../img/ico/ico-gif.png'); } .fileList .ico-ico { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA7lJREFUeNrsnEFIFGEUx9/szu66uOvumCtuSlREkB2ChII6dEgisFtCEQVBetBD4KU8lBAFURejg0HSqYgKjwke8tBBrEPSaYMMCrRW1NpCxTZmdvrep7vsrLObO+vubPO9P4zfOPNWmB//9733fYsj6boOJOtyEQICaKvkQjdjsZiXDQPsuMiOZqc8dHNLywM29G42PlRXZw0g041wONyvKArIsuwIeNPT07AwP98TaWyEYiBaBXgJ4blcLkilUo5Ju6ZoFObi8S2B+K85MILwnCaf18shohPZr0NURGyEKHQV3gqIwrcxpUKkPrBEiASwRIgEsESIBLBEiASwRIiyaHDq2LoWl3Ob1dfZ2Z5Qa2svAVwXW9tDIBDg55IkZa7nO5+ZmaEUzpbH48lsjGRvJlvdWBbOgWmIKE3TNrgunxMJoAlEBKSqKh+LBSc8QP7w66mcvVVXLMiqnwNXJ19A4v45PpYLotvt3pDGua78bwEm348ZxnIIAZpBdMRKxHfghGEsN8Rs5zmiiPiPnOVHJZT+6gJbGsc4sNJCiMV8jUEATbTZAlLVKYyVN1fK5acVhUgOrADEqnVgttvM3Fg1cyb5jAASQAJIAEkEkAASQAJIIoAEkAASQFIxqrrdmEI7L3bvEZIDRXCg3Y4iBxJAAkgASQSQABJAAkgigASQABJAEgEkgATQwSq4H1j78DTMCQ6oFn/c+2AN4FqET2yCapJS2LYULod8uw5C5MJdSIwOwsq70cz1UHsXBLP+H+RP/COsxl7D0sRzw+fN4lamRg1/y9EAzdTYPQSumoAB6rbO6xA63s3PESLeb2Dgc+OUU32gdPTx67mwhajCwaNnwBvdCz9Gbhlc9H3kJiQ/T7H7a26rbevgcYtPrhriEi8H4df4MIctK1HxAPpbj/FUxVTM1cLjKzA/3MvdhSAxTk3EN8SlgSJk4QCiq9Sf8fxFcB2YqyZoChmV+r3M4r6BHBbQgbQSKVHoKnRhvvmxZeAVuPxB5rKlvHGY4rKyvaCTHQsQ5zVsbczg1Oxu46mJabw08YzPl2aFIj332dHK2A4QHxoh1XdeMxQB7BUR7K/xR5k4dGvD+TuGOGxjsAJjJTYrMI7vA7EAYKUNtXfzfg6PdGpjv4cONcZ1mcbZ1UhLhV4486X/kCapSeZSCcSUDrrHn9p5+43bUgpr0f2TkNLwtT4CsmPPzJ5da9o3aTmF9fodJ1WAMffCp8PS8qJQ75jRAw2qFtnzFhlYTmESNdIEsNr1V4ABAKATVWjNArx4AAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA7lJREFUeNrsnEFIFGEUx9/szu66uOvumCtuSlREkB2ChII6dEgisFtCEQVBetBD4KU8lBAFURejg0HSqYgKjwke8tBBrEPSaYMMCrRW1NpCxTZmdvrep7vsrLObO+vubPO9P4zfOPNWmB//9733fYsj6boOJOtyEQICaKvkQjdjsZiXDQPsuMiOZqc8dHNLywM29G42PlRXZw0g041wONyvKArIsuwIeNPT07AwP98TaWyEYiBaBXgJ4blcLkilUo5Ju6ZoFObi8S2B+K85MILwnCaf18shohPZr0NURGyEKHQV3gqIwrcxpUKkPrBEiASwRIgEsESIBLBEiASwRIiyaHDq2LoWl3Ob1dfZ2Z5Qa2svAVwXW9tDIBDg55IkZa7nO5+ZmaEUzpbH48lsjGRvJlvdWBbOgWmIKE3TNrgunxMJoAlEBKSqKh+LBSc8QP7w66mcvVVXLMiqnwNXJ19A4v45PpYLotvt3pDGua78bwEm348ZxnIIAZpBdMRKxHfghGEsN8Rs5zmiiPiPnOVHJZT+6gJbGsc4sNJCiMV8jUEATbTZAlLVKYyVN1fK5acVhUgOrADEqnVgttvM3Fg1cyb5jAASQAJIAEkEkAASQAJIIoAEkAASQFIxqrrdmEI7L3bvEZIDRXCg3Y4iBxJAAkgASQSQABJAAkgigASQABJAEgEkgATQwSq4H1j78DTMCQ6oFn/c+2AN4FqET2yCapJS2LYULod8uw5C5MJdSIwOwsq70cz1UHsXBLP+H+RP/COsxl7D0sRzw+fN4lamRg1/y9EAzdTYPQSumoAB6rbO6xA63s3PESLeb2Dgc+OUU32gdPTx67mwhajCwaNnwBvdCz9Gbhlc9H3kJiQ/T7H7a26rbevgcYtPrhriEi8H4df4MIctK1HxAPpbj/FUxVTM1cLjKzA/3MvdhSAxTk3EN8SlgSJk4QCiq9Sf8fxFcB2YqyZoChmV+r3M4r6BHBbQgbQSKVHoKnRhvvmxZeAVuPxB5rKlvHGY4rKyvaCTHQsQ5zVsbczg1Oxu46mJabw08YzPl2aFIj332dHK2A4QHxoh1XdeMxQB7BUR7K/xR5k4dGvD+TuGOGxjsAJjJTYrMI7vA7EAYKUNtXfzfg6PdGpjv4cONcZ1mcbZ1UhLhV4486X/kCapSeZSCcSUDrrHn9p5+43bUgpr0f2TkNLwtT4CsmPPzJ5da9o3aTmF9fodJ1WAMffCp8PS8qJQ75jRAw2qFtnzFhlYTmESNdIEsNr1V4ABAKATVWjNArx4AAAAAElFTkSuQmCC'); } .fileList .ico-jpeg { - background-image: url("../img/ico/ico-jpeg.png") + background-image: url('../img/ico/ico-jpeg.png'); } .fileList .ico-jpg, .fileList .ico-JPG { - background-image: url("../img/ico/ico-jpg.png") + background-image: url('../img/ico/ico-jpg.png'); } .fileList .ico-png { - background-image: url("../img/ico/ico-png.png") + background-image: url('../img/ico/ico-png.png'); } .fileList .ico-psd { - background-image: url("../img/ico/ico-psd.png") + background-image: url('../img/ico/ico-psd.png'); } .fileList .ico-webp { - background-image: url("../img/ico/ico-webp.png") + background-image: url('../img/ico/ico-webp.png'); } .fileList .ico-ape { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA7JJREFUeNrsnE9M01Acx9+27g9jIkOZTMAYiTEZF4melJtwNJ6MHgwx/jlovHhSL0ZOejNGo4l6Mh7wZMSjHDyoB4NycolZNJpFZhiJSmRs0K6+X6FzsNKtLdtK+/0mTbf2tUs/+/5+v/fe8uaRZZlB5uUFAgBsqgS9k8lkMsB31/l2mm/dTnno7p6eB3x3sdb2W9vazAHkGm1vb78ajUaZIAiOgJdKpVh2ZuZCZyzGjEA0C/AswfN6vaxYLDom7LricfYzk9kQiNVyYCfBc5qCgYACkZzI395HEWkiRFdX4Y2A6PpujFWI6AdahAiAFiECoEWIAGgRIgBahOjRm87iY2G5r6/PUXCy2Sybm5szdE0ikfCYHco5TnxszyKRyLJ7PP+5rPc6nU4jhMvl9/tLEyPl0Wd2Ytl1DlQhkiRJqnDdek4EQA2IBEgURWVvFFzTAM4/e8zEb6m6f46wey9rPXFOv81KKJdP1RkF2fAc2Ah4Rj6HIPp8voowXutK24VwZOQS88V7N/y+UibN/j65Z+gaFSA5USsX2hJgPeBZuS9BJGjl1diWIWxn0ey7UQcCoAZEIz9jAKDW+LbGAuLqfmAtEOHABkAEQKs5EwgAEAABEAAhAARAAHSl6jaUmx97yMTvX+BAs3IDvLo6sBGyg8s3dQ60g8tRRADQoQCFPftMnUMRWVHr8TNwoO2/fRu4fFN3Y+zgchQRAARAAARACAABEAABEAJAAARAAIQMSXe1ZubyKfwzGVf89lPzqzUDBpY9OVGLVRYhIoQtqmkTqltGLimzxrmXY6zw4W3puJ8fo1VMayXnc2zh1bjSdr02pOKvWfbnzqizAXqj2xV4BCXQP7AKoCparrX09fMq4OGjJ1cdW9vGNVU4eOBwyVEEkoBWU27iRcmhru/GBA8eYoXJd2zx09RyoerfjxxYqyhkPaEwW0x+VFxIEEODwyz/ZkL3uvDQMWVPIeuLblNea+XBBe7Uavfa1AD9iQEl0UvTy3/msJScUqDSpjpSCw7BpoJD16oA7ZADGwqQch2BIkVv3K0AWw7QDnBsB1DNdb9vXVEcpaqFh2docIg7LIyxcLXqSy4rh6f09nk+VIsLiohO8aAQXpoYrzhH+ZA2ApybfV7zPbWKSKM70rqTCdPXzkvBQt7Vw71CMFTcefORz1QIi1273kscsBunZOiZ6dnFrt5J0yEsdcSG87L8Wpj5MeBZmHeVE+WW1qIY656SOnYcMR3CkE2HcgAIlfRPgAEAIIZMFb61acMAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA7JJREFUeNrsnE9M01Acx9+27g9jIkOZTMAYiTEZF4melJtwNJ6MHgwx/jlovHhSL0ZOejNGo4l6Mh7wZMSjHDyoB4NycolZNJpFZhiJSmRs0K6+X6FzsNKtLdtK+/0mTbf2tUs/+/5+v/fe8uaRZZlB5uUFAgBsqgS9k8lkMsB31/l2mm/dTnno7p6eB3x3sdb2W9vazAHkGm1vb78ajUaZIAiOgJdKpVh2ZuZCZyzGjEA0C/AswfN6vaxYLDom7LricfYzk9kQiNVyYCfBc5qCgYACkZzI395HEWkiRFdX4Y2A6PpujFWI6AdahAiAFiECoEWIAGgRIgBahOjRm87iY2G5r6/PUXCy2Sybm5szdE0ikfCYHco5TnxszyKRyLJ7PP+5rPc6nU4jhMvl9/tLEyPl0Wd2Ytl1DlQhkiRJqnDdek4EQA2IBEgURWVvFFzTAM4/e8zEb6m6f46wey9rPXFOv81KKJdP1RkF2fAc2Ah4Rj6HIPp8voowXutK24VwZOQS88V7N/y+UibN/j65Z+gaFSA5USsX2hJgPeBZuS9BJGjl1diWIWxn0ey7UQcCoAZEIz9jAKDW+LbGAuLqfmAtEOHABkAEQKs5EwgAEAABEAAhAARAAHSl6jaUmx97yMTvX+BAs3IDvLo6sBGyg8s3dQ60g8tRRADQoQCFPftMnUMRWVHr8TNwoO2/fRu4fFN3Y+zgchQRAARAAARACAABEAABEAJAAARAAIQMSXe1ZubyKfwzGVf89lPzqzUDBpY9OVGLVRYhIoQtqmkTqltGLimzxrmXY6zw4W3puJ8fo1VMayXnc2zh1bjSdr02pOKvWfbnzqizAXqj2xV4BCXQP7AKoCparrX09fMq4OGjJ1cdW9vGNVU4eOBwyVEEkoBWU27iRcmhru/GBA8eYoXJd2zx09RyoerfjxxYqyhkPaEwW0x+VFxIEEODwyz/ZkL3uvDQMWVPIeuLblNea+XBBe7Uavfa1AD9iQEl0UvTy3/msJScUqDSpjpSCw7BpoJD16oA7ZADGwqQch2BIkVv3K0AWw7QDnBsB1DNdb9vXVEcpaqFh2docIg7LIyxcLXqSy4rh6f09nk+VIsLiohO8aAQXpoYrzhH+ZA2ApybfV7zPbWKSKM70rqTCdPXzkvBQt7Vw71CMFTcefORz1QIi1273kscsBunZOiZ6dnFrt5J0yEsdcSG87L8Wpj5MeBZmHeVE+WW1qIY656SOnYcMR3CkE2HcgAIlfRPgAEAIIZMFb61acMAAAAASUVORK5CYII='); } .fileList .ico-avi { - background-image: url("../img/ico/ico-avi.png") + background-image: url('../img/ico/ico-avi.png'); } .fileList .ico-flv { - background-image: url("../img/ico/ico-flv.png") + background-image: url('../img/ico/ico-flv.png'); } .fileList .ico-mkv { - background-image: url("../img/ico/ico-mkv.png") + background-image: url('../img/ico/ico-mkv.png'); } .fileList .ico-mov { - background-image: url("../img/ico/ico-mov.png") + background-image: url('../img/ico/ico-mov.png'); } .fileList .ico-mp3 { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA/xJREFUeNrsnLtv01AUxm8SO0mbUOKKhj4RaoUqpQsFJuhGOyImHhNCBQYQf0BZECwgJgYQSBQxIIaiTsBIBwZgQIVOREIRCBTRogaBVEjzsmPucevgJm4aX+fhXp9Pct3G17b883fOufe6jkdVVYJilxcRIMCWSqi2MR6P++nqKl3O0qWPl4vu6++/T1eXam2/s6ODDSDV9UgkMiVJEhEEgQt4iUSCpJaXL3ZFo8QKRFaA5wCe1+slxWKRm7Dr7ukhP5aW6gJxqxzYBfB4U8Dv1yCCE+mf97CItBCiq6twPSC6vhtjFyL2A21CRIA2ISJAmxARoE2ICNAmRE+16Sw6FlaHhoa4gpNKpcjKyoqlfWKxmId1KMed6NiehMPhNfd4/nPZ7PdkMokhbJQoiqWJEWP0sU4su86BOkSQoigVrtvMiQjQBCIAkmVZW1sF1zKA6acPifw10fDzCHv3kdCp89XbrIeycarOKsim58BmwLNyHoDo8/kqwrjclY4L4fCZy8TXM1D34ypLSfL38V1L++gAwYlmudCRABsBz85xASJAM1ZjR4awkwWz71YdiABNIFp5jIEAzca3NRYQV/cDa4GIDmwCRARoN2ciAgSIABEgAkQhQASIAF2phg3l0jMPiPztMzqQVW6A11AHNkNOcPm2zoFOcDkWEQTIKUBhcJhpGxaRdYVOTKIDHX/3HeDybd2NcYLLsYggQASIABEgCgEiQASIAFEIEAEiQASIsqSqszHS9A3yy+WAJPhx+wkbQJDfwmtPPCq/xUuIGMKNDOF6Kjg2TtrGjxP5yyfyx+RNItgGbXLv35DVFzNEHBzW3mYql5pdJZmXz7V2xv10ZeaekezrOf4Alk5IwXilXaT4++eGzwOHDpu2h9e2ChS6rh0Uavux09pnABngAXAAGjh4RNumZjIlwNxVYXCQf2T/xjw7Mko8wfYKqGZapQ4DATy4GcpisgRLX/t6B/h1YG7+reYUY5iJsVEttK0qPfuoIk2ACh8X+O0H5uMftBAW15+agfPAgfkaL7qd5jwNkgE43BDp2p1Sji0w3Ixt40AIOVhECg0uFHIfhDUABJDlKi8k0BZynjHcIXRhgZsSOjmpPa0rdyc3AHUXBscmtGrqjx3Q4AGYWopINUE7SBEQyulZjodycJEQugAREj5rzopM3dLC1qxQcT0W1kMWnAKhyJqz9GPo+RRyIaSEfBOLSMv+M6EQX8t5dvprkAvL86TeEW+Wqn710+KVC0ogl3X1cC8XCBZ7b077mEJY7t7zTqGA3fhl8XDNcO1y98A8cwgrndGJrKq+Epa/j3oyaVc5UW0LFeVo34LSufsocwijHFqFESCqpH8CDACOqX4es1WjewAAAABJRU5ErkJggg==") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA/xJREFUeNrsnLtv01AUxm8SO0mbUOKKhj4RaoUqpQsFJuhGOyImHhNCBQYQf0BZECwgJgYQSBQxIIaiTsBIBwZgQIVOREIRCBTRogaBVEjzsmPucevgJm4aX+fhXp9Pct3G17b883fOufe6jkdVVYJilxcRIMCWSqi2MR6P++nqKl3O0qWPl4vu6++/T1eXam2/s6ODDSDV9UgkMiVJEhEEgQt4iUSCpJaXL3ZFo8QKRFaA5wCe1+slxWKRm7Dr7ukhP5aW6gJxqxzYBfB4U8Dv1yCCE+mf97CItBCiq6twPSC6vhtjFyL2A21CRIA2ISJAmxARoE2ICNAmRE+16Sw6FlaHhoa4gpNKpcjKyoqlfWKxmId1KMed6NiehMPhNfd4/nPZ7PdkMokhbJQoiqWJEWP0sU4su86BOkSQoigVrtvMiQjQBCIAkmVZW1sF1zKA6acPifw10fDzCHv3kdCp89XbrIeycarOKsim58BmwLNyHoDo8/kqwrjclY4L4fCZy8TXM1D34ypLSfL38V1L++gAwYlmudCRABsBz85xASJAM1ZjR4awkwWz71YdiABNIFp5jIEAzca3NRYQV/cDa4GIDmwCRARoN2ciAgSIABEgAkQhQASIAF2phg3l0jMPiPztMzqQVW6A11AHNkNOcPm2zoFOcDkWEQTIKUBhcJhpGxaRdYVOTKIDHX/3HeDybd2NcYLLsYggQASIABEgCgEiQASIAFEIEAEiQASIsqSqszHS9A3yy+WAJPhx+wkbQJDfwmtPPCq/xUuIGMKNDOF6Kjg2TtrGjxP5yyfyx+RNItgGbXLv35DVFzNEHBzW3mYql5pdJZmXz7V2xv10ZeaekezrOf4Alk5IwXilXaT4++eGzwOHDpu2h9e2ChS6rh0Uavux09pnABngAXAAGjh4RNumZjIlwNxVYXCQf2T/xjw7Mko8wfYKqGZapQ4DATy4GcpisgRLX/t6B/h1YG7+reYUY5iJsVEttK0qPfuoIk2ACh8X+O0H5uMftBAW15+agfPAgfkaL7qd5jwNkgE43BDp2p1Sji0w3Ixt40AIOVhECg0uFHIfhDUABJDlKi8k0BZynjHcIXRhgZsSOjmpPa0rdyc3AHUXBscmtGrqjx3Q4AGYWopINUE7SBEQyulZjodycJEQugAREj5rzopM3dLC1qxQcT0W1kMWnAKhyJqz9GPo+RRyIaSEfBOLSMv+M6EQX8t5dvprkAvL86TeEW+Wqn710+KVC0ogl3X1cC8XCBZ7b077mEJY7t7zTqGA3fhl8XDNcO1y98A8cwgrndGJrKq+Epa/j3oyaVc5UW0LFeVo34LSufsocwijHFqFESCqpH8CDACOqX4es1WjewAAAABJRU5ErkJggg=='); } .fileList .ico-mp4 { - background-image: url("../img/ico/ico-mp4.png") + background-image: url('../img/ico/ico-mp4.png'); } .fileList .ico-mpeg { - background-image: url("../img/ico/ico-mpeg.png") + background-image: url('../img/ico/ico-mpeg.png'); } .fileList .ico-mpg { - background-image: url("../img/ico/ico-mpg.png") + background-image: url('../img/ico/ico-mpg.png'); } .fileList .ico-rm { - background-image: url("../img/ico/ico-rm.png") + background-image: url('../img/ico/ico-rm.png'); } .fileList .ico-rmvb { - background-image: url("../img/ico/ico-rmvb.png") + background-image: url('../img/ico/ico-rmvb.png'); } .fileList .ico-swf { - background-image: url("../img/ico/ico-swf.png") + background-image: url('../img/ico/ico-swf.png'); } .fileList .ico-wav { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABE9JREFUeNrsnDts01AUhm8S59E2lKbQ0PQl1AgVpQsFJuhGOzMhFlQhXhKoCwuPBcEEGwMIJGBCDLDCyMICAyqEpRFV1AqIaFADKqpIX/EDn5vc5CZO09hpXNc+R4qcHD+i+/n/z7Fv5LgURSEYxsONCBDgtoZQa2UikfCpi1vq66z66rXLoHv7+h6riyv1br+7vd0YQDXudHR03AiFQkQQBFvASyaTJLOwcLkrHCZ6IBoFeB7gud1uIsuybWzXHYmQX+n0lkDcrAZ2ATy7hd/noxBBierHR9hEthGio7vwVkB0/GVMoxDxOrBBiAiwQYgIsEGICLBBiAiwQYiuWtNZ6r2wEo1GbQUnk8mQpaUlXfvEYjGX0Vs524V6b0+CwWBePa4Sl43ep1IptDAfXq+3ODHCu8/oxLLjFMggQkiSpFHdRkpEgFUgAiBRFOlSL7htA5h99YyI35JN/x5h/wHSdvpC7W0KVuan6vSCNL0GmgFPz/cARI/Ho7FxpSotZ+HgxCTxRPq3/LhSOkX+PX+oax8GEJRYrRZaEmAz4DVyXIAI0PhubEkLWzlg9l2vAhFgFYh6fsZAgNXub+tsII6+DqwHIirQBIgIsNGaiQgQIAJEgAgQAwEiQAToyGjarVz25RMifp9FBRoNJ8BrqgLNCCuofEfXQCuoHJsIArQpQGFwyNA6bCKFaDt1DhVo+bNvAZXv6MsYK6gcmwgCRIAIEAFiIEAEiAARIAYCRIAIEAFi6IqaT2umr57BfyZTI3L/hfGnNX06HnuyY6xv8hAiWtjqNdAd2ktCtx+QlrGTZfn2S9do3tNTejDGFWituu2uiUma9x85Xsx5B4doLjA6pnXN8AhdB8sdD1Be/E2k+RQdMA+KgePz3mj+vZT+UXYCYHpeWV0uA5Kbm6HH9cUOa77TGxuh269Px+3RhWGw7s49GlCimvdEBop5eA8Dz83OFHOgOsitvH1NQQLQYn1KfKYngs/ByYHjr019sM9lDCiKVx2AAvXk5r5SVcE6pkaAB8CKAI8eozCYmnzDh0oAp79ocgAPjgdwbQOQKYrZFZYwQFAmP2gAzNuXwYVtmSUDo+Oa8sDbGOzL8rYBCIOHAYHyGChWw1heKKiTQa0GI5eI0/35WsjbuGjfT+9N68Km/awJYMCOMHgGlOW9tElky/IAhIGCjlrZJJilwd7QtcHG8uKfvGIL1rYVwHwdHKOXHXyTgDzkvBXNg9W1v/eul9VEgAXbL79ppXl4ifQkHCTySv4EgGptdy/M4ICy+DrH8tBh+Tx0X1AZD49ZljWXUjOJ0/3BvmY1D9MB8vbkLVZpZ9Y8ADTUPI2SC3UTALPuzewMn826fKlrMmH+5kXJv7bq6Nu9NX9A7rn71GNIgWL3wEdJBezEKRkYM4xd7O6fMtxEpM7w+KqivBMWfo64VrKOUqLS0iaL4d641LnvhGELY1ioiSBAjKrxX4ABABrs14sDnYP6AAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABE9JREFUeNrsnDts01AUhm8S59E2lKbQ0PQl1AgVpQsFJuhGOzMhFlQhXhKoCwuPBcEEGwMIJGBCDLDCyMICAyqEpRFV1AqIaFADKqpIX/EDn5vc5CZO09hpXNc+R4qcHD+i+/n/z7Fv5LgURSEYxsONCBDgtoZQa2UikfCpi1vq66z66rXLoHv7+h6riyv1br+7vd0YQDXudHR03AiFQkQQBFvASyaTJLOwcLkrHCZ6IBoFeB7gud1uIsuybWzXHYmQX+n0lkDcrAZ2ATy7hd/noxBBierHR9hEthGio7vwVkB0/GVMoxDxOrBBiAiwQYgIsEGICLBBiAiwQYiuWtNZ6r2wEo1GbQUnk8mQpaUlXfvEYjGX0Vs524V6b0+CwWBePa4Sl43ep1IptDAfXq+3ODHCu8/oxLLjFMggQkiSpFHdRkpEgFUgAiBRFOlSL7htA5h99YyI35JN/x5h/wHSdvpC7W0KVuan6vSCNL0GmgFPz/cARI/Ho7FxpSotZ+HgxCTxRPq3/LhSOkX+PX+oax8GEJRYrRZaEmAz4DVyXIAI0PhubEkLWzlg9l2vAhFgFYh6fsZAgNXub+tsII6+DqwHIirQBIgIsNGaiQgQIAJEgAgQAwEiQAToyGjarVz25RMifp9FBRoNJ8BrqgLNCCuofEfXQCuoHJsIArQpQGFwyNA6bCKFaDt1DhVo+bNvAZXv6MsYK6gcmwgCRIAIEAFiIEAEiAARIAYCRIAIEAFi6IqaT2umr57BfyZTI3L/hfGnNX06HnuyY6xv8hAiWtjqNdAd2ktCtx+QlrGTZfn2S9do3tNTejDGFWituu2uiUma9x85Xsx5B4doLjA6pnXN8AhdB8sdD1Be/E2k+RQdMA+KgePz3mj+vZT+UXYCYHpeWV0uA5Kbm6HH9cUOa77TGxuh269Px+3RhWGw7s49GlCimvdEBop5eA8Dz83OFHOgOsitvH1NQQLQYn1KfKYngs/ByYHjr019sM9lDCiKVx2AAvXk5r5SVcE6pkaAB8CKAI8eozCYmnzDh0oAp79ocgAPjgdwbQOQKYrZFZYwQFAmP2gAzNuXwYVtmSUDo+Oa8sDbGOzL8rYBCIOHAYHyGChWw1heKKiTQa0GI5eI0/35WsjbuGjfT+9N68Km/awJYMCOMHgGlOW9tElky/IAhIGCjlrZJJilwd7QtcHG8uKfvGIL1rYVwHwdHKOXHXyTgDzkvBXNg9W1v/eul9VEgAXbL79ppXl4ifQkHCTySv4EgGptdy/M4ICy+DrH8tBh+Tx0X1AZD49ZljWXUjOJ0/3BvmY1D9MB8vbkLVZpZ9Y8ADTUPI2SC3UTALPuzewMn826fKlrMmH+5kXJv7bq6Nu9NX9A7rn71GNIgWL3wEdJBezEKRkYM4xd7O6fMtxEpM7w+KqivBMWfo64VrKOUqLS0iaL4d641LnvhGELY1ioiSBAjKrxX4ABABrs14sDnYP6AAAAAElFTkSuQmCC'); } .fileList .ico-webm { - background-image: url("../img/ico/ico-webm.png") + background-image: url('../img/ico/ico-webm.png'); } .fileList .ico-wma { - background-image: url("../img/ico/ico-wma.png") + background-image: url('../img/ico/ico-wma.png'); } .fileList .ico-wmv { - background-image: url("../img/ico/ico-wmv.png") + background-image: url('../img/ico/ico-wmv.png'); } .fileList .ico-doc, @@ -3799,104 +3867,104 @@ ul.cmdlist { .fileList .ico-dotm, .fileList .ico-dot, .fileList .ico-rtf { - background-image: url("../img/ico/ico-doc.png") + background-image: url('../img/ico/ico-doc.png'); } .fileList .ico-docx { - background-image: url("../img/ico/ico-docx.png") + background-image: url('../img/ico/ico-docx.png'); } .fileList .ico-pdf, .fileList .ico-fdf { - background-image: url("../img/ico/ico-pdf.png") + background-image: url('../img/ico/ico-pdf.png'); } .fileList .ico-ppt, .fileList .ico-pptm, .fileList .ico-pot, .fileList .ico-potm { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABWZJREFUeNrsnF1oHFUUgM/O7272J7s1iVkT2mrAmBRREQUpiFCtCj74pFAoCOJDlIogSJ8K+qL45A8qqPhSEH0VLAit+lKF0tIXiaQBUaLd2m3zs5tkd+fnjufObtIkZmdmZzLb2Z1zYJifPXdm7rfn3HPO3ZlNWJYFJP4lQQAJYHQBzs7OKrg6hctLuIz1S6fHxsc/w9WrXvUHc7m2n0kubd/O5/MnC4UCSJLUF/Dm5+ehfP36zPDICHQC0S/Alzk8QRCAMdY3bjdaLMK1UmlPIAounw9zeP0mqqLYELkl4u6nYQLsW9kriLEFuFcQYw1wLyDGHmBQiAQwIEQCGBAiAQwIkQAGhOhWC1sTExO+b2Tth09AmzvvSVcsFEF98FlQp5/AnfDKxnK5DJVKpaM209PTCb+lXNfEXCrB+k9fQf3id5A+OgPS2FQo18HaHjKZTNN6Ere4tNteWFiA22aBG7L00TF7XXj967Y6xtU5G6B5c8G2wMxzb4J84AFP529UFyEhSCDKKoiK6qqv6zoYhtEW3E6AThYYmTFQumsScsfeBfmeh9EcDdv92frydshaHWEtQW25DGs3rm4eZwhDkhUw9ebnlmk4XkuWZXt2yQ3e1u3eCCIJAdLPnABx5G6w6qug/fZj8zh6SW35Bhi1VTROCdRU+v9fgKpCMpMDCS2wjhCN+roniBugNpat+z2ZxiQkBVKPvWBva1d+bfJjDC1MhmQaAaGbCg5BRk6mYCBXQLM0QUfgjlaPANtZYm9a4BZ3tl2zUm52RBRBVlPevwSuP5BB8CaY6PZuEEXU3+nGXq0wmnmgxVqe638Sl/edQ9dra/YQ4JhCIcDdIPZsJcKqN5s3ly5sEPV1HhHdXpRkMPSGu24L4s6xsCcB6n9carnyfUH4tSAqwHTNmzUJQscWGLlfinj0rV8+0yypph/f5tKOVc9i2SG4i96npxAiz429/twbKYCWocHqmQ9tiPL++0EaP+QJYKowsreZQMv6vECMDECjNA/r5z4Hc/EfELJDMHB0pjUgMtcgEEo6FUUX3ijp3FKY9NOvgTCQb4KzzN3zPTW5rRpxQAHpoWJoECNjgeK+MUg+8jwok4dvuS3mce2sT0ll7MU5G2JQW62Eet9dBeg0mbBtZgaTX17P8vo20AyPqdupTJgSyTSGD96m1gh8HlPTQFSS8QMoYadNE8swQ/cPD9vyc0hxBMjrMCWdBb1R95VD8za8LT8HeIym/QWQWyHWsQKWYXxGxergwSauy9vwtlIHExB9B9COtOkcr8VgvbKEFlVzLwHR6rgub2O37cYXDREXZSBrz6rUq8s4rmFkVhQst8TNOUGG0ZphumNgwODBJ5UfRuvrXrd64qnJBMJK5YfAQAsztBqmOHVgrQDDXZXP/0nJNLpssvtDTZTyP/dxMXlbIPXsGNgLQgAJ4G1Ot8I8eaO6HJmOqtl87wEM66bJhQkgCQEkgBSFKQpTFCYXJoAEkAASQBICSAAJIAEkIYAEsAfF8V25v96Yov+FQjnwwe8B3taU1HjTMxrkwmFKVx/tGD91dtfj1V++gZWzX7rqrF36HkZPnHa8xrWPj4OxVOpPgFxWzn0B1fPfbu5nD78Ig0desTvNAbnp/P3Ok5vHh4+/b6/Lp9+KbxTmoFi9Ckrx3kA6lMZQHuhPuHsKySxopSuBdGIRRLjwsYwvuwWITnRiC3BngPCrQy5MYyAJAQx7MuHPk4+aCaMh8Dce4ykWWJLKDr53QfRlgWbx0AX7jUmwYgmP952NTl30HYWtffufMi32s/Dv3EOJ2kqs3N1KDTJ25+RldsfBI75dmCTgGEhCAEOX/wQYAOhdFmkKB8pMAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABWZJREFUeNrsnF1oHFUUgM/O7272J7s1iVkT2mrAmBRREQUpiFCtCj74pFAoCOJDlIogSJ8K+qL45A8qqPhSEH0VLAit+lKF0tIXiaQBUaLd2m3zs5tkd+fnjufObtIkZmdmZzLb2Z1zYJifPXdm7rfn3HPO3ZlNWJYFJP4lQQAJYHQBzs7OKrg6hctLuIz1S6fHxsc/w9WrXvUHc7m2n0kubd/O5/MnC4UCSJLUF/Dm5+ehfP36zPDICHQC0S/Alzk8QRCAMdY3bjdaLMK1UmlPIAounw9zeP0mqqLYELkl4u6nYQLsW9kriLEFuFcQYw1wLyDGHmBQiAQwIEQCGBAiAQwIkQAGhOhWC1sTExO+b2Tth09AmzvvSVcsFEF98FlQp5/AnfDKxnK5DJVKpaM209PTCb+lXNfEXCrB+k9fQf3id5A+OgPS2FQo18HaHjKZTNN6Ere4tNteWFiA22aBG7L00TF7XXj967Y6xtU5G6B5c8G2wMxzb4J84AFP529UFyEhSCDKKoiK6qqv6zoYhtEW3E6AThYYmTFQumsScsfeBfmeh9EcDdv92frydshaHWEtQW25DGs3rm4eZwhDkhUw9ebnlmk4XkuWZXt2yQ3e1u3eCCIJAdLPnABx5G6w6qug/fZj8zh6SW35Bhi1VTROCdRU+v9fgKpCMpMDCS2wjhCN+roniBugNpat+z2ZxiQkBVKPvWBva1d+bfJjDC1MhmQaAaGbCg5BRk6mYCBXQLM0QUfgjlaPANtZYm9a4BZ3tl2zUm52RBRBVlPevwSuP5BB8CaY6PZuEEXU3+nGXq0wmnmgxVqe638Sl/edQ9dra/YQ4JhCIcDdIPZsJcKqN5s3ly5sEPV1HhHdXpRkMPSGu24L4s6xsCcB6n9carnyfUH4tSAqwHTNmzUJQscWGLlfinj0rV8+0yypph/f5tKOVc9i2SG4i96npxAiz429/twbKYCWocHqmQ9tiPL++0EaP+QJYKowsreZQMv6vECMDECjNA/r5z4Hc/EfELJDMHB0pjUgMtcgEEo6FUUX3ijp3FKY9NOvgTCQb4KzzN3zPTW5rRpxQAHpoWJoECNjgeK+MUg+8jwok4dvuS3mce2sT0ll7MU5G2JQW62Eet9dBeg0mbBtZgaTX17P8vo20AyPqdupTJgSyTSGD96m1gh8HlPTQFSS8QMoYadNE8swQ/cPD9vyc0hxBMjrMCWdBb1R95VD8za8LT8HeIym/QWQWyHWsQKWYXxGxergwSauy9vwtlIHExB9B9COtOkcr8VgvbKEFlVzLwHR6rgub2O37cYXDREXZSBrz6rUq8s4rmFkVhQst8TNOUGG0ZphumNgwODBJ5UfRuvrXrd64qnJBMJK5YfAQAsztBqmOHVgrQDDXZXP/0nJNLpssvtDTZTyP/dxMXlbIPXsGNgLQgAJ4G1Ot8I8eaO6HJmOqtl87wEM66bJhQkgCQEkgBSFKQpTFCYXJoAEkAASQBICSAAJIAEkIYAEsAfF8V25v96Yov+FQjnwwe8B3taU1HjTMxrkwmFKVx/tGD91dtfj1V++gZWzX7rqrF36HkZPnHa8xrWPj4OxVOpPgFxWzn0B1fPfbu5nD78Ig0desTvNAbnp/P3Ok5vHh4+/b6/Lp9+KbxTmoFi9Ckrx3kA6lMZQHuhPuHsKySxopSuBdGIRRLjwsYwvuwWITnRiC3BngPCrQy5MYyAJAQx7MuHPk4+aCaMh8Dce4ykWWJLKDr53QfRlgWbx0AX7jUmwYgmP952NTl30HYWtffufMi32s/Dv3EOJ2kqs3N1KDTJ25+RldsfBI75dmCTgGEhCAEOX/wQYAOhdFmkKB8pMAAAAAElFTkSuQmCC'); } .fileList .ico-pptx { - background-image: url("../img/ico/ico-pptx.png") + background-image: url('../img/ico/ico-pptx.png'); } .fileList .ico-txt { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2JJREFUeNrsnN9LU2EYx5/98KgxbXM6tuZFMSgaeiHmhV4IGSVFkX+C1FV20W0hBF1IVwVeaAQR/QNBERR5UeGFg1K8MAyySBCbbP1cP6zhzul9js6t1NP5oW6e8/3C4WznbBfvZ8/3fb7vOzguRVEIMi83EABgSeXVujk9PS2J02Vx9IojapdBRxsbb4hTn97P766tNQdQ6Irf778YCATI6/XaAt7MzAylU6lzDaEQGYFoFuBZhud2u0mWZdvYLhyJ0EIyuSkQ/zcHNjA8u6lSklSIXIni7TCaSAkhOroLbwZEx8cYqxCRAy1CBECLEAHQIkQAtAgRAC1CdGltZ4m1sBKLxWwFJ51OUyaTMfSdeDzuMruUs53E2p58Pt9y9bgKXDZ6PTc3BwsXq6KiYnVjpNh9ZjeWHVeBeYisXC63puo2qsRtBzif+rgtMKKhoGmIDGhpaUk9GwW35QDNDmw7lbdy8VadUZCOjzEM0ePxrLHxv1WJOVBDeYBcievNhQCoEyJDK+7GsLBB8e670QoEwHUgGvkbw7ExRnN9u1J9esK1o2OMHoiw8BZDBECrcyYQACAA7uil4E6PMaVOBYgxsDAAAiAAQgCIGIMYgxgDASAAAiAAQogxiDGwMOZACAABEAABEAJAAARAAIQAEADLVpqbCYO3RkBI6Ob1uDmALEmSHA0vm83CwiWz8GaqrWU/9Zzo2PD+18wP+v5jkeoCNXRt6C4t/ir88n1nTlJ1VaV6T0v3Ho7Ri8nX9gTIAyse3EB/Lz1+Mk6jiZer16KRoIB1irq7WgWMhHqts71JXK+n4dsPaD5Z2OXm691dh6h/4A66cF4MiKG2tRyg2L6ICpQhjSam/oLnSAvrFVdk08G91HO8Q9j4twD3QUCdQA40ovuPEup8x9bl1wjSBhXwF5rFnnB5/zlVdhaurpJEt26nqVez6ntuKG9nk/Tp8zdUoB6dXok6I08n1IN17HArLKw3KzaLBsJNgyuOj9GxKfUaxxYA1NByZGlVrVucF7krv3n3njo7mtVoU27SfPTThUtDOVlxOXq553Yp8uDV8x5TFdgYqXvOD6dx4uPiecw89mg4MG66CwfrfEdlRXm2kPrS8nMx66hK3FUtyeFQcLI+WHPEtIWhHRqkAdBB+iPAAD3HE9ONhnJoAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2JJREFUeNrsnN9LU2EYx5/98KgxbXM6tuZFMSgaeiHmhV4IGSVFkX+C1FV20W0hBF1IVwVeaAQR/QNBERR5UeGFg1K8MAyySBCbbP1cP6zhzul9js6t1NP5oW6e8/3C4WznbBfvZ8/3fb7vOzguRVEIMi83EABgSeXVujk9PS2J02Vx9IojapdBRxsbb4hTn97P766tNQdQ6Irf778YCATI6/XaAt7MzAylU6lzDaEQGYFoFuBZhud2u0mWZdvYLhyJ0EIyuSkQ/zcHNjA8u6lSklSIXIni7TCaSAkhOroLbwZEx8cYqxCRAy1CBECLEAHQIkQAtAgRAC1CdGltZ4m1sBKLxWwFJ51OUyaTMfSdeDzuMruUs53E2p58Pt9y9bgKXDZ6PTc3BwsXq6KiYnVjpNh9ZjeWHVeBeYisXC63puo2qsRtBzif+rgtMKKhoGmIDGhpaUk9GwW35QDNDmw7lbdy8VadUZCOjzEM0ePxrLHxv1WJOVBDeYBcievNhQCoEyJDK+7GsLBB8e670QoEwHUgGvkbw7ExRnN9u1J9esK1o2OMHoiw8BZDBECrcyYQACAA7uil4E6PMaVOBYgxsDAAAiAAQgCIGIMYgxgDASAAAiAAQogxiDGwMOZACAABEAABEAJAAARAAIQAEADLVpqbCYO3RkBI6Ob1uDmALEmSHA0vm83CwiWz8GaqrWU/9Zzo2PD+18wP+v5jkeoCNXRt6C4t/ir88n1nTlJ1VaV6T0v3Ho7Ri8nX9gTIAyse3EB/Lz1+Mk6jiZer16KRoIB1irq7WgWMhHqts71JXK+n4dsPaD5Z2OXm691dh6h/4A66cF4MiKG2tRyg2L6ICpQhjSam/oLnSAvrFVdk08G91HO8Q9j4twD3QUCdQA40ovuPEup8x9bl1wjSBhXwF5rFnnB5/zlVdhaurpJEt26nqVez6ntuKG9nk/Tp8zdUoB6dXok6I08n1IN17HArLKw3KzaLBsJNgyuOj9GxKfUaxxYA1NByZGlVrVucF7krv3n3njo7mtVoU27SfPTThUtDOVlxOXq553Yp8uDV8x5TFdgYqXvOD6dx4uPiecw89mg4MG66CwfrfEdlRXm2kPrS8nMx66hK3FUtyeFQcLI+WHPEtIWhHRqkAdBB+iPAAD3HE9ONhnJoAAAAAElFTkSuQmCC'); } .fileList .ico-xls, .fileList .ico-csv, .fileList .ico-xlsm, .fileList .ico-xlsb { - background-image: url("../img/ico/ico-xls.png") + background-image: url('../img/ico/ico-xls.png'); } .fileList .ico-xlsx { - background-image: url("../img/ico/ico-xlsx.png") + background-image: url('../img/ico/ico-xlsx.png'); } .fileList .ico-7z { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABAFJREFUeNrsnF1IU2EYx5+znW3aNvcR6qZS0shwXmUQVFAXKgTrKoSiiwjMiwRDb0ToA/q46E5JsCDpoiAKuuhCIajsAyqQspua5IgKq6mLmV+zyc45nfcs15pnunO2M7ed5w8vZ+Ocs5fz4/9/n/d956Q4jgOUfFEIEAHmLkCv16vnD+f5doJvlYXy0JVVVdf4Q1uq11tKSpKeo9e594LVau222WxA03RBwPP5fBCYnj5VWlYGUiDKBdhC4Gk0GmBZtmBi53A6YdLvzwhEzTrnSwm8QpNBrxcgEifyb/uVBFiwyhRE1QLMFERVA8wERNUDTBciAkwTIgJMEyICTBMiAkwT4nprYc7lchUUnEAgAHNzc5LucbvdlNylXMGJX9uDyWSKuof6xyXZ64mJCYxwvHQ6XWxjJD59crf1VOfAFYhEDMOscl0yJyJAEYgEUCQSEY5SwakeoPDwf6Mcv1WXcw6MTH2CxaEeYBeCWQekMdnB6OkEuty1JkQSZdISY5wKQMWLSGh4YEPgCc7i+w09ur7udVqtVmhS4WXFgczP6DTAeLAd9DV7Ur5v5uqx2Gvb6TuS+10efw2LD/uACX5P6XoCkECLr8Y54UDgouOLFHiZkJz+yO67VAfiUk4EopSvMXK2CsfHNt04S9WK+1KZXNPoubUhYoQVhpizDsx2bGWPmegzBLixy0GswuhABIgRVrgKowMxwqi8XMolVtxcjHVOA8yHcRAjrIaJNDoQq3AGxGX5r/yz1J/yAKloF+H3w1nlF+uPUvYRFR8DaYcLIn4fhJ7eFFrWB3mHK78daGxqA7qqbmMqJN8v6T+vHaixloP58BksIigEiAARIAJEIUAEiAARIAoBIkAEiABRRGv+WvNrRy3+XyheW3vH0vi1Jm1QN71IGCOspDb8a03boU4w1ntEz3272AiO9ltA2ypEz4c/j0Lgdpe6Ac4M9ggtFokiE5S19sPS2Avh/WTf8VX3mPcdAUtDKyy8HcIqLOZI9vcCzD4eED1f7D4gwJt/dReWvM8RYCIc0n4N9orHxebkAXfAsn88KWBVA7Q0tMDi6JAASEz25nPALs1D8P4lnEiLuY8Ui9AH8VhaGk+C3lnDw7sMkRk/AkzUJvd+HswPobImyrjLA+a9R2H2yY2k7lQ9QMO2+ljljRdxnc3TKRSM+Zf3cC0sJgJJU2ReFU0ypbE3nxWcGT/VwYl0gnQV26OrpuD/AHU82JVJdEXXg9WrLB6s2DwxZzYTvnTvZqhImHcpBeoUBxxtYKuvjGhlRZhx1o0AywgfpEZ45NlZR+0b2RHm7FuaGI59ppn6uJNamlXVxgNXbGHZ8h3v2M3VDbIjjEpzDEQhQMX1R4ABANtbXMt+ZZZBAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABAFJREFUeNrsnF1IU2EYx5+znW3aNvcR6qZS0shwXmUQVFAXKgTrKoSiiwjMiwRDb0ToA/q46E5JsCDpoiAKuuhCIajsAyqQspua5IgKq6mLmV+zyc45nfcs15pnunO2M7ed5w8vZ+Ocs5fz4/9/n/d956Q4jgOUfFEIEAHmLkCv16vnD+f5doJvlYXy0JVVVdf4Q1uq11tKSpKeo9e594LVau222WxA03RBwPP5fBCYnj5VWlYGUiDKBdhC4Gk0GmBZtmBi53A6YdLvzwhEzTrnSwm8QpNBrxcgEifyb/uVBFiwyhRE1QLMFERVA8wERNUDTBciAkwTIgJMEyICTBMiAkwT4nprYc7lchUUnEAgAHNzc5LucbvdlNylXMGJX9uDyWSKuof6xyXZ64mJCYxwvHQ6XWxjJD59crf1VOfAFYhEDMOscl0yJyJAEYgEUCQSEY5SwakeoPDwf6Mcv1WXcw6MTH2CxaEeYBeCWQekMdnB6OkEuty1JkQSZdISY5wKQMWLSGh4YEPgCc7i+w09ur7udVqtVmhS4WXFgczP6DTAeLAd9DV7Ur5v5uqx2Gvb6TuS+10efw2LD/uACX5P6XoCkECLr8Y54UDgouOLFHiZkJz+yO67VAfiUk4EopSvMXK2CsfHNt04S9WK+1KZXNPoubUhYoQVhpizDsx2bGWPmegzBLixy0GswuhABIgRVrgKowMxwqi8XMolVtxcjHVOA8yHcRAjrIaJNDoQq3AGxGX5r/yz1J/yAKloF+H3w1nlF+uPUvYRFR8DaYcLIn4fhJ7eFFrWB3mHK78daGxqA7qqbmMqJN8v6T+vHaixloP58BksIigEiAARIAJEIUAEiAARIAoBIkAEiABRRGv+WvNrRy3+XyheW3vH0vi1Jm1QN71IGCOspDb8a03boU4w1ntEz3272AiO9ltA2ypEz4c/j0Lgdpe6Ac4M9ggtFokiE5S19sPS2Avh/WTf8VX3mPcdAUtDKyy8HcIqLOZI9vcCzD4eED1f7D4gwJt/dReWvM8RYCIc0n4N9orHxebkAXfAsn88KWBVA7Q0tMDi6JAASEz25nPALs1D8P4lnEiLuY8Ui9AH8VhaGk+C3lnDw7sMkRk/AkzUJvd+HswPobImyrjLA+a9R2H2yY2k7lQ9QMO2+ljljRdxnc3TKRSM+Zf3cC0sJgJJU2ReFU0ypbE3nxWcGT/VwYl0gnQV26OrpuD/AHU82JVJdEXXg9WrLB6s2DwxZzYTvnTvZqhImHcpBeoUBxxtYKuvjGhlRZhx1o0AywgfpEZ45NlZR+0b2RHm7FuaGI59ppn6uJNamlXVxgNXbGHZ8h3v2M3VDbIjjEpzDEQhQMX1R4ABANtbXMt+ZZZBAAAAAElFTkSuQmCC'); } .fileList .ico-gz { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAP3SURBVHic7ZzBa9NQHMe/L8k6pd3WTra1rDihoGy7zJueZSB48+hJ8LSBMmEHQRC8C4qCepAd/Q8EQdi8CSroQSpaPJQhc61MHFtl0iQeutSsbV6T/vqS1/Z9Lm2T9/JLPvv98l6ypsy2bSg6R4t6B3odJZCIwVuZz+djAO4AuApgOowdCoPpbPYJgGW/7cdGRz3XcQUCuJtMJm+lUikYRrumvUGhUEC5VFqamJwEAkj0op2Va6lUCpqmwbIsaixpSGcy+LG11RWJ7c6BE5rWf6fJ4VgM6UwG5VJpCcBjyrb6z45PuiVxYAUC3ZE40AIBusSBFwjQJCqBh3QqUQl00YlEJbCBoBKVwBYEkch4t7Py+bydy+W6vX+RUi6Xsbu7G6jP3Nwc81rXHxe4AUgmk0gkEgAAxv578Xq/ubnJ3d7AlfDQ0FD9xoi7+jq9sTxwGQjUJAKAaZr1ZU7WeWWiFwMpEKhJZIyhWq2CMRZYnMPACgRQL2X3rTrpMrC6/Q37L+7D2tsRHaoJLTGO+KWbMKa8ZxKGYcA0TZim2VTGfgQKH0Qq688ikQcA1t4OKq+etm2n6zp0XQcQTB4QQgaaP2vTgPjF64idPu+736+HV+rvUzeeB4779+sb7L98BHPnu6/2uq6DMXZkNJYiA2HXzi9B5HWDTuJpmhY4AwduHtgOTdMQ5N8Y0o7C7rKllnNQnOzzM7mWVmDUqBLuAlLMAzsl7LLtFJWBRJRAItKWcJSjcBBUBhJRAolIW8LuspUZlYFElEAi0pYw0DziyljWUguUUVgjqoSJSJuBsk2YvVAZSCQ8gXbI3/IPKZ54gawW4uDTuvBQburxmNhDFH4ONNI5VLcKqGysobKxJjpcy/giEZ6B8cVlGNl50WFaYmTnEV8kP4zEjyF06wC05BRGLt8WHSYy1ChMRAkkogQSUQKJKIFElEAiSiARJZCIEkhECSSiBBJRAokogUS4T2sWV2bVL5MBmHnwmfC0pjHc1Z3pOaoH3NXCS3jm3kfRISJFnQOJCL0j7WSf81pcXTjy2cFZ7qwrri409Wm1XWd9Y59GWm2jWwgV6D44h8bPrZa1asNr647HayuC0EvYzwEFOWi/okUR2Vc7+mVwiUQgrwxFbF8koZdwmAcXBpFPY6jZ19g/7D9QKCXsnpI0Tjd40w93f0cKr3/jq7uNKNpfC/fApZzQrKsecK+FuSVsHxuxALnuJ4Q7etuHDrzhlrCZmX9rFN+dg6YD8P9bKiJpVfJiss8GLBNWevY9rxVXoD1+ctG0rdfa9pez7M/vyAcch+LKrPAY9vExy5o688E6ceoCrx33HOiXIL/0IxvU45cmq3oVJZDIP8OiU3PHSqspAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAP3SURBVHic7ZzBa9NQHMe/L8k6pd3WTra1rDihoGy7zJueZSB48+hJ8LSBMmEHQRC8C4qCepAd/Q8EQdi8CSroQSpaPJQhc61MHFtl0iQeutSsbV6T/vqS1/Z9Lm2T9/JLPvv98l6ypsy2bSg6R4t6B3odJZCIwVuZz+djAO4AuApgOowdCoPpbPYJgGW/7cdGRz3XcQUCuJtMJm+lUikYRrumvUGhUEC5VFqamJwEAkj0op2Va6lUCpqmwbIsaixpSGcy+LG11RWJ7c6BE5rWf6fJ4VgM6UwG5VJpCcBjyrb6z45PuiVxYAUC3ZE40AIBusSBFwjQJCqBh3QqUQl00YlEJbCBoBKVwBYEkch4t7Py+bydy+W6vX+RUi6Xsbu7G6jP3Nwc81rXHxe4AUgmk0gkEgAAxv578Xq/ubnJ3d7AlfDQ0FD9xoi7+jq9sTxwGQjUJAKAaZr1ZU7WeWWiFwMpEKhJZIyhWq2CMRZYnMPACgRQL2X3rTrpMrC6/Q37L+7D2tsRHaoJLTGO+KWbMKa8ZxKGYcA0TZim2VTGfgQKH0Qq688ikQcA1t4OKq+etm2n6zp0XQcQTB4QQgaaP2vTgPjF64idPu+736+HV+rvUzeeB4779+sb7L98BHPnu6/2uq6DMXZkNJYiA2HXzi9B5HWDTuJpmhY4AwduHtgOTdMQ5N8Y0o7C7rKllnNQnOzzM7mWVmDUqBLuAlLMAzsl7LLtFJWBRJRAItKWcJSjcBBUBhJRAolIW8LuspUZlYFElEAi0pYw0DziyljWUguUUVgjqoSJSJuBsk2YvVAZSCQ8gXbI3/IPKZ54gawW4uDTuvBQburxmNhDFH4ONNI5VLcKqGysobKxJjpcy/giEZ6B8cVlGNl50WFaYmTnEV8kP4zEjyF06wC05BRGLt8WHSYy1ChMRAkkogQSUQKJKIFElEAiSiARJZCIEkhECSSiBBJRAokogUS4T2sWV2bVL5MBmHnwmfC0pjHc1Z3pOaoH3NXCS3jm3kfRISJFnQOJCL0j7WSf81pcXTjy2cFZ7qwrri409Wm1XWd9Y59GWm2jWwgV6D44h8bPrZa1asNr647HayuC0EvYzwEFOWi/okUR2Vc7+mVwiUQgrwxFbF8koZdwmAcXBpFPY6jZ19g/7D9QKCXsnpI0Tjd40w93f0cKr3/jq7uNKNpfC/fApZzQrKsecK+FuSVsHxuxALnuJ4Q7etuHDrzhlrCZmX9rFN+dg6YD8P9bKiJpVfJiss8GLBNWevY9rxVXoD1+ctG0rdfa9pez7M/vyAcch+LKrPAY9vExy5o688E6ceoCrx33HOiXIL/0IxvU45cmq3oVJZDIP8OiU3PHSqspAAAAAElFTkSuQmCC'); } .fileList .ico-cab { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABLVJREFUeNrsnF1oU2cYx59zepp+JTSp1CZaNl3AYXo1hQ0V9EIFobsYQ5gMBMFVWGFjvRHBWZjbhXjTMaEKftwIoqCXBWGrzsI2lM3dzAwt4kbR1GZr1takq5wP3+dtczxJTr5OkpP0nOcPh3ydnJfzy///PO970lTQNA1I1iUSAgJYV0mFXoxGox52M8y2Q2xb75STXt/be/a/4fcGzV5LHrmR81wkErEGkOkrv99/LBAIgCRJjoA3OTkJ8ZmZT7tP3oV8EKvmQKbDCE8URVBV1TGxC4ZCMB2LVQVisRrYjfCcphaPh0NEJ/pP3h2lJlJHiK7uwtWA6PppTKUQaR6YBZFNcUYJoI0QCWCFEAlghRAJYIUQhUKXs9haWAuHw46CE4/HYX5+vqz3sLWwYHUp5zixtT14vd5l9wivueS7PzU1RRE2qrm5Wb8wYkyf1QvLrnNgGiJKUZQc1+VzIgE0gYiAZFnmt+WCcz1AfvIrUTZeqms4B8rPH0NybATUF7O2AxK9XdDRPwRST7ggRIwybtkxLgVgzZtI6taFusDjzmLjpr4/V3S/pqYmvpULzxYHKv8sTwM69n0Gnk3bSn5f4ruP9fuBz6+UPe7LR79A8uYZUGaflrQ/AkRoxm7cEA4Ebbm+lAOvGrIyHl59L9eBtJQzgVjO1xgN24WNsa00zuUq7b5SJtcSea4wRIpwjSE2rAPtjq3lmkk+I4D1XQ5SFyYHEkCKcI27MDmQIkxalUu57I7biLFuaICroQ5ShN0wkSYHUheugjSb/8rfpvFqD1BYHmLpj1u28tPHE2p7ijWvgVIwDHJsElK3L/HN9iIfDK9uB3bsHQSpt68+HZKNi+OvageK/h7wfXicmgiJABJAAkgASQSQABJAAkgigASQABJAEqrgrzX//mIz/Wcypje//bOCX2tKLe6mJy9RhGsp27/W7NzzCfi2H9Afv4w9gsXoHVj46VrOvt0HT0PLxi2QGBuB5G9j+vP4HL5mprnx86bHcgTAtQOjILZ6M4Cs2X8COncP8PvGE5cCIQ5K/X8B2iO7MgCmFb98FJae3NcfB94f4seSE9P8Q3FUF/bt+Ag8oU0we/2bDBj/Xv+aQ/DtOJCxf8fWfg5vbvwCB4lAiyn14M4K/KDzpjFtzEXoCoysmZNmzg9yd+oAt/RD8v4YLK5AaYvsLDpGe98uDn0xOuG8CKP7Fgxxy2l2iVgGbLHVx+BNMCAvOHh0aHZtM6uDWAONx3JcEylF7cxtcuKZ7tYUcxRCTbs4Xw3E2Af6h3LqqSMAIgx0Yb76iMV/+sxB3YGo3uEfcsAWag5YWzH6rW9tdR5APHGEhBCz6yCeMDoOo4cwUc9Of8Djmz39EVtHii+vDLXUMU0E3YGQuvZ/yaOWPdebG7+oNw+EbYTHP4AHE3pM8wlfww8Im4/jaiACwU7buWeA16l0rUI34rwQoWF0pcA6HWZ2CcANAcuJi3mbyMLPV03njHW5mPDXsXcVQV5iLhXAndJAk1rUDafuNVmKsBLquweqwg/kRnh47mpw86+WI6x1vbFX0dQfxecP3xEW51x14UFr61TVnrd/V9ds2G05wqQG6sIEkGSqVwIMAG021uWJKtY8AAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABLVJREFUeNrsnF1oU2cYx59zepp+JTSp1CZaNl3AYXo1hQ0V9EIFobsYQ5gMBMFVWGFjvRHBWZjbhXjTMaEKftwIoqCXBWGrzsI2lM3dzAwt4kbR1GZr1takq5wP3+dtczxJTr5OkpP0nOcPh3ydnJfzy///PO970lTQNA1I1iUSAgJYV0mFXoxGox52M8y2Q2xb75STXt/be/a/4fcGzV5LHrmR81wkErEGkOkrv99/LBAIgCRJjoA3OTkJ8ZmZT7tP3oV8EKvmQKbDCE8URVBV1TGxC4ZCMB2LVQVisRrYjfCcphaPh0NEJ/pP3h2lJlJHiK7uwtWA6PppTKUQaR6YBZFNcUYJoI0QCWCFEAlghRAJYIUQhUKXs9haWAuHw46CE4/HYX5+vqz3sLWwYHUp5zixtT14vd5l9wivueS7PzU1RRE2qrm5Wb8wYkyf1QvLrnNgGiJKUZQc1+VzIgE0gYiAZFnmt+WCcz1AfvIrUTZeqms4B8rPH0NybATUF7O2AxK9XdDRPwRST7ggRIwybtkxLgVgzZtI6taFusDjzmLjpr4/V3S/pqYmvpULzxYHKv8sTwM69n0Gnk3bSn5f4ruP9fuBz6+UPe7LR79A8uYZUGaflrQ/AkRoxm7cEA4Ebbm+lAOvGrIyHl59L9eBtJQzgVjO1xgN24WNsa00zuUq7b5SJtcSea4wRIpwjSE2rAPtjq3lmkk+I4D1XQ5SFyYHEkCKcI27MDmQIkxalUu57I7biLFuaICroQ5ShN0wkSYHUheugjSb/8rfpvFqD1BYHmLpj1u28tPHE2p7ijWvgVIwDHJsElK3L/HN9iIfDK9uB3bsHQSpt68+HZKNi+OvageK/h7wfXicmgiJABJAAkgASQSQABJAAkgigASQABJAEqrgrzX//mIz/Wcypje//bOCX2tKLe6mJy9RhGsp27/W7NzzCfi2H9Afv4w9gsXoHVj46VrOvt0HT0PLxi2QGBuB5G9j+vP4HL5mprnx86bHcgTAtQOjILZ6M4Cs2X8COncP8PvGE5cCIQ5K/X8B2iO7MgCmFb98FJae3NcfB94f4seSE9P8Q3FUF/bt+Ag8oU0we/2bDBj/Xv+aQ/DtOJCxf8fWfg5vbvwCB4lAiyn14M4K/KDzpjFtzEXoCoysmZNmzg9yd+oAt/RD8v4YLK5AaYvsLDpGe98uDn0xOuG8CKP7Fgxxy2l2iVgGbLHVx+BNMCAvOHh0aHZtM6uDWAONx3JcEylF7cxtcuKZ7tYUcxRCTbs4Xw3E2Af6h3LqqSMAIgx0Yb76iMV/+sxB3YGo3uEfcsAWag5YWzH6rW9tdR5APHGEhBCz6yCeMDoOo4cwUc9Of8Djmz39EVtHii+vDLXUMU0E3YGQuvZ/yaOWPdebG7+oNw+EbYTHP4AHE3pM8wlfww8Im4/jaiACwU7buWeA16l0rUI34rwQoWF0pcA6HWZ2CcANAcuJi3mbyMLPV03njHW5mPDXsXcVQV5iLhXAndJAk1rUDafuNVmKsBLquweqwg/kRnh47mpw86+WI6x1vbFX0dQfxecP3xEW51x14UFr61TVnrd/V9ds2G05wqQG6sIEkGSqVwIMAG021uWJKtY8AAAAAElFTkSuQmCC'); } .fileList .ico-iso { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABH9JREFUeNrsnEtoE1EUhs9MJmlLUpu0tk20+CCotK5UEMSFCxWEuhARFFERbBcWFN1oQRTUjbpRFFRocVMRBRduCoJvQQTxsdGIFlGpNm1TW9qa1pZ5eM9NZ4w1jZlJ85xz4DLp5N7czpf/v+fMTVNB0zSgsB4iISCAOQ0p2ZOhUMjFDidY28va/GK56Pl1dVfYoSXV/hVz5lgDyOKk1+tt9fl8IElSUcDr6uqCSH///uqaGjAD0SrAfQhPFEVQVbVobOcPBKA3HJ4ViP9bA6sRXrFFicvFIaIS2Y+XKYnkEKKts/BsQLR9GZMuRKoD04RIANOESADThEgA04RIANOEKCTbzmL3wlowGCwqOJFIBEZGRkyNaWhoEKzeyhVdsHt78Hg8MfUIf7jM9Li7u5ssHB9Op9PYGIl3n9WNZdspUIeIoSjKP6qbSYkEMAFEBCTLMj+aBWd7gPzip6wcv1WXdwqU+z5BtPM8qD8Hsw5I9FSCu/EwSLXBpBDRytim2zgVgBlPImMP23MCjyuLzTt27+p/+zkcDt7MwsuKApWBWBng3nQAXEvXpDxu6OJO47Hv4A3T805+fA7Ru5dAGfyeUn8EiNDis3FeKBC02PpiBt5shJX5cPfdrALpVi4BRDMfY+RtFo63bbp2Nhu6+lIpriXSXHKIZOEMQ8xbBWbbtpbXTNIZAczt7SBlYVIgASQLZzgLkwLJwhQFeSs3PePmo63zGmAhrINkYTsU0qRAysKzEFqW/8o/S/NlHqAQm2Li7cOs8jPmEzJ7iRlfAyV/EORwF4w9usZb1hd5f7CwFeje2AJS3fLcZEg2L85f0AoUvbVQvvUYJREKAkgACSABpCCABJAAEkAKAkgACSABpMBI+m3Nr4fq6T+TsVh44X0a39aUSuxNT54gC2cycvKxZvXuc+Dw+qH30p7YL+ELQMX6JihrWGf0GQ89geEH7SAPhY1zJYtXQsWGJnAFlhrnoq87Yfh+G6i/ftoziYilHpi76yw4GMSec1vg26kNEOk4As7AEn5eD/eqRg5eYUCn96tpvszfBFsCdDI1Sb55TEXthoomPr/mysLzqDaEjArFcz9un/6r3wCDKJaVQ/naHfYEqE3BQGsiKD1Gn93iKpsMf+TqE0vLIfqq85/xCBPBulc2/jW+qNfA+EBAww/amMKaYd6RO8a6Jg/1cIj8XWYK0/smTJRT6yQqdqY+RQtQVxs2VJqLWzrAFYVt4PpRysLJImZPDweIFo1CzKYIEpMDPq+OjxrnEilMTyCoWltmYbTv9PULQSEQfe1Tf41ymInGo1LR9rkoZXIOcDz0lMOZy0qU+PrOt/kwX9PG3j3hYLAmRFBV244bsLEuxHGo0NFnN+1pYUwAAx1HWRmynVs2XoFY52GpwhMLU6E8GObZWk82+VBIJ91M+NK6WhHkCaZSAewZGmhSibrozAuHJQsrgeUvQFX4C9kRHl676q9/adnCWuWCjYqmPhb7PqwQxodttfGglVWoau2yN2rVovWWLUxRAFmYANo8fgswAF4ssuGz3PXWAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABH9JREFUeNrsnEtoE1EUhs9MJmlLUpu0tk20+CCotK5UEMSFCxWEuhARFFERbBcWFN1oQRTUjbpRFFRocVMRBRduCoJvQQTxsdGIFlGpNm1TW9qa1pZ5eM9NZ4w1jZlJ85xz4DLp5N7czpf/v+fMTVNB0zSgsB4iISCAOQ0p2ZOhUMjFDidY28va/GK56Pl1dVfYoSXV/hVz5lgDyOKk1+tt9fl8IElSUcDr6uqCSH///uqaGjAD0SrAfQhPFEVQVbVobOcPBKA3HJ4ViP9bA6sRXrFFicvFIaIS2Y+XKYnkEKKts/BsQLR9GZMuRKoD04RIANOESADThEgA04RIANOEKCTbzmL3wlowGCwqOJFIBEZGRkyNaWhoEKzeyhVdsHt78Hg8MfUIf7jM9Li7u5ssHB9Op9PYGIl3n9WNZdspUIeIoSjKP6qbSYkEMAFEBCTLMj+aBWd7gPzip6wcv1WXdwqU+z5BtPM8qD8Hsw5I9FSCu/EwSLXBpBDRytim2zgVgBlPImMP23MCjyuLzTt27+p/+zkcDt7MwsuKApWBWBng3nQAXEvXpDxu6OJO47Hv4A3T805+fA7Ru5dAGfyeUn8EiNDis3FeKBC02PpiBt5shJX5cPfdrALpVi4BRDMfY+RtFo63bbp2Nhu6+lIpriXSXHKIZOEMQ8xbBWbbtpbXTNIZAczt7SBlYVIgASQLZzgLkwLJwhQFeSs3PePmo63zGmAhrINkYTsU0qRAysKzEFqW/8o/S/NlHqAQm2Li7cOs8jPmEzJ7iRlfAyV/EORwF4w9usZb1hd5f7CwFeje2AJS3fLcZEg2L85f0AoUvbVQvvUYJREKAkgACSABpCCABJAAEkAKAkgACSABpMBI+m3Nr4fq6T+TsVh44X0a39aUSuxNT54gC2cycvKxZvXuc+Dw+qH30p7YL+ELQMX6JihrWGf0GQ89geEH7SAPhY1zJYtXQsWGJnAFlhrnoq87Yfh+G6i/ftoziYilHpi76yw4GMSec1vg26kNEOk4As7AEn5eD/eqRg5eYUCn96tpvszfBFsCdDI1Sb55TEXthoomPr/mysLzqDaEjArFcz9un/6r3wCDKJaVQ/naHfYEqE3BQGsiKD1Gn93iKpsMf+TqE0vLIfqq85/xCBPBulc2/jW+qNfA+EBAww/amMKaYd6RO8a6Jg/1cIj8XWYK0/smTJRT6yQqdqY+RQtQVxs2VJqLWzrAFYVt4PpRysLJImZPDweIFo1CzKYIEpMDPq+OjxrnEilMTyCoWltmYbTv9PULQSEQfe1Tf41ymInGo1LR9rkoZXIOcDz0lMOZy0qU+PrOt/kwX9PG3j3hYLAmRFBV244bsLEuxHGo0NFnN+1pYUwAAx1HWRmynVs2XoFY52GpwhMLU6E8GObZWk82+VBIJ91M+NK6WhHkCaZSAewZGmhSibrozAuHJQsrgeUvQFX4C9kRHl676q9/adnCWuWCjYqmPhb7PqwQxodttfGglVWoau2yN2rVovWWLUxRAFmYANo8fgswAF4ssuGz3PXWAAAAAElFTkSuQmCC'); } .fileList .ico-rar { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABGNJREFUeNrsnEtoE1EUhs+k07Q1qclUahMtvoJK05UtCCrUhQpCXblRBEFQFxaUdiMFQVA34qaioC6KG0EU3BYE6xNUEI0bqWjxRZWo0UpfaSOZGe+5adIkjdPMpJkkM+fAZSYzk3uZL/85/52bpoKqqkBhPByEgACWNEStk0NDQ062Oc3aIdZWWuWmVzY3X2Wbrnyv9yxdagwgizNer7dXkiQQRdES8IaHhyHy8+exxuXLQQ9EowAPIzyHwwGKolgm7Xx+P3wPhxcF4kI1sBHhWS1qnE4OEZXIXl4hEykhRFu78GJAtP00plCINA8sECIBLBAiASwQIgEsECIBLBCioLWcxZ6F1UAgYCk4kUgExsfHdb0nGAwKRh/lLBfs2R7cbndCPcIcl//tj4yMUAqnR3V1dWphJD37jC4s206BSYgYsizPU93/lEgAc0BEQPF4nG/1grM9QH7zs6mcvlRXdgqM//gAUwN9oEyOmg7I4W4AV2cPiE0BTYiYytiy0zgfgEU3keiD/pLA48pi40bvXVvwuqqqKt70wjNFgfKvxDTAtfs4ODdsyft9fy4dSO1LJ27qHvfv++cwdfcyyKPf8roeASK0dDcuCwWCmqgveuAtRhgZD1ff9SqQHuVyQNTzNUbZunB62haaznojqb58JtciaU4bIqVwkSGWrQLNTlvDNZN0RgBL+zhILkwKJICUwkV2YVIgpTBFRT7KZTtuOaZ1WQOshDpIKWyHiTQpkFx4EUI1+a/8TRqv+ACFxBCxNw9M5ZcaTyjuLRa9Boq+AMTDwxB9eJ0304u8L1DZCnTt6gKxubU0DsnGxfErWoEObxPU7z1FJkJBAAkgASSAFASQABJAAkhBAAkgASSAFBiav9b80t1C/5mMxeqLbwv4taZYY2968RilcDHDtK81a9a2QePBCznPTTy7BWOD/ZmfbK0bfCdusG09fL98EOJ/wqlz9dv2gWfH0Xn9KDMTMHa/H6ZeDVgPYDIiN05C7FMo9drV3glSZw8HlH7jda3bOTyEUhfsgImnt+f19fXszozX0p4e3lfsYygDuKVdGKEhJKd/Q8ZxV1snTA89Zu0J38+3L672dW32m8ZgyiYDYWKLMngzTE2itIKXACN9WR4g1jNM1cmM9O3gqkwo8DHfd7cvrELPziP8WkvXwFxGgiaSURd5+j6ZS83QANRv3c9A9zFAk6njzacH5/X1+865jGssbyJJR535EOLH0VRQkQgxu/bhuXQzyTYR/HCkPd3MRF6ZBrEsTITXvRXr+XZJcDv8Db/ncNIbHqtj57QCywDCx5ppmxqISsG6xdNB8nOzwLqXHXgMjUXLTOTZqYtgJxPhEKcnuLpcs0aRywSSx7TMJPlB1AbMm8ZoLiZ87t0sC/EYgyyAPUMFVaxR1px/UWVIgbK/9QUoMu/IjvDw3hVfy0vDLqw2rNolq8ojx493m4TpMVstPKh1HkVp2vhaWbZmh+EUpqigRzkCaNP4J8AArrWcCArY0yoAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABGNJREFUeNrsnEtoE1EUhs+k07Q1qclUahMtvoJK05UtCCrUhQpCXblRBEFQFxaUdiMFQVA34qaioC6KG0EU3BYE6xNUEI0bqWjxRZWo0UpfaSOZGe+5adIkjdPMpJkkM+fAZSYzk3uZL/85/52bpoKqqkBhPByEgACWNEStk0NDQ062Oc3aIdZWWuWmVzY3X2Wbrnyv9yxdagwgizNer7dXkiQQRdES8IaHhyHy8+exxuXLQQ9EowAPIzyHwwGKolgm7Xx+P3wPhxcF4kI1sBHhWS1qnE4OEZXIXl4hEykhRFu78GJAtP00plCINA8sECIBLBAiASwQIgEsECIBLBCioLWcxZ6F1UAgYCk4kUgExsfHdb0nGAwKRh/lLBfs2R7cbndCPcIcl//tj4yMUAqnR3V1dWphJD37jC4s206BSYgYsizPU93/lEgAc0BEQPF4nG/1grM9QH7zs6mcvlRXdgqM//gAUwN9oEyOmg7I4W4AV2cPiE0BTYiYytiy0zgfgEU3keiD/pLA48pi40bvXVvwuqqqKt70wjNFgfKvxDTAtfs4ODdsyft9fy4dSO1LJ27qHvfv++cwdfcyyKPf8roeASK0dDcuCwWCmqgveuAtRhgZD1ff9SqQHuVyQNTzNUbZunB62haaznojqb58JtciaU4bIqVwkSGWrQLNTlvDNZN0RgBL+zhILkwKJICUwkV2YVIgpTBFRT7KZTtuOaZ1WQOshDpIKWyHiTQpkFx4EUI1+a/8TRqv+ACFxBCxNw9M5ZcaTyjuLRa9Boq+AMTDwxB9eJ0304u8L1DZCnTt6gKxubU0DsnGxfErWoEObxPU7z1FJkJBAAkgASSAFASQABJAAkhBAAkgASSAFBiav9b80t1C/5mMxeqLbwv4taZYY2968RilcDHDtK81a9a2QePBCznPTTy7BWOD/ZmfbK0bfCdusG09fL98EOJ/wqlz9dv2gWfH0Xn9KDMTMHa/H6ZeDVgPYDIiN05C7FMo9drV3glSZw8HlH7jda3bOTyEUhfsgImnt+f19fXszozX0p4e3lfsYygDuKVdGKEhJKd/Q8ZxV1snTA89Zu0J38+3L672dW32m8ZgyiYDYWKLMngzTE2itIKXACN9WR4g1jNM1cmM9O3gqkwo8DHfd7cvrELPziP8WkvXwFxGgiaSURd5+j6ZS83QANRv3c9A9zFAk6njzacH5/X1+865jGssbyJJR535EOLH0VRQkQgxu/bhuXQzyTYR/HCkPd3MRF6ZBrEsTITXvRXr+XZJcDv8Db/ncNIbHqtj57QCywDCx5ppmxqISsG6xdNB8nOzwLqXHXgMjUXLTOTZqYtgJxPhEKcnuLpcs0aRywSSx7TMJPlB1AbMm8ZoLiZ87t0sC/EYgyyAPUMFVaxR1px/UWVIgbK/9QUoMu/IjvDw3hVfy0vDLqw2rNolq8ojx493m4TpMVstPKh1HkVp2vhaWbZmh+EUpqigRzkCaNP4J8AArrWcCArY0yoAAAAASUVORK5CYII='); } .fileList .ico-zip { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA+hJREFUeNrsnF1IU2EYx5+zHTdkU7eZuuUocWA4r/QiqC68UCHQqxCKiAiqiwRD74RKyKu6UhIqULoJouhWIcjsAyqQsJtY5IgKq5krze8m56P3PWtruA/Px77P84fDmTvvu5fz2/95n+d958aIoggo9TIgAgSYU7GpLvp8PhM5DZLjDDlqi+Wma93uW+TUI7d9RXm5OoBEV20224DdbgeWZYsCnt/vh+Di4oWq6mpQAlEtwLMUnsFgAEEQiibsnC4XLAQCaYG42xxYReEVm8wmkwSROpH8eROTSA4h6joLpwOi7ssYrRCxDtQIEQFqhIgANUJEgBohIkCNEJlU21lkLSx6PJ6ighMMBmF1dVVRH6/Xy6hdyhWdyNoerFZr2D3Mfy7JHs/Pz2MIx6qkpCS6MRIbfWo3lnXnwAhEKp7n41yXzIkIMAFECojjOOmsFJzuAUo3/y+UY7fq8s6B3I+PsDE5DML6UtYBGawOsHT2A1vjSQmRhjI9doaxHIAZTyKb0+M5gSc5i4y7+fj2ru2MRqN0KIWXFQfyP8NlgOVoL5gaDsnut3zjZPSx/eI9xeNuz72GjUejwC99k9WeAqTQYrNxXjgQxPD8ogReOqRmPLr7rtSBuJRLAFHJxxh5m4Vjw1ZrOCtVxH1yimsWPZcaIoZwhiHmrQOzHbaq50z0GQLM7XIQszA6EAFiCGc4C6MDMYRRBbmU25lx8zGs8xpgIcyDGMJ6KKTRgZiF0yAxy//ln6XxMg+QCQ8RejedVX7R8ZjM3mLG50DW6QEu4IfNp3ekI+uTvNNT2A60dPQA627KTYYk49LxC9qBBlsNlB27hEkEhQARIAJEgCgEiAARIAJEIUAEiAARIIoq5bc1v/Q14i+TEe0fea/h25qsWd/0uBCGcCaVk481WbsLnL13k15feTIGay8fgHtwCjZmJ2F5YhjKjhyHirbzcW23A3Pwe2JEOusGILccgK9D7XHPV3ZfAXN9C2z5XiTtG9uPvhF7Tl0HR/dlWBg9re8sXNF+Dkq9rcRtIxJguW8EdShr3yvB1C1ACq7s8AlYe3WfuO851oFK50N7Vx+EPs3CytS44r6Wlk7ixO+yXVsUc2CsHGTeE7bW4NfDIVntaWJJlER0lYUjsnf1g8nVAItjPSD8WZfVJ1Hy0WUI07KEhh8tWXJVghQsQOo6WtPRhEHrPSykFcpc3xzNvu7B1rjrkeK54DcTPg8c5BkuRFzKgD4lgsiahbprM0ZVIcy7mmZA4KUX0iM8eu+Cs/GN6hAWHfs6eFF4ZvjxoZnZWtHVxoNYWiEINQfeCpV1bapDGFVAa2EEqFP9FWAAVhNMgyXjjfoAAAAASUVORK5CYII=") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA+hJREFUeNrsnF1IU2EYx5+zHTdkU7eZuuUocWA4r/QiqC68UCHQqxCKiAiqiwRD74RKyKu6UhIqULoJouhWIcjsAyqQsJtY5IgKq5krze8m56P3PWtruA/Px77P84fDmTvvu5fz2/95n+d958aIoggo9TIgAgSYU7GpLvp8PhM5DZLjDDlqi+Wma93uW+TUI7d9RXm5OoBEV20224DdbgeWZYsCnt/vh+Di4oWq6mpQAlEtwLMUnsFgAEEQiibsnC4XLAQCaYG42xxYReEVm8wmkwSROpH8eROTSA4h6joLpwOi7ssYrRCxDtQIEQFqhIgANUJEgBohIkCNEJlU21lkLSx6PJ6ighMMBmF1dVVRH6/Xy6hdyhWdyNoerFZr2D3Mfy7JHs/Pz2MIx6qkpCS6MRIbfWo3lnXnwAhEKp7n41yXzIkIMAFECojjOOmsFJzuAUo3/y+UY7fq8s6B3I+PsDE5DML6UtYBGawOsHT2A1vjSQmRhjI9doaxHIAZTyKb0+M5gSc5i4y7+fj2ru2MRqN0KIWXFQfyP8NlgOVoL5gaDsnut3zjZPSx/eI9xeNuz72GjUejwC99k9WeAqTQYrNxXjgQxPD8ogReOqRmPLr7rtSBuJRLAFHJxxh5m4Vjw1ZrOCtVxH1yimsWPZcaIoZwhiHmrQOzHbaq50z0GQLM7XIQszA6EAFiCGc4C6MDMYRRBbmU25lx8zGs8xpgIcyDGMJ6KKTRgZiF0yAxy//ln6XxMg+QCQ8RejedVX7R8ZjM3mLG50DW6QEu4IfNp3ekI+uTvNNT2A60dPQA627KTYYk49LxC9qBBlsNlB27hEkEhQARIAJEgCgEiAARIAJEIUAEiAARIIoq5bc1v/Q14i+TEe0fea/h25qsWd/0uBCGcCaVk481WbsLnL13k15feTIGay8fgHtwCjZmJ2F5YhjKjhyHirbzcW23A3Pwe2JEOusGILccgK9D7XHPV3ZfAXN9C2z5XiTtG9uPvhF7Tl0HR/dlWBg9re8sXNF+Dkq9rcRtIxJguW8EdShr3yvB1C1ACq7s8AlYe3WfuO851oFK50N7Vx+EPs3CytS44r6Wlk7ixO+yXVsUc2CsHGTeE7bW4NfDIVntaWJJlER0lYUjsnf1g8nVAItjPSD8WZfVJ1Hy0WUI07KEhh8tWXJVghQsQOo6WtPRhEHrPSykFcpc3xzNvu7B1rjrkeK54DcTPg8c5BkuRFzKgD4lgsiahbprM0ZVIcy7mmZA4KUX0iM8eu+Cs/GN6hAWHfs6eFF4ZvjxoZnZWtHVxoNYWiEINQfeCpV1bapDGFVAa2EEqFP9FWAAVhNMgyXjjfoAAAAASUVORK5CYII='); } .fileList .ico-bt { - background-image: url("../img/ico/ico-bt.png") + background-image: url('../img/ico/ico-bt.png'); } .fileList .ico-file { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAehJREFUeNrs3D9PwkAcxvFrKXUhCAMEAhsbL8nJxElfgYPR+CZ0MnHyJbEwMkDoQGAG6h2CNlIo16t/cvd9kktL2g73ye9a7gj14jgWJH88AAH8v4CDwSCUm3vZLmXr2NLpTrf7LDc3p55/Xq0ePBZkXPtYq9Vu6/W6CILACrzhcCii6fS60WwKHcS8gFcKz/d9sV6vrRl2rXZbTMbjQhD9jOMNhWdbzsJwg6gqUX58+klAa1MUorOARSE6DVgEovOApogAGiICaIgIoCEigIaIWXPhuNfrWYUTRZFYLBZa1/T7fS/vVM66yLm9qFQqH9Xjfbkc2h+NRgzhZMrl8ufCSHL05V3Wc64Cd4gqq9Vqr+oOVSKAKYgKaLlcbra6cM4Dbjq/HcrJpTpdSOe/xijEUqm0N4y/VyUVeCQ7QFWJafdCAE9EVGjJpzFDWDNq9V23AgFMQdT5GQPAtPntiQ8Q7oEZiFTgLyACaHrPhABAAAEEkAAIIIAAEgABBBBAAiCAAAJIAAQQQAAJgAACCCABEEAAASQAAggggARAAAEEkAAIIIAAEgABBNBywCj5bhXXsu17ZAL4MpvNhIuIqs+q7zKvx87L+sP1w3w+D2W7kPstxwwnsr3JdnfsJF4FbxgAAfzbvAswAK/3kejP2oZLAAAAAElFTkSuQmCC") + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAehJREFUeNrs3D9PwkAcxvFrKXUhCAMEAhsbL8nJxElfgYPR+CZ0MnHyJbEwMkDoQGAG6h2CNlIo16t/cvd9kktL2g73ye9a7gj14jgWJH88AAH8v4CDwSCUm3vZLmXr2NLpTrf7LDc3p55/Xq0ePBZkXPtYq9Vu6/W6CILACrzhcCii6fS60WwKHcS8gFcKz/d9sV6vrRl2rXZbTMbjQhD9jOMNhWdbzsJwg6gqUX58+klAa1MUorOARSE6DVgEovOApogAGiICaIgIoCEigIaIWXPhuNfrWYUTRZFYLBZa1/T7fS/vVM66yLm9qFQqH9Xjfbkc2h+NRgzhZMrl8ufCSHL05V3Wc64Cd4gqq9Vqr+oOVSKAKYgKaLlcbra6cM4Dbjq/HcrJpTpdSOe/xijEUqm0N4y/VyUVeCQ7QFWJafdCAE9EVGjJpzFDWDNq9V23AgFMQdT5GQPAtPntiQ8Q7oEZiFTgLyACaHrPhABAAAEEkAAIIIAAEgABBBBAAiCAAAJIAAQQQAAJgAACCCABEEAAASQAAggggARAAAEEkAAIIIAAEgABBNBywCj5bhXXsu17ZAL4MpvNhIuIqs+q7zKvx87L+sP1w3w+D2W7kPstxwwnsr3JdnfsJF4FbxgAAfzbvAswAK/3kejP2oZLAAAAAElFTkSuQmCC'); } .fileList .ico-apk { - background-image: url("../img/ico/ico-apk.png") + background-image: url('../img/ico/ico-apk.png'); } .fileList .ico-css { - background-image: url("../img/ico/ico-css.png") + background-image: url('../img/ico/ico-css.png'); } .ico-cmd { - background: url("../img/soft_ico/ico-cmd.png") no-repeat center center; + background: url('../img/soft_ico/ico-cmd.png') no-repeat center center; height: 18px; width: 16px; - display: block + display: block; } .btn:hover .ico-cmd { - background: url("../img/soft_ico/ico-cmd-hover.png") no-repeat center center; + background: url('../img/soft_ico/ico-cmd-hover.png') no-repeat center center; height: 18px; width: 16px; - display: block + display: block; } .fileUploadDiv { - padding: 10px + padding: 10px; } #file_input { - display: none + display: none; } #up_box { @@ -3906,7 +3974,7 @@ ul.cmdlist { padding: 10px; clear: both; height: 360px; - overflow: auto + overflow: auto; } #up_box li { @@ -3916,7 +3984,7 @@ ul.cmdlist { font-size: 12px; width: 100%; margin: 0 0 5px; - padding: 0 + padding: 0; } #up_box li .filename { @@ -3926,14 +3994,14 @@ ul.cmdlist { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - width: 230px + width: 230px; } #up_box li .filesize { color: #999; display: inline-block; height: 30px; - overflow: hidden + overflow: hidden; } .fileUploadDiv button { @@ -3945,7 +4013,7 @@ ul.cmdlist { height: 30px; color: #fff; margin-bottom: 10px; - cursor: pointer + cursor: pointer; } #up { @@ -3956,7 +4024,7 @@ ul.cmdlist { margin-left: 10px; position: absolute; bottom: 0; - right: 10px + right: 10px; } #filesClose { @@ -3965,41 +4033,41 @@ ul.cmdlist { right: 95px; background-color: #cbcbcb; border-color: #cbcbcb; - color: #fff + color: #fff; } #opt { background-color: #4592f0; - border-color: #367fa9 + border-color: #367fa9; } #up_box li em { font-style: normal; - color: #06F; + color: #06f; float: right; - margin-right: 10px + margin-right: 10px; } .cancel { float: right; cursor: pointer; - color: #c00 + color: #c00; } #textBody { min-height: 450px; - _height: 450px + _height: 450px; } #filesClose:hover { background-color: #c9302c; border-color: #ac2925; - color: #fff + color: #fff; } #up:hover { background-color: #449d44; - border-color: #398439 + border-color: #398439; } #totalProgress progress { @@ -4008,15 +4076,13 @@ ul.cmdlist { border: 1px solid #ccc; background-color: #e6e6e6; color: #0064b4; - opacity: .9 + opacity: 0.9; } #totalProgress p { - color: #666 -} -.setchmod{ - padding: 25px 0 75px 0; + color: #666; } + .setchmod .bt_tab_list { background-color: #ececec; font-size: 0; @@ -4031,10 +4097,10 @@ ul.cmdlist { text-align: center; cursor: pointer; } -.bt_tab_list .active{ +.bt_tab_list .active { background: #fff; } -.setchmod .setchmodnum{ +.setchmod .setchmodnum { padding: 0 23px 0; margin: 0; } @@ -4045,7 +4111,7 @@ ul.cmdlist { float: left; width: 125px; padding-bottom: 10px; - border-radius: 3px + border-radius: 3px; } .setchmod legend { @@ -4053,43 +4119,43 @@ ul.cmdlist { border: 0; width: auto; margin: 0 6px; - font-size: 14px + font-size: 14px; } .setchmod fieldset p { - margin-left: 10px + margin-left: 10px; } .setchmod fieldset p input { position: relative; top: 2px; - margin-right: 5px + margin-right: 5px; } .setchmodnum { clear: both; - margin: 0 15px -10px + margin: 0 15px -10px; } .setchmodnum #access, #chown { width: 60px; margin-right: 5px; - height: 28px + height: 28px; } .setchmodnum span { - margin-left: 10px + margin-left: 10px; } #chown { - margin-left: 5px + margin-left: 5px; } .shellcode { margin-bottom: 5px; height: 490px; - overflow: auto + overflow: auto; } .shellcode pre { @@ -4099,41 +4165,41 @@ ul.cmdlist { border: 0 none; border-radius: 0; min-height: 490px; - margin: 0 + margin: 0; } #mExec { width: 89%; margin-top: 0; - float: left + float: left; } .editmenu { - text-align: right + text-align: right; } #filesBody { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; - user-select: none + user-select: none; } .folderBox input { - display: none + display: none; } -.fileList>div:hover, +.fileList > div:hover, .fileList div.ui-selecting { background: #f6f8fd; - border-color: #d3dfec + border-color: #d3dfec; } .fileList div.active, .fileList div.focus, .fileList div.ui-selected { background: #eff3f9 none repeat scroll 0 0; - border-color: #bcccde + border-color: #bcccde; } .fileList .file { @@ -4144,11 +4210,11 @@ ul.cmdlist { height: 136px; margin: 0 5px 10px 0; text-align: center; - width: 112px + width: 112px; } .fileList div.file { - transition: all .2s ease 0s + transition: all 0.2s ease 0s; } .fileList .file .titleBox { @@ -4160,27 +4226,27 @@ ul.cmdlist { text-align: center; text-overflow: ellipsis; width: 100px; - margin-left: 5px + margin-left: 5px; } #DirPathPlace { display: none; - padding: 0 + padding: 0; } -#DirPathPlace>input { +#DirPathPlace > input { border: 1px solid #ccc; height: 28px; line-height: 28px; padding: 0 5px; - width: 280px + width: 280px; } -#DirPathPlace>input:active, -#DirPathPlace>input:focus { +#DirPathPlace > input:active, +#DirPathPlace > input:focus { border: #66afe9 1px solid; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6) + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } #PathPlaceBtn { @@ -4191,30 +4257,30 @@ ul.cmdlist { padding: 0; width: 290px; cursor: text; - overflow: hidden + overflow: hidden; } #PathPlaceBtn ul { display: inline-block; height: 26px; width: auto; - position: relative + position: relative; } #PathPlaceBtn li { - background: url("../img/ico/ico-ltr.png") no-repeat right center; + background: url('../img/ico/ico-ltr.png') no-repeat right center; padding-left: 10px; padding-right: 18px; float: left; height: 26px; - line-height: 26px + line-height: 26px; } #PathPlaceBtn li a { display: inline-block; cursor: pointer; height: 26px; - line-height: 26px + line-height: 26px; } .backBtn { @@ -4223,7 +4289,7 @@ ul.cmdlist { height: 28px; line-height: 8px; margin-right: -1px; - margin-top: -1px + margin-top: -1px; } #tipTools { @@ -4235,38 +4301,38 @@ ul.cmdlist { left: 0; z-index: 999; } -.file-box .divtable .table{ +.file-box .divtable .table { border: 1px solid #ddd; } .re-head { border-bottom: 1px solid #ccc; float: left; padding: 15px 20px; - width: 100% + width: 100%; } .re-con { float: left; height: 567px; - width: 100% + width: 100%; } .re-con-menu { background-color: #f0f0f1; float: left; height: 100%; - width: 120px + width: 120px; } .re-con-menu p { cursor: pointer; line-height: 40px; padding-left: 30px; - position: relative + position: relative; } .re-con-menu p.on { - background-color: #fff + background-color: #fff; } .re-con-con { @@ -4275,22 +4341,22 @@ ul.cmdlist { padding: 15px; } -@media only screen and (max-width:768px) { - .sys-i-c-box:nth-of-type(3){ +@media only screen and (max-width: 768px) { + .sys-i-c-box:nth-of-type(3) { margin-top: 20px; } } -@media only screen and (max-width:990px) { +@media only screen and (max-width: 990px) { .pr8 { - padding-right: 0 + padding-right: 0; } .pl7 { padding-left: 0; - margin-top: 15px + margin-top: 15px; } } -@media only screen and (max-width:1200px) { - .btvipbox{ +@media only screen and (max-width: 1200px) { + .btvipbox { margin-top: 20px; } } @@ -4308,16 +4374,16 @@ ul.cmdlist { line-height: 16px; margin-left: 5px; text-align: center; - width: 16px + width: 16px; } .bt-ico-ask:hover { background-color: #fb7d00; - color: #fff + color: #fff; } #RecycleBody .tname { - line-height: 30px + line-height: 30px; } /* .menu-sub { @@ -4347,7 +4413,7 @@ ul.cmdlist { height: 16px; line-height: 16px; position: relative; - margin: 5px 0 + margin: 5px 0; } .bt-progress-bar { @@ -4357,26 +4423,26 @@ ul.cmdlist { max-width: 100%; position: absolute; text-align: right; - transition: all .3s ease 0s; - width: 0 + transition: all 0.3s ease 0s; + width: 0; } .bt-progress-text { font-size: 12px; color: #fff; padding: 0 10px; - position: static + position: static; } -.openlite_set .tname{ +.openlite_set .tname { width: 150px; } -.openlite_set .openlite_button .tname{ +.openlite_set .openlite_button .tname { width: 145px; } -.conf_p{ +.conf_p { overflow: hidden; } -.conf_p p{ +.conf_p p { margin-bottom: 8px; } .conf_p span { @@ -4385,40 +4451,40 @@ ul.cmdlist { width: 140px; text-align: right; } -.btvipbox{ +.btvipbox { border: #ddd 1px solid; } -.btvip{ +.btvip { border-right: #ddd 1px solid; float: left; width: 40%; height: 108px; text-align: center; } -.btvip-r{ +.btvip-r { width: 60%; float: right; overflow: hidden; } -.btvip .t2{ +.btvip .t2 { font-size: 16px; padding: 10px 0 5px; float: left; width: 100%; } -.btvip p{ +.btvip p { float: left; width: 100%; margin-bottom: 8px; font-size: 14px; } -.btvip p .price{ +.btvip p .price { margin-right: 3px; } -.btvipinfo{ +.btvipinfo { width: 200px; float: left; - padding:5px 10px; + padding: 5px 10px; line-height: 32px; } /*付费插件*/ @@ -4431,10 +4497,11 @@ ul.cmdlist { height: 34px; line-height: 34px; } -.libLogin .line{ +.libLogin .line { margin-bottom: 10px; } -.libLogin .login-button,.shuoming .login-button { +.libLogin .login-button, +.shuoming .login-button { width: 300px; height: 36px; background: #20a53a; @@ -4449,11 +4516,16 @@ ul.cmdlist { border-radius: 3px; cursor: pointer; } -.libLogin .login-button:hover,.shuoming .login-button:hover{background:#10952a;background:linear-gradient(#10952a,#088d22);border:1px solid #10952a} -.shuoming{ +.libLogin .login-button:hover, +.shuoming .login-button:hover { + background: #10952a; + background: linear-gradient(#10952a, #088d22); + border: 1px solid #10952a; +} +.shuoming { line-height: 24px; } -.shuoming .login-button{ +.shuoming .login-button { width: 100px; height: 30px; font-size: 14px; @@ -4466,7 +4538,7 @@ ul.cmdlist { background-color: #f9f9f9; overflow: auto; } -.libPay .btn-group .btn{ +.libPay .btn-group .btn { width: 80px; } .libPay .btn-group .btn em { @@ -4480,22 +4552,22 @@ ul.cmdlist { font-size: 10px; line-height: 19px; color: #fff; - transform: scale(.9, .8); + transform: scale(0.9, 0.8); font-style: normal; } -.libPay .price{ +.libPay .price { font-size: 28px; - color: #FF6600; + color: #ff6600; margin-right: 3px; line-height: 30px; } -.libPay .sprice{ +.libPay .sprice { font-size: 14px; display: inline-block; line-height: 30px; margin-right: 3px; } -.wxPay{ +.wxPay { width: 160px; margin: 10px auto 20px; } @@ -4504,7 +4576,7 @@ ul.cmdlist { padding: 6px; width: 160px; } -.wx-pic{ +.wx-pic { width: 160px; height: 36px; background: url(/static/images/weixin.png) no-repeat top center; @@ -4513,20 +4585,21 @@ ul.cmdlist { .wx-pay-info { width: 160px; height: 30px; - background-color: #00C800; + background-color: #00c800; color: #fff; font-size: 14px; line-height: 30px; text-align: center; margin-top: 10px; } -.color-red{ - color:red; +.color-red { + color: red; } -.color-green{ - color:green; +.color-green { + color: green; } -.btpro,.btpro-gray { +.btpro, +.btpro-gray { background-position: 10px center; background-repeat: no-repeat; padding: 2px 0 2px 64px; @@ -4537,24 +4610,25 @@ ul.cmdlist { .btpro { background-image: url('../img/pro.svg'); } -.btpro-gray{ +.btpro-gray { background-image: url('../img/pro-default.svg'); } /*插件付费*/ -.wx-pay-ico{ - background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAMAAAAR8Wy4AAAAA3NCSVQICAjb4U/gAAAAtFBMVEUAzABM2Ezx/PHB8sEazhqf6p+B5IE61TrU9tRm3mYq0Sqz77P///8Lygvj+ePI88iP549U2lR54nlF10Wm7KY31Dcj0CPS9dL1/fW58Lnr++sx0zHY99jD8sMSzBJc3FxA1kCU6JQfzx+t7a1s32zm+uaj66O377cPyw+q7ar////c99zH88fL9Mu177VG10Yk0CSR55Eczxw81TzX9tdp32k41Ti78Lsy0zLF88UhzyHB88EyB+unAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAFnRFWHRDcmVhdGlvbiBUaW1lADA1LzI5LzE4XO1tXgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAACTSURBVAiZRU8JDsIwDHNXGMcCjHNjMBhnQTAVcQjE/x9G0qHOUtLYal0HJEiiXaQzN4JrU/TAmL2WTgjG8GiyEHxqvj2yEHra0pdYEW7AgwtqTnkBXMF+w35n3aanlWtnEZATpfvq3QRd7jaNV3+jAWI5Gt6Yc0zrb3EqJZjy/Ktd9DdwF7oYZdUuoU0OxpjS7UY/XkQJtfApswsAAAAASUVORK5CYII=") no-repeat; +.wx-pay-ico { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAMAAAAR8Wy4AAAAA3NCSVQICAjb4U/gAAAAtFBMVEUAzABM2Ezx/PHB8sEazhqf6p+B5IE61TrU9tRm3mYq0Sqz77P///8Lygvj+ePI88iP549U2lR54nlF10Wm7KY31Dcj0CPS9dL1/fW58Lnr++sx0zHY99jD8sMSzBJc3FxA1kCU6JQfzx+t7a1s32zm+uaj66O377cPyw+q7ar////c99zH88fL9Mu177VG10Yk0CSR55Eczxw81TzX9tdp32k41Ti78Lsy0zLF88UhzyHB88EyB+unAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAFnRFWHRDcmVhdGlvbiBUaW1lADA1LzI5LzE4XO1tXgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAACTSURBVAiZRU8JDsIwDHNXGMcCjHNjMBhnQTAVcQjE/x9G0qHOUtLYal0HJEiiXaQzN4JrU/TAmL2WTgjG8GiyEHxqvj2yEHra0pdYEW7AgwtqTnkBXMF+w35n3aanlWtnEZATpfvq3QRd7jaNV3+jAWI5Gt6Yc0zrb3EqJZjy/Ktd9DdwF7oYZdUuoU0OxpjS7UY/XkQJtfApswsAAAAASUVORK5CYII=') + no-repeat; display: inline-block; width: 16px; height: 14px; } -.libPay-item{ +.libPay-item { margin-bottom: 30px; } -.libPay-item .li-tit{ +.libPay-item .li-tit { margin-bottom: 10px; } -.libPay-item .li-c-item li{ +.libPay-item .li-c-item li { font-size: 0; border: #ddd 1px solid; border-radius: 4px; @@ -4563,98 +4637,103 @@ ul.cmdlist { padding: 0 20px; cursor: pointer; box-sizing: border-box; - transition: border-color .1s ease-in,color .1s ease-in; + transition: border-color 0.1s ease-in, color 0.1s ease-in; } -.libPay-item .li-c-item li:hover{ +.libPay-item .li-c-item li:hover { border: #20a53a 1px solid; - color: #20A53A; + color: #20a53a; } -.libPay-item .li-c-item li.active,.libPay-item .li-c-item li.active:hover{ +.libPay-item .li-c-item li.active, +.libPay-item .li-c-item li.active:hover { border: #20a53a 2px solid; - color: #20A53A; + color: #20a53a; padding: 0 19px; line-height: 38px; } -.libPay-item .li-c-item li .item-name{ +.libPay-item .li-c-item li .item-name { font-size: 14px; vertical-align: middle; } .libPay-item .li-c-item li .item-info { - font-size: 14px; - vertical-align: middle; + font-size: 14px; + vertical-align: middle; } -.voucher-group { - min-height: 80px; - max-height: 235px; - overflow-y: auto; +.voucher-group, +.auth-group { + min-height: 60px; + max-height: 90px; + overflow-y: auto; } .pay-btn-group { - position: relative; - font-size: 0; + position: relative; + font-size: 0; } .pay-cycle-btn { - position: relative; - display: inline-block; - width: 106px; - height: 40px; - margin-left: -1px; - margin-bottom: -1px; - line-height: 40px; - border: 1px solid #ddd; - text-align: center; - vertical-align: top; - transition: border-color .1s ease-in, color .1s ease-in; + position: relative; + display: inline-block; + width: 106px; + height: 40px; + margin-left: -1px; + margin-bottom: -1px; + line-height: 40px; + border: 1px solid #ddd; + text-align: center; + vertical-align: top; + transition: border-color 0.1s ease-in, color 0.1s ease-in; } .pay-cycle-btn span { - font-size: 14px; - line-height: 25px; - vertical-align: middle; + font-size: 14px; + line-height: 25px; + vertical-align: middle; } .pay-btn-group .pay-cycle-btn:first-child { - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } .pay-btn-group .pay-cycle-btn:last-child { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; } -.pay-btn-group .pay-cycle-btn:nth-of-type(5n+1) { - margin-left: 0; +.pay-btn-group .pay-cycle-btn:nth-of-type(5n + 1) { + margin-left: 0; } -.voucher-group .pay-cycle-btn:nth-of-type(5n+1) { - margin-left: -1px; +.voucher-group .pay-cycle-btn:nth-of-type(5n + 1) { + margin-left: -1px; } -.voucher-group .pay-cycle-btn:nth-of-type(6n+1) { - margin-left: 0; +.voucher-group .pay-cycle-btn:nth-of-type(6n + 1) { + margin-left: 0; } -.pay-btn-group .active, .li-c-item .active { - background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAAclBMVEX///8fpTofpTogpTogpTogpTrw+fLt+O/i8+be8uLb8d/T7djP7NXR7NbE58u548G34sCr3bWU1KGT05+FzpN+y413yIZ0x4RxxoJwxYFnwnliv3RWu2pUumhMt2FGtVxDs1k6sFE4r1Avq0cjpjwgpTpRW86VAAAAJnRSTlMAEXd3iO7//////////////////////////////////////////0c8mUAAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAWdEVYdENyZWF0aW9uIFRpbWUAMDUvMjkvMThc7W1eAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAAHhJREFUGJVtzskSgkAMBFB2AUcR2QTcEPr/fxFmmFiW0znk8CrVac9jE1CNYqoAV8JaXTbq8K7/bBVcwRVcwRVcwbRTIDqcWrjaJ3cJ0VrdjDaHh2Sb2/F43XadPuWlTfjkJersLU2+ufNFnSdb0P/5thQv6R2CzQo9Oh+AlBF9bAAAAABJRU5ErkJggg==") no-repeat right bottom; +.pay-btn-group .active, +.li-c-item .active { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAAclBMVEX///8fpTofpTogpTogpTogpTrw+fLt+O/i8+be8uLb8d/T7djP7NXR7NbE58u548G34sCr3bWU1KGT05+FzpN+y413yIZ0x4RxxoJwxYFnwnliv3RWu2pUumhMt2FGtVxDs1k6sFE4r1Avq0cjpjwgpTpRW86VAAAAJnRSTlMAEXd3iO7//////////////////////////////////////////0c8mUAAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAWdEVYdENyZWF0aW9uIFRpbWUAMDUvMjkvMThc7W1eAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAAHhJREFUGJVtzskSgkAMBFB2AUcR2QTcEPr/fxFmmFiW0znk8CrVac9jE1CNYqoAV8JaXTbq8K7/bBVcwRVcwRVcwbRTIDqcWrjaJ3cJ0VrdjDaHh2Sb2/F43XadPuWlTfjkJersLU2+ufNFnSdb0P/5thQv6R2CzQo9Oh+AlBF9bAAAAABJRU5ErkJggg==') + no-repeat right bottom; } .pay-btn-group .pay-cycle-btn:hover { - border: 1px solid #20a53a; - color: #20a53a; - z-index: 2; - cursor: pointer; + border: 1px solid #20a53a; + color: #20a53a; + z-index: 2; + cursor: pointer; } -.pay-btn-group .active, .pay-btn-group .active:hover { +.pay-btn-group .active, +.pay-btn-group .active:hover { border: 2px solid #20a53a; color: #20a53a; z-index: 2; cursor: pointer; } -.pay-btn-group .active span{ +.pay-btn-group .active span { line-height: 22px; } .pay-cycle-btn em { @@ -4668,19 +4747,19 @@ ul.cmdlist { font-size: 10px; line-height: 19px; color: #fff; - transform: scale(.9, .8); + transform: scale(0.9, 0.8); font-style: normal; } .pay-btn-group .active em { right: -3px; top: -10px; } -.paymethod{ +.paymethod { margin: 0 auto; width: 160px; } -.paymethod .pay-wx{ - height:175px; +.paymethod .pay-wx { + height: 175px; } .paymethod .pay-wx canvas { width: 160px; @@ -4690,75 +4769,79 @@ ul.cmdlist { padding: 5px; border-bottom-color: #00c800; } -.lib-price-box{ +.lib-price-box { padding-bottom: 5px; } -.price-txt{ - color:#FF7301 +.price-txt { + color: #ff7301; } -.sale-price{ +.sale-price { font-size: 20px; margin-right: 5px; } -.lib-price-name,.price-txt{ +.lib-price-name, +.price-txt { margin-right: 15px; } /*input样式*/ -.bt-label{ - margin:20px 20px 0 0; - display:inline-block; - font-weight:normal +.bt-label { + margin: 20px 20px 0 0; + display: inline-block; + font-weight: normal; } -.bt-radio,.bt-checked{ - display:none +.bt-radio, +.bt-checked { + display: none; } -.bt-radioinput{ - background-color:#fff; - border:1px solid #ccc; - border-radius:100%; - display:inline-block; - height:16px; - margin-right:10px; - margin-top:-1px; - vertical-align:middle; - width:16px; - line-height:1 +.bt-radioinput { + background-color: #fff; + border: 1px solid #ccc; + border-radius: 100%; + display: inline-block; + height: 16px; + margin-right: 10px; + margin-top: -1px; + vertical-align: middle; + width: 16px; + line-height: 1; } -.bt-radio:checked + .bt-radioinput,.bt-checked:checked + .bt-radioinput{ - border:1px solid #20a53a; - background-color: #20A53A; +.bt-radio:checked + .bt-radioinput, +.bt-checked:checked + .bt-radioinput { + border: 1px solid #20a53a; + background-color: #20a53a; } -.bt-radio:checked + .bt-radioinput:after{ - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAKBAMAAAB293L0AAAAA3NCSVQICAjb4U/gAAAAKlBMVEX///////////////////////////////////////////////////////9q+00tAAAADnRSTlMAETNEVWZ3iJmqu93u/wlUiAQAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAWdEVYdENyZWF0aW9uIFRpbWUAMDYvMDIvMTjAxKOiAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAADpJREFUCJljYACDTAjFcgRC+xpAuFcYGCqAtK0DA4P2BAbmq0A2404G3QSQpPTi62BFjGsTIJpEQQQATscJDpRQCfQAAAAASUVORK5CYII="); +.bt-radio:checked + .bt-radioinput:after { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAKBAMAAAB293L0AAAAA3NCSVQICAjb4U/gAAAAKlBMVEX///////////////////////////////////////////////////////9q+00tAAAADnRSTlMAETNEVWZ3iJmqu93u/wlUiAQAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAWdEVYdENyZWF0aW9uIFRpbWUAMDYvMDIvMTjAxKOiAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAADpJREFUCJljYACDTAjFcgRC+xpAuFcYGCqAtK0DA4P2BAbmq0A2404G3QSQpPTi62BFjGsTIJpEQQQATscJDpRQCfQAAAAASUVORK5CYII='); background-repeat: no-repeat; - border-radius:100%; - content:""; - display:inline-block; - height:12px; - width:12px; + border-radius: 100%; + content: ''; + display: inline-block; + height: 12px; + width: 12px; margin: 1px; } -.bt-checkbox.bt-radioinput,.bt-radio:checked + .bt-checkbox.bt-radioinput:after{ - border-radius:0 +.bt-checkbox.bt-radioinput, +.bt-radio:checked + .bt-checkbox.bt-radioinput:after { + border-radius: 0; } -.loading{ - background-image: url("data:image/gif;base64,R0lGODlhJQAlAJECAL3L2AYrTv///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgACACwAAAAAJQAlAAACi5SPqcvtDyGYIFpF690i8xUw3qJBwUlSadmcLqYmGQu6KDIeM13beGzYWWy3DlB4IYaMk+Dso2RWkFCfLPcRvFbZxFLUDTt21BW56TyjRep1e20+i+eYMR145W2eefj+6VFmgTQi+ECVY8iGxcg35phGo/iDFwlTyXWphwlm1imGRdcnuqhHeop6UAAAIfkEBQoAAgAsEAACAAQACwAAAgWMj6nLXAAh+QQFCgACACwVAAUACgALAAACFZQvgRi92dyJcVJlLobUdi8x4bIhBQAh+QQFCgACACwXABEADAADAAACBYyPqcsFACH5BAUKAAIALBUAFQAKAAsAAAITlGKZwWoMHYxqtmplxlNT7ixGAQAh+QQFCgACACwQABgABAALAAACBYyPqctcACH5BAUKAAIALAUAFQAKAAsAAAIVlC+BGL3Z3IlxUmUuhtR2LzHhsiEFACH5BAUKAAIALAEAEQAMAAMAAAIFjI+pywUAIfkEBQoAAgAsBQAFAAoACwAAAhOUYJnAagwdjGq2amXGU1PuLEYBACH5BAUKAAIALBAAAgAEAAsAAAIFhI+py1wAIfkEBQoAAgAsFQAFAAoACwAAAhWUL4AIvdnciXFSZS6G1HYvMeGyIQUAIfkEBQoAAgAsFwARAAwAAwAAAgWEj6nLBQAh+QQFCgACACwVABUACgALAAACE5RgmcBqDB2MarZqZcZTU+4sRgEAIfkEBQoAAgAsEAAYAAQACwAAAgWEj6nLXAAh+QQFCgACACwFABUACgALAAACFZQvgAi92dyJcVJlLobUdi8x4bIhBQAh+QQFCgACACwBABEADAADAAACBYSPqcsFADs="); - background-repeat:no-repeat; - background-position:62px 41px; +.loading { + background-image: url('data:image/gif;base64,R0lGODlhJQAlAJECAL3L2AYrTv///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgACACwAAAAAJQAlAAACi5SPqcvtDyGYIFpF690i8xUw3qJBwUlSadmcLqYmGQu6KDIeM13beGzYWWy3DlB4IYaMk+Dso2RWkFCfLPcRvFbZxFLUDTt21BW56TyjRep1e20+i+eYMR145W2eefj+6VFmgTQi+ECVY8iGxcg35phGo/iDFwlTyXWphwlm1imGRdcnuqhHeop6UAAAIfkEBQoAAgAsEAACAAQACwAAAgWMj6nLXAAh+QQFCgACACwVAAUACgALAAACFZQvgRi92dyJcVJlLobUdi8x4bIhBQAh+QQFCgACACwXABEADAADAAACBYyPqcsFACH5BAUKAAIALBUAFQAKAAsAAAITlGKZwWoMHYxqtmplxlNT7ixGAQAh+QQFCgACACwQABgABAALAAACBYyPqctcACH5BAUKAAIALAUAFQAKAAsAAAIVlC+BGL3Z3IlxUmUuhtR2LzHhsiEFACH5BAUKAAIALAEAEQAMAAMAAAIFjI+pywUAIfkEBQoAAgAsBQAFAAoACwAAAhOUYJnAagwdjGq2amXGU1PuLEYBACH5BAUKAAIALBAAAgAEAAsAAAIFhI+py1wAIfkEBQoAAgAsFQAFAAoACwAAAhWUL4AIvdnciXFSZS6G1HYvMeGyIQUAIfkEBQoAAgAsFwARAAwAAwAAAgWEj6nLBQAh+QQFCgACACwVABUACgALAAACE5RgmcBqDB2MarZqZcZTU+4sRgEAIfkEBQoAAgAsEAAYAAQACwAAAgWEj6nLXAAh+QQFCgACACwFABUACgALAAACFZQvgAi92dyJcVJlLobUdi8x4bIhBQAh+QQFCgACACwBABEADAADAAACBYSPqcsFADs='); + background-repeat: no-repeat; + background-position: 62px 41px; border: #ddd 1px solid; width: 160px; height: 160px; - padding:5px; + padding: 5px; background-color: #787878; color: #fff; display: inline-block; margin: 6px auto; line-height: 200px; font-size: 14px; - text-align:center; + text-align: center; } -.cloading{ - background-image: url("data:image/gif;base64,R0lGODlhJQAlAJECAL3L2AYrTv///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgACACwAAAAAJQAlAAACi5SPqcvtDyGYIFpF690i8xUw3qJBwUlSadmcLqYmGQu6KDIeM13beGzYWWy3DlB4IYaMk+Dso2RWkFCfLPcRvFbZxFLUDTt21BW56TyjRep1e20+i+eYMR145W2eefj+6VFmgTQi+ECVY8iGxcg35phGo/iDFwlTyXWphwlm1imGRdcnuqhHeop6UAAAIfkEBQoAAgAsEAACAAQACwAAAgWMj6nLXAAh+QQFCgACACwVAAUACgALAAACFZQvgRi92dyJcVJlLobUdi8x4bIhBQAh+QQFCgACACwXABEADAADAAACBYyPqcsFACH5BAUKAAIALBUAFQAKAAsAAAITlGKZwWoMHYxqtmplxlNT7ixGAQAh+QQFCgACACwQABgABAALAAACBYyPqctcACH5BAUKAAIALAUAFQAKAAsAAAIVlC+BGL3Z3IlxUmUuhtR2LzHhsiEFACH5BAUKAAIALAEAEQAMAAMAAAIFjI+pywUAIfkEBQoAAgAsBQAFAAoACwAAAhOUYJnAagwdjGq2amXGU1PuLEYBACH5BAUKAAIALBAAAgAEAAsAAAIFhI+py1wAIfkEBQoAAgAsFQAFAAoACwAAAhWUL4AIvdnciXFSZS6G1HYvMeGyIQUAIfkEBQoAAgAsFwARAAwAAwAAAgWEj6nLBQAh+QQFCgACACwVABUACgALAAACE5RgmcBqDB2MarZqZcZTU+4sRgEAIfkEBQoAAgAsEAAYAAQACwAAAgWEj6nLXAAh+QQFCgACACwFABUACgALAAACFZQvgAi92dyJcVJlLobUdi8x4bIhBQAh+QQFCgACACwBABEADAADAAACBYSPqcsFADs="); +.cloading { + background-image: url('data:image/gif;base64,R0lGODlhJQAlAJECAL3L2AYrTv///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgACACwAAAAAJQAlAAACi5SPqcvtDyGYIFpF690i8xUw3qJBwUlSadmcLqYmGQu6KDIeM13beGzYWWy3DlB4IYaMk+Dso2RWkFCfLPcRvFbZxFLUDTt21BW56TyjRep1e20+i+eYMR145W2eefj+6VFmgTQi+ECVY8iGxcg35phGo/iDFwlTyXWphwlm1imGRdcnuqhHeop6UAAAIfkEBQoAAgAsEAACAAQACwAAAgWMj6nLXAAh+QQFCgACACwVAAUACgALAAACFZQvgRi92dyJcVJlLobUdi8x4bIhBQAh+QQFCgACACwXABEADAADAAACBYyPqcsFACH5BAUKAAIALBUAFQAKAAsAAAITlGKZwWoMHYxqtmplxlNT7ixGAQAh+QQFCgACACwQABgABAALAAACBYyPqctcACH5BAUKAAIALAUAFQAKAAsAAAIVlC+BGL3Z3IlxUmUuhtR2LzHhsiEFACH5BAUKAAIALAEAEQAMAAMAAAIFjI+pywUAIfkEBQoAAgAsBQAFAAoACwAAAhOUYJnAagwdjGq2amXGU1PuLEYBACH5BAUKAAIALBAAAgAEAAsAAAIFhI+py1wAIfkEBQoAAgAsFQAFAAoACwAAAhWUL4AIvdnciXFSZS6G1HYvMeGyIQUAIfkEBQoAAgAsFwARAAwAAwAAAgWEj6nLBQAh+QQFCgACACwVABUACgALAAACE5RgmcBqDB2MarZqZcZTU+4sRgEAIfkEBQoAAgAsEAAYAAQACwAAAgWEj6nLXAAh+QQFCgACACwFABUACgALAAACFZQvgAi92dyJcVJlLobUdi8x4bIhBQAh+QQFCgACACwBABEADAADAAACBYSPqcsFADs='); background-repeat: no-repeat; background-position: center 45px; height: 150px; @@ -4768,30 +4851,31 @@ ul.cmdlist { font-size: 14px; } /*6.0终端样式*/ -.term-box{ - padding:0 10px 10px; - background-color:#333333; +.term-box { + padding: 0 10px 10px; + background-color: #333333; } -.shell-text-input .bt-input-text-shell{ - width:100%; - padding:10px 10px 0; - border:0 none; - height:60px; - overflow:auto; - resize:none; +.shell-text-input .bt-input-text-shell { + width: 100%; + padding: 10px 10px 0; + border: 0 none; + height: 60px; + overflow: auto; + resize: none; } -.shell-text-input .bt-input-text-shell:focus,.shell-text-input .bt-input-text-shell:active{ - border:0 none; - outline:none; +.shell-text-input .bt-input-text-shell:focus, +.shell-text-input .bt-input-text-shell:active { + border: 0 none; + outline: none; } -.shell-btn-group{ - height:30px; - position:absolute; - bottom:10px; - right:10px; +.shell-btn-group { + height: 30px; + position: absolute; + bottom: 10px; + right: 10px; } -.shell_btn_close{ - margin-right:8px; +.shell_btn_close { + margin-right: 8px; } /*重启*/ .rebt-con { @@ -4811,88 +4895,88 @@ ul.cmdlist { background: #eee; border: #ddd 1px solid; } -.rebt-li a:hover{ - background-color:#20a53a; - color:#fff; +.rebt-li a:hover { + background-color: #20a53a; + color: #fff; } /*绑定宝塔微信*/ -.bind-weixin{ - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAASBAMAAACtCzMeAAAAA3NCSVQICAjb4U/gAAAAKlBMVEX19fXr6+vg4ODW1tbMzMzCwsK4uLitra2jo6OZmZmPj4+FhYV6enr////oR1GpAAAADnRSTlP/////////////////AEXA3MgAAAAJcEhZcwAADpwAAA6cAQeUU90AAAAWdEVYdENyZWF0aW9uIFRpbWUAMDgvMTYvMTgi+WYYAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAAK9JREFUCJljuHuXyS1I4C4IMNy9MiNYpF0XzL5Qznv37uUpYPbVWBDF4Qtii9+N8b2y5WIRiB1810L3UuHdEBC7FqTkYlhnqyyUbcJ798rSuwxBQOYVkE5OX6Deu3dVedMulF1oYLgCNDPpbujd1LtJDEDqbhDYCc4Md9WUBIrB7ESGu15pLiUg5oUAhrvKd+9etQWy2WUZwEJAPUCbwey7zCHu04ug7LsMDExL7gIAh3d+c1Jd4JYAAAAASUVORK5CYII="); +.bind-weixin { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAASBAMAAACtCzMeAAAAA3NCSVQICAjb4U/gAAAAKlBMVEX19fXr6+vg4ODW1tbMzMzCwsK4uLitra2jo6OZmZmPj4+FhYV6enr////oR1GpAAAADnRSTlP/////////////////AEXA3MgAAAAJcEhZcwAADpwAAA6cAQeUU90AAAAWdEVYdENyZWF0aW9uIFRpbWUAMDgvMTYvMTgi+WYYAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAAK9JREFUCJljuHuXyS1I4C4IMNy9MiNYpF0XzL5Qznv37uUpYPbVWBDF4Qtii9+N8b2y5WIRiB1810L3UuHdEBC7FqTkYlhnqyyUbcJ798rSuwxBQOYVkE5OX6Deu3dVedMulF1oYLgCNDPpbujd1LtJDEDqbhDYCc4Md9WUBIrB7ESGu15pLiUg5oUAhrvKd+9etQWy2WUZwEJAPUCbwey7zCHu04ug7LsMDExL7gIAh3d+c1Jd4JYAAAAASUVORK5CYII='); background-repeat: no-repeat; background-size: 16px; - padding-left:26px; - margin-right:30px; + padding-left: 26px; + margin-right: 30px; } -.bind-user{ - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASBAMAAACk4JNkAAAAA3NCSVQICAjb4U/gAAAAMFBMVEX19fXr6+vg4ODW1tbMzMzCwsK4uLitra2jo6OZmZmPj4+FhYV6enpwcHBmZmb///+wFcT2AAAAEHRSTlP///////////////////8A4CNdGQAAAAlwSFlzAAAOnAAADpwBB5RT3QAAABZ0RVh0Q3JlYXRpb24gVGltZQAwOC8xNi8xOCL5ZhgAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAAh0lEQVQImWP4//+/2KxiIMnw//+X2+1rCsCsuP7/n26CWB+PA6X04oGsbweBrJ/rgawf64GsbxtQWBDZ+TAdNv5gUxL+s74EmfJpz6mOtWdAYnYTNFZP/vb0P8OHU///f/j/P0+f4duF/yDwaz4Ddz2Y9ekQg448mPV/G4M3hPG/g8ESygoHALeIhpF8DGw6AAAAAElFTkSuQmCC"); +.bind-user { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASBAMAAACk4JNkAAAAA3NCSVQICAjb4U/gAAAAMFBMVEX19fXr6+vg4ODW1tbMzMzCwsK4uLitra2jo6OZmZmPj4+FhYV6enpwcHBmZmb///+wFcT2AAAAEHRSTlP///////////////////8A4CNdGQAAAAlwSFlzAAAOnAAADpwBB5RT3QAAABZ0RVh0Q3JlYXRpb24gVGltZQAwOC8xNi8xOCL5ZhgAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAAh0lEQVQImWP4//+/2KxiIMnw//+X2+1rCsCsuP7/n26CWB+PA6X04oGsbweBrJ/rgawf64GsbxtQWBDZ+TAdNv5gUxL+s74EmfJpz6mOtWdAYnYTNFZP/vb0P8OHU///f/j/P0+f4duF/yDwaz4Ddz2Y9ekQg448mPV/G4M3hPG/g8ESygoHALeIhpF8DGw6AAAAAElFTkSuQmCC'); background-repeat: no-repeat; background-size: 14px; - padding-left:24px; - margin-right:16px; + padding-left: 24px; + margin-right: 16px; } -.bt-dashi{ - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAPCAMAAADnP957AAAAA3NCSVQICAjb4U/gAAABL1BMVEX////2s0z1pBjqQlfsPmX1pxr2s0f1sD/1pRnmIm3nKWnnKmflHG34xUH3tkX2s0b3tw72sUb2qRf1pxr1pRn4wUL3wkH3vUP3vEf3vET3wAb3uUT4vwD3uEf2tUf2s0b2s0f2tTP2s0z2s0r2sUT2sUb3sw71rUj1rUf2sA/2rhL2rQ72qjP2qxP1qSf1qhT3pxT1pxr1phb1phj0oU31pRb1pBj1pRn0n030oiH1pBL1oBXxh1HxiSnyiC/wfjDwfDLveFXweTTvczfualvualjuaD3uaD/tYlvtZEHsXkXtXUbrWF3rV0zqSl7pRlrqRmLqQlfqQVjqP1ToM2DoMGDnKWnnKGrmJGvmIWrmIGzmIGjlIGzlH2zlHm7lHG3lHG/lFnTlFW/kE3bkEHCTlv0VAAAAZXRSTlMAEREREaq7u7u7zMzM7u7u7u7u7u7//////////////////////////////////////////////////////////////////////////////////////////////////////////1Wo3RsAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAWdEVYdENyZWF0aW9uIFRpbWUAMDMvMDYvMTlqmSvEAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAAJ9JREFUCJljYOaOgAIuFgbOCDjgYfBNiIIwo+J9GAS8kxMTYmLjk1I8eBmENO2DwuNiwwJsxPkYRIzUtC0tTNQlReUFGYRNzXStFSU0pFXl+YEcUzU3fz8XMXkwx0jXPTLaVRrK0XcOCXWUhXIMbAOD7eQUIHrMpDy9ZHSUgBxDIEfLwUnbTEVBnoHVFMjT1TWz0lNmY2DiMAYDU3N2RgAAyCVgqDGP+QAAAABJRU5ErkJggg=="); +.bt-dashi { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAPCAMAAADnP957AAAAA3NCSVQICAjb4U/gAAABL1BMVEX////2s0z1pBjqQlfsPmX1pxr2s0f1sD/1pRnmIm3nKWnnKmflHG34xUH3tkX2s0b3tw72sUb2qRf1pxr1pRn4wUL3wkH3vUP3vEf3vET3wAb3uUT4vwD3uEf2tUf2s0b2s0f2tTP2s0z2s0r2sUT2sUb3sw71rUj1rUf2sA/2rhL2rQ72qjP2qxP1qSf1qhT3pxT1pxr1phb1phj0oU31pRb1pBj1pRn0n030oiH1pBL1oBXxh1HxiSnyiC/wfjDwfDLveFXweTTvczfualvualjuaD3uaD/tYlvtZEHsXkXtXUbrWF3rV0zqSl7pRlrqRmLqQlfqQVjqP1ToM2DoMGDnKWnnKGrmJGvmIWrmIGzmIGjlIGzlH2zlHm7lHG3lHG/lFnTlFW/kE3bkEHCTlv0VAAAAZXRSTlMAEREREaq7u7u7zMzM7u7u7u7u7u7//////////////////////////////////////////////////////////////////////////////////////////////////////////1Wo3RsAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAWdEVYdENyZWF0aW9uIFRpbWUAMDMvMDYvMTlqmSvEAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAAJ9JREFUCJljYOaOgAIuFgbOCDjgYfBNiIIwo+J9GAS8kxMTYmLjk1I8eBmENO2DwuNiwwJsxPkYRIzUtC0tTNQlReUFGYRNzXStFSU0pFXl+YEcUzU3fz8XMXkwx0jXPTLaVRrK0XcOCXWUhXIMbAOD7eQUIHrMpDy9ZHSUgBxDIEfLwUnbTEVBnoHVFMjT1TWz0lNmY2DiMAYDU3N2RgAAyCVgqDGP+QAAAABJRU5ErkJggg=='); background-repeat: no-repeat; - padding-left:13px; - margin-right:20px; + padding-left: 13px; + margin-right: 20px; } .bt-724 { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAQCAMAAACvHOZVAAAAA3NCSVQICAjb4U/gAAAAOVBMVEXeQRTxrJnkZUD76OLqiWzzuKfgTSP53NT////30MXvoIriWTHmcU/99PHslHvofV71xLbjXznpgGGbp65eAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAFnRFWHRDcmVhdGlvbiBUaW1lADA3LzEwLzE5ht15uwAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAACrSURBVCiRrZBLAsMgCETJRxwUTdP7H7b4SUnW7SxU4gMnQ/QP5TSlrVqDyGufV4usbVNMJSv2cVw6UIHexdoUUdjOBVHXAPBs1e9TB9AGctqybf3G6OKEVcmd7R2PCOJEwuaAFoi5RGQnbMRln3iB3dmcksmJ2m0OINpPMeWCTcR8y/hsTzpQ9B4BRmbAQWd6dzbyPYKqVzJEZ1vqo9N9VAk9BPMnU4/Uf9cHAxAHhkB15V0AAAAASUVORK5CYII="); + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAQCAMAAACvHOZVAAAAA3NCSVQICAjb4U/gAAAAOVBMVEXeQRTxrJnkZUD76OLqiWzzuKfgTSP53NT////30MXvoIriWTHmcU/99PHslHvofV71xLbjXznpgGGbp65eAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAFnRFWHRDcmVhdGlvbiBUaW1lADA3LzEwLzE5ht15uwAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAACrSURBVCiRrZBLAsMgCETJRxwUTdP7H7b4SUnW7SxU4gMnQ/QP5TSlrVqDyGufV4usbVNMJSv2cVw6UIHexdoUUdjOBVHXAPBs1e9TB9AGctqybf3G6OKEVcmd7R2PCOJEwuaAFoi5RGQnbMRln3iB3dmcksmJ2m0OINpPMeWCTcR8y/hsTzpQ9B4BRmbAQWd6dzbyPYKqVzJEZ1vqo9N9VAk9BPMnU4/Uf9cHAxAHhkB15V0AAAAASUVORK5CYII='); background-repeat: no-repeat; padding-left: 35px; margin-right: 20px; } /*系统图标*/ .ico-linux { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAATBAMAAACEi/vCAAAAA3NCSVQICAjb4U/gAAAAMFBMVEX///9mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmambAcKAAAAEHRSTlMAESIzRFVmd4iZqrvM3e7/dpUBFQAAAAlwSFlzAAAOwwAADsMBx2+oZAAAABZ0RVh0Q3JlYXRpb24gVGltZQAwOC8xNi8xOCL5ZhgAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAAmUlEQVQImWNgYGCQ/GvAAAHz/1+CMBjPvvoOYTFVLXkNZZ2u+isAZjE/4vyvAGaxlgbnJ4BZHAoM3A/BLA8GBpafYNYiIL4PMpt1A5DYPwFIcDWArDkAJPgWAInzF4BE9jMGBvb/QM2SBfEGDFy7UhkY3Bk4CxisGdgCGMwYGI97vGKwSmAQC1G8e+aN2WagDuP0IEGbawIMAPDJKG706GgtAAAAAElFTkSuQmCC"); + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAATBAMAAACEi/vCAAAAA3NCSVQICAjb4U/gAAAAMFBMVEX///9mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmambAcKAAAAEHRSTlMAESIzRFVmd4iZqrvM3e7/dpUBFQAAAAlwSFlzAAAOwwAADsMBx2+oZAAAABZ0RVh0Q3JlYXRpb24gVGltZQAwOC8xNi8xOCL5ZhgAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAAmUlEQVQImWNgYGCQ/GvAAAHz/1+CMBjPvvoOYTFVLXkNZZ2u+isAZjE/4vyvAGaxlgbnJ4BZHAoM3A/BLA8GBpafYNYiIL4PMpt1A5DYPwFIcDWArDkAJPgWAInzF4BE9jMGBvb/QM2SBfEGDFy7UhkY3Bk4CxisGdgCGMwYGI97vGKwSmAQC1G8e+aN2WagDuP0IEGbawIMAPDJKG706GgtAAAAAElFTkSuQmCC'); background-size: 12px; background-repeat: no-repeat; padding-left: 20px; } .ico-windows { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAALVBMVEX///+ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZny8jBSAAAAD3RSTlMAESIzRFVmd4iZqrvM7v/Y8bBbAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAFnRFWHRDcmVhdGlvbiBUaW1lADA4LzE2LzE4IvlmGAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAABGSURBVAiZY2AAAkbTqrMMDEJuHvfevXvHcPbdu+53IMY7Ihi7d+9O7QACBiB2BTOAol0wNbgY59696wQzGFQqw8GWwpwBAGURWs03JAEWAAAAAElFTkSuQmCC"); + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAALVBMVEX///+ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZny8jBSAAAAD3RSTlMAESIzRFVmd4iZqrvM7v/Y8bBbAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAFnRFWHRDcmVhdGlvbiBUaW1lADA4LzE2LzE4IvlmGAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAABGSURBVAiZY2AAAkbTqrMMDEJuHvfevXvHcPbdu+53IMY7Ihi7d+9O7QACBiB2BTOAol0wNbgY59696wQzGFQqw8GWwpwBAGURWs03JAEWAAAAAElFTkSuQmCC'); background-repeat: no-repeat; background-size: 12px; background-position: 0 2px; padding-left: 20px; } .ico-centos { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAPCAMAAADjyg5GAAAAA3NCSVQICAjb4U/gAAAASFBMVEX///9mZmZmZmZiYmJaWlpYWFhmZmZiYmJgYGBmZmZgYGBmZmZiYmJmZmZiYmJmZmZiYmJmZmZmZmZmZmZmZmZmZmZmZmZmZmbwNFvuAAAAGHRSTlMAESIiIiIzMzNERFVVZmZ3d4iZqrvM3f93YyfbAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAFnRFWHRDcmVhdGlvbiBUaW1lADA4LzE3LzE4mkUBfQAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAB6SURBVAiZVY5ZEsIwDEMdUpYQghIv9f1vWpNCp/hH1oz1LKI5if5G5ezuzLff7ibO7KK+H2LaBp1WDMLcYDNf3A31CXMvRCy995rSK0SExhjAkh/XEK5E2YOCN5r75RNGUJgtZJLXoMQjw/ot2LR3baJHSbN8Ll3LrhtQxAfrvVHLpQAAAABJRU5ErkJggg=="); + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAPCAMAAADjyg5GAAAAA3NCSVQICAjb4U/gAAAASFBMVEX///9mZmZmZmZiYmJaWlpYWFhmZmZiYmJgYGBmZmZgYGBmZmZiYmJmZmZiYmJmZmZiYmJmZmZmZmZmZmZmZmZmZmZmZmZmZmbwNFvuAAAAGHRSTlMAESIiIiIzMzNERFVVZmZ3d4iZqrvM3f93YyfbAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAFnRFWHRDcmVhdGlvbiBUaW1lADA4LzE3LzE4mkUBfQAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAB6SURBVAiZVY5ZEsIwDEMdUpYQghIv9f1vWpNCp/hH1oz1LKI5if5G5ezuzLff7ibO7KK+H2LaBp1WDMLcYDNf3A31CXMvRCy995rSK0SExhjAkh/XEK5E2YOCN5r75RNGUJgtZJLXoMQjw/ot2LR3baJHSbN8Ll3LrhtQxAfrvVHLpQAAAABJRU5ErkJggg=='); background-size: 12px; background-repeat: no-repeat; padding-left: 20px; } .ico-ubuntu { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAA3NCSVQICAjb4U/gAAAAOVBMVEX///9mZmZhYWFmZmZiYmJmZmZiYmJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZVQ1Z+AAAAE3RSTlMAEREiIjMzRFVmd4iZqrvM3e7/67N/KAAAAAlwSFlzAAAOwwAADsMBx2+oZAAAABZ0RVh0Q3JlYXRpb24gVGltZQAwOC8xNy8xOJpFAX0AAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAAbElEQVQImU2OWQ6AMAhEcW3Z2jL3P6xWjHE+CMPwCESfDOXtFmutAp6OtwC0jUwZVlWHaaaBniyYVq6B/Rn3G3aEjDxRuPwtN6NFzkB97IAlE3ddHTimPUKkd3TlhLb5huvLzAWWE2j0k0elCynoBUe/zXGJAAAAAElFTkSuQmCC"); + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAA3NCSVQICAjb4U/gAAAAOVBMVEX///9mZmZhYWFmZmZiYmJmZmZiYmJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZVQ1Z+AAAAE3RSTlMAEREiIjMzRFVmd4iZqrvM3e7/67N/KAAAAAlwSFlzAAAOwwAADsMBx2+oZAAAABZ0RVh0Q3JlYXRpb24gVGltZQAwOC8xNy8xOJpFAX0AAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAAbElEQVQImU2OWQ6AMAhEcW3Z2jL3P6xWjHE+CMPwCESfDOXtFmutAp6OtwC0jUwZVlWHaaaBniyYVq6B/Rn3G3aEjDxRuPwtN6NFzkB97IAlE3ddHTimPUKkd3TlhLb5huvLzAWWE2j0k0elCynoBUe/zXGJAAAAAElFTkSuQmCC'); background-size: 12px; background-repeat: no-repeat; padding-left: 20px; } .ico-debian { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAMAAAARSr4IAAAAA3NCSVQICAjb4U/gAAAAPFBMVEX///9paWlmZmZgYGBdXV1mZmZgYGBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYdQ+x6AAAAFHRSTlMAERERESIiM0RVZneImaq7zN3u/ynguF0AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAWdEVYdENyZWF0aW9uIFRpbWUAMDgvMTcvMTiaRQF9AAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAAHJJREFUCJlVjlESwjAIRLFFIRhCaO5/VyHijN2vt+zCABBq87IhT/hK1+zdfOl2Y71r2rPp1UKfAOdFgaTtAWIRWgacMUUquSi7TR6U2LflFuW0nOVjYB7JQBqwHklOe49f9dOAf+HvjRIZ3L3ePTIWfQAgiAODqr7Z+QAAAABJRU5ErkJggg=="); + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAMAAAARSr4IAAAAA3NCSVQICAjb4U/gAAAAPFBMVEX///9paWlmZmZgYGBdXV1mZmZgYGBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYdQ+x6AAAAFHRSTlMAERERESIiM0RVZneImaq7zN3u/ynguF0AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAWdEVYdENyZWF0aW9uIFRpbWUAMDgvMTcvMTiaRQF9AAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAAHJJREFUCJlVjlESwjAIRLFFIRhCaO5/VyHijN2vt+zCABBq87IhT/hK1+zdfOl2Y71r2rPp1UKfAOdFgaTtAWIRWgacMUUquSi7TR6U2LflFuW0nOVjYB7JQBqwHklOe49f9dOAf+HvjRIZ3L3ePTIWfQAgiAODqr7Z+QAAAABJRU5ErkJggg=='); background-size: 12px; background-repeat: no-repeat; padding-left: 20px; } .ico-fedora { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAA3NCSVQICAjb4U/gAAAAPFBMVEX///9VVVVLS0tmZmZaWlpmZmZiYmJmZmZiYmJmZmZiYmJiYmJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYd2jWRAAAAFHRSTlMAEREiIjMzRERVVWaImaq7zN3u/2KENScAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAWdEVYdENyZWF0aW9uIFRpbWUAMDgvMTcvMTiaRQF9AAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAAGJJREFUCJlFj1kSwCAIQ9N9Lxjuf9faUKf5IPNQiAJAZ4yg9ZCWkMj5pxWwGCqK5skLg8AphMv2dIJC0106nNmu5VLA1bBmfqclF7fZO9HTYqzO4tMuOt5XGLA1enMzQ194ADH/CrSqGfFbAAAAAElFTkSuQmCC"); + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAA3NCSVQICAjb4U/gAAAAPFBMVEX///9VVVVLS0tmZmZaWlpmZmZiYmJmZmZiYmJmZmZiYmJiYmJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYd2jWRAAAAFHRSTlMAEREiIjMzRERVVWaImaq7zN3u/2KENScAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAWdEVYdENyZWF0aW9uIFRpbWUAMDgvMTcvMTiaRQF9AAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAAGJJREFUCJlFj1kSwCAIQ9N9Lxjuf9faUKf5IPNQiAJAZ4yg9ZCWkMj5pxWwGCqK5skLg8AphMv2dIJC0106nNmu5VLA1bBmfqclF7fZO9HTYqzO4tMuOt5XGLA1enMzQ194ADH/CrSqGfFbAAAAAElFTkSuQmCC'); background-size: 12px; background-repeat: no-repeat; padding-left: 20px; } -.index-pos-box{ +.index-pos-box { height: 52px; - box-shadow: 0 1px 2px 0 rgba(0,0,0,.1); + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1); } -.index-pos-box .position{ +.index-pos-box .position { line-height: 52px; } -.change-id{ +.change-id { margin-left: 8px; color: #20a53a; } -.bind-user .glyphicon{ +.bind-user .glyphicon { color: #20a53a; font-size: 12px; margin-right: 3px; @@ -5024,8 +5108,8 @@ ul.cmdlist { text-align: center; } -.libLogin .line{ - position:relative; +.libLogin .line { + position: relative; } .libLogin .tips { position: absolute; @@ -5036,17 +5120,17 @@ ul.cmdlist { padding: 4px 6px; border-radius: 5px; } -.change-id{ - cursor:pointer; +.change-id { + cursor: pointer; } -.red{ +.red { color: red; } -select[disabled]{ - border:1px solid #DDD; - background-color:#F5F5F5; - color:#ACA899; +select[disabled] { + border: 1px solid #ddd; + background-color: #f5f5f5; + color: #aca899; } .cicle { @@ -5061,9 +5145,9 @@ select[disabled]{ } .cicle *, -.cicle{ - box-sizing:content-box; - -webkit-box-sizing:content-box; +.cicle { + box-sizing: content-box; + -webkit-box-sizing: content-box; -moz-box-sizing: content-box; } @@ -5083,7 +5167,7 @@ select[disabled]{ position: absolute; width: 88px; height: 88px; - border-width:6px; + border-width: 6px; border-style: solid; border-radius: 50%; transform: rotate(-135deg); @@ -5115,7 +5199,7 @@ select[disabled]{ color: #20a53a; } -.mem-action .occupy{ +.mem-action .occupy { font-size: 14px; } .mem-action .occupy.line { @@ -5123,12 +5207,12 @@ select[disabled]{ padding-top: 22px; } -.change-default button{ +.change-default button { width: 188px; - margin: 10px + margin: 10px; } -.bt-w-con .line .info-r{ - margin-left:0; +.bt-w-con .line .info-r { + margin-left: 0; } .bt-logs textarea { @@ -5152,15 +5236,17 @@ select[disabled]{ border: #ccc 1px solid; border-radius: 3px; } -.domain-ul-list li{ - line-height:26px; +.domain-ul-list li { + line-height: 26px; } -.domain-ul-list li .checkbox-text{ - margin-right:5px; - vertical-align:-2px +.domain-ul-list li .checkbox-text { + margin-right: 5px; + vertical-align: -2px; } -.btswitch-btn.bt-waf-firewall{ - width:2.4em;height:1.4em;margin-bottom: 0 +.btswitch-btn.bt-waf-firewall { + width: 2.4em; + height: 1.4em; + margin-bottom: 0; } .db_list { @@ -5185,31 +5271,31 @@ select[disabled]{ #db_tools button { margin-right: 8px; } -#db_tools button:last-child{ +#db_tools button:last-child { margin-right: 0; } /* PHP设置样式 */ -.php-limit-config .tname{ - width:130px; +.php-limit-config .tname { + width: 130px; } -.php-limit-config .info-r p{ +.php-limit-config .info-r p { display: inline-block; } /* mysql设置样式 */ -.tab-db-status .line{ - padding:0; +.tab-db-status .line { + padding: 0; padding-bottom: 1px; } -.tab-db-status .tname{ +.tab-db-status .tname { width: 155px; - padding-right:10px; + padding-right: 10px; height: 30px; line-height: 30px; } -.tab-db-status .info-r{ +.tab-db-status .info-r { margin-bottom: 0px; } .tab-db-status .line:nth-child(1) .ml0 { @@ -5222,120 +5308,120 @@ select[disabled]{ margin-top: 30px; } .bt_table table td span.fixed, -#database_fix table td span{ - display:block; +#database_fix table td span { + display: block; overflow: hidden; - text-overflow:ellipsis; + text-overflow: ellipsis; white-space: nowrap; } -#form_proxy .sub-groud .bt-input-text{ +#form_proxy .sub-groud .bt-input-text { margin-right: 10px; } #form_proxy .sub-groud { margin-bottom: 15px; } -#form_proxy .btswitch-btn{ - display:inline-block; +#form_proxy .btswitch-btn { + display: inline-block; } #form_proxy .add-replace-prosy { position: relative; top: -10px; } -#form_proxy .disabled{ +#form_proxy .disabled { background-color: #eee !important; cursor: default; border: 1px solid #dbdbea; } -#proxy_list td>span, -#softList td>span{ +#proxy_list td > span, +#softList td > span { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } -.proxy_list_limit_3 tr td:nth-child(4) >span{ +.proxy_list_limit_3 tr td:nth-child(4) > span { max-width: 143px; } -.proxy_list_limit_4 tr td:nth-child(4) >span{ +.proxy_list_limit_4 tr td:nth-child(4) > span { max-width: 110px; } -#proxy_list tr td:nth-child(3) >span{ +#proxy_list tr td:nth-child(3) > span { max-width: 80px; } -#proxy_list tr th:last-child,#proxy_list tr td:last-child >span { +#proxy_list tr th:last-child, +#proxy_list tr td:last-child > span { text-align: right; } -#softList tr td:nth-child(3) >span { +#softList tr td:nth-child(3) > span { white-space: inherit; min-width: 151px; } #proxy_config_con .line .info-r, -#redirect_config_con .line .info-r{ +#redirect_config_con .line .info-r { margin-left: 0; } #proxy_config_con .CodeMirror-gutter-wrapper, -#redirect_config_con .CodeMirror-gutter-wrapper{ +#redirect_config_con .CodeMirror-gutter-wrapper { left: 15px; } ::-webkit-scrollbar { /*滚动条整体样式*/ - width : 10px; /*高宽分别对应横竖滚动条的尺寸*/ + width: 10px; /*高宽分别对应横竖滚动条的尺寸*/ height: 10px; } ::-webkit-scrollbar-thumb { /*滚动条里面小方块*/ border-radius: 10px; - box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2); - background : #999; + box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); + background: #999; } ::-webkit-scrollbar-track { /*滚动条里面轨道*/ - box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2); + box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); border-radius: 10px; - background : #ededed; + background: #ededed; } - -.bootstrap-select{ +.bootstrap-select { width: 200px !important; float: left !important; height: 32px; } -.bootstrap-select .filter-option{ +.bootstrap-select .filter-option { width: 180px !important; display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - } -.bootstrap-select .dropdown-toggle{ +.bootstrap-select .dropdown-toggle { height: 30px; } -.set_nginx_config,.set_Apache_config { - padding: 10px 10px 10px 0; +.set_nginx_config, +.set_Apache_config { + padding: 10px 10px 0 0; } .set_nginx_config .line, -.set_Apache_config .line{ +.set_Apache_config .line { padding: 5px 0; } -.set_Apache_config .line>span{ +.set_Apache_config .line > span { width: 170px; } -.set_nginx_config .line>span{ - width:202px; +.set_nginx_config .line > span { + width: 202px; } -.set_nginx_config .bt_nginx_save{ +.set_nginx_config .bt_nginx_save { margin-left: 202px; } -.set_Apache_config .bt_apache_save{ +.set_Apache_config .bt_apache_save { margin-left: 170px; } @@ -5345,41 +5431,41 @@ select[disabled]{ top: 16px; height: 16px; } -.search_box input{ +.search_box input { vertical-align: sub; } -.search_box label{ +.search_box label { color: #666; } -.session_clear_list{ - border:1px solid #ececec; +.session_clear_list { + border: 1px solid #ececec; margin-bottom: 15px; width: 400px; } -.session_clear_list .line{ +.session_clear_list .line { padding: 0; border-bottom: 1px solid #ececec; width: 400px; } -.session_clear_list .line:last-child{ +.session_clear_list .line:last-child { border-bottom: 0px; } -.session_clear_list .line span{ +.session_clear_list .line span { width: auto; height: 35px; line-height: 35px; text-align: left; padding: 0 5px; } -.session_clear_list .line span:first-child{ +.session_clear_list .line span:first-child { width: 300px; border-right: 1px solid #ececec; background: #f7f7f7; padding-left: 5px; } /*消息窗口*/ -.message-window{ - position:fixed; +.message-window { + position: fixed; bottom: 50px; right: 20px; width: 300px; @@ -5387,30 +5473,30 @@ select[disabled]{ box-shadow: 0 0 6px #ddd; background-color: #fff; } -.mw-title{ +.mw-title { height: 36px; padding-left: 10px; line-height: 36px; - background-color: #F5F5F5; - border-bottom:#eee solid 1px; + background-color: #f5f5f5; + border-bottom: #eee solid 1px; } -.mw-con{ +.mw-con { padding: 5px 10px; } -.waiting-list{ +.waiting-list { line-height: 24px; - color:#787878; + color: #787878; } -.waiting-list li .mw-cancel{ +.waiting-list li .mw-cancel { float: right; cursor: pointer; color: red; } -.waiting-list li .wt-list-name{ +.waiting-list li .wt-list-name { display: inline-block; width: 260px; overflow: hidden; - text-overflow:ellipsis; + text-overflow: ellipsis; white-space: nowrap; } .codebg { @@ -5437,63 +5523,65 @@ select[disabled]{ text-overflow: ellipsis; white-space: nowrap; } -.waiting-down-list li .down-progress{ +.waiting-down-list li .down-progress { background: #eee; width: 100%; height: 3px; margin: 3px 0; } -.waiting-down-list .done-progress{ - background-color: #20A53A; +.waiting-down-list .done-progress { + background-color: #20a53a; height: 3px; } -.waiting-down-list .down-info{ +.waiting-down-list .down-info { color: #999; font-size: 12px; } -.waiting-down-list .down-info .speed-size{ +.waiting-down-list .down-info .speed-size { float: right; } /*软件商店 2019.3.27 新增*/ -.soft-filter{ - border-bottom:#ddd 1px solid; - padding:20px 15px; +.soft-filter { + border-bottom: #ddd 1px solid; + padding: 20px 15px; } -.soft-filter .soft-filter-box:first-child{ - margin-bottom:20px +.soft-filter .soft-filter-box:first-child { + margin-bottom: 20px; } -.soft-filter-box .filter-title{ - float:left; - width:80px; - margin-right:20px; - height:30px; - line-height:30px; +.soft-filter-box .filter-title { + float: left; + width: 80px; + margin-right: 20px; + height: 30px; + line-height: 30px; } -.soft-search .ser-text,.soft-search .ser-sub{ - margin-top:0 +.soft-search .ser-text, +.soft-search .ser-sub { + margin-top: 0; } -.soft-filter-box .soft-search,.soft-filter-box .softtype{ - float:left; +.soft-filter-box .soft-search, +.soft-filter-box .softtype { + float: left; } -.soft-filter-box .softtype span{ - display:inline-block; - height:30px; - line-height:30px; - background-color:#e6e6e6; - padding:0 20px; - margin-right:15px; - cursor:pointer; +.soft-filter-box .softtype span { + display: inline-block; + height: 30px; + line-height: 30px; + background-color: #e6e6e6; + padding: 0 20px; + margin-right: 15px; + cursor: pointer; } -.soft-filter-box .softtype .on{ - background-color:#20a53a; - color:#fff; +.soft-filter-box .softtype .on { + background-color: #20a53a; + color: #fff; } .oldTableShadow { width: 100%; height: 8px; margin-top: -8px; position: relative; - background: -webkit-linear-gradient(top, rgba(255, 255, 255, 0), rgba(220, 220, 220, .8)); + background: -webkit-linear-gradient(top, rgba(255, 255, 255, 0), rgba(220, 220, 220, 0.8)); } .newTableShadow { width: auto; @@ -5501,7 +5589,7 @@ select[disabled]{ position: absolute; left: 15px; right: 15px; - background: -webkit-linear-gradient(top, rgba(220, 220, 220, .8), rgba(255, 255, 255, 0)); + background: -webkit-linear-gradient(top, rgba(220, 220, 220, 0.8), rgba(255, 255, 255, 0)); } .disable { @@ -5600,16 +5688,16 @@ select[disabled]{ list-style-type: inherit; } -.ssl_cert_from ul li:nth-child(0){ +.ssl_cert_from ul li:nth-child(0) { margin-top: 12px; - color:red; + color: red; } .ssl_cert_from ul li { margin-left: 20px; height: 25px; line-height: 25px; } -.ssl_cert_from>.line { +.ssl_cert_from > .line { padding-top: 15px; border-top: 1px solid #ececec; width: 81%; @@ -5618,14 +5706,14 @@ select[disabled]{ padding-bottom: 15px; border-bottom: 1px solid #ececec; } -.ssl_cert_from>.line .tname{ - width:105px; +.ssl_cert_from > .line .tname { + width: 105px; } -.ssl_cert_from>.line .info-r{ - margin-left:70px; - height:30px; - line-height:30px; +.ssl_cert_from > .line .info-r { + margin-left: 70px; + height: 30px; + line-height: 30px; } .user_set_info .tit { width: 160px; @@ -5644,10 +5732,10 @@ select[disabled]{ margin: 3px 5px 0px; vertical-align: top; } -.ssl_cert_from .details{ - padding-top:10px; - width:80%; - margin:0 auto; +.ssl_cert_from .details { + padding-top: 10px; + width: 80%; + margin: 0 auto; } .ssl_cert_from .details a { float: right; @@ -5655,24 +5743,23 @@ select[disabled]{ top: -1px; } -.ssl_cert_from>.line .line { - padding-bottom:0; +.ssl_cert_from > .line .line { + padding-bottom: 0; } -.ssl_cert_from>.line .line .info-r{ - margin-bottom:0; +.ssl_cert_from > .line .line .info-r { + margin-bottom: 0; } - -#ace_conter.chrome{ +#ace_conter.chrome { background: #ececec; } -#ace_conter{ +#ace_conter { background: #444; height: 100%; overflow: hidden; /*background: url('/static/img/resize_corner.png') no-repeat;*/ } -.aceEditors .layui-layer-content{ +.aceEditors .layui-layer-content { overflow-y: hidden !important; } .ace_overall { @@ -5683,10 +5770,10 @@ select[disabled]{ background: #777; transition: top 500ms; } -.ace_overall.active .ace_editor_main{ +.ace_overall.active .ace_editor_main { margin-left: 0 !important; } -.ace_catalogue{ +.ace_catalogue { float: left; width: 265px; min-width: 265px; @@ -5740,7 +5827,7 @@ select[disabled]{ } .ace_catalogue_list::-webkit-scrollbar { /*滚动条整体样式*/ - width: 9px; /*高宽分别对应横竖滚动条的尺寸*/ + width: 9px; /*高宽分别对应横竖滚动条的尺寸*/ height: 10px; } .ace_catalogue_list::-webkit-scrollbar-thumb { @@ -5764,16 +5851,16 @@ select[disabled]{ top: 0; cursor: col-resize; } -.ace_catalogue_drag_icon .drag_icon_conter{ +.ace_catalogue_drag_icon .drag_icon_conter { height: 100%; width: 1px; } -.ace_catalogue_drag_icon .fold_icon_conter.active::after{ - content: "\e258"; +.ace_catalogue_drag_icon .fold_icon_conter.active::after { + content: '\e258'; } .ace_catalogue_drag_icon .fold_icon_conter::after { color: #ececec; - content: "\e257"; + content: '\e257'; position: absolute; top: 50%; margin-top: -6.5px; @@ -5824,7 +5911,7 @@ select[disabled]{ } .ace_scrollbar::-webkit-scrollbar { /*滚动条整体样式*/ - width : 10px; /*高宽分别对应横竖滚动条的尺寸*/ + width: 10px; /*高宽分别对应横竖滚动条的尺寸*/ height: 10px; } .ace_scrollbar::-webkit-scrollbar-thumb { @@ -5833,7 +5920,7 @@ select[disabled]{ background: #777; border-radius: 0; } -.ace_scrollbar::-webkit-scrollbar-track{ +.ace_scrollbar::-webkit-scrollbar-track { /*滚动条里面轨道*/ box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); background: #333; @@ -5895,7 +5982,7 @@ select[disabled]{ left: -1px; font-style: normal; } -.ace_dir_tools>div { +.ace_dir_tools > div { display: inline-block; height: 30px; line-height: 30px; @@ -5905,22 +5992,22 @@ select[disabled]{ cursor: pointer; position: relative; } -.ace_dir_tools>span{ +.ace_dir_tools > span { left: 0; bottom: -5px; } -.ace_dir_tools .upper_level{ +.ace_dir_tools .upper_level { padding: 0 10px; } -.ace_dir_tools>div:hover{ +.ace_dir_tools > div:hover { background: #333; } .ace_dir_tools .search_file, .ace_dir_tools .new_folder, -.ace_dir_tools .refresh_dir{ +.ace_dir_tools .refresh_dir { float: right; } -.ace_dir_tools>div i{ +.ace_dir_tools > div i { margin: 0 3px; } .ace_dir_tools .search_input_view { @@ -5930,27 +6017,27 @@ select[disabled]{ padding-top: 10px; } .ace_dir_tools .search_input_view:hover, -.ace_dir_tools .search_input_title:hover{ +.ace_dir_tools .search_input_title:hover { background: #444 !important; } -.ace_dir_tools .search_input_view form{ +.ace_dir_tools .search_input_view form { position: relative; overflow: hidden; } -.ace_dir_tools .search_input_view input{ +.ace_dir_tools .search_input_view input { margin-top: 0; width: 200px; } -.ace_dir_tools .search_input_view button{ +.ace_dir_tools .search_input_view button { margin-top: 0; position: absolute; right: -2px; outline: none; } -.ace_dir_tools .search_input_view button:hover{ +.ace_dir_tools .search_input_view button:hover { background-color: #138c2b; } -.ace_dir_tools .search_input_title{ +.ace_dir_tools .search_input_title { padding-left: 15px; cursor: default; } @@ -5974,7 +6061,7 @@ select[disabled]{ height: 20px; margin: 0; } -.ace_dir_tools .search_input_view .search_boxs span{ +.ace_dir_tools .search_input_view .search_boxs span { vertical-align: super; margin-right: 5px; } @@ -5990,7 +6077,7 @@ select[disabled]{ background: #565656; transition: all 500ms; } -.ace_header>span { +.ace_header > span { float: left; height: 35px; line-height: 35px; @@ -6001,14 +6088,14 @@ select[disabled]{ border-right: 1px solid #4c4c4c; cursor: pointer; } -.ace_header>span i { +.ace_header > span i { margin-right: 5px; vertical-align: text-top; } -.ace_header>span .fa { +.ace_header > span .fa { margin-right: 5px; } -.ace_header>span:hover { +.ace_header > span:hover { background: #2f2f2f; } .ace_header .pull-down { @@ -6038,7 +6125,7 @@ select[disabled]{ height: 5px; background: linear-gradient(rgba(0, 0, 0, 0.3), rgba(255, 255, 255, 0)); } -.ace_conter_editor{ +.ace_conter_editor { background: #333; } .ace_conter_menu .item { @@ -6078,7 +6165,7 @@ select[disabled]{ margin: 0 5px; vertical-align: top; } -.ace_conter_menu .item span i{ +.ace_conter_menu .item span i { font-style: normal; } .ace_conter_menu .item .icon_file { @@ -6086,10 +6173,10 @@ select[disabled]{ font-weight: 500; min-width: 8px; } -.ace_conter_menu .item .icon_file>img{ +.ace_conter_menu .item .icon_file > img { width: 13px; } -.ace_conter_menu .item .glyphicon-exclamation-sign{ +.ace_conter_menu .item .glyphicon-exclamation-sign { display: inline !important; font-size: 15px; color: rgb(204, 167, 0); @@ -6114,7 +6201,7 @@ select[disabled]{ transition: all 500ms; } .ace_editor_add:hover { - background-color: #505050 + background-color: #505050; } /* 关闭视图-开始 */ .ace-clear-form { @@ -6167,15 +6254,15 @@ select[disabled]{ font-size: 0; overflow: hidden; } -.ace_conter_toolbar .pull-left{ +.ace_conter_toolbar .pull-left { text-align: left; max-width: 50%; } .ace_conter_toolbar .pull-left, -.ace_conter_toolbar .pull-right{ +.ace_conter_toolbar .pull-right { height: 35px; } -.ace_conter_toolbar .pull-left span , +.ace_conter_toolbar .pull-left span, .ace_conter_toolbar .pull-right span { color: #fff; display: inline-block; @@ -6185,8 +6272,8 @@ select[disabled]{ transition: all 500ms; font-size: 13px; } -.ace_conter_toolbar .pull-left span{ - border-right:0; +.ace_conter_toolbar .pull-left span { + border-right: 0; cursor: default; } .ace_conter_toolbar .pull-left span i, @@ -6229,7 +6316,7 @@ select[disabled]{ padding: 0px 10px; outline: none; } -.ace_toolbar_menu input:focus{ +.ace_toolbar_menu input:focus { border: 1px solid #fff; } @@ -6250,7 +6337,7 @@ select[disabled]{ .ace_toolbar_menu .menu-item li.active:hover { background: #666; } -.editor_menu li.active{ +.editor_menu li.active { background: #444 !important; } .ace_toolbar_menu .menu-item li:hover { @@ -6271,16 +6358,16 @@ select[disabled]{ } .make_transist { - -webkit-transition: all .2s ease-in-out; - -moz-transition: all .2s ease-in-out; - -o-transition: all .2s ease-in-out; - -ms-transition: all .2s ease-in-out; - transition: all .2s ease-in-out + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; } -.ace_conter_search{ +.ace_conter_search { display: none; } -.helps_conter{ +.helps_conter { padding: 25px; overflow: hidden; } @@ -6291,32 +6378,34 @@ select[disabled]{ padding-left: 5px; font-size: 15px; } -.helps_conter .helps_box{ +.helps_conter .helps_box { margin-bottom: 20px; font-size: 14px; padding-left: 10px; line-height: 25px; } - - -.helps_left{ +.helps_left { width: 50%; float: left; - padding:15px; + padding: 15px; } -.cursor-row,.cursor-line { +.cursor-row, +.cursor-line { margin: 5px; } -.set_font_size, .set_jump_line { +.set_font_size, +.set_jump_line { margin-top: 20px; position: relative; } -.set_font_size input, .set_jump_line input{ +.set_font_size input, +.set_jump_line input { width: 250px; } -.set_font_size .btn-save, .set_jump_line .btn-save { +.set_font_size .btn-save, +.set_jump_line .btn-save { margin-left: 15px; height: 35px; width: 80px; @@ -6326,14 +6415,14 @@ select[disabled]{ outline: none; transition: all 500ms; } -.set_font_size .btn-save:hover, .set_jump_line .btn-save:hover{ +.set_font_size .btn-save:hover, +.set_jump_line .btn-save:hover { background: #23963a; } -.chrome .set_font_size .tips{ +.chrome .set_font_size .tips { color: #c7c7c7; - } -.set_font_size .tips{ +.set_font_size .tips { position: absolute; top: 10px; right: 150px; @@ -6362,18 +6451,17 @@ select[disabled]{ -webkit-background-clip: padding-box; background-clip: padding-box; border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .15); + border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); - box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); } .dropdown-menu-li.pull-right { right: 0; - left: auto + left: auto; } - .dropdown-menu-li > li > div > a { display: block; padding: 3px 20px; @@ -6386,10 +6474,11 @@ select[disabled]{ padding: 0 15px 0 33px; } -.dropdown-menu-li > li:hover, .dropdown-menu > li:hover { +.dropdown-menu-li > li:hover, +.dropdown-menu > li:hover { color: #262626; text-decoration: none; - background-color: #f5f5f5 + background-color: #f5f5f5; } .file-types { position: relative; @@ -6398,11 +6487,11 @@ select[disabled]{ } .file-types .ico-folder { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNpi/P//P8NAAiaGAQYD7gAWdIFPpxIoMS8ZiOcQqfY5SD0LFT1jAsRTuaU0GZjZuAgq/vPto+S3V3fmUssBokC8llNEjp2ZFWjk/1+Eg56TE0RJsgCD3BPImAvikGs7IzMLAxuvKAMrNz9ZaWAul5iKJAsXPwUBAMzK//9AaDIcIAkODiKCbbQcGHXAqANGHTDqgFEHjDpg1AGjDqCVA57/+f6Z7hZD7XwBahOmfHv1ANQqlqCzG54CcRrjaOd0oB0AEGAAscwsxMSUtNsAAAAASUVORK5CYII="); + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNpi/P//P8NAAiaGAQYD7gAWdIFPpxIoMS8ZiOcQqfY5SD0LFT1jAsRTuaU0GZjZuAgq/vPto+S3V3fmUssBokC8llNEjp2ZFWjk/1+Eg56TE0RJsgCD3BPImAvikGs7IzMLAxuvKAMrNz9ZaWAul5iKJAsXPwUBAMzK//9AaDIcIAkODiKCbbQcGHXAqANGHTDqgFEHjDpg1AGjDqCVA57/+f6Z7hZD7XwBahOmfHv1ANQqlqCzG54CcRrjaOd0oB0AEGAAscwsxMSUtNsAAAAASUVORK5CYII='); } .file-types .ico-file { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAOVJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwx4gJMDAMMRh0w6oBRB4w6YNQBow4YdcCoA0YdMOgc8Pzbt280swxq9gt8reKU58+fgzqnEjRyw1MgTkMWYBzo7jlAgAEAzk5sMbucHicAAAAASUVORK5CYII="); + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAOVJREFUeNpi/P//P8NAAhZkzrVr1zyB1FwglqSiHSZAfBZZQEtLC7sDQJZLSUlJcnNzU8Xm27dvg6jVQByqqqp6FpsaJjS+JCcnJ8O/f/+ogkFATk5uJ8gRQMcYE+MAqgN2dvYMeXn5g0DmGmyOYKJHQmNjY0tQUFA4gc0RLLS0mI+PD5YOQCACSp8BYka6OEBUVJRBXFwcW8KkTwiAACwx4gJMDAMMRh0w6oBRB4w6YNQBow4YdcCoA0YdMOgc8Pzbt280swxq9gt8reKU58+fgzqnEjRyw1MgTkMWYBzo7jlAgAEAzk5sMbucHicAAAAASUVORK5CYII='); } .file-types .ico { @@ -6430,23 +6519,22 @@ select[disabled]{ right: 6px; top: 7px; font-size: 11px; - transform: scale(.7); + transform: scale(0.7); } - /* 评价样式 */ -.score_info_view{ +.score_info_view { display: none; padding: 25px; } -.comment_title{ +.comment_title { padding: 0 10px; width: 100%; height: 100px; box-sizing: border-box; border-bottom: 1px solid #efefef; } -.comment_num{ +.comment_num { display: inline-block; font-size: 60px; line-height: 100px; @@ -6464,28 +6552,28 @@ select[disabled]{ margin: 0; line-height: 19px; } -.comment_num_tips li{ +.comment_num_tips li { color: #888; display: inline-block; font-size: 13.5px; } -.comment_left{ +.comment_left { margin-right: 10px; display: inline-block; } -.comment_star_group{ +.comment_star_group { height: 12px; - line-height:12px; + line-height: 12px; } -.comment_right{ +.comment_right { width: 230px; height: 100px; display: inline-block; box-sizing: border-box; - float:right; + float: right; padding: 20px 0; } -.comment_right .comment_progress{ +.comment_right .comment_progress { width: 150px; height: 6px; position: relative; @@ -6494,48 +6582,48 @@ select[disabled]{ top: -1.5px; vertical-align: baseline; } -.comment_right .comment_progress_bgw{ +.comment_right .comment_progress_bgw { width: 0; height: 6px; - background: #CCCCCC; + background: #cccccc; border-radius: 2px; position: absolute; left: 0; top: 0; z-index: 999; } -.comment_right .comment_progress_speed{ +.comment_right .comment_progress_speed { width: 150px; height: 6px; - background: #EFEFEF; + background: #efefef; border-radius: 2px; } -.comment_right .comment_star{ +.comment_right .comment_star { display: inline-block; height: 12px; line-height: 12px; vertical-align: text-top; } -.comment_star .star_active{ - color: #F6BA2A; +.comment_star .star_active { + color: #f6ba2a; } -.comment_star .star_none{ +.comment_star .star_none { color: #fff; } -.comment_star{ +.comment_star { display: inline-block; font-size: 0px; } -.comment_star span{ +.comment_star span { font-size: 12px; margin-right: 1px; } -.comment_tab{ - padding:15px 10px 20px 10px; +.comment_tab { + padding: 15px 10px 20px 10px; display: flex; display: none; } -.comment_tab span{ +.comment_tab span { display: inline-block; width: 125px; margin: 0 10px; @@ -6544,67 +6632,66 @@ select[disabled]{ line-height: 35px; text-align: center; color: #555; - background-color:#F7F7F7; + background-color: #f7f7f7; border: 1px solid #efefef; flex: 1; cursor: pointer; - } -.comment_tab span:first-child{ +.comment_tab span:first-child { margin-left: 0px; } -.comment_tab span:last-child{ +.comment_tab span:last-child { margin-right: 0px; } -.comment_tab span.active{ - background-color:#20a53a; +.comment_tab span.active { + background-color: #20a53a; border-color: #20a53a; color: #fff; } -.comment_tab span i{ +.comment_tab span i { font-style: normal; font-weight: 600; } -.comment_box{ +.comment_box { margin-left: 1%; margin-right: 0; padding: 20px; border-radius: 2px; - background: #F8F8F8; + background: #f8f8f8; margin-bottom: 10px; width: 48%; float: left; transition: all 500ms; } -.comment_box:hover{ +.comment_box:hover { box-shadow: 0 0 4px 2px #00000022; cursor: pointer; } -.comment_box:nth-child(2n){ +.comment_box:nth-child(2n) { margin-left: 2%; margin-right: 1%; padding: 20px; border-radius: 2px; - background: #F8F8F8; + background: #f8f8f8; margin-bottom: 10px; width: 48%; } -.comment_box_title{ +.comment_box_title { padding-bottom: 10px; } -.comment_box_title .nice_star{ +.comment_box_title .nice_star { margin-right: 10px; } -.comment_box_title .nice_star span{ +.comment_box_title .nice_star span { font-size: 15px; vertical-align: text-bottom; color: #aaa; } .comment_box_title .nice_star span.star_active { - color: #F6BA2A; + color: #f6ba2a; } -.comment_box_title .nice_time{ +.comment_box_title .nice_time { font-weight: 500; color: #777; font-size: 13px; @@ -6621,7 +6708,7 @@ select[disabled]{ white-space: nowrap; vertical-align: middle; } -.comment_box_content{ +.comment_box_content { color: #777; font-size: 13px; height: 36px; @@ -6631,15 +6718,15 @@ select[disabled]{ background: #ddd; border: 1px solid #ccc; } -.edit_view.active:hover{ +.edit_view.active:hover { background: #ccc; } -.edit_view .glyphicon{ +.edit_view .glyphicon { font-size: 16px; position: relative; top: 2px; } -.edit_view{ +.edit_view { width: 200px; height: 35px; line-height: 35px; @@ -6655,10 +6742,10 @@ select[disabled]{ transition: 500ms all; margin: 15px 0 8px -100px; } -.edit_view:hover{ +.edit_view:hover { background: #0f9228; } -.comment_content{ +.comment_content { overflow-y: auto; height: 365px; border-radius: 2px; @@ -6680,18 +6767,18 @@ select[disabled]{ float: none; clear: both; } -.comment_box.get_next_page span{ +.comment_box.get_next_page span { vertical-align: text-top; } -.comment_box.get_next_page:hover{ +.comment_box.get_next_page:hover { background-color: #ececec; color: #666; box-shadow: none; } -.comment_content.box-shadow{ +.comment_content.box-shadow { box-shadow: -5px 0 3px 0px #00000022 inset; } -.add_score_view{ +.add_score_view { padding: 30px 30px 0 30px; } .score_icon_group { @@ -6702,20 +6789,20 @@ select[disabled]{ margin-bottom: 2px; color: #cecece; } -.score_icon_group_tips{ +.score_icon_group_tips { text-align: center; color: #666; font-size: 13px; margin-top: 10px; } -.score_icon_group span{ - margin:0 2px; +.score_icon_group span { + margin: 0 2px; cursor: pointer; color: #bbb; transition: all 500ms; } -.score_icon_group span.active{ - color: #F6BA2A; +.score_icon_group span.active { + color: #f6ba2a; } .score_input { width: auto; @@ -6728,46 +6815,46 @@ select[disabled]{ font-size: 13px; display: none; } -.score_input_tips{ +.score_input_tips { margin-top: 5px; color: #888; display: none; } -.score_input_tips i{ +.score_input_tips i { font-style: normal; color: #666; } -.score_details{ +.score_details { padding: 50px 25px; } -.score_details .nice_star span{ +.score_details .nice_star span { font-size: 17px; } -.score_details .nice_name{ +.score_details .nice_name { font-size: 14px; } -.score_details .nice_time{ +.score_details .nice_time { font-size: 14px; } -.score_details .comment_box_content{ +.score_details .comment_box_content { height: auto; font-size: 14px; line-height: 18px; } -.score_details .comment_box_title{ +.score_details .comment_box_title { padding-bottom: 15px; } /* 结束 */ /* 文件侧边栏 */ -.cd-accordion-menu{ +.cd-accordion-menu { overflow-y: hidden; } -.cd-accordion-menu .has-children{ +.cd-accordion-menu .has-children { min-height: 30px; line-height: 30px; position: relative; } -.cd-accordion-menu .has-children ul{ +.cd-accordion-menu .has-children ul { display: none; position: relative; } @@ -6777,10 +6864,10 @@ select[disabled]{ .cd-accordion-menu .has-children .file_fold.bg { background: #2f2f2f; } -.cd-accordion-menu .has-children .file_fold.bg:hover{ +.cd-accordion-menu .has-children .file_fold.bg:hover { background: #2f2f2f; } -.cd-accordion-menu .has-children .file_fold:hover{ +.cd-accordion-menu .has-children .file_fold:hover { background-color: #272727; } .cd-accordion-menu .has-children .file_fold { @@ -6796,7 +6883,7 @@ select[disabled]{ overflow: hidden; text-overflow: ellipsis; } -.cd-accordion-menu .has-children .file_fold>.glyphicon { +.cd-accordion-menu .has-children .file_fold > .glyphicon { position: absolute; left: 10px; top: 7px; @@ -6838,26 +6925,26 @@ select[disabled]{ vertical-align: bottom; } .ace_catalogue_menu .folder-icon:before, -.cd-accordion-menu .has-children .folder-icon:before{ +.cd-accordion-menu .has-children .folder-icon:before { color: #d6ab34; content: '\f016'; - font-family:octicons; + font-family: octicons; display: inline-block; } .upper_level { border-bottom: 1px solid #333; } -.upper_level:hover{ +.upper_level:hover { background-color: #313131; } -.upper_level span{ +.upper_level span { display: inline-block; padding: 0 10px; width: 100%; text-align: left; cursor: pointer; - color:#cccccc; + color: #cccccc; } .has_children_separator { position: absolute; @@ -6867,41 +6954,90 @@ select[disabled]{ background: #333; left: 15px; } -.group_1{padding-left: 10px !important;} -.group_1>.glyphicon{left: 10px !important;} -.children_1 .has_children_separator{left: 15px!important;} +.group_1 { + padding-left: 10px !important; +} +.group_1 > .glyphicon { + left: 10px !important; +} +.children_1 .has_children_separator { + left: 15px !important; +} -.group_2{padding-left: 25px !important;} -.group_2>.glyphicon{left: 25px !important;} -.children_2 .has_children_separator{left: 30px!important;} +.group_2 { + padding-left: 25px !important; +} +.group_2 > .glyphicon { + left: 25px !important; +} +.children_2 .has_children_separator { + left: 30px !important; +} -.group_3{padding-left: 40px !important;} -.group_3>.glyphicon{left: 40px !important;} -.children_3 .has_children_separator{left: 45px!important;} +.group_3 { + padding-left: 40px !important; +} +.group_3 > .glyphicon { + left: 40px !important; +} +.children_3 .has_children_separator { + left: 45px !important; +} -.group_4{padding-left:55px !important;} -.group_4>.glyphicon{left: 55px !important;} -.children_4 .has_children_separator{left: 60px!important;} +.group_4 { + padding-left: 55px !important; +} +.group_4 > .glyphicon { + left: 55px !important; +} +.children_4 .has_children_separator { + left: 60px !important; +} -.group_5{padding-left:70px !important;} -.group_5>.glyphicon{left: 70px !important;} -.children_5 .has_children_separator{left: 75px!important;} +.group_5 { + padding-left: 70px !important; +} +.group_5 > .glyphicon { + left: 70px !important; +} +.children_5 .has_children_separator { + left: 75px !important; +} -.group_6{padding-left:85px !important;} -.group_6>.glyphicon{left: 85px !important;} -.children_6 .has_children_separator{left: 90px!important;} +.group_6 { + padding-left: 85px !important; +} +.group_6 > .glyphicon { + left: 85px !important; +} +.children_6 .has_children_separator { + left: 90px !important; +} -.group_7{padding-left:100px !important;} -.group_7>.glyphicon{left: 100px !important;} -.children_7 .has_children_separator{left: 105px!important;} +.group_7 { + padding-left: 100px !important; +} +.group_7 > .glyphicon { + left: 100px !important; +} +.children_7 .has_children_separator { + left: 105px !important; +} -.group_8{padding-left:115px !important;} -.group_8>.glyphicon{left: 115px !important;} -.children_8 .has_children_separator{left: 120px!important;} +.group_8 { + padding-left: 115px !important; +} +.group_8 > .glyphicon { + left: 115px !important; +} +.children_8 .has_children_separator { + left: 120px !important; +} /* 文字省略 */ .size_ellipsis { - display: inline-block; + display: inline-flex; + width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; @@ -6951,7 +7087,7 @@ select[disabled]{ color: #555; left: -1px; } -.ace_catalogue_menu li:hover{ +.ace_catalogue_menu li:hover { background: #efefef; cursor: pointer; } @@ -6960,14 +7096,14 @@ select[disabled]{ position: absolute; left: 10px; } -.ace_catalogue_menu li i:before{ +.ace_catalogue_menu li i:before { font-size: 17px; } -.newly_file_input{ +.newly_file_input { height: 24px; background: #555; outline: none; - padding-left:5px; + padding-left: 5px; border: 1px solid #528bff; } .file_input .glyphicon-ok { @@ -6995,9 +7131,10 @@ select[disabled]{ .ace_catalogue_menu .rename-icon { background-position: 0 -64px; -}.ace_catalogue_menu .del-icon { - background-position: 0 -80px; - } +} +.ace_catalogue_menu .del-icon { + background-position: 0 -80px; +} .ace_catalogue_menu .img-icon { display: inline-block; background-image: url('../img/file_menu_icon.png'); @@ -7012,20 +7149,20 @@ select[disabled]{ } .ace_config_editor_scroll ::-webkit-scrollbar { /*滚动条整体样式*/ - width : 10px; /*高宽分别对应横竖滚动条的尺寸*/ + width: 10px; /*高宽分别对应横竖滚动条的尺寸*/ height: 10px; } .ace_config_editor_scroll ::-webkit-scrollbar-thumb { /*滚动条里面小方块*/ border-radius: 10px; - box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2); - background : #999; + box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); + background: #999; } .ace_config_editor_scroll ::-webkit-scrollbar-track { /*滚动条里面轨道*/ - box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2); + box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); border-radius: 10px; - background : #ededed; + background: #ededed; border-radius: 5px; } /*外链分享 */ @@ -7043,41 +7180,48 @@ select[disabled]{ font-weight: initial; color: #666; } -.external_link button{ +.external_link button { vertical-align: middle; } -.external_link button .icon{ - font-size:17px; +.external_link button .icon { + font-size: 17px; } /*固定表格头样式*/ -.thead_div .btlink{color:#666} -.thead_div,.tbody_div{ position: relative; } -.tbody_div{overflow: auto;margin-top: -1px;} -.tbody_shadow_top{ +.thead_div .btlink { + color: #666; +} +.thead_div, +.tbody_div { + position: relative; +} +.tbody_div { + overflow: auto; + margin-top: -1px; +} +.tbody_shadow_top { width: 100%; height: 6px; position: absolute; - background: -webkit-linear-gradient(top,rgba(220, 220, 220, .8),rgba(255, 255, 255, 0)); - background: -moz-linear-gradient(top,rgba(220, 220, 220, .8),rgba(255, 255, 255, 0)); - background: -o-linear-gradient(top,rgba(220, 220, 220, .8),rgba(255, 255, 255, 0)); - background: linear-gradient(top,rgba(220, 220, 220, .8),rgba(255, 255, 255, 0)); + background: -webkit-linear-gradient(top, rgba(220, 220, 220, 0.8), rgba(255, 255, 255, 0)); + background: -moz-linear-gradient(top, rgba(220, 220, 220, 0.8), rgba(255, 255, 255, 0)); + background: -o-linear-gradient(top, rgba(220, 220, 220, 0.8), rgba(255, 255, 255, 0)); + background: linear-gradient(top, rgba(220, 220, 220, 0.8), rgba(255, 255, 255, 0)); display: none; } -.tbody_shadow_bottom{ +.tbody_shadow_bottom { width: 100%; height: 6px; position: absolute; bottom: 0; - background: -webkit-linear-gradient(top,rgba(255, 255, 255, 0),rgba(220, 220, 220, .8)); - background: -moz-linear-gradient(top,rgba(255, 255, 255, 0),rgba(220, 220, 220, .8)); - background: -o-linear-gradient(top,rgba(255, 255, 255, 0),rgba(220, 220, 220, .8)); - background: linear-gradient(top,rgba(255, 255, 255, 0),rgba(220, 220, 220, .8)); + background: -webkit-linear-gradient(top, rgba(255, 255, 255, 0), rgba(220, 220, 220, 0.8)); + background: -moz-linear-gradient(top, rgba(255, 255, 255, 0), rgba(220, 220, 220, 0.8)); + background: -o-linear-gradient(top, rgba(255, 255, 255, 0), rgba(220, 220, 220, 0.8)); + background: linear-gradient(top, rgba(255, 255, 255, 0), rgba(220, 220, 220, 0.8)); display: block; } - /* 结束 */ -.php_info_group{ +.php_info_group { margin-top: 15px; } .php_info_group p { @@ -7089,7 +7233,7 @@ select[disabled]{ font-size: 14px; background: #f1f1f1; } -.php_info_group:last-child{ +.php_info_group:last-child { margin-bottom: 15px; } @@ -7126,7 +7270,7 @@ select[disabled]{ display: block; background-color: #000; } -.minText{ +.minText { white-space: nowrap; } .upload_tips_mask { @@ -7140,7 +7284,7 @@ select[disabled]{ border: 2px dashed #e0e0e0; text-align: center; } -.upload_file_body{ +.upload_file_body { position: relative; } .upload_file_body.active { @@ -7175,8 +7319,8 @@ select[disabled]{ .dropUpLoadFile::-webkit-scrollbar-thumb { /*滚动条里面小方块*/ border-radius: 0; - box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2); - background : #bbb; + box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); + background: #bbb; } .dropUpLoadFile::-webkit-scrollbar-track { @@ -7229,7 +7373,6 @@ select[disabled]{ background: #658859; } - .upload_btn_groud .file_upload_info .ico-tips-close:after { transform: rotate(45deg); } @@ -7351,7 +7494,7 @@ select[disabled]{ padding-left: 15px; } .dropUpLoadFileHead li.fileTitle span:nth-child(2) { - flex: .5; + flex: 0.5; } .dropUpLoadFileHead li.fileTitle span:nth-child(3) { @@ -7399,7 +7542,7 @@ select[disabled]{ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - flex: .5; + flex: 0.5; } .dropUpLoadFile li .fileStatus { flex: 1; @@ -7409,7 +7552,7 @@ select[disabled]{ } .dropUpLoadFile li em { font-style: normal; - color: #06F; + color: #06f; float: right; margin-right: 10px; } @@ -7417,13 +7560,13 @@ select[disabled]{ color: #20a53a !important; } .upload_error { - color: #F56C6C !important; + color: #f56c6c !important; } .upload_primary { - color: #409EFF !important; + color: #409eff !important; } .upload_warning { - color: #409EFF !important; + color: #409eff !important; } /*安全风险*/ .warning_scan_view { @@ -7498,8 +7641,8 @@ select[disabled]{ } .module_details_list ::-webkit-scrollbar-track { /*滚动条里面轨道*/ - box-shadow:inset 0 0 5px rgba(0, 0, 0, 0.2); - background:#ededed; + box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); + background: #ededed; } .module_details_item { position: relative; @@ -7518,10 +7661,10 @@ select[disabled]{ height: 6px; position: absolute; bottom: 0; - background: -webkit-linear-gradient(top, rgba(255, 255, 255, 0), rgba(220, 220, 220, .3)); - background: -moz-linear-gradient(top, rgba(255, 255, 255, 0), rgba(220, 220, 220, .3)); - background: -o-linear-gradient(top, rgba(255, 255, 255, 0), rgba(220, 220, 220, .3)); - background: linear-gradient(top, rgba(255, 255, 255, 0), rgba(220, 220, 220, .3)); + background: -webkit-linear-gradient(top, rgba(255, 255, 255, 0), rgba(220, 220, 220, 0.3)); + background: -moz-linear-gradient(top, rgba(255, 255, 255, 0), rgba(220, 220, 220, 0.3)); + background: -o-linear-gradient(top, rgba(255, 255, 255, 0), rgba(220, 220, 220, 0.3)); + background: linear-gradient(top, rgba(255, 255, 255, 0), rgba(220, 220, 220, 0.3)); clear: both; } .module_details_item:after { @@ -7531,10 +7674,10 @@ select[disabled]{ height: 6px; top: 40px; position: absolute; - background: -webkit-linear-gradient(top, rgba(220, 220, 220, .3), rgba(255, 255, 255, 0)); - background: -moz-linear-gradient(top, rgba(220, 220, 220, .3), rgba(255, 255, 255, 0)); - background: -o-linear-gradient(top, rgba(220, 220, 220, .3), rgba(255, 255, 255, 0)); - background: linear-gradient(top, rgba(220, 220, 220, .3), rgba(255, 255, 255, 0)); + background: -webkit-linear-gradient(top, rgba(220, 220, 220, 0.3), rgba(255, 255, 255, 0)); + background: -moz-linear-gradient(top, rgba(220, 220, 220, 0.3), rgba(255, 255, 255, 0)); + background: -o-linear-gradient(top, rgba(220, 220, 220, 0.3), rgba(255, 255, 255, 0)); + background: linear-gradient(top, rgba(220, 220, 220, 0.3), rgba(255, 255, 255, 0)); clear: both; } .warning_scan_body .module_head:last-child { @@ -7562,10 +7705,10 @@ select[disabled]{ background: red; } .security .module_num { - background: #20A53A; + background: #20a53a; } .ignore .module_num { - background: #FFBA66; + background: #ffba66; } .module_cut_show { float: right; @@ -7580,19 +7723,18 @@ select[disabled]{ } .module_cut_show .glyphicon { color: #20a53a; -} -.module_details_item{ - } .module_details_head { height: 40px; line-height: 40px; font-size: 13px; - padding-left: 15px; + padding-left: 29px; + display: flex; + justify-content: space-between; position: relative; - background: #fbfbfb; + /* background: #fbfbfb; */ clear: both; - /*border-top: 1px solid #ececec;*/ + /* border-bottom: 1px solid #ececec; */ } .module_details_head:before { content: ''; @@ -7601,13 +7743,13 @@ select[disabled]{ width: 5px; border-radius: 2.5px; position: absolute; - /* background-color: #666; */ + background-color: #666; top: 50%; margin-top: -3.5px; left: 15px; } .operate_tools { - float: right; + margin-left: 10px; padding-right: 15px; font-size: 12.5px; } @@ -7618,9 +7760,14 @@ select[disabled]{ color: #20a53a; } .module_details_title { + flex: 1; + width: 0; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; font-weight: 500; } -.module_details_title i { +.module_details_head .module_details_tips { color: #bbb; font-style: initial; font-weight: 400; @@ -7659,17 +7806,16 @@ select[disabled]{ } .module_details_block .line_content { width: 250px; - } /*END*/ /* 终端管理页面 */ -.pd25{ +.pd25 { padding: 25px; } -.quick_links{ +.quick_links { width: 100%; height: 35px; background-color: #fcfcfc; @@ -7677,7 +7823,7 @@ select[disabled]{ margin-bottom: 15px; display: none; } -.quick_links>span.glyphicon { +.quick_links > span.glyphicon { position: absolute; right: 12px; top: 12px; @@ -7694,11 +7840,11 @@ select[disabled]{ top: 0; color: #555; } -.quick_links_title span{ +.quick_links_title span { margin-right: 4px; color: #ffa515; } -.term_item_tab{ +.term_item_tab { background: #f1f1f1; font-size: 0; } @@ -7713,25 +7859,25 @@ select[disabled]{ overflow: hidden; overflow-x: auto; } -.term_item_tab .list::-webkit-scrollbar{ - width:8px; - height:4px; +.term_item_tab .list::-webkit-scrollbar { + width: 8px; + height: 4px; background-color: transparent; } -.term_item_tab .list ::-webkit-scrollbar-thumb{ - border-radius:0; - background:transparent; +.term_item_tab .list ::-webkit-scrollbar-thumb { + border-radius: 0; + background: transparent; border-radius: 4px; transition: all 1s; } -.term_item_tab .list:hover::-webkit-scrollbar-thumb{ - background:rgba(1, 3, 18, 0.4); +.term_item_tab .list:hover::-webkit-scrollbar-thumb { + background: rgba(1, 3, 18, 0.4); } -.term_item_tab .list::-webkit-scrollbar-track{ - background-color:transparent; +.term_item_tab .list::-webkit-scrollbar-track { + background-color: transparent; } -.term_item_tab .list>span { +.term_item_tab .list > span { height: 38px; line-height: 38px; text-align: left; @@ -7768,22 +7914,21 @@ select[disabled]{ left: 8px; transform: rotate(-45deg); } -.icon-trem-close::after{ +.icon-trem-close::after { transform: rotate(45deg); } -.icon-trem-close::before{ +.icon-trem-close::before { transform: rotate(-45deg); } - -.term_item_tab .list>span.active .icon-trem-close, -.term_item_tab .list>span:hover .icon-trem-close{ +.term_item_tab .list > span.active .icon-trem-close, +.term_item_tab .list > span:hover .icon-trem-close { display: inline-block !important; } -.term_item_tab .list>span i{ +.term_item_tab .list > span i { transition: all 50ms; } -.term_item_tab .list>span .icon { +.term_item_tab .list > span .icon { height: 9px; width: 9px; border-radius: 5px; @@ -7794,28 +7939,28 @@ select[disabled]{ top: 50%; margin-top: -4.5px; } -.term_item_tab .list>span .icon.icon-sucess{ +.term_item_tab .list > span .icon.icon-sucess { background-color: #10952a; } -.term_item_tab .list>span .icon.icon-info{ +.term_item_tab .list > span .icon.icon-info { background-color: #fc6d26; } -.term_item_tab .list>span .icon.icon-warning{ +.term_item_tab .list > span .icon.icon-warning { background-color: #ff5d2c; } -.term_item_tab .list>span:hover{ +.term_item_tab .list > span:hover { background-color: #dadada; } -.term_item_tab .list> span.active{ +.term_item_tab .list > span.active { background-color: #424242; } -.term_item_tab .list span.active span{ +.term_item_tab .list span.active span { color: #fff; } -.term_item_tab .list .content{ +.term_item_tab .list .content { position: relative; overflow: hidden; white-space: nowrap; @@ -7832,10 +7977,10 @@ select[disabled]{ display: none; transition: all 500ms; } -.term_item_tab .item .glyphicon:hover{ +.term_item_tab .item .glyphicon:hover { color: red; } -.term_item_tab .list span span{ +.term_item_tab .list span span { vertical-align: middle; font-size: 13px; font-weight: 500; @@ -7843,7 +7988,7 @@ select[disabled]{ display: inline-block; line-height: 37px; } -.term_item_tab .glyphicon{ +.term_item_tab .glyphicon { font-size: 15px; margin-left: 8px; vertical-align: middle; @@ -7852,42 +7997,42 @@ select[disabled]{ display: inline-block; color: #ea7575; } -.term_item_tab span.glyphicon{ +.term_item_tab span.glyphicon { color: #888; } -.term_item_tab .glyphicon:hover{ +.term_item_tab .glyphicon:hover { color: red; } -.term_item_tab .addServer{ +.term_item_tab .addServer { display: inline-block; width: 40px; text-align: center; - padding:0; + padding: 0; height: 38px; line-height: 38px; vertical-align: top; } -.term_item_tab .addServer span{ - margin:0; +.term_item_tab .addServer span { + margin: 0; color: #20a53a; } -.term_item_tab>span:hover{ - background-color:#ececec; +.term_item_tab > span:hover { + background-color: #ececec; cursor: pointer; } -.term_item_tab .addServer span:hover{ +.term_item_tab .addServer span:hover { color: #4c4c4c; } -.term_content_tab .term_item{ +.term_content_tab .term_item { height: 100%; width: 100%; display: none; } -.term_content_tab .term_item.active{ +.term_content_tab .term_item.active { display: inline-block; } -.term_content_tab{ +.term_content_tab { background-color: #000; position: absolute; top: 38px; @@ -7896,96 +8041,95 @@ select[disabled]{ bottom: 0; padding: 10px 5px 10px 10px; } -.quick_links_input{ +.quick_links_input { height: 35px; line-height: 35px; padding-left: 5px; border: none; width: 100%; - padding-left:70px; - border:1px solid #e1e1e1; + padding-left: 70px; + border: 1px solid #e1e1e1; background-color: #fcfcfc; border-radius: 3px; transition: all 500ms; } -.quick_links_input:focus{ +.quick_links_input:focus { outline: none; - border:1px solid #20a53a; + border: 1px solid #20a53a; background-color: fff; } -.quick_links_input:active{ +.quick_links_input:active { outline: none; } -.term_box{ +.term_box { height: 100%; border-radius: 3px; margin-right: 260px; position: relative; } -.term_tootls{ - width:250px; +.term_tootls { + width: 250px; position: absolute; right: 15px; top: 15px; /* border: 1px solid #ececec; */ } -.term_tootls .tootls_tab{ +.term_tootls .tootls_tab { display: inline-block; /* border: 1px solid #20a53a; */ width: 100%; position: relative; } -.term_tootls .tootls_tab a{ +.term_tootls .tootls_tab a { display: inline-block; width: 38px; text-align: center; height: 38px; line-height: 38px; position: absolute; - right:0; + right: 0; color: #ececec; background-color: #c7c7c71a; } -.term_tootls .tootls_tab a:hover{ +.term_tootls .tootls_tab a:hover { background-color: #8282824d; } -.term_tootls .tootls_tab i{ +.term_tootls .tootls_tab i { font-style: normal; font-size: 12px; color: #ececec; margin-left: 5px; } -.main-content .safe{ +.main-content .safe { position: relative; } -.xterm .xterm-viewport::-webkit-scrollbar{ - width:8px; - height:5px; +.xterm .xterm-viewport::-webkit-scrollbar { + width: 8px; + height: 5px; border-radius: 4px; } -.xterm .xterm-viewport::-webkit-scrollbar-thumb{ - border-radius:0; - box-shadow:inset 0 0 5px rgba(0, 0, 0, 0.2); - background:#666; +.xterm .xterm-viewport::-webkit-scrollbar-thumb { + border-radius: 0; + box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); + background: #666; border-radius: 4px; transition: all 1s; } -.xterm .xterm-viewport:hover::-webkit-scrollbar-thumb{ - background:#aaa; - +.xterm .xterm-viewport:hover::-webkit-scrollbar-thumb { + background: #aaa; } -.xterm .xterm-viewport::-webkit-scrollbar-track{ - box-shadow:inset 0 0 5px rgba(0, 0, 0, 0.2); - border-radius:0; - background:#222; +.xterm .xterm-viewport::-webkit-scrollbar-track { + box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); + border-radius: 0; + background: #222; border-radius: 4px; transition: all 1s; } -.xterm .xterm-viewport:hover::-webkit-scrollbar-track{ - background-color:#444; +.xterm .xterm-viewport:hover::-webkit-scrollbar-track { + background-color: #444; } -.tootls_tab>span{ +.tootls_tab > span { display: inline-block; height: 38px; line-height: 38px; @@ -7993,10 +8137,10 @@ select[disabled]{ width: 100%; font-size: 13px; } -.tootls_tab a span{ +.tootls_tab a span { margin-right: 1px; } -.tootls_tab>span.active{ +.tootls_tab > span.active { background-color: #28903c; color: #fff; padding-left: 15px; @@ -8012,63 +8156,63 @@ select[disabled]{ border-top: 1px solid #ececec; } .tootls_host_list, -.tootls_commonly_list{ +.tootls_commonly_list { list-style: none; border-top: none; border: 1px solid #ececec; overflow-y: auto; } -.tootls_host_list{ +.tootls_host_list { height: 380px; - overflow:auto; + overflow: auto; /* margin-bottom: 10px; */ overflow-x: hidden; font-size: 0; } .tootls_commonly_list li, -.tootls_host_list li{ +.tootls_host_list li { display: inline-block; height: 38px; line-height: 38px; color: #444; - border-bottom:1px solid #ececec; + border-bottom: 1px solid #ececec; font-size: 13px; cursor: pointer; position: relative; width: 100%; } -.tootls_commonly_list li{ +.tootls_commonly_list li { padding-left: 15px; } .tootls_commonly_list li:hover, -.tootls_host_list li:hover{ +.tootls_host_list li:hover { background-color: #eee; } .tootls_commonly_list li:hover .tootls, -.tootls_host_list li:hover .tootls{ +.tootls_host_list li:hover .tootls { display: inline-block; } -.tootls_host_list li i{ +.tootls_host_list li i { display: inline-block; - height:100%; - width:38px; + height: 100%; + width: 38px; background-size: 16px; background: url('../img/soft_ico/ico-cmd.png') no-repeat center center; } -.tootls_commonly_list li>span, -.tootls_host_list li>span{ +.tootls_commonly_list li > span, +.tootls_host_list li > span { vertical-align: top; display: inline-block; } -.tootls_commonly_list li:hover >span:nth-child(2), -.tootls_host_list li:hover >span:nth-child(2){ +.tootls_commonly_list li:hover > span:nth-child(2), +.tootls_host_list li:hover > span:nth-child(2) { width: 135px; } -.tootls_commonly_list li>span:nth-child(2), -.tootls_host_list li>span:nth-child(2){ +.tootls_commonly_list li > span:nth-child(2), +.tootls_host_list li > span:nth-child(2) { overflow: hidden; - text-overflow:ellipsis; + text-overflow: ellipsis; white-space: nowrap; font-size: 12px; max-width: 210px; @@ -8076,52 +8220,52 @@ select[disabled]{ /* .tootls_host_list li>span:nth-child(2){ margin-left: 35px; } */ -.tootls_commonly_list li>span:nth-child(2){ +.tootls_commonly_list li > span:nth-child(2) { max-width: 210px; } .tootls_commonly_list li span:nth-child(3), -.tootls_host_list li span:nth-child(3){ +.tootls_host_list li span:nth-child(3) { padding-left: 10px; } .tootls_commonly_list li .tootls, -.tootls_host_list li .tootls{ +.tootls_host_list li .tootls { width: 70px; text-align: right; padding-right: 10px; display: none; } -.tootls_commonly_list li .tootls{ +.tootls_commonly_list li .tootls { width: 90px; } .tootls_commonly_list li .tootls span, -.tootls_host_list li .tootls span{ +.tootls_host_list li .tootls span { width: 22px; height: 22px; line-height: 22px; text-align: center; } .tootls_commonly_list li .tootls span:nth-child(1), -.tootls_host_list li .tootls span:nth-child(1){ - color:#888; +.tootls_host_list li .tootls span:nth-child(1) { + color: #888; font-size: 14px; } .tootls_commonly_list li .tootls span:nth-child(2), -.tootls_host_list li .tootls span:nth-child(2){ +.tootls_host_list li .tootls span:nth-child(2) { color: #ea7575; } .tootls_commonly_list li .tootls span:nth-child(2):hover, -.tootls_host_list li .tootls span:nth-child(2):hover{ +.tootls_host_list li .tootls span:nth-child(2):hover { color: red; } .bt-form-2x .tname, -.bt-form-2x .bt-input-text{ +.bt-form-2x .bt-input-text { height: 38px; line-height: 38px; } -.bt-form-2x .bt-input-text{ +.bt-form-2x .bt-input-text { padding-left: 8px; } -.bt-form-2x .auth_type_checkbox{ +.bt-form-2x .auth_type_checkbox { /* height: 34px; line-height: 34px; */ padding: 8px 12px; @@ -8130,10 +8274,10 @@ select[disabled]{ width: 140px; position: fixed; border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .15); + border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 2px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); - box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); z-index: 999999; background: #fff; padding: 6px 0; @@ -8143,27 +8287,26 @@ select[disabled]{ -ms-user-select: none; user-select: none; } -.menu_right_list li{ +.menu_right_list li { height: 28px; - line-height:28px; - + line-height: 28px; } -.menu_right_list li:hover{ +.menu_right_list li:hover { background-color: #ececec; transition: all 500ms; cursor: pointer; } -.menu_right_list li a{ +.menu_right_list li a { padding-left: 15px; display: inline-block; width: 100%; transition: all 500ms; text-decoration: none; } -.menu_right_list li:hover a{ +.menu_right_list li:hover a { color: #20a532; } -.menu_right_list li.split_line{ +.menu_right_list li.split_line { height: 1px; background-color: #ececec; } @@ -8171,11 +8314,11 @@ select[disabled]{ /* 终端管理页面 */ -.pd25{ +.pd25 { padding: 25px; } -.quick_links{ +.quick_links { width: 100%; height: 35px; background-color: #fcfcfc; @@ -8183,7 +8326,7 @@ select[disabled]{ margin-bottom: 15px; display: none; } -.quick_links>span.glyphicon { +.quick_links > span.glyphicon { position: absolute; right: 12px; top: 12px; @@ -8200,7 +8343,7 @@ select[disabled]{ top: 0; color: #555; } -.quick_links_title span{ +.quick_links_title span { margin-right: 4px; color: #ffa515; } @@ -8224,21 +8367,20 @@ select[disabled]{ z-index: 999; margin-top: -30px; } -.term-tool-button span{ +.term-tool-button span { font-size: 12px; position: relative; left: 15%; top: 35%; font-size: 18px; - color: #FFFFFF; + color: #ffffff; cursor: pointer; } -.term-tool-button:hover{ - background-color: #D8D8D8; +.term-tool-button:hover { + background-color: #d8d8d8; } - -.term_item_tab{ +.term_item_tab { background: #f1f1f1; font-size: 0; } @@ -8253,25 +8395,25 @@ select[disabled]{ overflow: hidden; overflow-x: auto; } -.term_item_tab .list::-webkit-scrollbar{ - width:8px; - height:4px; +.term_item_tab .list::-webkit-scrollbar { + width: 8px; + height: 4px; background-color: transparent; } -.term_item_tab .list ::-webkit-scrollbar-thumb{ - border-radius:0; - background:transparent; +.term_item_tab .list ::-webkit-scrollbar-thumb { + border-radius: 0; + background: transparent; border-radius: 4px; transition: all 1s; } -.term_item_tab .list:hover::-webkit-scrollbar-thumb{ - background:rgba(1, 3, 18, 0.4); +.term_item_tab .list:hover::-webkit-scrollbar-thumb { + background: rgba(1, 3, 18, 0.4); } -.term_item_tab .list::-webkit-scrollbar-track{ - background-color:transparent; +.term_item_tab .list::-webkit-scrollbar-track { + background-color: transparent; } -.term_item_tab .list>span { +.term_item_tab .list > span { height: 38px; line-height: 38px; text-align: left; @@ -8308,22 +8450,21 @@ select[disabled]{ left: 8px; transform: rotate(-45deg); } -.icon-trem-close::after{ +.icon-trem-close::after { transform: rotate(45deg); } -.icon-trem-close::before{ +.icon-trem-close::before { transform: rotate(-45deg); } - -.term_item_tab .list>span.active .icon-trem-close, -.term_item_tab .list>span:hover .icon-trem-close{ +.term_item_tab .list > span.active .icon-trem-close, +.term_item_tab .list > span:hover .icon-trem-close { display: inline-block !important; } -.term_item_tab .list>span i{ +.term_item_tab .list > span i { transition: all 50ms; } -.term_item_tab .list>span .icon { +.term_item_tab .list > span .icon { height: 9px; width: 9px; border-radius: 5px; @@ -8334,28 +8475,28 @@ select[disabled]{ top: 50%; margin-top: -4.5px; } -.term_item_tab .list>span .icon.icon-sucess{ +.term_item_tab .list > span .icon.icon-sucess { background-color: #10952a; } -.term_item_tab .list>span .icon.icon-info{ +.term_item_tab .list > span .icon.icon-info { background-color: #fc6d26; } -.term_item_tab .list>span .icon.icon-warning{ +.term_item_tab .list > span .icon.icon-warning { background-color: #ff5d2c; } -.term_item_tab .list>span:hover{ +.term_item_tab .list > span:hover { background-color: #dadada; } -.term_item_tab .list> span.active{ +.term_item_tab .list > span.active { background-color: #424242; } -.term_item_tab .list span.active span{ +.term_item_tab .list span.active span { color: #fff; } -.term_item_tab .list .content{ +.term_item_tab .list .content { position: relative; overflow: hidden; white-space: nowrap; @@ -8372,10 +8513,10 @@ select[disabled]{ display: none; transition: all 500ms; } -.term_item_tab .item .glyphicon:hover{ +.term_item_tab .item .glyphicon:hover { color: red; } -.term_item_tab .list span span{ +.term_item_tab .list span span { vertical-align: middle; font-size: 13px; font-weight: 500; @@ -8383,7 +8524,7 @@ select[disabled]{ display: inline-block; line-height: 37px; } -.term_item_tab .glyphicon{ +.term_item_tab .glyphicon { font-size: 15px; margin-left: 8px; vertical-align: middle; @@ -8392,16 +8533,16 @@ select[disabled]{ display: inline-block; color: #ea7575; } -.term_item_tab span.glyphicon{ +.term_item_tab span.glyphicon { color: #888; } -.term_item_tab .glyphicon:hover{ +.term_item_tab .glyphicon:hover { color: red; } -.term_item_tab .tab_tootls{ +.term_item_tab .tab_tootls { padding: 0; - float:right; + float: right; /* padding-right: 15px; */ /* display: inline-block; */ /* display: none; */ @@ -8415,44 +8556,43 @@ select[disabled]{ /* vertical-align: bottom; } */ .term_item_tab .tab_tootls .glyphicon-resize-full, -.term_item_tab .tab_tootls .glyphicon-resize-small{ +.term_item_tab .tab_tootls .glyphicon-resize-small { height: 38px; line-height: 38px; - width:40px; + width: 40px; text-align: center; - margin:0 + margin: 0; } - -.term_item_tab .addServer{ +.term_item_tab .addServer { display: inline-block; width: 40px; text-align: center; - padding:0; + padding: 0; height: 38px; line-height: 38px; vertical-align: top; } -.term_item_tab .addServer span{ - margin:0; +.term_item_tab .addServer span { + margin: 0; color: #20a53a; } -.term_item_tab>span:hover{ - background-color:#ececec; +.term_item_tab > span:hover { + background-color: #ececec; cursor: pointer; } -.term_item_tab .addServer span:hover{ +.term_item_tab .addServer span:hover { color: #4c4c4c; } -.term_content_tab .term_item{ +.term_content_tab .term_item { height: 100%; width: 100%; display: none; } -.term_content_tab .term_item.active{ +.term_content_tab .term_item.active { display: inline-block; } -.term_content_tab{ +.term_content_tab { background-color: #000; position: absolute; top: 38px; @@ -8461,96 +8601,95 @@ select[disabled]{ bottom: 0; padding: 10px 5px 10px 10px; } -.quick_links_input{ +.quick_links_input { height: 35px; line-height: 35px; padding-left: 5px; border: none; width: 100%; - padding-left:70px; - border:1px solid #e1e1e1; + padding-left: 70px; + border: 1px solid #e1e1e1; background-color: #fcfcfc; border-radius: 3px; transition: all 500ms; } -.quick_links_input:focus{ +.quick_links_input:focus { outline: none; - border:1px solid #20a53a; + border: 1px solid #20a53a; background-color: fff; } -.quick_links_input:active{ +.quick_links_input:active { outline: none; } -.term_box{ +.term_box { height: 100%; border-radius: 3px; margin-right: 260px; position: relative; } -.term_tootls{ - width:250px; +.term_tootls { + width: 250px; position: absolute; right: 15px; top: 15px; /* border: 1px solid #ececec; */ } -.term_tootls .tootls_tab{ +.term_tootls .tootls_tab { display: inline-block; /* border: 1px solid #20a53a; */ width: 100%; position: relative; } -.term_tootls .tootls_tab a{ +.term_tootls .tootls_tab a { display: inline-block; width: 38px; text-align: center; height: 38px; line-height: 38px; position: absolute; - right:0; + right: 0; color: #ececec; background-color: #c7c7c71a; } -.term_tootls .tootls_tab a:hover{ +.term_tootls .tootls_tab a:hover { background-color: #8282824d; } -.term_tootls .tootls_tab i{ +.term_tootls .tootls_tab i { font-style: normal; font-size: 12px; color: #ececec; margin-left: 5px; } -.main-content .safe{ +.main-content .safe { position: relative; } -.xterm .xterm-viewport::-webkit-scrollbar{ - width:8px; - height:5px; +.xterm .xterm-viewport::-webkit-scrollbar { + width: 8px; + height: 5px; border-radius: 4px; } -.xterm .xterm-viewport::-webkit-scrollbar-thumb{ - border-radius:0; - box-shadow:inset 0 0 5px rgba(0, 0, 0, 0.2); - background:#666; +.xterm .xterm-viewport::-webkit-scrollbar-thumb { + border-radius: 0; + box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); + background: #666; border-radius: 4px; transition: all 1s; } -.xterm .xterm-viewport:hover::-webkit-scrollbar-thumb{ - background:#aaa; - +.xterm .xterm-viewport:hover::-webkit-scrollbar-thumb { + background: #aaa; } -.xterm .xterm-viewport::-webkit-scrollbar-track{ - box-shadow:inset 0 0 5px rgba(0, 0, 0, 0.2); - border-radius:0; - background:#222; +.xterm .xterm-viewport::-webkit-scrollbar-track { + box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); + border-radius: 0; + background: #222; border-radius: 4px; transition: all 1s; } -.xterm .xterm-viewport:hover::-webkit-scrollbar-track{ - background-color:#444; +.xterm .xterm-viewport:hover::-webkit-scrollbar-track { + background-color: #444; } -.tootls_tab>span{ +.tootls_tab > span { display: inline-block; height: 38px; line-height: 38px; @@ -8558,10 +8697,10 @@ select[disabled]{ width: 100%; font-size: 13px; } -.tootls_tab a span{ +.tootls_tab a span { margin-right: 1px; } -.tootls_tab>span.active{ +.tootls_tab > span.active { background-color: #28903c; color: #fff; padding-left: 15px; @@ -8577,63 +8716,63 @@ select[disabled]{ border-top: 1px solid #ececec; } .tootls_host_list, -.tootls_commonly_list{ +.tootls_commonly_list { list-style: none; border-top: none; border: 1px solid #ececec; overflow-y: auto; } -.tootls_host_list{ +.tootls_host_list { height: 380px; - overflow:auto; + overflow: auto; /* margin-bottom: 10px; */ overflow-x: hidden; font-size: 0; } .tootls_commonly_list li, -.tootls_host_list li{ +.tootls_host_list li { display: inline-block; height: 38px; line-height: 38px; color: #444; - border-bottom:1px solid #ececec; + border-bottom: 1px solid #ececec; font-size: 13px; cursor: pointer; position: relative; width: 100%; } -.tootls_commonly_list li{ +.tootls_commonly_list li { padding-left: 15px; } .tootls_commonly_list li:hover, -.tootls_host_list li:hover{ +.tootls_host_list li:hover { background-color: #eee; } .tootls_commonly_list li:hover .tootls, -.tootls_host_list li:hover .tootls{ +.tootls_host_list li:hover .tootls { display: inline-block; } -.tootls_host_list li i{ +.tootls_host_list li i { display: inline-block; - height:100%; - width:38px; + height: 100%; + width: 38px; background-size: 16px; background: url('../img/soft_ico/ico-cmd.png') no-repeat center center; } -.tootls_commonly_list li>span, -.tootls_host_list li>span{ +.tootls_commonly_list li > span, +.tootls_host_list li > span { vertical-align: top; display: inline-block; } -.tootls_commonly_list li:hover >span:nth-child(2), -.tootls_host_list li:hover >span:nth-child(2){ +.tootls_commonly_list li:hover > span:nth-child(2), +.tootls_host_list li:hover > span:nth-child(2) { width: 135px; } -.tootls_commonly_list li>span:nth-child(2), -.tootls_host_list li>span:nth-child(2){ +.tootls_commonly_list li > span:nth-child(2), +.tootls_host_list li > span:nth-child(2) { overflow: hidden; - text-overflow:ellipsis; + text-overflow: ellipsis; white-space: nowrap; font-size: 12px; max-width: 210px; @@ -8641,52 +8780,52 @@ select[disabled]{ /* .tootls_host_list li>span:nth-child(2){ margin-left: 35px; } */ -.tootls_commonly_list li>span:nth-child(2){ +.tootls_commonly_list li > span:nth-child(2) { max-width: 210px; } .tootls_commonly_list li span:nth-child(3), -.tootls_host_list li span:nth-child(3){ +.tootls_host_list li span:nth-child(3) { padding-left: 10px; } .tootls_commonly_list li .tootls, -.tootls_host_list li .tootls{ +.tootls_host_list li .tootls { width: 70px; text-align: right; padding-right: 10px; display: none; } -.tootls_commonly_list li .tootls{ +.tootls_commonly_list li .tootls { width: 90px; } .tootls_commonly_list li .tootls span, -.tootls_host_list li .tootls span{ +.tootls_host_list li .tootls span { width: 22px; height: 22px; line-height: 22px; text-align: center; } .tootls_commonly_list li .tootls span:nth-child(1), -.tootls_host_list li .tootls span:nth-child(1){ - color:#888; +.tootls_host_list li .tootls span:nth-child(1) { + color: #888; font-size: 14px; } .tootls_commonly_list li .tootls span:nth-child(2), -.tootls_host_list li .tootls span:nth-child(2){ +.tootls_host_list li .tootls span:nth-child(2) { color: #ea7575; } .tootls_commonly_list li .tootls span:nth-child(2):hover, -.tootls_host_list li .tootls span:nth-child(2):hover{ +.tootls_host_list li .tootls span:nth-child(2):hover { color: red; } .bt-form-2x .tname, -.bt-form-2x .bt-input-text{ +.bt-form-2x .bt-input-text { height: 38px; line-height: 38px; } -.bt-form-2x .bt-input-text{ +.bt-form-2x .bt-input-text { padding-left: 8px; } -.bt-form-2x .auth_type_checkbox{ +.bt-form-2x .auth_type_checkbox { /* height: 34px; line-height: 34px; */ padding: 8px 12px; @@ -8695,10 +8834,10 @@ select[disabled]{ width: 140px; position: fixed; border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .15); + border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 2px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); - box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); z-index: 999999; background: #fff; padding: 6px 0; @@ -8708,27 +8847,26 @@ select[disabled]{ -ms-user-select: none; user-select: none; } -.menu_right_list li{ +.menu_right_list li { height: 28px; - line-height:28px; - + line-height: 28px; } -.menu_right_list li:hover{ +.menu_right_list li:hover { background-color: #ececec; transition: all 500ms; cursor: pointer; } -.menu_right_list li a{ +.menu_right_list li a { padding-left: 15px; display: inline-block; width: 100%; transition: all 500ms; text-decoration: none; } -.menu_right_list li:hover a{ +.menu_right_list li:hover a { color: #20a532; } -.menu_right_list li.split_line{ +.menu_right_list li.split_line { height: 1px; background-color: #ececec; } @@ -8753,9 +8891,8 @@ select[disabled]{ margin-top: -200px; border-radius: 2px; padding-bottom: 45px; - } -.localhost-form-view>button { +.localhost-form-view > button { margin-left: 100px; margin-top: 10px; width: 120px; @@ -8781,24 +8918,19 @@ select[disabled]{ } /*end*/ - - - - - /* ssl商业证书 */ -.business_ssl_application{ +.business_ssl_application { padding: 25px 20px 40px 20px; } -.business_ssl_application .guide_body{ +.business_ssl_application .guide_body { position: relative; } -.guide_content{ +.guide_content { padding-top: 10px; margin: 0 auto; width: 540px; } -.guide_content .line{ +.guide_content .line { margin-bottom: 5px; } .ssl_product_table { @@ -8813,14 +8945,14 @@ select[disabled]{ margin-right: 5px !important; color: #20a532; } -.ssl_product_table tbody tr.active{ +.ssl_product_table tbody tr.active { background-color: #ececec; } -.ssl_product_table tbody tr:hover{ +.ssl_product_table tbody tr:hover { cursor: pointer; } .ssl_product_table tbody tr td:nth-child(1) input, -.ssl_product_table tbody tr td:nth-child(1) span{ +.ssl_product_table tbody tr td:nth-child(1) span { vertical-align: text-top; margin: 0; } @@ -8847,14 +8979,14 @@ select[disabled]{ background: #cccccc; z-index: 910; } -.business_ssl_application .tname{ +.business_ssl_application .tname { width: 90px; } -.business_ssl_application .line .info-r{ +.business_ssl_application .line .info-r { margin-left: 90px; } -.business_ssl_application .guide_path{ - padding:20px 10px 10px; +.business_ssl_application .guide_path { + padding: 20px 10px 10px; display: flex; } @@ -8897,43 +9029,43 @@ select[disabled]{ color: #20a53a; } -.ssl_valid_year label{ +.ssl_valid_year label { height: 32px; line-height: 32px; width: 70px; margin: 0; } -.ssl_valid_year label.disabled span{ +.ssl_valid_year label.disabled span { color: #bbb; } -.ssl_valid_year label input{ +.ssl_valid_year label input { vertical-align: middle; margin: 0; margin-right: 5px; height: 15px; - width:15px; + width: 15px; } -.ssl_valid_year label span{ +.ssl_valid_year label span { vertical-align: middle; } -.ssl_valid_year .pay-cycle-btn{ +.ssl_valid_year .pay-cycle-btn { width: 80px; height: 35px; line-height: 35px; } .ssl_valid_year .pay-cycle-btn.disabled { - border: 1px solid #DDD; - background-color: #F5F5F5; - color: #ACA899; + border: 1px solid #ddd; + background-color: #f5f5f5; + color: #aca899; cursor: no-drop; } -.guide_price{ - color: #FF6232; +.guide_price { + color: #ff6232; } -.guide_price span:nth-child(1){ +.guide_price span:nth-child(1) { font-size: 23px; } -.guide_price span:nth-child(2){ +.guide_price span:nth-child(2) { font-size: 14px; } .ssl_class_table input { @@ -8942,10 +9074,23 @@ select[disabled]{ height: 14px; width: 14px; } -.ssl_class_table span{ +.ssl_class_table span { vertical-align: text-bottom; } +.ssl_recom_icon::after { + content: ''; + display: inline-block; + height: 32px; + width: 32px; + position: absolute; + top: -2px; + right: -2px; + z-index: 9999; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAA+NJREFUeF7t2j1vEzEYB3AfoqrahQGGStCAKkGTT0ARokyMHREbE6zQUkaYygikLSNMbIiNjogBEAI+ARJIoBwMHWBgKYITMvpbcnAcv5/vci+9rb30kufnx34eO01Iy6+k5fETI8CHzvRKQulGmUj0AH3RG2TrZb2nNQMYAqHPyvpAeJ8kofcXS0KwAuADFYVw6OJlcnj1Fvl66QLJvg1GjMtCcAIoAgHBz919yIJG8CoEmtB+b5DdKDL7nAFiIojB47l7714xANVVNIIXQAwEn+A5SJEI3gB5EEKCLxohCCAEIU/wRSIEA/ggyMHzgD6fPTW2+uPe7NIymbv3SFcd+osRF8ZcAC4IcvC83E0dO84cZAQEP//kubE6EEI3u2m2FqM65AYwIejSHrUf92QEMXheHgGkvuIgRAHQISy8+TgMUi51MsLuzavDvsAe/HBVyJ0J0QBUCHwu80ZHHkkZgd/H6/UjLz8lXyZEBdAhYPR1F7pBTIew4PNnQnQAl4WRf2y/OU/YdJL3DP9h6VY3zVZ9F8ZCAFwQXIJHwJgms2fOD9cSAOy9fUl+bN5RYPgjFAZgQnAJXn6NPLKA2F2/wvYRo5cfQqEALtVBteBh1I+s3R6J6+fTx+znqfkTrFHil7qZckcoHMBUHXBPXu2R9iif4qIoj7RYPZABuD++NrghlALgUx3EqmAqh2KWYCutqjSU0O1eml03LYylAbgsjPLo6/YKeJa4RqCJ4lNkPFi63TUglApgQxCDMh2SyAAIHgj6S49QOoBrdfje32ClTneJU0B8LRAxdRRrgjITJgKgQxCngGlU5RLJpwr/ve6MkZDxTJgYgEuJVK0BcvDiVBGrg/agldAHvTS7xjNrogAqBGQBzgP4VhlzG50fusGZ0+es+wZfhIkDqBBUjZB7J0hY+8wbKU0mfOmmfxbwzEoAmJolngkigK1CIIPEblGBUD0A3ZqAQGaWltmU+PX+NZsO+h0hYdNHDp7vIoUvX6oJYOsTTB0d7snBY/04eLQzPH4TMqG6AKEIquB5d8gXRuFkqtoAvgim4HnW4NRJaJerD+CK4BK8YurUA8CGEBg8HlsfAB2CfJhq3hGO5UC9AGx9gmfw9csAPn7yf6qg3uOITH8WoC2c9csAHYKtN9Dcry+AbWF0BKk3QASE+gPkRGgGQA6E5gAEIjQLIACheQCeCM0E8EBoLoAjQrMBgPCpM73yV/9f7s0HsCC0A8CA0B4ADUK7ABQI7QOQENoJICBsVe6rMcd9fJSXoUSeTH/v4GGV+W4wSmQBD9kHCEBr1J/sZ0CjhjMgmP0MCEBr1J/8A0eQJW7EvfsZAAAAAElFTkSuQmCC'); + background-size: 100%; +} + .ssl-brand-info { width: 410px; display: inline-block; @@ -8965,14 +9110,16 @@ select[disabled]{ padding-left: 150px; position: relative; } -.ssl-brand-info::after{ +.ssl-brand-info::after { content: ''; } -.prev-plan,.next-plan,.play-plan { +.prev-plan, +.next-plan, +.play-plan { padding: 5px 30px; font-size: 14px; } -.guide_content .line input[type=text]{ +.guide_content .line input[type='text'] { width: 400px; } .ssl-info-line { @@ -8981,7 +9128,7 @@ select[disabled]{ font-size: 15px; color: #20a53a; } -.ssl_verification label{ +.ssl_verification label { height: 32px; line-height: 32px; margin-bottom: 0; @@ -8992,7 +9139,7 @@ select[disabled]{ margin-top: 0; margin-right: 5px; } -.ssl_verification label span{ +.ssl_verification label span { font-weight: 400; } .ssl_applay_info { @@ -9002,31 +9149,32 @@ select[disabled]{ .ssl_applay_info .payTitle { margin-bottom: 15px; height: 50px; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALcAAAAyCAYAAAAeE0r0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RERDMENDNjk2OTNDMTFFNzhFQTlBQ0RDMzI3NzNCQzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RERDMENDNkE2OTNDMTFFNzhFQTlBQ0RDMzI3NzNCQzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpEREMwQ0M2NzY5M0MxMUU3OEVBOUFDREMzMjc3M0JDMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpEREMwQ0M2ODY5M0MxMUU3OEVBOUFDREMzMjc3M0JDMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pu+PnjYAABY7SURBVHja7F0JnBXF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) no-repeat center center; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALcAAAAyCAYAAAAeE0r0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RERDMENDNjk2OTNDMTFFNzhFQTlBQ0RDMzI3NzNCQzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RERDMENDNkE2OTNDMTFFNzhFQTlBQ0RDMzI3NzNCQzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpEREMwQ0M2NzY5M0MxMUU3OEVBOUFDREMzMjc3M0JDMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpEREMwQ0M2ODY5M0MxMUU3OEVBOUFDREMzMjc3M0JDMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pu+PnjYAABY7SURBVHja7F0JnBXF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) + no-repeat center center; text-indent: -999px; background-size: 150px; } -.ssl_applay_info .paymethod{ +.ssl_applay_info .paymethod { width: 200px; } -.ssl_applay_info .paymethod .pay-wx canvas{ +.ssl_applay_info .paymethod .pay-wx canvas { width: 200px; height: 200px; margin: 0; } -.ssl_applay_info .paymethod .pay-wx{ +.ssl_applay_info .paymethod .pay-wx { height: 200px; } -.ssl_applay_info .lib-price-box{ +.ssl_applay_info .lib-price-box { margin-top: 10px; } -.ssl_applay_info .lib-price-box .lib-price-name{ +.ssl_applay_info .lib-price-box .lib-price-name { font-size: 18px; } -.ssl_applay_info .lib-price-box .price-txt{ +.ssl_applay_info .lib-price-box .price-txt { font-size: 20px; } -.ssl_applay_info .lib-price-box .price-txt b{ +.ssl_applay_info .lib-price-box .price-txt b { font-size: 28px; } .ssl_order_check .lib-price-detailed, @@ -9036,25 +9184,24 @@ select[disabled]{ width: 420px; border-top: 1px solid #dedede; border-bottom: 1px solid #dedede; - } .ssl_order_check .lib-price-detailed .info, -.ssl_applay_info .lib-price-detailed .info{ +.ssl_applay_info .lib-price-detailed .info { overflow: hidden; display: flex; } .ssl_order_check .lib-price-detailed .info span, -.ssl_applay_info .lib-price-detailed .info span{ - flex:1; +.ssl_applay_info .lib-price-detailed .info span { + flex: 1; display: inline-block; padding: 10px 15px; font-weight: 500; color: #555; } -.ssl_applay_info .lib-price-detailed .info span:nth-child(2){ - flex:2; +.ssl_applay_info .lib-price-detailed .info span:nth-child(2) { + flex: 2; } -.ssl_order_check .order_paly_success{ +.ssl_order_check .order_paly_success { font-size: 24px; } @@ -9065,7 +9212,8 @@ select[disabled]{ padding-left: 45px; width: 200px; height: 45px; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAADMElEQVR4Xu1abU7bQBB9YxupUo3qcoHSE5QI+N1wg9yg9AQNJ6A9AekNwg1yA+jvtEo4QeEC1AgjVYq9g9bUNA0f3vFqqVE2v9/OvHnzdrO7XsKS/2jJ64cXwDtgyRXwU8DGAMkECTh+VxuD8rO08/u0FjcHSCYv1sHRm9oxlJ2kHaS1uAcAjRygCw/yeB9EfZPEDKQczjqmIujig2Llp0nsEsM8UFH2pYkQYgF08ZTHR0S0YUwQgCL1Md28GpqMWRvHn0G0b4KtMMw85SjbkYogFmDtezwA6JOEnMaqcPbWmQNuyfDX863MyJXVEJEApfWL1V+3qgMXBB4qxuhRQaL81LT4Kk65BuTR+mNxA0KPQbsEvKpwKrx8LXGBTIBx3A2Ijv6SkisudU4dftGRinkn3c6O68Y1c8CCANJkpqQkuMSSk5UDvABCu0k6a4r1DvBT4N+FWTot/RpgOtc0zna+SXKZYm05eQeYKl06YO6QwsAFh7MN6Q5Pks8Eu3hwkmy5dXyRA25FyKNdFeXD/138/LY5aMhJLIBJV54TxgvwnLrlgqvYAWvj+IAJossQF8Tvi0mM6fl2tifJJxJg8T9XkuipsE+6E3yqoiR5nAqgiegLCAb1CKi/sZUwt8QycEbgkdMrMUuOrRwuWgNaWYElKS+AVMDytrYI3yMsvrVpK9yUk8gBC4ch0dceqdCmeM2JipUJAYke4/QwZHv2Ni1KgrPlJHOA5f2bpDBTrBfAsineAaZWKy9DLNWW5DLF2nLyDjBV2jvAT4G7awCwbJ/H7z6QSIl4oAiPf4939EgqYHSZqV/tAm92gg4fSNzcB6zqdz4fJGtHk0dS89tbQa7D863LXQG+yXcBJFTExwSqfx43x0SR2ks3rwYm5JIfL/sBBwcm2ArD4BMOs67keYweK/obrJL9eSukizF2guSQIn4mBxyq8LIvLb6xAPNCII83AqD7ULdUwCmCYiQ9OpfHbhX2AkXlKe++nwKOEWXTJoVX8Ro5QGLNtmO9AG3vkGt+3gGuFW57fO+AtnfINT/vANcKtz2+d0DbO+San3eAa4XbHt87oO0dcs1v6R1wDSbCMF8UwqNRAAAAAElFTkSuQmCC) no-repeat; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAADMElEQVR4Xu1abU7bQBB9YxupUo3qcoHSE5QI+N1wg9yg9AQNJ6A9AekNwg1yA+jvtEo4QeEC1AgjVYq9g9bUNA0f3vFqqVE2v9/OvHnzdrO7XsKS/2jJ64cXwDtgyRXwU8DGAMkECTh+VxuD8rO08/u0FjcHSCYv1sHRm9oxlJ2kHaS1uAcAjRygCw/yeB9EfZPEDKQczjqmIujig2Llp0nsEsM8UFH2pYkQYgF08ZTHR0S0YUwQgCL1Md28GpqMWRvHn0G0b4KtMMw85SjbkYogFmDtezwA6JOEnMaqcPbWmQNuyfDX863MyJXVEJEApfWL1V+3qgMXBB4qxuhRQaL81LT4Kk65BuTR+mNxA0KPQbsEvKpwKrx8LXGBTIBx3A2Ijv6SkisudU4dftGRinkn3c6O68Y1c8CCANJkpqQkuMSSk5UDvABCu0k6a4r1DvBT4N+FWTot/RpgOtc0zna+SXKZYm05eQeYKl06YO6QwsAFh7MN6Q5Pks8Eu3hwkmy5dXyRA25FyKNdFeXD/138/LY5aMhJLIBJV54TxgvwnLrlgqvYAWvj+IAJossQF8Tvi0mM6fl2tifJJxJg8T9XkuipsE+6E3yqoiR5nAqgiegLCAb1CKi/sZUwt8QycEbgkdMrMUuOrRwuWgNaWYElKS+AVMDytrYI3yMsvrVpK9yUk8gBC4ch0dceqdCmeM2JipUJAYke4/QwZHv2Ni1KgrPlJHOA5f2bpDBTrBfAsineAaZWKy9DLNWW5DLF2nLyDjBV2jvAT4G7awCwbJ/H7z6QSIl4oAiPf4939EgqYHSZqV/tAm92gg4fSNzcB6zqdz4fJGtHk0dS89tbQa7D863LXQG+yXcBJFTExwSqfx43x0SR2ks3rwYm5JIfL/sBBwcm2ArD4BMOs67keYweK/obrJL9eSukizF2guSQIn4mBxyq8LIvLb6xAPNCII83AqD7ULdUwCmCYiQ9OpfHbhX2AkXlKe++nwKOEWXTJoVX8Ro5QGLNtmO9AG3vkGt+3gGuFW57fO+AtnfINT/vANcKtz2+d0DbO+San3eAa4XbHt87oO0dcs1v6R1wDSbCMF8UwqNRAAAAAElFTkSuQmCC) + no-repeat; text-align: center; line-height: 45px; background-size: 45px; @@ -9075,8 +9223,8 @@ select[disabled]{ background-position: 20px 3px; } -.ssl_order_check{ - padding:20px; +.ssl_order_check { + padding: 20px; } .ssl_order_check .order_paly_success { font-size: 25px; @@ -9087,35 +9235,35 @@ select[disabled]{ .lib-price-button button { padding: 8px 45px; - margin:0 15px; + margin: 0 15px; } .lib-price-button { margin: 25px 179px 45px; } -.ssl_order_check .lib-price-detailed{ +.ssl_order_check .lib-price-detailed { width: 480px; font-size: 15px; } -.ssl_order_check .lib-ssl-parsing{ - margin:20px 0 5px 0; +.ssl_order_check .lib-ssl-parsing { + margin: 20px 0 5px 0; } -.ssl_order_check .lib-price-button{ +.ssl_order_check .lib-price-button { margin: 0px 0 0 65px; } -.lib-file-verify .parsing_input{ +.lib-file-verify .parsing_input { border-radius: 4px; border-right: 1px solid #ccc !important; width: 320px !important; } -.lib-ssl-parsing .parsing_parem .parsing_textarea{ +.lib-ssl-parsing .parsing_parem .parsing_textarea { display: inline-block; height: 90px; line-height: 20px; border-radius: 3px; - border:1px solid #ccc; + border: 1px solid #ccc; width: 320px; padding-left: 10px; padding-top: 10px; @@ -9125,49 +9273,50 @@ select[disabled]{ width: 510px; margin: 50px 50px 50px 45px; } -.lib-ssl-parsing .parsing_tips .highlight{ +.lib-ssl-parsing .parsing_tips .highlight { color: #20a53a; } -.lib-ssl-parsing .parsing_parem button{ +.lib-ssl-parsing .parsing_parem button { margin-right: 25px; padding: 7px 20px; } -.lib-ssl-parsing .parsing_parem, -.lib-ssl-parsing .parsing_tips{ +.lib-ssl-parsing .parsing_parem, +.lib-ssl-parsing .parsing_tips { margin-bottom: 20px; color: #666; font-size: 15px; } -.lib-ssl-parsing .parsing_parem .parsing_title{ +.lib-ssl-parsing .parsing_parem .parsing_title { display: inline-block; width: 100px; font-weight: 600; font-size: 14px; text-align: right; + white-space: nowrap; } -.lib-ssl-parsing .parsing_parem .parsing_info { +.lib-ssl-parsing .parsing_parem .parsing_info { display: inline-block; } -.lib-ssl-parsing .parsing_parem .parsing_input{ +.lib-ssl-parsing .parsing_parem .parsing_input { display: inline-block; height: 38px; line-height: 38px; border-top-left-radius: 3px; border-bottom-left-radius: 3px; - border:1px solid #ccc; + border: 1px solid #ccc; width: 330px; padding-left: 10px; border-right: 0; } -.lib-ssl-parsing .parsing_parem .parsing_textarea{ +.lib-ssl-parsing .parsing_parem .parsing_textarea { width: 388px; } -.lib-ssl-parsing .parsing_parem .parsing_input.border{ - border-right:1px solid #ccc; +.lib-ssl-parsing .parsing_parem .parsing_input.border { + border-right: 1px solid #ccc; width: 388px; } -.lib-ssl-parsing .parsing_parem .parsing_icon, -.lib-ssl-parsing .parsing_parem .parsing_bottom{ +.lib-ssl-parsing .parsing_parem .parsing_icon, +.lib-ssl-parsing .parsing_parem .parsing_bottom { height: 38px; line-height: 38px; border-top-right-radius: 3px; @@ -9178,21 +9327,21 @@ select[disabled]{ background: #20a532; cursor: pointer; } -.lib-ssl-parsing .parsing_parem .parsing_bottom{ +.lib-ssl-parsing .parsing_parem .parsing_bottom { display: block; width: 60px; border-radius: 3px; } -.full_term_view .sidebar-scroll{ +.full_term_view .sidebar-scroll { display: none; } -.full_term_view .main-content{ +.full_term_view .main-content { margin: 0; } -.full_term_view .container-fluid{ +.full_term_view .container-fluid { padding: 0; } -.full_term_view .container-fluid .safe{ +.full_term_view .container-fluid .safe { margin: 0; position: absolute; top: 0; @@ -9201,14 +9350,14 @@ select[disabled]{ right: 0; padding: 0; } -.full_term_view .term_tootls{ - top:0; +.full_term_view .term_tootls { + top: 0; right: 0; } -.full_term_view .term_box{ +.full_term_view .term_box { margin-right: 250px; } -.full_term_view .footer{ +.full_term_view .footer { display: none; } @@ -9217,7 +9366,7 @@ select[disabled]{ position: fixed; left: 50%; top: 50%; - background: rgb(0 0 0 /.85); + background: rgb(0 0 0 /0.85); z-index: 9999; height: 650px; width: 750px; @@ -9229,7 +9378,7 @@ select[disabled]{ box-shadow: 0 0 3px 1px rgba(0, 0, 0, 0.3); border-radius: 4px; } -.preview_images_mask .preview_head{ +.preview_images_mask .preview_head { height: 45px; line-height: 45px; width: 100%; @@ -9241,7 +9390,7 @@ select[disabled]{ width: 100%; display: inline-block; font-size: 16px; - background-color: rgb(0 0 0 /.45); + background-color: rgb(0 0 0 /0.45); color: #cacaca; cursor: all-scroll; } @@ -9258,13 +9407,13 @@ select[disabled]{ color: #d6d6d6; } .preview_images_mask .preview_full, -.preview_images_mask .preview_small{ +.preview_images_mask .preview_small { right: 45px; font-size: 18px; } .preview_images_mask .preview_close:hover, .preview_images_mask .preview_full:hover, -.preview_images_mask .preview_small:hover{ +.preview_images_mask .preview_small:hover { background-color: #444; color: #fff; cursor: pointer; @@ -9275,11 +9424,11 @@ select[disabled]{ z-index: 99; padding: 45px 0; } -.preview_images_mask:hover .preview_cut_view{ - opacity:1; +.preview_images_mask:hover .preview_cut_view { + opacity: 1; } -.preview_images_mask:hover .preview_toolbar{ - opacity:1; +.preview_images_mask:hover .preview_toolbar { + opacity: 1; } .preview_images_mask .preview_body img { position: absolute; @@ -9293,21 +9442,21 @@ select[disabled]{ -ms-user-select: none; user-select: none; } -.preview_images_mask .preview_toolbar{ +.preview_images_mask .preview_toolbar { position: absolute; bottom: 0; width: 250px; left: 50%; margin-left: -125px; - height:45px; + height: 45px; border-radius: 3px; - background-color: rgb(0 0 0 /.65); + background-color: rgb(0 0 0 /0.65); font-size: 18px; z-index: 999; - opacity:0; + opacity: 0; transition: all 1000ms; } -.preview_images_mask .preview_toolbar a{ +.preview_images_mask .preview_toolbar a { width: 50px; height: 45px; line-height: 45px; @@ -9316,43 +9465,42 @@ select[disabled]{ transition: all 500ms; border-radius: 3px; } -.preview_images_mask .preview_toolbar a:hover{ +.preview_images_mask .preview_toolbar a:hover { background-color: rgb(86 86 86 / 75%); } -.preview_images_mask .preview_toolbar span{ +.preview_images_mask .preview_toolbar span { vertical-align: middle; color: #bbb; } -.preview_images_mask .preview_toolbar span.reverse-repeat{ +.preview_images_mask .preview_toolbar span.reverse-repeat { transform: rotateY(180deg); } -.preview_images_mask .preview_cut_view{ - opacity:0; +.preview_images_mask .preview_cut_view { + opacity: 0; transition: all 500ms; } -.preview_images_mask .preview_cut_view a:hover{ +.preview_images_mask .preview_cut_view a:hover { background-color: #3a3a3a; color: #fff; } -.preview_images_mask .preview_cut_view a{ +.preview_images_mask .preview_cut_view a { position: absolute; font-size: 26px; width: 50px; height: 50px; text-align: center; line-height: 50px; - top:50%; + top: 50%; margin-top: -25px; background-color: rgb(0 0 0 / 0.2); border-radius: 50%; transition: all 200ms; z-index: 999; } -.preview_images_mask .preview_cut_view a:nth-child(1){ +.preview_images_mask .preview_cut_view a:nth-child(1) { left: 3%; - } -.preview_images_mask .preview_cut_view a:nth-child(2){ +.preview_images_mask .preview_cut_view a:nth-child(2) { right: 3%; } .preview_images_mask .preview_cut_view span { @@ -9366,7 +9514,7 @@ select[disabled]{ /* end */ /* Nginx日志格式 */ -.nginx-add-format .bt-select{ +.nginx-add-format .bt-select { width: 211px; height: 30px; line-height: 30px; @@ -9375,7 +9523,7 @@ select[disabled]{ position: relative; display: inline-block; } -.nginx-add-format .bt-select-tips{ +.nginx-add-format .bt-select-tips { color: #999; } .nginx-add-format .bt-select-list { @@ -9391,26 +9539,26 @@ select[disabled]{ width: 211px; left: 10px; } -.nginx-add-format .bt-select-list.active{ +.nginx-add-format .bt-select-list.active { display: block; } -.nginx-add-format .bt-select-list li{ - padding: 2px 10px; +.nginx-add-format .bt-select-list li { + padding: 2px 10px; cursor: pointer; word-break: break-word; } -.nginx-add-format .bt-select-list li.active{ +.nginx-add-format .bt-select-list li.active { background: #efefef; } -.nginx-add-format .bt-select-list li:hover{ +.nginx-add-format .bt-select-list li:hover { background: #efefef; } -.nginx-add-format .bt-select-input{ +.nginx-add-format .bt-select-input { position: relative; padding-left: 10px; cursor: pointer; } -.nginx-add-format .bt-select .bt-down-icon{ +.nginx-add-format .bt-select .bt-down-icon { position: absolute; top: 9px; right: 10px; @@ -9462,49 +9610,47 @@ select[disabled]{ color: #fff; } .nginx-add-site .bt_checkbox_groups.active:after { - content: "\e013"; + content: '\e013'; font-size: 12px; - transform: scale(.85); + transform: scale(0.85); position: absolute; left: 2px; top: 2px; } -.nginx-add-site .format-site-list li:hover{ +.nginx-add-site .format-site-list li:hover { cursor: pointer; background: #efefef; } -.nginx-add-format .format-table{ +.nginx-add-format .format-table { max-height: 300px; overflow: auto; border: 1px solid #ccc; padding-left: 10px; margin-top: 10px; } -.nginx-add-format .format-table .del-format{ +.nginx-add-format .format-table .del-format { color: red; vertical-align: middle; margin-left: 7px; } /* end */ - - /* 添加站点扩展 */ -.ssl_checkbox{ +.ssl_checkbox { height: 60px; } .redirect_checkbox, -.ssl_checkbox{ +.ssl_checkbox { padding: 0; } -.ssl_checkbox label{ +.ssl_checkbox label { margin: 0; height: 24px; margin-right: 15px; font-weight: normal; } .redirect_checkbox label, -.ssl_checkbox label{ +.ssl_checkbox label { vertical-align: middle; margin-left: 5px; color: #444; @@ -9519,36 +9665,35 @@ select[disabled]{ overflow: hidden; vertical-align: middle; } -.redirect_check label span{ +.redirect_check label span { max-width: 140px; } -.ssl_checkbox input{ +.ssl_checkbox input { vertical-align: middle; } -.ssl_checkbox .info-r{ +.ssl_checkbox .info-r { height: 26px; line-height: 26px; } -.redirect_tourl .radio_item{ +.redirect_tourl .radio_item { height: 24px; line-height: 24px; } .redirect_tourl .radio_item input, -.redirect_tourl .radio_item label{ +.redirect_tourl .radio_item label { vertical-align: middle; margin: 0; } -.redirect_tourl .radio_item input{ +.redirect_tourl .radio_item input { margin-right: 5px; } .site_ssl_check i.form-checkbox { vertical-align: inherit; } - /*首页概览网卡选择*/ -select[name="network-io"] { +select[name='network-io'] { font-size: 13px; height: 24px; line-height: 24px; @@ -9579,19 +9724,23 @@ select[name="network-io"] { background-position: -30px 0; height: 30px; width: 30px; - display: inline-block + display: inline-block; } .bt_table { position: relative; } .bt_table .divtable { + border: 1px solid #ddd; overflow: auto; } -.bt_table .text-overflow{ +.bt_table .divtable .table { + border: none; +} +.bt_table .text-overflow { display: inline-block; vertical-align: middle; - word-wrap:break-word; + word-wrap: break-word; } #recycle_table .divtable { max-height: 480px; @@ -9604,17 +9753,17 @@ select[name="network-io"] { overflow: hidden; white-space: pre; } -.recycle_view .layui-layer-content{ +.recycle_view .layui-layer-content { overflow: initial !important; } -.re-con-con .table thead{ +.re-con-con .table thead { position: relative; z-index: 99; } -.re-con-con .divtable .table{ - border: none +.re-con-con .divtable .table { + border: none; } -.re-con-con .divtable{ +.re-con-con .divtable { border: 1px solid #ddd; } @@ -9631,10 +9780,10 @@ select[name="network-io"] { vertical-align: middle; margin-left: -5px; } -.bt_table .file_folder{ +.bt_table .file_folder { background-image: url(../img/file_icon/folder.png); } -.bt_table .file_images{ +.bt_table .file_images { background-image: url(../img/file_icon/png.png); } .bt_table .table-mask { @@ -9645,8 +9794,8 @@ select[name="network-io"] { bottom: 0; } -.bt_table tr th>span, -.bt_table tr td>span { +.bt_table tr th > span, +.bt_table tr td > span { display: inline-block; width: 100%; position: relative; @@ -9665,7 +9814,7 @@ select[name="network-io"] { } .bt-form .form-checkbox { - vertical-align: middle + vertical-align: middle; } .bt_table .cust—checkbox.active, @@ -9703,8 +9852,8 @@ select[name="network-io"] { width: 10px; background-color: #fff; } -.bt_table .cust—checkbox+input, -.bt-form .form-checkbox+input { +.bt_table .cust—checkbox + input, +.bt-form .form-checkbox + input { display: none; } .bt_table .cursor-pointer, @@ -9725,7 +9874,7 @@ select[name="network-io"] { } */ .bt_table thead .glyphicon { color: #bbb; - transform: scale(.9); + transform: scale(0.9); top: 2px; left: -1px; } @@ -9759,8 +9908,8 @@ select[name="network-io"] { } .tootls_group { - min-height: 30px; - line-height: 30px; + min-height: 30px; + line-height: 30px; } .tootls_group::after { content: ''; @@ -9783,12 +9932,12 @@ select[name="network-io"] { outline: none; padding-left: 8px; vertical-align: top; - width: 240px; + width: 300px; } .tootls_group .bt_search .search_input:focus { border-color: #20a53a; } -.tootls_group .bt_search .search_input:focus + span.glyphicon-search{ +.tootls_group .bt_search .search_input:focus + span.glyphicon-search { color: #20a53a; } @@ -9862,7 +10011,7 @@ select[name="network-io"] { line-height: 28px; color: #555; border: none; - padding: 0 5px + padding: 0 5px; } .tootls_group .page .page_jump_group .page_jump_btn { height: 28px; @@ -9881,8 +10030,6 @@ select[name="network-io"] { border-color: #20a53a; } - - .bt_table .bt_success { color: #20a53a; } @@ -9893,7 +10040,6 @@ select[name="network-io"] { color: #d9534f; } - .bt_table .bt_selects { display: inline-block; } @@ -9901,7 +10047,7 @@ select[name="network-io"] { .bt_table input::-webkit-inner-spin-button { -webkit-appearance: none; } -.bt_tableinput[type="number"] { +.bt_tableinput[type='number'] { -moz-appearance: textfield; } @@ -9950,7 +10096,7 @@ select[name="network-io"] { position: absolute; top: 30px; display: none; - box-shadow: 0 1px 5px rgba(0, 0, 0, .5); + box-shadow: 0 1px 5px rgba(0, 0, 0, 0.5); border-radius: 1px; width: 100%; z-index: 999; @@ -9958,7 +10104,14 @@ select[name="network-io"] { max-height: 200px; overflow: auto; } -.bt_select_list.show+.bt_select_value .glyphicon{ + +.bt_select_updown .bt_select_list .divider { + border-top: 1px solid #ececec; + width: 100%; + margin: 5px 0; +} + +.bt_select_list.show + .bt_select_value .glyphicon { transform: rotate(180deg); transition: all 500ms; } @@ -9972,18 +10125,18 @@ select[name="network-io"] { text-overflow: ellipsis; } .bt_select_updown .bt_select_list .item.disabled { - opacity: .65; + opacity: 0.65; cursor: no-drop; box-shadow: none; } -.bt_select_updown .bt_select_list .item:hover{ +.bt_select_updown .bt_select_list .item:hover { background-color: #f2f2f2; } -.bt_select_updown .bt_select_list .item.active{ +.bt_select_updown .bt_select_list .item.active { color: #fff; background-color: #20a53a; } -.bt_select_updown .bt_select_list.active{ +.bt_select_updown .bt_select_list.active { display: inline-block; } .bt_select_value { @@ -9994,36 +10147,34 @@ select[name="network-io"] { display: inline-block; vertical-align: top; } -.bt_select_updown .bt_select_value .bt_select_content{ +.bt_select_updown .bt_select_value .bt_select_content { margin-right: 15px; } -.bt_select_value .bt_select_content{ +.bt_select_value .bt_select_content { font-size: 12px; margin-right: 5px; color: #333; } - -.bt_select_updown .bt_select_value .glyphicon{ +.bt_select_updown .bt_select_value .glyphicon { position: absolute; right: 5px; - top:50%; + top: 50%; margin-top: -6px; } .bt_select_value .glyphicon { position: relative; top: 2px; } -.bt_select_value em{ +.bt_select_value em { font-style: inherit; margin: 0 5px; } .bt_table_select_group.bt_disabled, .bt_table_select_group.bt_disabled { - opacity: .65; + opacity: 0.65; cursor: no-drop; box-shadow: none; - } .bt_table_select_group .bt_selects { display: none; @@ -10033,17 +10184,16 @@ select[name="network-io"] { left: -1px; right: -1px; top: 100%; - box-shadow: 0 2px 4px rgba(0, 0, 0, .12); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12); z-index: 9999; } .bt_table_select_group .bt_selects.top { - box-shadow: 0 -2px 4px rgba(0, 0, 0, .12); + box-shadow: 0 -2px 4px rgba(0, 0, 0, 0.12); top: auto; bottom: 100%; } .bt_table_select_group.active .bt_selects { display: inline-block; - } .bt_table_select_group .bt_selects .item { width: 100%; @@ -10051,9 +10201,9 @@ select[name="network-io"] { line-height: 28px; padding: 0 8px; } -.bt_table_select_group .bt_selects .item.no_drop{ +.bt_table_select_group .bt_selects .item.no_drop { cursor: no-drop; - opacity: .65; + opacity: 0.65; color: #666; background-color: #ececec !important; } @@ -10065,13 +10215,13 @@ select[name="network-io"] { .bt_batch .bt-disabled, .bt_batch .bt-disabled:hover, .bt_batch .bt-disabled:active { - opacity: .65; + opacity: 0.65; box-shadow: none; color: #777; background-color: #ffffff; cursor: no-drop; } -.bt_batch .bt-disabled.btn-default:hover{ +.bt_batch .bt-disabled.btn-default:hover { border-color: #ccc; } .bt_batch .btn-default, @@ -10090,7 +10240,7 @@ select[name="network-io"] { user-select: none; } -.inlineBlock{ +.inlineBlock { display: inline-block; } /*批量操作end*/ @@ -10104,10 +10254,12 @@ select[name="network-io"] { top: 7px; } -.blur_checked{ - font-size:0;position:fixed;left:-9999px; +.blur_checked { + font-size: 0; + position: fixed; + left: -9999px; } -.none-list-style li{ +.none-list-style li { list-style: none !important; } /*.custom_layer .layui-layer-content {*/ @@ -10127,20 +10279,20 @@ select[name="network-io"] { font-weight: normal; margin-top: 10px; } -.block.redirect_check input{ +.block.redirect_check input { vertical-align: middle; } .block.redirect_tourl { height: 24px; line-height: 24px; } -.block.redirect_tourl label{ +.block.redirect_tourl label { font-weight: normal; margin-left: 5px; vertical-align: middle; } -.command_output_pre{ +.command_output_pre { white-space: pre-line; background: rgb(51, 51, 51); color: rgb(236, 236, 236); @@ -10151,179 +10303,183 @@ select[name="network-io"] { } /*批量创建站点end*/ - /*站点删除安全验证*/ -.delete_site_layer #site_delete_form,.verify_site_layer_info .check_delete_site_main { +.delete_site_layer #site_delete_form, +.verify_site_layer_info .check_delete_site_main { padding: 30px 25px !important; } -.delete_site_layer .check_title{ +.delete_site_layer .check_title { font-size: 16px; padding-left: 55px; font-weight: bold; color: #111; } -.delete_site_layer .check_type_group{ - padding:20px 0 20px 55px; +.delete_site_layer .check_type_group { + padding: 20px 0 20px 55px; } -.delete_site_layer .layui-layer-content .layui-layer-ico{ +.delete_site_layer .layui-layer-content .layui-layer-ico { left: 40px !important; top: 27px !important; position: absolute; width: 30px; height: 30px; } -.delete_site_layer .check_type_group label{ - height:24px; - line-height:24px; - cursor:pointer; - margin-right:35px; - margin-bottom:0; +.delete_site_layer .check_type_group label { + height: 24px; + line-height: 24px; + cursor: pointer; + margin-right: 35px; + margin-bottom: 0; } -.delete_site_layer .check_type_group label span{ - display:inline-block; - font-weight:normal; - vertical-align:middle; - margin:0 0 0 5px; - position:relative; +.delete_site_layer .check_type_group label span { + display: inline-block; + font-weight: normal; + vertical-align: middle; + margin: 0 0 0 5px; + position: relative; top: 0; } -.delete_site_layer .check_type_group input{ - height:15px; - width:15px; - vertical-align:middle; - margin:0; - cursor:pointer; +.delete_site_layer .check_type_group input { + height: 15px; + width: 15px; + vertical-align: middle; + margin: 0; + cursor: pointer; } -.delete_site_layer .webDelete .vcode{ +.delete_site_layer .webDelete .vcode { margin: 0 15px 5px 15px; padding-left: 40px; } -.delete_site_layer .webDelete .vcode input{ +.delete_site_layer .webDelete .vcode input { width: 80px !important; border: 1px solid #ccc; padding-left: 5px; outline: none; } .delete_site_layer .webDelete .vcode input:focus, -.delete_site_layer .webDelete .vcode input:active{ - border-color:#20a53a !important; +.delete_site_layer .webDelete .vcode input:active { + border-color: #20a53a !important; } -/*END*//*验证站点删除二次信息*/ +/*END*/ /*验证站点删除二次信息*/ - -.verify_site_layer_info .layui-layer-btn0{ +.verify_site_layer_info .layui-layer-btn0 { background-color: #e00000 !important; } -.verify_site_layer_info .layui-layer-btn0:hover{ +.verify_site_layer_info .layui-layer-btn0:hover { background-color: #ff0000 !important; } -.verify_site_layer_info.active .layui-layer-btn0{ +.verify_site_layer_info.active .layui-layer-btn0 { background: #e000008c !important; cursor: no-drop; } .check_delete_site_main { - height:100%; + height: 100%; padding: 10px 15px; } -.check_delete_site_main .layui-layer-ico{ +.check_delete_site_main .layui-layer-ico { left: 30px !important; top: 28px !important; position: absolute; width: 30px; height: 30px; } -.check_layer_title{ - font-size:19px; - font-weight:bold; +.check_layer_title { + font-size: 19px; + font-weight: bold; padding-left: 50px; } -.check_layer_content{ +.check_layer_content { margin: 25px 0; border: 1px solid #ececec; overflow-y: auto; height: 300px; } -.check_layer_item{ +.check_layer_item { padding: 12px; max-height: 80px; border-radius: 2px; border-bottom: 1px solid #ececec; } -.check_layer_item:last-child{ - border-bottom:none; +.check_layer_item:last-child { + border-bottom: none; } -.check_layer_item:first-child{ +.check_layer_item:first-child { border-bottom: 1px solid #ececec; } -.check_layer_item:hover{ +.check_layer_item:hover { background: #fcfcfc; } .check_layer_content .check_layer_site span, -.check_layer_content .check_layer_database span{ - display:inline-block; +.check_layer_content .check_layer_database span { + display: inline-block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } -.check_layer_content span i.warning{ - color: #EE3838; +.check_layer_content span i.warning { + color: #ee3838; font-weight: bold; } -.check_layer_content span i{ +.check_layer_content span i { font-style: inherit; } .check_layer_content .check_layer_site, -.check_layer_content .check_layer_database{ - display:inline-block; - font-size:13px; - height:25px; - line-height:25px; - vertical-align:middle; +.check_layer_content .check_layer_database { + display: inline-block; + font-size: 13px; + height: 25px; + line-height: 25px; + vertical-align: middle; } -.check_layer_content .check_layer_site span:nth-child(1), -.check_layer_content .check_layer_database span:nth-child(1){ - width:180px; +.check_layer_content .check_layer_site span:nth-child(1) { + width: 180px; } -.check_layer_content .check_layer_site span:nth-child(2), -.check_layer_content .check_layer_database span:nth-child(2){ +.check_layer_content .check_layer_database span:nth-child(1) { width: 310px; - line-height:26px; - height:25px; +} +.check_layer_content .check_layer_site span:nth-child(2) { + width: 310px; + height: 25px; + line-height: 26px; +} +.check_layer_content .check_layer_database span:nth-child(2) { + width: 180px; + height: 25px; + line-height: 26px; } -.check_layer_content .check_layer_database span:nth-child(2) .glyphicon{ +.check_layer_content .check_layer_database span:nth-child(2) .glyphicon { line-height: 15px; } .check_layer_content .check_layer_site span:nth-child(3), -.check_layer_content .check_layer_database span:nth-child(3){ - width:150px; +.check_layer_content .check_layer_database span:nth-child(3) { + width: 150px; } -.check_layer_error{ - color:red; +.check_layer_error { + color: red; font-size: 13px; margin-bottom: 5px; } -.check_layer_message{ +.check_layer_message { font-size: 13px; color: #333; margin-top: 5px; } /*end*/ - -.custom_layer .layui-layer-content .tab-body .tab-con{ +.custom_layer .layui-layer-content .tab-body .tab-con { max-height: 505px; overflow: auto; } -.success-layer .table tbody tr td:nth-of-type(1) span{ +.success-layer .table tbody tr td:nth-of-type(1) span { display: inline-block; overflow: hidden; text-overflow: ellipsis; @@ -10331,86 +10487,87 @@ select[name="network-io"] { } /* 企业版支付 */ -#PayCycle .pay-cycle-btn{ +#PayCycle .pay-cycle-btn { width: 85px; } -.price-compare-item{ - border:#ECECFB 1px solid; - background-color:#fcfcfc; +.price-compare-item { + border: #ececfb 1px solid; + background-color: #fcfcfc; } -.price-header{ - background-color:#20a53a; - height:70px; - text-align:center; - font-size:24px; - color:#fff; - line-height:70px; - position:relative; +.price-header { + background-color: #20a53a; + height: 70px; + text-align: center; + font-size: 24px; + color: #fff; + line-height: 70px; + position: relative; } -.title-wrap{ - text-align:center; - padding:30px 0; - margin:0 50px 20px; - border-bottom:#ECECFB 1px solid; +.title-wrap { + text-align: center; + padding: 30px 0; + margin: 0 50px 20px; + border-bottom: #ececfb 1px solid; } -.title-wrap .user-number{ - color:#FE7039; - font-size:14px; - margin-bottom:20px; +.title-wrap .user-number { + color: #fe7039; + font-size: 14px; + margin-bottom: 20px; } -.title-wrap .title-info{ - font-size:18px; - font-family:"微软雅黑"; +.title-wrap .title-info { + font-size: 18px; + font-family: '微软雅黑'; } -.title-desc{ - height:182px; - margin:0 70px; - font-size:13px; - color:#646472; - line-height:26px; +.title-desc { + height: 182px; + margin: 0 70px; + font-size: 13px; + color: #646472; + line-height: 26px; } -.price-wrap{ +.price-wrap { text-align: center; margin-top: 20px; - height:36px; - color:#FF6232; + height: 36px; + color: #ff6232; } -.price-wrap>div{ +.price-wrap > div { display: inline-block; } -.price-wrap .div-line{ +.price-wrap .div-line { height: 24px; width: 1px; background-color: #eee; margin: 0 30px; } -.price-wrap .price-unit{ - font-size:18px; +.price-wrap .price-unit { + font-size: 18px; } -.price-wrap .price-value{ - font-size:26px; +.price-wrap .price-value { + font-size: 26px; } -.price-wrap .price-ext{ - font-size:16px; +.price-wrap .price-ext { + font-size: 16px; } -.price-compare-item .btn-price{ - width:240px; - height:44px; - line-height:42px; - text-align:center; - background-color:#20a53a; - font-size:16px; - color:#fff; +.price-compare-item .btn-price { + width: 240px; + height: 44px; + line-height: 42px; + text-align: center; + background-color: #20a53a; + font-size: 16px; + color: #fff; border-radius: 3px; border: 0 none; - margin:30px auto; + margin: 30px auto; display: block; } -.price-compare-item .btn-price:hover{ - background-color:#FF6232; +.price-compare-item .btn-price:hover { + background-color: #ff6232; } .recommend-tips { - background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODIiIGhlaWdodD0iODIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNNDggMGwzNCAzNHY0OEwwIDBoNDh6IiBmaWxsPSIjRkY2MjMyIi8+PHRleHQgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNTIuMDQyIDI5LjA0MikiIGZvbnQtZmFtaWx5PSJQaW5nRmFuZ1NDLU1lZGl1bSwgUGluZ0ZhbmcgU0MiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI0MDAiIGZpbGw9IiNGRkYiPjx0c3BhbiB4PSIzMi4wNDIiIHk9IjM2LjA0MiI+5o6o6I2QPC90c3Bhbj48L3RleHQ+PC9nPjwvc3ZnPg==) 50% no-repeat; + background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODIiIGhlaWdodD0iODIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNNDggMGwzNCAzNHY0OEwwIDBoNDh6IiBmaWxsPSIjRkY2MjMyIi8+PHRleHQgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNTIuMDQyIDI5LjA0MikiIGZvbnQtZmFtaWx5PSJQaW5nRmFuZ1NDLU1lZGl1bSwgUGluZ0ZhbmcgU0MiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI0MDAiIGZpbGw9IiNGRkYiPjx0c3BhbiB4PSIzMi4wNDIiIHk9IjM2LjA0MiI+5o6o6I2QPC90c3Bhbj48L3RleHQ+PC9nPjwvc3ZnPg==) + 50% no-repeat; background-size: 70px; position: absolute; right: 0; @@ -10464,14 +10621,15 @@ select[name="network-io"] { .pay-wx-info span { vertical-align: middle; } -#pay_product_view{ - padding: 25px 45px 30px 45px; - height: 100%; +#pay_product_view { + /* padding: 25px 45px 30px 45px; */ + padding: 24px; + /* height: 100%; */ } -#libPay-content .pay-cycle-btn{ +#libPay-content .pay-cycle-btn { width: 90px; } -.libPay-mask{ +.libPay-mask { position: absolute; left: 0; top: 0; @@ -10482,28 +10640,28 @@ select[name="network-io"] { z-index: 9999; display: none; } -.libPay-item{ +.libPay-item { margin-bottom: 30px; } -.libPay-select{ +.libPay-select { overflow: hidden; } -.libPay-item .li-tit{ +.libPay-item .li-tit { margin-bottom: 10px; font-size: 14px; } -.libPay-item .li-c-item li:nth-child(1){ +.libPay-item .li-c-item li:nth-child(1) { margin-left: 0; } .libPay-item .li-c-item li { - position: relative; - display: inline-block; - width: 170px; - height: 80px; - border: #ddd 1px solid; - font-size: 0; - cursor: pointer; - transition: border-color .1s ease-in, color .1s ease-in; + position: relative; + display: inline-block; + width: 170px; + height: 80px; + border: #ddd 1px solid; + font-size: 0; + cursor: pointer; + transition: border-color 0.1s ease-in, color 0.1s ease-in; } .pro-tips { clear: both; @@ -10512,50 +10670,50 @@ select[name="network-io"] { color: #bbb; } - -.libPay-item .li-c-item li:first-child{ - border-top-left-radius:4px; - border-bottom-left-radius:4px; +.libPay-item .li-c-item li:first-child { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } -.libPay-item .li-c-item li:last-child{ - border-top-right-radius:4px; - border-bottom-right-radius:4px; +.libPay-item .li-c-item li:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; } -.libPay-item .li-c-item li:hover{ +.libPay-item .li-c-item li:hover { border: #20a53a 1px solid; - color: #20A53A; + color: #20a53a; z-index: 9999; } -.libPay-item .li-c-item li.active,.libPay-item .li-c-item li.active:hover{ +.libPay-item .li-c-item li.active, +.libPay-item .li-c-item li.active:hover { border: #20a53a 2px solid; - color: #20A53A; + color: #20a53a; z-index: 9999; box-sizing: border-box; } -.libPay-item .li-c-item li .item-name{ +.libPay-item .li-c-item li .item-name { font-size: 14px; vertical-align: middle; width: 100%; overflow: hidden; - text-overflow:ellipsis; + text-overflow: ellipsis; white-space: nowrap; text-align: center; margin-bottom: 5px; padding-top: 10px; } .libPay-item .endTime, -.libPay-item .bindUser{ +.libPay-item .bindUser { font-size: 14px; } .libPay-item .endTime span, -.libPay-item .bindUser span{ +.libPay-item .bindUser span { font-weight: 600; color: #555; } -.libPay-item .endTime{ +.libPay-item .endTime { float: right; } -.libPay-item .li-c-item li .item-info{ +.libPay-item .li-c-item li .item-info { display: block; text-align: center; width: 100%; @@ -10570,22 +10728,25 @@ select[name="network-io"] { /*.pay-btn-group>.pay-cycle-btn:nth-of-type(5n+1){*/ /* margin-left: 0;*/ /*}*/ -.pay-btn-group .active,.li-c-item .active{ - background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAAclBMVEX///8fpTofpTogpTogpTogpTrw+fLt+O/i8+be8uLb8d/T7djP7NXR7NbE58u548G34sCr3bWU1KGT05+FzpN+y413yIZ0x4RxxoJwxYFnwnliv3RWu2pUumhMt2FGtVxDs1k6sFE4r1Avq0cjpjwgpTpRW86VAAAAJnRSTlMAEXd3iO7//////////////////////////////////////////0c8mUAAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAWdEVYdENyZWF0aW9uIFRpbWUAMDUvMjkvMThc7W1eAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAAHhJREFUGJVtzskSgkAMBFB2AUcR2QTcEPr/fxFmmFiW0znk8CrVac9jE1CNYqoAV8JaXTbq8K7/bBVcwRVcwRVcwbRTIDqcWrjaJ3cJ0VrdjDaHh2Sb2/F43XadPuWlTfjkJersLU2+ufNFnSdb0P/5thQv6R2CzQo9Oh+AlBF9bAAAAABJRU5ErkJggg==") no-repeat right bottom; +.pay-btn-group .active, +.li-c-item .active { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAAclBMVEX///8fpTofpTogpTogpTogpTrw+fLt+O/i8+be8uLb8d/T7djP7NXR7NbE58u548G34sCr3bWU1KGT05+FzpN+y413yIZ0x4RxxoJwxYFnwnliv3RWu2pUumhMt2FGtVxDs1k6sFE4r1Avq0cjpjwgpTpRW86VAAAAJnRSTlMAEXd3iO7//////////////////////////////////////////0c8mUAAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAWdEVYdENyZWF0aW9uIFRpbWUAMDUvMjkvMThc7W1eAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAAHhJREFUGJVtzskSgkAMBFB2AUcR2QTcEPr/fxFmmFiW0znk8CrVac9jE1CNYqoAV8JaXTbq8K7/bBVcwRVcwRVcwbRTIDqcWrjaJ3cJ0VrdjDaHh2Sb2/F43XadPuWlTfjkJersLU2+ufNFnSdb0P/5thQv6R2CzQo9Oh+AlBF9bAAAAABJRU5ErkJggg==') + no-repeat right bottom; } -.pay-btn-group .pay-cycle-btn:hover{ +.pay-btn-group .pay-cycle-btn:hover { border: 1px solid #20a53a; color: #20a53a; z-index: 2; cursor: pointer; } -.pay-btn-group .active,.pay-btn-group .active:hover{ +.pay-btn-group .active, +.pay-btn-group .active:hover { border: 2px solid #20a53a; color: #20a53a; z-index: 2; cursor: pointer; } -.pay-btn-group .active span{ +.pay-btn-group .active span { line-height: 22px; } .pay-cycle-btn em { @@ -10599,19 +10760,19 @@ select[name="network-io"] { font-size: 10px; line-height: 19px; color: #fff; - transform: scale(.9, .8); + transform: scale(0.9, 0.8); font-style: normal; } .pay-btn-group .active em { right: -3.5px; top: -10px; } -.paymethod{ +.paymethod { margin: 0 auto; width: 160px; } -.paymethod .pay-wx{ - height:175px; +.paymethod .pay-wx { + height: 175px; } .paymethod .pay-wx canvas { width: 160px; @@ -10621,17 +10782,18 @@ select[name="network-io"] { padding: 5px; border-bottom-color: #00c800; } -.lib-price-box{ +.lib-price-box { padding-bottom: 5px; } -.price-txt{ - color:#FF7301 +.price-txt { + color: #ff7301; } -.sale-price{ +.sale-price { font-size: 20px; margin-right: 5px; } -.lib-price-name,.price-txt{ +.lib-price-name, +.price-txt { margin-right: 10px; } /* 企业版支付end */ @@ -10649,7 +10811,6 @@ select[name="network-io"] { .commonly_software .commonly_software_list { display: inline-block; - } .commonly_software .commonly_software_list .item { display: inline-block; @@ -10661,7 +10822,7 @@ select[name="network-io"] { position: relative; } .commonly_software .commonly_software_list .item:hover { - color: #20A53A; + color: #20a53a; background-color: #f5f5f5; } .commonly_software .commonly_software_list .item img { @@ -10697,10 +10858,10 @@ select[name="network-io"] { } #bt_database_table .tootls_group .pull-left button:nth-child(5):after { - content: ' '; - position: relative; - left: -72px; - border-left: 1px solid #ececec; + content: ' '; + position: relative; + left: -72px; + border-left: 1px solid #ececec; } /*node项目管理*/ .node_project_dialog .mask_module { @@ -10726,31 +10887,30 @@ select[name="network-io"] { display: inline-block; border-radius: 2px; } -.node_project_dialog .node_project_pid_datail h3.tname { - margin:10px 10px 10px 0; +.node_project_dialog .node_project_pid_datail h3.tname { + margin: 10px 10px 10px 0; color: #999; font-size: 12px; font-weight: bold; } #node_module_list .divtable, -#project_domian_list .divtable{ +#project_domian_list .divtable { border: 1px solid #ddd; word-break: break-all; } #node_module_list .table, -#project_domian_list .table{ - border:none; +#project_domian_list .table { + border: none; } /*node项目管理 end*/ - /*文件内容查找替换*/ /*查找textarea样式*/ -.replace_content_view .replace_content_line:first-child{ +.replace_content_view .replace_content_line:first-child { position: relative; height: 36px; } -.replace_content_view .replace_content_line:first-child textarea{ +.replace_content_view .replace_content_line:first-child textarea { width: 485px; border: 1px solid #ccc; border-right: none; @@ -10758,7 +10918,7 @@ select[name="network-io"] { position: absolute; padding: 10px 0 0 10px; } -.replace_content_view .replace_content_line:first-child i.history_search{ +.replace_content_view .replace_content_line:first-child i.history_search { position: absolute; right: 85px; top: 1px; @@ -10792,11 +10952,11 @@ select[name="network-io"] { border: 1px solid #ececec; box-shadow: 4px 2px 5px 0 #ececec; } -.replace_content_view .history_search_list li{ +.replace_content_view .history_search_list li { border-bottom: 1px solid #ececec; padding: 5px 10px; } -.replace_content_view .history_search_list li:hover{ +.replace_content_view .history_search_list li:hover { background: #f0f0f0; color: #555; } @@ -10811,7 +10971,7 @@ select[name="network-io"] { display: inline-block; cursor: pointer; } -.replace_content_view .checkbox_config:nth-child(2n){ +.replace_content_view .checkbox_config:nth-child(2n) { margin-left: 10px; } .replace_content_view .checkbox_config .laberText { @@ -10865,10 +11025,10 @@ select[name="network-io"] { transform: rotate(45deg); } -.replace_content_view .checkbox_config .file_find_radio{ +.replace_content_view .checkbox_config .file_find_radio { border-radius: 20px; } -.replace_content_view .replace_content_box .glyphicon-folder-open{ +.replace_content_view .replace_content_box .glyphicon-folder-open { position: absolute; right: 15px; top: 145px; @@ -10905,8 +11065,8 @@ select[name="network-io"] { min-width: 85px; height: 36px; } -.replace_content_view .normalBtnStyle:hover{ - background-color:#20a53a; +.replace_content_view .normalBtnStyle:hover { + background-color: #20a53a; color: #fff; } .replace_content_view .checkBtn { @@ -10939,24 +11099,24 @@ select[name="network-io"] { height: 290px; margin-top: 20px; } -.replace_content_view .match_result_file_content{ +.replace_content_view .match_result_file_content { overflow: auto; word-wrap: break-word; word-break: normal; border-top: 1px solid #eee; display: none; } -.replace_content_view .match_result_file_content .match_result_detail{ +.replace_content_view .match_result_file_content .match_result_detail { font-size: 13px; padding: 5px 5px 5px 15px; } -.replace_content_view .match_result_file_content .match_result_detail:hover{ +.replace_content_view .match_result_file_content .match_result_detail:hover { background-color: #eee; } -.replace_content_view .match_result_file_content.matchShow{ +.replace_content_view .match_result_file_content.matchShow { display: block; } -.replace_content_view .match_result_file_content .match_result_detail i{ +.replace_content_view .match_result_file_content .match_result_detail i { color: red; font-style: inherit; background-color: aliceblue; @@ -10966,11 +11126,11 @@ select[name="network-io"] { border-radius: 3px; margin-bottom: 15px; } -.replace_content_view .match_content_title{ +.replace_content_view .match_content_title { background-color: #fbfbfb; padding: 5px 15px 5px 5px; } -.replace_content_view .match_result_file_title{ +.replace_content_view .match_result_file_title { cursor: pointer; width: 490px; overflow: hidden; @@ -10978,9 +11138,9 @@ select[name="network-io"] { text-overflow: ellipsis; display: inline-block; } -.replace_content_view .match_content_title i.glyphicon{ +.replace_content_view .match_content_title i.glyphicon { margin-right: 10px; - margin-left:5px; + margin-left: 5px; } /*文件内容查找替换 end*/ /*删除数据库弹窗样式*/ @@ -11007,66 +11167,67 @@ select[name="network-io"] { /*删除数据库弹窗样式 end*/ /*站点删除安全验证*/ -.delete_site_layer #site_delete_form,.verify_site_layer_info .check_delete_site_main { +.delete_site_layer #site_delete_form, +.verify_site_layer_info .check_delete_site_main { padding: 30px 25px !important; } -.delete_site_layer .check_title{ +.delete_site_layer .check_title { font-size: 16px; padding-left: 55px; font-weight: bold; color: #111; } -.delete_site_layer .check_type_group{ - padding:20px 0 20px 55px; +.delete_site_layer .check_type_group { + padding: 20px 0 20px 55px; } -.delete_site_layer .layui-layer-content .layui-layer-ico{ +.delete_site_layer .layui-layer-content .layui-layer-ico { left: 40px !important; top: 27px !important; position: absolute; width: 30px; height: 30px; } -.delete_site_layer .check_type_group label{ - height:24px; - line-height:24px; - cursor:pointer; - margin-right:35px; - margin-bottom:0; +.delete_site_layer .check_type_group label { + height: 24px; + line-height: 24px; + cursor: pointer; + margin-right: 35px; + margin-bottom: 0; } -.delete_site_layer .check_type_group label span{ - display:inline-block; - font-weight:normal; - vertical-align:middle; - margin:0 0 0 5px; - position:relative; +.delete_site_layer .check_type_group label span { + display: inline-block; + font-weight: normal; + vertical-align: middle; + margin: 0 0 0 5px; + position: relative; top: 0; } -.delete_site_layer .check_type_group input{ - height:15px; - width:15px; - vertical-align:middle; - margin:0; - cursor:pointer; +.delete_site_layer .check_type_group input { + height: 15px; + width: 15px; + vertical-align: middle; + margin: 0; + cursor: pointer; } -.delete_site_layer .webDelete .vcode{ +.delete_site_layer .webDelete .vcode { margin: 0 15px 5px 15px; padding-left: 40px; } -.delete_site_layer .webDelete .vcode input{ +.delete_site_layer .webDelete .vcode input { width: 80px !important; border: 1px solid #ccc; padding-left: 5px; outline: none; } .delete_site_layer .webDelete .vcode input:focus, -.delete_site_layer .webDelete .vcode input:active{ - border-color:#20a53a !important; +.delete_site_layer .webDelete .vcode input:active { + border-color: #20a53a !important; } /*END*/ /*网址项目管理*/ -.mask_layer{ +.mask_layer { position: absolute; top: 0; left: 0; @@ -11075,14 +11236,14 @@ select[name="network-io"] { background: rgb(255 255 255 / 60%); z-index: 9998; } -.mask_layer .prompt_description{ - width:450px; - height:60px; - line-height:60px; +.mask_layer .prompt_description { + width: 450px; + height: 60px; + line-height: 60px; text-align: center; - position:absolute; - left:50%; - top:50%; + position: absolute; + left: 50%; + top: 50%; margin-top: -25px; margin-left: -225px; background: #fff; @@ -11106,14 +11267,14 @@ select[name="network-io"] { } .tab-list .tabs-item { + position: relative; display: inline-block; - height: 50px; + height: 45px; min-width: 100px; padding: 0 20px; - line-height: 50px; + line-height: 45px; font-size: 13px; cursor: pointer; - position: relative; text-align: center; } @@ -11135,7 +11296,7 @@ select[name="network-io"] { } .tab-view-box { - padding: 20px 15px; + padding: 15px; border-radius: 4px; box-shadow: 0 0 1px 0 rgb(0 0 0 / 5%); } @@ -11191,18 +11352,18 @@ select[name="network-io"] { } /* 首页专业版推荐 */ -.recommend-top{ +.recommend-top { height: 50px; line-height: 22px; display: flex; align-items: center; } -.recommend-bottom{ +.recommend-bottom { margin-top: 10px; } -.product-ico{ +.product-ico { display: inline-block; margin-right: 10px; width: 90px; @@ -11211,75 +11372,74 @@ select[name="network-io"] { background-position: center; } -.product-buy{ +.product-buy { margin-right: 15px; display: inline-block; font-size: 13px; color: #666; vertical-align: middle; } -.product-buy span{ +.product-buy span { font-weight: bold; color: #fc6d26; vertical-align: middle; } - .pro-bg, -.ltd-bg{ +.ltd-bg { overflow: hidden; white-space: nowrap; } -.ltd-bg{ +.ltd-bg { background-color: rgb(255 251 241); } -.pro-bg{ - +.pro-bg { } -.pro-ico{ +.pro-ico { + flex: 0 0 70px; width: 70px; margin-right: 5px; - background-image: url("/static/images/pro.svg"); + background-image: url('/static/images/pro.svg'); } -.ltd-ico{ +.ltd-ico { width: 70px; margin-right: 5px; - background-image: url("/static/images/ltd.svg"); + background-image: url('/static/images/ltd.svg'); } -.pro-pay-ico{ - background-image: url("/static/images/pro_pay.svg"); +.pro-pay-ico { + background-image: url('/static/images/pro_pay.svg'); width: 130px; } -.ltd-pay-ico{ - background-image: url("/static/images/ltd_pay.svg"); +.ltd-pay-ico { + background-image: url('/static/images/ltd_pay.svg'); } -.product-expire{ +.product-expire { display: flex; color: #666; margin-left: 10px; } -.product-expire.permanent span{ - color: #F39C12; +.product-expire.permanent span { + color: #f39c12; font-weight: bold; } -.product-label{ +.product-label { display: inline-block; font-size: 13px; } -.product-label .item{ +.product-label .item { display: inline-block; position: relative; margin-right: 15px; padding-left: 20px; color: #666; } -.product-label .item::after{ - content: ""; +.product-label .item::after { + content: ''; display: inline-block; width: 12px; height: 6px; @@ -11291,35 +11451,34 @@ select[name="network-io"] { top: 6px; } -.recommend-soft{ +.recommend-soft { position: relative; } -.recommend-soft .images{ +.recommend-soft .images { text-align: center; margin: 22px 0 10px; height: 40px; } -.recommend-soft .product-name{ +.recommend-soft .product-name { text-align: center; color: #999; margin-bottom: 10px; } -.recommend-soft .product-pay-btn{ +.recommend-soft .product-pay-btn { text-align: center; } - -.recommend-soft .product-pay-btn button{ +.recommend-soft .product-pay-btn button { padding: 3px 8px; } -.recom-iconfont:hover .product-close{ +.recom-iconfont:hover .product-close { display: inline-block; } -.recom-iconfont .product-close{ +.recom-iconfont .product-close { position: absolute; top: -1.5px; right: -6px; @@ -11329,15 +11488,15 @@ select[name="network-io"] { text-align: center; background: #efefef; opacity: 0.5; - transform: scale(.8); + transform: scale(0.8); display: none; } -.recom-iconfont .product-close:hover{ - opacity: .8; +.recom-iconfont .product-close:hover { + opacity: 0.8; background-color: red; color: #fff; } -.recom-iconfont::after{ +.recom-iconfont::after { content: 'AD'; height: 18px; width: 40px; @@ -11349,10 +11508,10 @@ select[name="network-io"] { left: -4px; position: absolute; opacity: 0.5; - transform: scale(.8); + transform: scale(0.8); } -.product_view{ +.product_view { display: inline-block; width: 350px; border: 2px solid #ececec; @@ -11361,24 +11520,24 @@ select[name="network-io"] { flex: 2; } -.product_view img{ +.product_view img { width: 100%; border-radius: 4px; } -.product_describe{ +.product_describe { display: inline-block; padding: 5px 0 0 30px; flex: 3; color: #666; } -.product_describe .describe_title{ +.product_describe .describe_title { font-weight: bold; font-size: 18px; } -.product_describe .describe_ps{ +.product_describe .describe_ps { padding-top: 10px; font-size: 13px; height: 110px; @@ -11397,13 +11556,14 @@ select[name="network-io"] { outline: none; } -.libLogin input:hover, .libLogin input:focus { +.libLogin input:hover, +.libLogin input:focus { border-color: #20a53a; outline: none; } -.libLogin input[type="text"], -.libLogin input[type="password"] { +.libLogin input[type='text'], +.libLogin input[type='password'] { padding-left: 10px; } @@ -11449,7 +11609,6 @@ select[name="network-io"] { /* end */ - /* 文件上传 */ .upload_file_container { display: flex; @@ -11533,4 +11692,2848 @@ select[name="network-io"] { font-weight: 400; } -/* end */ \ No newline at end of file +/* end */ + +/* 表单 */ +.bt-form-new.inline { + display: flex; + flex-wrap: wrap; +} + +.bt-form-new .form-item { + display: flex; +} + +.bt-form-new .form-inline .form-item + .form-item, +.bt-form-new.inline .form-item + .form-item { + margin-top: 0; + margin-left: 15px; +} + +.bt-form-new .form-label { + width: 100px; + line-height: 32px; + padding-right: 20px; + text-align: right; +} + +.bt-form-new.inline .form-label { + width: auto; + text-align: left; +} + +.form-item .form-value { + flex: 1; + min-height: 32px; +} + +.form-item .form-content { + display: flex; + align-items: center; + min-height: 32px; +} + +.form-item .form-content .btswitch-btn { + margin-bottom: 0; +} + +.bt-form-switch { + display: flex; + align-items: center; + height: 32px; +} +/* end */ + +/* 新更新界面样式 */ +.new-layer-update.active.layui-layer-page .layui-layer-content { + padding: 0; +} +.new-layer-update.active.layui-layer-page { + border-radius: 6px; +} +.new-layer-update.active.layui-layer-dialog .layui-layer-content { + border-radius: 6px; + background: url(../img/update_bg.png) no-repeat; + background-size: 101%; + background-repeat: no-repeat; + background-position: -2px 0; +} +.new-layer-update .update-title { + color: #efef; + padding: 10px 15px; +} +.new-layer-update .update_title { + text-align: center; + color: #565656; + line-height: 32px; +} +.new-layer-update .update_title .sup_title { + font-size: 21px; + font-weight: 700; +} +.new-layer-update.layui-layer-dialog .layui-layer-content .layui-layer-ico { + left: 60px; + top: 21px; +} +.new-layer-update.active .update_title .sub_title { + font-size: 16px; + margin-top: 0; +} +.new-layer-update .update_title .sub_title { + font-size: 14px; + margin-top: 10px; +} +.new-layer-update .update_bg { + width: 150px; + position: fixed; + top: -91px; + right: 35px; +} +.new-layer-update.active .setchmod { + margin: 80px 20px 20px 20px; +} +.new-layer-update.active .update_conter { + background: rgba(33, 165, 59, 0.04); + border-radius: 6px; + padding: 20px; + margin: 15px 0 20px 0; +} +.new-layer-update .update_conter { + background: #f9f9f9; + border-radius: 4px; + padding: 20px; + margin: 15px; + margin-top: 15px; +} +.new-layer-update .update_conter span { + display: block; + font-size: 12px; + color: #666; +} +.new-layer-update .update_logs { + font-size: 12px; + color: #666; + max-height: 200px; + overflow: auto; + padding-right: 20px; + word-break: break-word; +} +/* .new-layer-update .update_logs p {color: rgb(255, 144, 44) !important;line-height: 18px;margin-bottom: 10px;} */ +.new-layer-update .update_tips { + font-size: 12px; + color: #666; +} +.new-layer-update .setchmod.bt-form .btswitch-btn { + margin-bottom: 0; + height: 1.9rem; + width: 3.2rem; + position: relative; + top: 4.5px; +} +.new-layer-update .bt-form-btn { + text-align: center; + padding: 0; +} +.new-layer-update .bt-form-btn .btn:nth-child(1) { + color: #999; +} +.new-layer-update .bt-form-btn .btn:nth-child(1):hover { + background: #d4d4d4; +} +.new-layer-update .bt-form-btn .btn { + display: inline-block; + line-height: 38px; + height: 40px; + border-radius: 20px; + width: 140px; + padding: 0; + margin-right: 70px; + font-size: 13.5px; +} +.new-layer-update .bt-form-btn .btn:nth-child(2) { + margin-right: 0; +} +.new-layer-update .update_logs::-webkit-scrollbar { + /*滚动条整体样式*/ + width: 16px; + /*高宽分别对应横竖滚动条的尺寸*/ + height: 1px; + background-color: #f1f1f1; +} +.new-layer-update .update_logs::-webkit-scrollbar-button:start { + height: 15px; + background: url(../img/scrollbar/scroll-bar-up.png) no-repeat; +} +.new-layer-update .update_logs::-webkit-scrollbar-button:end { + height: 15px; + background: url(../img/scrollbar/scroll-bar-down.png) no-repeat; +} + +.new-layer-update .update_logs::-webkit-scrollbar-thumb { + /*滚动条里面小方块*/ + /* box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); */ + background: url(../img/scrollbar/scroll-bar-block.png) no-repeat; + background-position: bottom; + border-radius: 50px; + min-height: 50px; + background-color: #d6d7db; +} +.new-layer-update .update_logs::-webkit-scrollbar-track { + /*滚动条里面轨道*/ + /* box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); */ + background: #f1f1f1; + border-radius: 0; +} +/* 新更新界面样式 end */ + +.bt_table .cust—checkbox, +.bt-form .form-checkbox { + display: inline-block; + width: 16px; + height: 16px; + border: 1px solid #ccc; + background-color: #fff; + vertical-align: top; + position: relative; + border-radius: 2px; +} + +.bt-form .form-checkbox { + vertical-align: middle; +} + +.bt-form .bt-checkbox { + line-height: 30px; + height: 30px; +} + +.bt-form .bt-checkbox.disabled { + cursor: no-drop; + opacity: 0.7; +} + +.bt-form .form-checkbox-label { + display: inline-block; + height: 30px; + line-height: 30px; + cursor: pointer; +} + +.module-check.check_disabled label, +.module-check.check_disabled i { + cursor: no-drop; +} + +span.unit { + color: #666; +} + +.ml16 { + margin-left: 16px; +} + +.ml20 { + margin-left: 20px; +} + +.inlineBlock.group .bt-input-text { + margin-right: 0; + vertical-align: middle; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.inlineBlock.group span.unit { + display: inline-block; + border: 1px solid #ccc; + border-left: 0; + border-radius: 2px; + width: 44px; + text-align: center; + background-color: #f6f6f6; + vertical-align: middle; + position: relative; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +/* new提示对话弹窗样式 */ +.color-org { + color: #fc6d26; +} +.color-org:hover { + color: #fc6d26; +} +.hint_confirm .hint_title { + font-size: 15px; + color: #111; + display: flex; + align-items: center; +} +.hint_confirm .hint_title .hint-confirm-icon { + background: url(../img/hint-confirm-icon.svg) no-repeat; + min-width: 40px; + height: 40px; + align-self: baseline; +} +.hint_confirm .hint_title .hint_con { + margin-left: 15px; + line-height: 28px; +} +.hint_confirm .vcode { + background-color: #f0f0f0; + clear: both; + font-size: 14px; + height: 50px; + line-height: 50px; + padding: 0 55px; + margin-top: 20px; +} +.hint_confirm .vcode .text { + margin-right: 10px; + margin-left: 10px; +} +.hint_confirm .vcode #vcodeResult { + border: 1px solid #ccc; + padding-left: 5px; + outline: none; + width: 80px; + color: #444; + display: inline; + height: 30px; + line-height: 30px; + margin-left: 10px; +} +.hint_confirm .confirm-info-box { + background-color: #f0f0f0; + clear: both; + font-size: 14px; + height: 105px; + line-height: 26px; + padding: 20px 20px; + margin-top: 20px; +} +.hint_confirm .confirm-info-box #prompt_input_box { + height: 30px; + line-height: 30px; + margin-top: 5px; + width: 330px; + color: #444; + outline: none; + border: 1px solid #ccc; + padding: 0 5px; +} +/* new提示对话弹窗样式 end */ + +/* 首页磁盘分析 */ +.pd16 { + padding: 16px; +} +.disk_scanning.red { + padding: 24px 10px 10px; +} +.disk_cont .disk-title { + font-size: 14px; + margin: 18px 0 26px 0; + padding: 0 4px; +} +.disk_cont .disk-title div { + display: inline-block; + margin-left: 4px; + padding: 0 4px; + line-height: 27px; + border-radius: 2px; +} +.disk_cont .disk-title .bg-red { + background: rgba(255, 0, 0, 0.1); + color: red; +} +.disk_cont .disk-title .bg-green { + background: rgba(32, 165, 58, 0.1); + color: rgb(32, 165, 58); +} +.disk_cont .disk-title .bg-org { + background: rgba(255, 153, 0, 0.1); + color: rgb(255, 153, 0); +} +.disk-item-list .disk-item-header, +.disk-item-body .disk-body-list, +.disk-item-body .disk-body-list div, +.disk-item-header .disk-header-fold { + display: flex; + justify-content: space-between; + align-items: center; +} +.disk-item-header .disk-header-fold { + color: #666; +} +.disk-item-body .disk-body-list.more_wrap { + justify-content: flex-start; + align-items: flex-start; +} +.disk-item-body .disk-body-list.more_wrap div:nth-child(2) { + flex: 1; + white-space: normal; + word-break: break-all; +} +.disk-item-list { + line-height: 24px; +} +.disk-item-list .disk-item-header { + padding: 0 8px; +} +.disk-item-body .disk-body-list { + padding: 0 4px; + line-height: 16px; + margin-top: 12px; + color: #666; +} +.disk_cont .disk-item-header { + cursor: pointer; + background: #f5f5f5; + line-height: 26px; +} +.disk_cont .disk-item-body { + display: none; +} +.disk_cont .disk-body-list .progressBar { + width: 100%; + height: 22px; + border-radius: 2px; + background: #f5f5f5; + position: relative; +} +.disk_cont .disk-body-list .progressBar span { + position: absolute; + color: #fff; + left: 8px; +} +.disk_cont .disk-body-list .progressBar .progress { + display: inline-block; + height: 22px; + border-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + margin: 0; +} +.disk_cont .disk-body-list .progressBar .progress.bg-red { + background: rgb(221, 47, 0); +} +.disk_cont .disk-body-list .progressBar .progress.bg-org { + background: rgb(255, 153, 0); +} +.disk_cont .disk-body-list .progressBar .progress.bg-green { + background: rgb(32, 165, 58); +} +.disk_cont hr { + border-top: 1px solid #f0f0f0; +} +.disk-item-list.active .disk-item-body { + display: block; +} +.disk_cont .disk-btn { + display: flex; + justify-content: center; + align-items: center; + margin-top: 10px; +} +.disk_cont .disk-title .btn, +.disk_cont .disk-btn .btn, +.disk-scan-header .btn { + padding: 4px 5px; + font-size: 12px; + border-radius: 2px; +} +.disk_cont .disk-title .btn { + margin-left: 40px; +} +.disk-scan-header .btn { + color: #666; +} +.disk-scan-header .btn.btn-default:hover { + background-color: #e6e6e6; + border-color: #8c8c8c; + color: #666; +} +.disk-scan-header .btn .disk_back_icon { + width: 16px; + height: 16px; + display: inline-block; + vertical-align: bottom; + background: url(/static/img/ico/icon-left-arrow.svg) no-repeat; + background-size: 16px; + margin-right: 4px; +} +.disk_scan_cont .disk-scan-header { + display: flex; + justify-content: space-between; + align-items: center; + margin: 18px 0 16px 0; +} +.disk_scan_cont pre { + overflow: auto; + border: 0 none; + line-height: 23px; + padding: 10px; + margin: 0; + white-space: pre-wrap; + background-color: #00192b; + color: #f1f1f1; + border-radius: 2px; + transition: all 200ms; + height: 352px; +} +.disk_scan_cont .filescan-nav { + display: flex; + align-items: center; + height: 20px; + line-height: 20px; + padding: 0 4px; + margin-bottom: 8px; +} +.disk_scan_cont .filescan-nav .divider { + display: inline-block; + height: 16px; + line-height: 16px; + padding: 0 8px; + color: #bbb; + position: relative; + top: -1px; +} +.disk_scan_cont .filescan-nav .omission { + display: inline-block; + position: relative; +} +.disk_scan_cont .filescan-nav .omission.active ul { + display: block; +} +.disk_scan_cont .filescan-nav .omission ul { + display: none; + position: absolute; + background: #fff; + z-index: 999; + margin-left: -12px; + max-width: 100px; + box-shadow: 4px 2px 5px 0px #ececec; + border: 1px solid #cfcfcf; + border-radius: 2px; + transition: all 500ms; +} +.disk_scan_cont .filescan-nav .omission ul::after { + content: '^'; + position: absolute; + color: #cdcdcd; + font-size: 14px; + top: -14px; + left: 8px; +} +.disk_scan_cont .filescan-nav .omission ul li { + padding: 0 8px; + background: #f9f9f9; +} +.disk_scan_cont .filescan-nav .omission ul li:hover { + background-color: #eeeeee; +} +.disk_scan_cont .filescan-nav .omission ul li .file_folder_icon { + display: inline-block; + background-image: url('/static/img/file_icon/file_menu_icon.png'); + width: 16px; + height: 16px; + position: relative; + background-position: 0 -16px; + margin-right: 5px; +} +.disk_scan_cont .filescan-nav .omission ul li a { + display: flex; + align-items: center; + height: 30px; + line-height: 30px; +} +.disk_scan_cont .filescan-nav .omission ul li a span { + display: inline-block; + font-size: 12px; + color: #555; + line-height: 30px; + vertical-align: top; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 64px; +} +.disk_scan_cont .filescan-nav .filescan-nav-item { + max-width: 120px; + display: inline-block; + height: 20px; + line-height: 20px; + cursor: pointer; +} +.disk_scan_cont .filescan-list { + display: flex; + flex-direction: column; + flex: 1; +} +.disk_scan_cont .file-type-icon { + width: 16px; + height: 16px; + display: inline-block; + vertical-align: middle; + background-position: center; + background-repeat: no-repeat; + background-size: cover; +} +.disk_scan_cont .file_folder { + background-image: url('data:image/png;base64,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UmVhZHlxyWU8AAADKGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2NEQ2NjBGOUZFQ0UxMUU5OEUyQUFENDExRjZDRkI0OCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo2NEQ2NjBGQUZFQ0UxMUU5OEUyQUFENDExRjZDRkI0OCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjY0RDY2MEY3RkVDRTExRTk4RTJBQUQ0MTFGNkNGQjQ4IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjY0RDY2MEY4RkVDRTExRTk4RTJBQUQ0MTFGNkNGQjQ4Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+10BluQAACu9JREFUeNpi/P//PwMuwAJj/Ho49f/fr3cZWDm5GZhZ2BkZZWsYmGCSbEDBf//+MvwH4z9gMbgkw99fDP/+/mH4//cv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'); +} +.disk_scan_cont .file_icon { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAFpOLgnAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAMqADAAQAAAABAAAAMgAAAAB1y6+rAAAD10lEQVRoBe1Z3U5aQRBeKBUxpEikll4oNsWnqOHed+lN05foG+ELaPwJl+gFCaW1qZYgBBChFKUz1N3sWWbZ3fOTcsEmJ2dndma+mdnZnwOM2bS7u7spPuVyecrlY7yDA7y/tbU148c5g3r7H6SsmXkzj6y85EJaD90HzO65SIikoxL3VjZwfn4+Iw8PD4VsQhbAfrPZZA8PD4K9vb3N9vb2BI2dOaVcLsfG47FHSCXmlOLxOFtfX1flPPScEo7GYjEsKv4gSxQZEtE3kb52u/04nU7npv7q6qp1cHDwmrsiC5C+9vv93NnZWZUryAhjQHjJB9Q3X1VypmYIjUbDI6udRLD+hJKqgEcbiDmE0WjkkVEnU1aYIagCHm0gjFlapDBDUAVUWkb4jINYS/A8PT+P8J4Ae6AqLhctqkN2C2qxDnP5Tubp+tVqtVcqlTK6ceTLuZLlCjKxqD8YDF7hqXBycvJNJ6eL5A9EItePTn+Oz9eDPKCLhFyJsqJLXwdiVZe2QGRKIFUikm63y4bD4UJ7+Xx+4TgJAhoikkwmw/AJ0nQgIhL1IKLAXLYsWV9Egqdb0KabeBFJUICV/nJmgNy7qIsX5X69XmfZbPZNsVhsUuOcp6suPm5812q1X7CW0osEA4Og8Uql0oedSHtTCQUEgY6OjvBKRKafZNrOCRpX2gjOk5TC056MqlwgOrR0oRdwrSEzo9uFhefqLVIMPHc2NjaYaRM1gpi2cQWUjCTUdAEgCWKM5Pb2VnHWS6ZSKePJaQTZ3Nz0WlWotbU1meMvEtNdXUaAPgkS9pwomP9IY7ocS5iMxAjiWMJkJGGni4wkVBDdLhwqCJkrYJJzAvvcb/AqiUrQl+9gVF/mfdIBrfirDESRAXJ9UkDwZf8RivoLFDTu7KqeE82X7M3NzfdkMvlhf3//B4XpwlMd0OpCIE/cAa2Q4wBepFutFkun053d3d33hUKh42hCiLvsW/LWIQyE0bm/v89eXl62j4+Pf0KyFv9AqgFcikC4b71e7y3c2Yenp6c1COgF59u8XQKxsReKTKfTKUJAk4uLi4qtQZc14vvHL1tnCDnyQ4eQc/r4iWyNUI658sj7g8YIGQhe9k2/tWnsCTZ+EFC/x8FWb10xLoEIYLlDOSCPB+xbB+Ky2MkZCehoaOrWgcB2+D8CsZ4Rl9IiA7m+vmaTCf6l4r8lEgm2s7NDGYgkEApI5wApGyXTurTACXJGonQObFvPyLIHYp2nwGskynPEZUZcAiGzszpHyLT4Zy71GoGjK/zFDteehv98+dMEzK/+NFdaqwyEloG/engwwneEWvEAAAAASUVORK5CYII='); +} +.disk_scan_cont .filescan-list-title { + height: 32px; + line-height: 32px; + padding: 0 8px; + color: #555; + background: #f3f3f3; + border-bottom: 1px solid #efefef; +} +.disk_scan_cont .filescan-list-body { + font-size: 12px; + flex: 1; + max-height: 292px; + min-height: 292px; + overflow-y: auto; + color: #666; +} +.disk_scan_cont .filescan-list-item { + height: 30px; + line-height: 30px; + border-bottom: 1px solid #efefef; + padding: 0 8px; +} +.disk_scan_cont .filescan-list-item:hover { + background-color: #f0f9f7; +} +.disk_scan_cont .filescan-list-title, +.disk_scan_cont .filescan-list-item { + display: flex; + align-items: center; +} +.disk_scan_cont .filescan-list-col:nth-child(1), +.disk_scan_cont .filescan-list-title-item:nth-child(1) { + width: 122px; +} +.disk_scan_cont .filescan-list-col:nth-child(2), +.disk_scan_cont .filescan-list-title-item:nth-child(2) { + width: 90px; +} +.disk_scan_cont .filescan-list-col:nth-child(3), +.disk_scan_cont .filescan-list-title-item:nth-child(3) { + width: 35px; +} +.disk_scan_cont .filescan-list-col a:hover { + background-color: transparent; +} +.disk_scan_cont .filescan-list-col a:focus { + text-decoration: none; +} +.disk_scan_cont .filescan-list-col .path { + margin-left: 4px; +} +.nowrap { + display: inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +/* 动态省略号 */ +.disk_scan_cont pre .omit { + display: inline-block; +} +.disk_scan_cont pre .omit::after { + content: ''; + animation: ellipsis 2s infinite; +} +@keyframes ellipsis { + 0% { + content: ''; + } + + 25% { + content: '.'; + } + + 50% { + content: '..'; + } + + 75% { + content: '...'; + } + + 100% { + content: ''; + } +} +.disk_scanning_tips::after { + content: ''; + position: absolute; + color: #fff; + width: 12px; + height: 12px; + font-size: 14px; + top: -6px; + left: 205px; + display: inline-block; + background: #fff; + transform: rotate(-45deg); +} +.li-icon { + height: 9px; + background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTMuMjc0NzgwIiBoZWlnaHQ9IjkuMTI2NTg3IiB2aWV3Qm94PSIwIDAgMTMuMjc0OCA5LjEyNjU5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KCTxkZXNjPgoJCQlDcmVhdGVkIHdpdGggUGl4c28uCgk8L2Rlc2M+Cgk8cGF0aCBpZD0i55+i6YePIDEwNTEiIGQ9Ik0wLjcxMzUxNiA0LjAyOTExTDQuMzc5NDMgNy43NjI0NUwxMi42Mjc3IDAuNzYyNDUxIiBzdHJva2U9IiMyMEE1M0EiIHN0cm9rZS13aWR0aD0iMi4wMDAwMDAiLz4KCTxkZWZzLz4KPC9zdmc+Cg==); + background-size: 100%; + width: 13px; + display: inline-block; + margin-right: 8px; +} +.menu .current .menu_logs, +.menu .menu_logs { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAAf9JREFUaIHtmUFOwzAQRccWmyaN2HIEOAXpIag4BnsWcRfsOQZSD9EgNhyBI3SLnMnSw6IpciI7iUMdB8lv0zTxKDPyOF/6AxCJ/AnW9xARCyLKGWP5TPm0IKKSMVamabqzrbEWgIgFAAgfibmilNpkWVaanl31xInzBREZg30zZuf7CgCAU/Lr9XpzkYwckFL+ti7n/B4AStM6PmNOXogFhCYWEJrBr5AOEV0j4idj7PbCeezTNN1OCXTagbqunzwkDwDwUNf145RApwKSJHkloq8pLxpgnyTJ25RApxZijH0DwN2UF/ni3x/iWEBoYgGhiUJ2IaKQjSIK2ZwgIiEiVVV1CJhDMfn9SyhgDItsISll3vhSxv86TofYN10zDRFBdwYRUQCA0J26PmeOANq+0B+E7Mg5365Wqw/bAillzjkf1a66UzeXkN0opZ4nxA0yl5AdOecvvYmc3LcWRFQO2ZrBhayxEAsAyPX7XUO3qqqDZjUemvMQ/hAzxgqDiSu6bjQR7TrrBMBCP6OmeUCWZcZ2WmQBNkx2+yILMImWTciCF9BojOjcFl0l7q4holIptXESMp+4CBloahx8B87YZmBDLKYAF5RS7+drawvpwnHpIZ9tdGoY6wr9t1Hmnb5bIceswjb/bQ5tq62klLmpzQYH3eChiDED7EhkJn4A1qwofp3F9mcAAAAASUVORK5CYII=); +} +html .menu .menu_logs:hover { + background-image: url(data:image/gif;base64,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cENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA2LjAtYzAwMyA3OS4xNjQ1MjcsIDIwMjAvMTAvMTUtMTc6NDg6MzIgICAgICAgICI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcERNPSJodHRwOi8vbnMuYWRvYmUuY29tL3htcC8xLjAvRHluYW1pY01lZGlhLyIKICAgIHhtbG5zOnN0RGltPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvRGltZW5zaW9ucyMiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZmYyZWY0OTItM2JkZC05OTQ3LTk5YWMtMmQzMzI3MDVhMzIzIgogICB4bXBNTTpEb2N1bWVudElEPSJmZWI4MmYyNS1mZmZiLTNkYjgtY2EzMC0wNjE4MDAwMDAwM2YiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxYTVlZTUyOS03NWE4LTg0NDctODMzMi01NDRiZTAyMTFlYzUiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjItMTItMTVUMTc6Mzc6NTErMDg6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDIyLTEyLTE1VDE3OjM3OjUxKzA4OjAwIgogICB4bXA6Q3JlYXRlRGF0ZT0iMjAyMi0xMi0xNVQxNzozNzoyMSswODowMCIKICAgZGM6Zm9ybWF0PSLliqjnlLsgR0lGIgogICB4bXBETTp2aWRlb0ZyYW1lUmF0ZT0iMjUuMDAwMDAwIgogICB4bXBETTp2aWRlb0ZpZWxkT3JkZXI9IlByb2dyZXNzaXZlIgogICB4bXBETTp2aWRlb1BpeGVsQXNwZWN0UmF0aW89IjEvMSIKICAgeG1wRE06c3RhcnRUaW1lU2NhbGU9IjI1IgogICB4bXBETTpzdGFydFRpbWVTYW1wbGVTaXplPSIxIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9IjlkMWU4YTJjLWE4NGUtM2U1Ni04ZDI0LWRjZjEwMDAwMDA2YyIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMi0xMi0xNVQxNzozNzo1MSswODowMCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgQWRvYmUgTWVkaWEgRW5jb2RlciAyMDIwLjAgKFdpbmRvd3MpIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIi8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249ImNyZWF0ZWQiCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MTJjMmZmZmItZGM3NC02ODQyLWIxOTEtMDhhMzgzM2RhMDgyIgogICAgICBzdEV2dDp3aGVuPSIyMDIyLTEyLTE1VDE0OjUwOjAyKzA4OjAwIi8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmYxNDI3ZWYyLTQ1ZjEtMmY0Zi1hNDY0LTU4MzgyOGMxNjJlNyIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMi0xMi0xNVQxNDo1MjoxNCswODowMCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iL2NvbnRlbnQiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTZjODkxYmQtMzQ4YS01OTQ3LTk2MDItMjFkM2JlZmRiZjAwIgogICAgICBzdEV2dDp3aGVuPSIyMDIyLTEyLTE1VDE1OjQwOjE5KzA4OjAwIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvY29udGVudCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIgogICAgICBzdEV2dDpwYXJhbWV0ZXJzPSJzYXZlZCB0byBuZXcgbG9jYXRpb24iLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NThkMTQ4M2QtZjAyMy02ZTQ4LWE0NTYtZDg3YTA1YWEzMWQ1IgogICAgICBzdEV2dDp3aGVuPSIyMDIyLTEyLTE1VDE1OjQwOjI2KzA4OjAwIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIi8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmRmMzhmYzNiLTE5ZGEtNGY0MC1iMjU2LWVhYzIxOWFjZGNmMiIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMi0xMi0xNVQxNjowMzo0NiswODowMCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iL2NvbnRlbnQiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NzZjOTFlOGYtZTkyZC1iMjQ1LWJkYWItODdiYThmMDU5ZjkwIgogICAgICBzdEV2dDp3aGVuPSIyMDIyLTEyLTE1VDE3OjM3OjQ4KzA4OjAwIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvY29udGVudCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpiNDJmZDUyMi00NGM4LTdmNDUtYTJjNS1iMjU0ZDdiNDdjMDciCiAgICAgIHN0RXZ0OndoZW49IjIwMjItMTItMTVUMTc6Mzc6NDgrMDg6MDAiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MThjMjc4NjktMDAyMS04YzRmLThjMDMtMzVlZTU3MzAwZGQ5IgogICAgICBzdEV2dDp3aGVuPSIyMDIyLTEyLTE1VDE3OjM3OjUxKzA4OjAwIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBBZG9iZSBNZWRpYSBFbmNvZGVyIDIwMjAuMCAoV2luZG93cykiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZmYyZWY0OTItM2JkZC05OTQ3LTk5YWMtMmQzMzI3MDVhMzIzIgogICAgICBzdEV2dDp3aGVuPSIyMDIyLTEyLTE1VDE3OjM3OjUxKzA4OjAwIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBBZG9iZSBNZWRpYSBFbmNvZGVyIDIwMjAuMCAoV2luZG93cykiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii9tZXRhZGF0YSIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgIDx4bXBNTTpEZXJpdmVkRnJvbQogICAgc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2ZGUxZmEzNC0wNzNlLTJiNDgtYTNmYi0yY2Y3ZjFhMzczNjAiCiAgICBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjZkZTFmYTM0LTA3M2UtMmI0OC1hM2ZiLTJjZjdmMWEzNzM2MCIKICAgIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxMmMyZmZmYi1kYzc0LTY4NDItYjE5MS0wOGEzODMzZGEwODIiLz4KICAgPHhtcE1NOkluZ3JlZGllbnRzPgogICAgPHJkZjpCYWc+CiAgICAgPHJkZjpsaQogICAgICBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjg1NmYwYzA0LWU0MzUtNzk0Ny1iMmQwLTkwMDliMjlhYzdmNiIKICAgICAgc3RSZWY6ZnJvbVBhcnQ9InRpbWU6MGQ3NjgwMDBmMjU2MDAiCiAgICAgIHN0UmVmOnRvUGFydD0idGltZTowZDc2ODAwMGYyNTYwMCIKICAgICAgc3RSZWY6bWFza01hcmtlcnM9Ik5vbmUiLz4KICAgIDwvcmRmOkJhZz4KICAgPC94bXBNTTpJbmdyZWRpZW50cz4KICAgPHhtcE1NOlBhbnRyeT4KICAgIDxyZGY6QmFnPgogICAgIDxyZGY6bGk+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24KICAgICAgIGRjOmZvcm1hdD0iYXBwbGljYXRpb24vdm5kLmFkb2JlLmFmdGVyZWZmZWN0cy5sYXllciIKICAgICAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NWI1MGU1ZTktMTRlMy0zZDQyLWEyMmMtMDY5NjNjNGY3ZWJjIj4KICAgICAgPGRjOnRpdGxlPgogICAgICAgPHJkZjpBbHQ+CiAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij7mt7HoibIg5ZOB6JOd6ImyIOe6r+iJsiAxPC9yZGY6bGk+CiAgICAgICA8L3JkZjpBbHQ+CiAgICAgIDwvZGM6dGl0bGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgIDwvcmRmOmxpPgogICAgIDxyZGY6bGk+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24KICAgICAgIGRjOmZvcm1hdD0iYXBwbGljYXRpb24vdm5kLmFkb2JlLmFmdGVyZWZmZWN0cy5sYXllciIKICAgICAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2U1M2FmMjctYzQzNS1iNjQ5LTk4MTAtNTYzYjE4ZmI5ZDI1Ij4KICAgICAgPGRjOnRpdGxlPgogICAgICAgPHJkZjpBbHQ+CiAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij7nn6nlvaIgODEucG5nPC9yZGY6bGk+CiAgICAgICA8L3JkZjpBbHQ+CiAgICAgIDwvZGM6dGl0bGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgIDwvcmRmOmxpPgogICAgIDxyZGY6bGk+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24KICAgICAgIGRjOmZvcm1hdD0iYXBwbGljYXRpb24vdm5kLmFkb2JlLmFmdGVyZWZmZWN0cy5jb21wIgogICAgICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4NTZmMGMwNC1lNDM1LTc5NDctYjJkMC05MDA5YjI5YWM3ZjYiPgogICAgICA8ZGM6dGl0bGU+CiAgICAgICA8cmRmOkFsdD4KICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPuWQiOaIkCAxPC9yZGY6bGk+CiAgICAgICA8L3JkZjpBbHQ+CiAgICAgIDwvZGM6dGl0bGU+CiAgICAgIDx4bXBNTTpJbmdyZWRpZW50cz4KICAgICAgIDxyZGY6QmFnPgogICAgICAgIDxyZGY6bGkKICAgICAgICAgc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1YjUwZTVlOS0xNGUzLTNkNDItYTIyYy0wNjk2M2M0ZjdlYmMiCiAgICAgICAgIHN0UmVmOmZyb21QYXJ0PSJ0aW1lOjBkNzY4MDAwZjI1NjAwIgogICAgICAgICBzdFJlZjp0b1BhcnQ9InRpbWU6MGQ3NjgwMDBmMjU2MDAiCiAgICAgICAgIHN0UmVmOm1hc2tNYXJrZXJzPSJOb25lIi8+CiAgICAgICAgPHJkZjpsaQogICAgICAgICBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjdlNTNhZjI3LWM0MzUtYjY0OS05ODEwLTU2M2IxOGZiOWQyNSIKICAgICAgICAgc3RSZWY6ZnJvbVBhcnQ9InRpbWU6MGQ3NjgwMDBmMjU2MDAiCiAgICAgICAgIHN0UmVmOnRvUGFydD0idGltZTowZDc2ODAwMGYyNTYwMCIKICAgICAgICAgc3RSZWY6bWFza01hcmtlcnM9Ik5vbmUiLz4KICAgICAgICA8cmRmOmxpCiAgICAgICAgIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6YWM5NGVmNzAtMmVkNC03YjQzLTg5YTktNzU0NTkwMjExOGVmIgogICAgICAgICBzdFJlZjpmcm9tUGFydD0idGltZTowZDc2ODAwMGYyNTYwMCIKICAgICAgICAgc3RSZWY6dG9QYXJ0PSJ0aW1lOjBkNzY4MDAwZjI1NjAwIgogICAgICAgICBzdFJlZjptYXNrTWFya2Vycz0iTm9uZSIvPgogICAgICAgIDxyZGY6bGkKICAgICAgICAgc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpiMjY3NDgyNS05MjE4LTQ1NDYtYjA4ZS01ZTI3M2QyNDAyMjgiCiAgICAgICAgIHN0UmVmOmZyb21QYXJ0PSJ0aW1lOjBkNzY4MDAwZjI1NjAwIgogICAgICAgICBzdFJlZjp0b1BhcnQ9InRpbWU6MGQ3NjgwMDBmMjU2MDAiCiAgICAgICAgIHN0UmVmOm1hc2tNYXJrZXJzPSJOb25lIi8+CiAgICAgICAgPHJkZjpsaQogICAgICAgICBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmNiYmJlOTY0LTM0MmYtYTM0ZC1iM2Q2LTI3ZGUyOTE3MWFhYSIKICAgICAgICAgc3RSZWY6ZnJvbVBhcnQ9InRpbWU6MGQ3NjgwMDBmMjU2MDAiCiAgICAgICAgIHN0UmVmOnRvUGFydD0idGltZTowZDc2ODAwMGYyNTYwMCIKICAgICAgICAgc3RSZWY6bWFza01hcmtlcnM9Ik5vbmUiLz4KICAgICAgIDwvcmRmOkJhZz4KICAgICAgPC94bXBNTTpJbmdyZWRpZW50cz4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgPC9yZGY6bGk+CiAgICAgPHJkZjpsaT4KICAgICAgPHJkZjpEZXNjcmlwdGlvbgogICAgICAgZGM6Zm9ybWF0PSJhcHBsaWNhdGlvbi92bmQuYWRvYmUuYWZ0ZXJlZmZlY3RzLmxheWVyIgogICAgICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphYzk0ZWY3MC0yZWQ0LTdiNDMtODlhOS03NTQ1OTAyMTE4ZWYiPgogICAgICA8ZGM6dGl0bGU+CiAgICAgICA8cmRmOkFsdD4KICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPue7hOWQiCAxNS5wbmc8L3JkZjpsaT4KICAgICAgIDwvcmRmOkFsdD4KICAgICAgPC9kYzp0aXRsZT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgPC9yZGY6bGk+CiAgICAgPHJkZjpsaT4KICAgICAgPHJkZjpEZXNjcmlwdGlvbgogICAgICAgZGM6Zm9ybWF0PSJhcHBsaWNhdGlvbi92bmQuYWRvYmUuYWZ0ZXJlZmZlY3RzLmxheWVyIgogICAgICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpiMjY3NDgyNS05MjE4LTQ1NDYtYjA4ZS01ZTI3M2QyNDAyMjgiPgogICAgICA8ZGM6dGl0bGU+CiAgICAgICA8cmRmOkFsdD4KICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPuefqeW9oiA2NS5wbmc8L3JkZjpsaT4KICAgICAgIDwvcmRmOkFsdD4KICAgICAgPC9kYzp0aXRsZT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgPC9yZGY6bGk+CiAgICAgPHJkZjpsaT4KICAgICAgPHJkZjpEZXNjcmlwdGlvbgogICAgICAgZGM6Zm9ybWF0PSJhcHBsaWNhdGlvbi92bmQuYWRvYmUuYWZ0ZXJlZmZlY3RzLmxheWVyIgogICAgICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpjYmJiZTk2NC0zNDJmLWEzNGQtYjNkNi0yN2RlMjkxNzFhYWEiPgogICAgICA8ZGM6dGl0bGU+CiAgICAgICA8cmRmOkFsdD4KICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPuefqeW9oiA4MC5wbmc8L3JkZjpsaT4KICAgICAgIDwvcmRmOkFsdD4KICAgICAgPC9kYzp0aXRsZT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgPC9yZGY6bGk+CiAgICA8L3JkZjpCYWc+CiAgIDwveG1wTU06UGFudHJ5PgogICA8eG1wRE06dmlkZW9GcmFtZVNpemUKICAgIHN0RGltOnc9IjE2IgogICAgc3REaW06aD0iMTYiCiAgICBzdERpbTp1bml0PSJwaXhlbCIvPgogICA8eG1wRE06ZHVyYXRpb24KICAgIHhtcERNOnZhbHVlPSIyNSIKICAgIHhtcERNOnNjYWxlPSIxLzI1Ii8+CiAgIDx4bXBETTpzdGFydFRpbWVjb2RlCiAgICB4bXBETTp0aW1lRm9ybWF0PSIyNVRpbWVjb2RlIgogICAgeG1wRE06dGltZVZhbHVlPSIwMDowMDowMDowMCIvPgogICA8eG1wRE06YWx0VGltZWNvZGUKICAgIHhtcERNOnRpbWVWYWx1ZT0iMDA6MDA6MDA6MDAiCiAgICB4bXBETTp0aW1lRm9ybWF0PSIyNVRpbWVjb2RlIi8+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAOw==); +} +/* 首页磁盘分析 end */ + +/*消息通道安装模块样式 start*/ +.alarm-view .plugin_body { + position: relative; + height: 525px; +} + +.alarm-view .plugin_user_info { + padding: 15px 30px; + line-height: 26px; + background: #f5f6fa; + border-radius: 5px; + border: 1px solid #efefef; +} + +.alarm-view .plugin_user_info p { + font-size: 14px; +} + +.alarm-view .plugin_update { + position: absolute; + left: 0; + bottom: 0; + width: 100%; +} + +.alarm-view .update_list { + position: absolute; + bottom: 0; + line-height: 40px; + width: 170px; + text-align: center; +} + +.alarm-view .plugin_update .box { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + height: 45px; + padding: 0 15px; + background-color: #f7f7f7; +} + +.alarm-view .plugin_update .btn { + margin-left: 4px; +} +/*消息通道安装模块样式 end*/ + +/* 当前证书 */ +.ssl_state_info { + padding: 10px 16px; + background: #f5faf2; + margin-top: 5px; + border-radius: 4px; + border: 1px solid #eaf1f2; + font-size: 12px; + position: relative; +} + +.state_info_flex { + display: flex; +} + +.ssl_state_info .state_item { + display: flex; +} + +.ssl_state_info .state_item:nth-of-type(2n - 1) { + width: 54%; +} + +.ssl_state_info .state_item:nth-of-type(2n) { + width: 46%; + margin-left: 10px; +} + +.ellipsis_text { + width: 220px; + display: block; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} + +.ssl_state_info .state_item > span:nth-child(1) { + height: 25px; + line-height: 25px; + margin-right: 4px; + font-weight: bold; + color: #666; +} + +.ssl_state_info .state_item > span:nth-child(2) { + flex: 1; + width: 0; + display: flex; + align-items: center; + height: 25px; +} + +.ssl_state_info .state_item .btswitch-btn { + height: 1.9rem; + width: 3.2rem; +} + +.custom_certificate_info { + margin-top: 15px; +} + +.custom_certificate_info .state_item { + width: 48%; + height: 50px; + display: inline-block; + margin-right: 4%; +} +.custom_certificate_info .state_item:nth-child(2) { + margin-right: 0; +} + +.custom_certificate_info .state_item span { + width: 100%; + display: block; + margin-bottom: 5px; +} + +.custom_certificate_info .state_item textarea { + width: 100%; + height: 250px; + line-height: 25px; +} + +.warning_info { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; + height: 40px; + line-height: 20px; + padding: 10px 15px; + border-radius: 4px; +} + +.module-check.check_disabled label, +.module-check.check_disabled i { + cursor: no-drop; +} + +.div-box-tips { + display: flex; + align-items: center; + margin-bottom: 10px; + background: rgba(240, 173, 78, 0.1); + border-radius: 2px; + color: #f0ad4e; + min-height: 34px; + height: auto; + line-height: 22px; + padding: 10px; +} +.div-box-tips span { + flex: 1; +} +.ico-text-hint { + display: inline-block; + width: 18px; + height: 18px; + background: url('/static/img/ico/icon-text-hint.svg'); + margin-right: 8px; +} +/* end */ + +/* 证书优势 */ +.business_advantage { + font-size: 0; + padding-top: 8px; +} + +.business_advantage .business_advantage_item { + display: inline-block; + width: 30%; + max-width: 75%; + height: 24px; + line-height: 24px; + margin-bottom: 5px; + white-space: nowrap; +} + +.business_advantage .business_advantage_item:nth-child(n + 5) { + margin-bottom: 0; +} + +.business_advantage .business_advantage_item span { + vertical-align: middle; +} + +.business_advantage .business_advantage_item .advantage_icon { + color: #ff8d00; + font-size: 16px; + margin-right: 5px; +} + +.business_advantage .business_advantage_item .advantage_title { + font-size: 13px; +} +/* END */ + +/*企业微信售前客服*/ +.wechat_ssl_kefu { + position: absolute; + z-index: 10; + text-align: center; + color: #7e7e7e; + background: #fff; + border: 1px solid #e5e5e5; + padding: 10px; + left: 0px; + border-radius: 2px; + display: none; +} +.wechat_ssl_kefu:after { + content: ''; + width: 10px; + height: 10px; + border-left: 1px solid #e5e5e5; + border-bottom: 1px solid #e5e5e5; + border-top: 10px solid #fff; + transform: rotate(136deg); + -webkit-transform: rotate(136deg); + position: absolute; + top: -6px; + left: 30px; +} +.wechat_ssl_kefu span { + line-height: 30px; +} +.wechatEnterprise { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAABXdJREFUaEPlmn9MlVUYxz8Plwv0QiAuRc1ARFf5g4nT2MyfIWXqXP6i5WyJzs2WpVuasVr+wbTaNJQxc9XU0nJCaWrONlxu/jYsjNYPQiw1zUiJ4r38kHs57cBgIlx473vvZcye7e7d7n3O93k+73Pec95zzhXuEpO7hIP/F0h1ffXwkNCQOSjGIQxDBb2ObqAcRZEHzxfRzujTXUXstCIu5RogHnlLoZ7tSijIvxeKQ9YaYngF8gpiNphTRWQXEBfkJC3Li8iLhsPI66hBhyDVDdVTQiSkEHBYjtJNjiKy0nAYm+8M1w6ksrIyJjwm/DsUCd2Um89hlFKPRzmj9I1utXYgZoO5WURe8lm9OxsI30Q6Isd4BalSVbFOj/Mm9PxhWZB5RqjxWQtMm4qYbvM5QXZ05821G0uQj41QY2GHILWe2i2NqvF5u+Ld3K48MjRySIcgLrfrMDDNTkLVtVD0i/4I5X9ApQmV1XBPGPS+F3pHweRkRXIiJPW3E6F9m8jQyNYe1aZr1bhrjinUBF/CnL8IR0uEoyVQZVprmTYKFkxSDL3fmr83L8NhOESkUf/uF8j2QmF7m0HQemLhTlgwGTLT7b/vBAQke7dQWGw9cW+es1Jh1Vx7MH6DrHxP+PaC/xAtCk+OgawM32H8Asn5XNh3KnAQLUoaRAP5YrZBvv8NXtgSnCVMv1jIXabQV6tmGyTvoJB/3GoY3/30w79suvUuZhtk4ivBqUYL8vhhsH5RkEH05PZUdnBB4vvABysUEWHWqmmrInq2zswJHkh8X7hcAVuXK4bFBxGk9HdYmht4kMx0SH3QevK3I9qqSH0DpL8WeJDCdYq/3L9ScOU94o0hzB24xFo5AFsgWn3JZqHsquU4XTrOGAtr5itWlyzg7M2vmvzXPJTDjP7PdNlWO9gGef9LYWdzvICY7lb6XWtF8RyKq5pn2eSYVPJG77ekbxvkyg1YnCPobmbXYiJh6iiYPlYxdABI3U9U1JSx6eo+jt/QqwhYN3IHE+7rejVhG0QH2bhX2H/GHsaUZFjyhEIPs9rk3yM4rq7Bk7gLFfEwJf+c5dC1TygzfyA3ZS9RodGdBvILRFcja4dwrsw3mEFx8NHLzZNdyJ8bEPMkYp5qhohObyN2+PoexD2Q6xWPEB0Bjw0OpVdE+4HGLxAdsaIKsj707cFveR4cpRORutKmxFXUODxJ+zq8I8sP1rH3x+Y+vD49gkWjne38/AbRiofPwZv51ofjVpDy2U2V0NbYbzWNcavaJXjx70bStrmo1zvA0AShYe60gIAcKoK3C6yDRBtQkKUwag/guLQUZYzBw+swKAWcbZPcePIWG0/UN+Wtu1X21HASY0OCA5J7QPj0hPXnJKEvDE+AV+ff9lJ4Zg/q6wJk9hvwQHKT2OnLHuburmF8goP5I5xNH28WkIqs2CoUX2wOkZIEs1IVelPhlhtcdWDWNV+1xfWC2KiO01G7VsLZfEiehqTM5J36mQyMFjJGegdoUQoIyIVrcKhImDRSMWqw9cq08yw9jsp7uvVrWbgJUjMsCQYExFIki05qw3S4dL7Ze8IiJGO9pZZeQUy3eUSQNEsqgXT6+RgqPwv6JCLzspuuVszrBp3L7doGZFoR6QE+nWyZ3nItI4R3e0CSXabQ6Sa2y+XqTzjXulTpAQ6dHivo/Fxu1xagZ+/Id3XQo0H0YU9YY9h5pZTFlXP3l8fS0ZtOq1bVTlaNqlApFdr9aXYe0fJhaIuM2WCmichOIECnGf7fEp+Pp1thlBknHtGz02L/0/BLoVCUrDWcNv4wcHvYqrqqpDBn2Gyl1KMiMkIpFa6XE36l1nnjwP6FI4iJBlza+oIi4KEDK3jXgPwH8FZOUYC1gSwAAAAASUVORK5CYII='); + background-size: 25px; + width: 25px; + height: 25px; + display: inline-block; +} +.wechatEnterpriseService { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE0AAABACAYAAABfl/puAAAAAXNSR0IArs4c6QAACvpJREFUeF7dnAtwVOUVx3/nbkh4iNndiIOtT8p0fESwBGxraRUFtQrYOhW1lSmgoy1Va9UBRfYZxFe1gwWBaQ3qtLUVrRZap0p51NJBsAEkaHXQ2lGrYym7CZRUQvaezrfhkWTv3b17s4GFM7OzMHse/+9/v+9+557v3Ai9LXPSp5CxTkfsM0DPADkDMJ9qYPe+TyvCbmxtBd5DeBVLN9Ke2UL8+P/2NsRi/UuxBgX14zuPQ+zzsfRylIlATUEbNwUhg816RLeArsYOP0tcbN/+SmRYGtLi20cggXGI9TXQy0qEzcGNvo1azyL6HNHQpt6Lk99zz0ibu2sQ7XtvB/kRUHWIB7Ec5TlioScPcVz8k5ZsmQ727cDnDjXorvFkBZp5iFjNikOFo3jS6tMTUczMuqBIkJtQNmOxCdXN2O2boKqSSmswezMngD0YSwajDAO+CpxWpP/5WFUPMrv/B0XaFa1eHGmJdBIh4jHKP4E1aGYZseOe92hzUG3uztPJ2Oejei6qYxE5ubAPNYQ9SDQ8v7Cufw3vpCXTy4HxeUMJaWz7UdRaQzy0xj+sbpaxHcdiybWIXONphqs8QCx4V8nid3NUmLR7d59Apu014LN5QaguxMrMIzLo7d4Cm/WbaB6HpdeiTM2PhwXEQjf3Bpb8pCWb60D/ViDwc6DziIb/0hsAXX3W7xwPdiS7fN3lCaKh/OT6AF2AtLTm92n9kGj1oz7ilsYkrn2xWiKgs9wdyjNEg1eXJmCHF3fSkqnFIDe6BpPABCLH/r6UYHz7SqTHIDwMfMHRh3AnkZD5vSTiTFoydQ3I064RKirOYtbAN0uCoFRO5rSehL1nncu9txWsC4lWry9FuFzS4qlaLGlydW4H+xGXT0sRvOQ+4h/1x+pnigAOoi8TDV9Sipi5pCVTL4Fc7OjcljriwY2lCNxrPpKps0G2uCzTKJFQfU9jdyUtmZoOssD5QnEbsdC8ngY8JPbJtHm8c7mH6TCiYfeV5AHgQdKyU7vvBpCzHOwiRENzPPgrHxXXjUzuJxq8uydAD5JWn74D5ce5zmQd0eB5PQlyWGzdc8z3qdRh3BVu8Yurg7S5O2toz2wAhuQ4Ur2OWPiXfgMcVju32SY6nUh4oV9sHaTVpyMoyVwnpdtx/ALskV2yZRTYZjJ0FWUtsZCppPiSDtIS6SaEWodZNpFY2DyoH7nilg2oXEws6KsGJ8zZcRK29b4DK+8TDZ1y5LK1D3kidRMii3LGIdxOJPQTP+MT6tNXZsvGOVNYFhILTvfjtKxs7v54EP37vocyoBuuBqKh6/1gFZLN94Hm1p5UxxML/8GP07KzSabNfW1UV1yynmjwS36wCsn0SuDCHONoqHCtzU/Ew2GTTC8BpnQLvZto6Bg/cAxpO4GB3YxbiIaCfhyWpU196h5UcpNznxPD3NNaUfp1G+zRsQnsH1Qi9X1EHivVajIzbTtwXDeHTURD5lTo6JDEjqsR69fAHsCUjzpO0nzPtGT6PeDULuz0MPkrO6bj6Quokte5O5jOYjP/t4gRDY3xg1VIprY6PKR/SDR0kh+H5WpTu+LgOa1m2PLGpaT8YjWkvQryxRwHln0ys2t6/eDVL/Bi7GpXcS/KgXMEgY9QZjSNxdcztbmnmcT2yhwQwhVEQsuKAVeOurUraQDn4z6BSU0XsbRY3Ia0acDjOYZqJ4jVxIt1WE762SVpsdoNk8AbTRc5PHMXGIQQ//dgrD4fO+gd8Tto7SpWo/l7Tqpsgo3jKKq21pH1J9OmheD8o22J1q4gnt0l84nFhK1jKOooch9pzbNA73Ug7Ukioe6PH+W0AvNiqV3JN4Hf5lVSHto6lhnFDKqDtDnNI7HV9GvkishFRIKrinFaTrq1KzFtFXV57mubKlsZ3TgB0+/rSQ4+lCfTZhf5lgNrLxINXu7JWxkq1a5mPDZmQ3MlDpvE1nFZHU9ykLQ5O8/DzvzV0UrlBmLB3B3WU4jDo6SN3IhgyQiyBcizV3GjbVMnFkNQxnZD1WrbjH5zHJ76eLude6bNueatDsP8iIqKcWXXiuAAVF/lRLuCB0T4tvnZqsvtVzn7T4xV4bvAdftdCKyqrObSxpHsLXSZu5J2X/pU9so60MEOhsuJhkyLe9lK+2tMtIQHEE43IAUmSx2/cANc+zIjCWA2wGxHgQgLmi6kYE9bbqGxPjUTlfudl2l5JrzaSJ1tM0E6pReq3B8YiadD4dqVPATcmR2zhxTEoQFGKwk0r0MZUc7E6WY+b7dniRrvkMAus+q4opglUbuSycBTApc1rd3RjspELIZi63qEdcRqXuq0lB1cJ/8zCqwXQD5TbsS1b2SypVwLfN2FlO2ifFlG8m4xpB3QjafuQ3A6M0kQ73isdD8HqG++GPQFh6ruPv8yk2jwQV/AfBplXiPeeQk6uVF4LFDHD3yFSKRMV+ct7rY6iVjN0gLtowWa+6yqE5nd/1++APow0o1sVcWpQeeAt4zNmD6j8NdZnkhtA4bmgbaJWHhE4ROnfO1XNqcRD5n3BXpdtJGhCmZQ7iKssUbgqxpLfcokwYW6CVqJhQcUJs1AdD7N8X0E5odh3cQotcnty+jkTGFmoA5/t4x4ajGCe49xNo68Syw01Btp8ZYwlr2jy2CVDcRCuRXfePocxP4GBN7ACmwlMvDvfkhixvaBHBMYhlSETEO0vs7x2s4neSeacIWMoPjCqYk1IPAW4Lzx7Q+qzCcevsUbaTNT1QyQ5m6Aux7rZ3t1TV4k2Uy8k7QDpvPQfLahtCC0ZL87/l2d/ej+bz0TEdOMcyYQAA4k1ZlGnhYwb604SaNVx0hfFyiRMrvxrwrYbiagE80RgDfS4s1DsLTbFm7fQbTmkWygZPMMUJNI9s4B8772e5Obqc1ip8KiKJP2PMaWvg0U98bMI9qPXWnTPfQVF9K2o6YkLvcQD2UnjkfSWs7Fsru2k4tcAhkLtUxOk1vA9HXJXY2WY1tTiFendBtV9k5uFSH7Mq7avGMFeL5tfmCAqD4jsLRPgz3Jc3jHNENMmewVlFey3/vI2u/TG2mJ9GSEp7re03QtIqM9g+u5YgrVW926MvdcH7jKkJYlEl1miz7c7/HsoN0lmZ6Cqunz2Cf6M7TPI8SPNfc3V/FIWmoRIjcVMe5PED4AGY5qnyLs3FTXgKzAsl9hdnitm1Jn4rI6yrx27If7LzFYukkyPRzlZdDjs7+I3EE01HG7KSAeSXPplOzuXNiCykKiwYNNdHN3nUn73nOA4WAN7/h2rKJ08ibrUd2AyFZs2Uy8Om+q0RlG29TAVETNsd1+aRZ0TQb5s2XbayqfYHP2B5N/Kqb9/x0w7f7e28q8kZZMm7dA+ueZsG+huggNLiQubYWuVG//vnea9YzCVc5xZL2if6w6eccTYE+hsnIBswaafhbP4pU085aK08ta/0B0EZmQIats/n5G2w3UYVt5X7lUSFQ12J5L3J0Z9UrabUDn/tQPO8gKLDQ7mudLdAgV26ZZi8E9wxfYXbHLHiRL+V+xsLyR1nEP+B7I1aC/IZD5HfcMcjpgLjZ+r+nvncZoxcr74q5lyeUVP8+8WCwI76QV6/kw6386jSEWVt6amsCMPg22qdoWJUctaXoLVW27rW0Cri1jlsq0iiWZTnmaN+6OWtLM8NumWjcj/NSNChFrbJ/H202jdlFyVJOWJW6a5dTZbRLfhsolts/3CIri+MhU3jPVmiHCdyD712XeVni+qsH2dFLlNOL/A1JekW62BOEZAAAAAElFTkSuQmCC'); + background-repeat: no-repeat; + background-size: 19px 16px; + width: 21px; + height: 16px; + display: inline-block; +} +/*企业微信售前客服 end*/ + +/* new 购买商业证书 */ +.tips_gray { + color: #999; +} +.unit .org { + color: #ff7301; +} +span.unit.ssl_service_unit { + margin-left: 10px; + font-size: 12px; + color: #888888; +} +.ssl_service_unit .org { + margin-left: 4px; +} +.ssl_applay_info .lib-price-detailed .info { + justify-content: space-between; +} +.business_ssl_form .domain_number_tips { + margin-left: 0; +} +.business_ssl_form.bt_business_tab { + padding: 0; +} +.layer-business-ssl .business_ssl_btn { + position: absolute; + left: 0; + bottom: 0; + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + height: 95px; + padding: 0 50px; + background: rgb(255, 255, 255); + box-shadow: 5px 0px 10px rgb(184 184 184 / 25%); + z-index: 222; +} +.business_ssl_form .business_ssl_btn .bname { + margin-bottom: 5px; +} +.business_ssl_btn .tname { + text-align: center; + font-size: 14px; + align-self: flex-start; + line-height: 32px; +} +.business_ssl_btn .info-r { + padding: 0 30px 0 15px; + display: inline-flex; + align-items: center; +} +.business_ssl_form .inlineBlock { + font-size: 0; +} +.business_ssl_btn .business_ssl_pay { + border: 1px solid #20a53a; + padding: 8px 28px; + font-size: 14px; + background: #20a53a; + color: #fff; + border-radius: 2px; +} +.business_ssl_form .business_ssl_btn .present_price { + color: #fc6d26; + display: inline-block; +} +.business_ssl_form .business_ssl_btn .present_price span { + font-size: 20px; + color: #fc6d26; + font-weight: bold; +} +.business_ssl_form .line { + padding: 10px 0; +} +.business_ssl_form .line .tname { + height: 38px; + line-height: 38px; +} +.business_ssl_form .line .ssl-service { + line-height: 32px; + background: #f1f9f3; + margin: 3px 10px; + padding: 0 10px; + color: #20a53a; + border-radius: 4px; + cursor: pointer; + font-size: 12px; +} +.business_ssl_form .ssl_type_item { + width: 200px; +} + +.business_ssl_form .ssl_brand_item { + width: 88px; + display: hidden; +} + +.business_ssl_form .ssl_year_item, +.business_ssl_form .ssl_price_item { + width: 80px; +} +.business_ssl_form .ssl_item.disabled { + background: #efefef; + border: 1px solid #ccc; + color: #999; +} +.business_ssl_form .ssl_item .ssl_type_title { + width: 90px; + display: inline-block; + text-align: left; + padding-left: 10px; +} +.business_ssl_form .ssl_item .ssl_item_title { + height: 30px; + line-height: 30px; + margin: 0 10px; + border-bottom: 1px solid #ececec; + font-size: 13px; + font-weight: 600; +} +.business_ssl_form .ssl_item .ssl_item_ps { + padding: 8px 10px; + color: #888888; + line-height: 20px; + height: 78px; +} +.ssl_type_info { + width: 202px; + display: inline-block; + text-align: left; +} +.business_ssl_form .original_price { + text-decoration: line-through; + padding-left: 70px; +} +.business_ssl_form .original_price, +.business_ssl_form .present_price { + font-size: 12px; + color: #aaa; + font-weight: normal; +} +.business_ssl_form .ssl_item.active .present_price span { + color: #ff1d00; +} +.business_ssl_form .present_price span { + color: #333; +} +.layer-business-ssl .ssl_applay_info .lib-price-detailed .info span { + padding: 12px 10px; +} + +.business_ssl_form .ssl_item em { + position: absolute; + right: 0; + top: -9px; + font-style: initial; + background: #ff6000; + border-radius: 0 9px; + height: auto; + line-height: 15px; + padding: 2px 6px; + color: #fff; + font-size: 12px; +} + +.business_ssl_form .ssl_item.active em { + right: -1px; + top: -10px; +} + +.business_ssl_form .ssl_item { + flex: 1; + border: 1px solid #ececec; + text-align: center; + cursor: pointer; + position: relative; + padding: 1px; + position: relative; + transition: border-color 500ms; + border-radius: 2px; + line-height: 32px; + display: inline-block; + font-size: 13px; +} + +.business_ssl_form .ssl_item:hover { + border: 1px solid #20a53a; + z-index: 99; +} + +.business_ssl_form .ssl_item.active, +.business_ssl_form .domain_number_input { + border: 2px solid #20a53a; + z-index: 99; + padding: 0; + transition: border-color 500ms; + color: #20a53a; + background: rgb(241, 249, 243); +} + +.business_ssl_form .business_price_list .ssl_item.active { + padding: 0 20px; +} + +.business_ssl_form .business_price_list .ssl_price_item { + width: auto; + padding: 0 20px; +} + +.business_ssl_form .ssl_item.active::after { + content: ''; + display: inline-block; + width: 0; + height: 0; + border-left: 25px solid transparent; + border-bottom: 25px solid #20a53a; + position: absolute; + right: -2px; + bottom: -1px; +} + +.business_ssl_form .ssl_item.active::before { + content: ''; + display: inline-block; + width: 12px; + height: 6px; + border-bottom: 2px solid #fff; + border-left: 2px solid #fff; + position: absolute; + right: 0px; + bottom: 5px; + z-index: 1; + transform: rotate(-45deg); +} +.domain_number_reduce.is_disable, +.domain_number_add.is_disable { + background: #efefef; + border: 1px solid #ccc; +} +.domain_number_add.is_disable:hover, +.domain_number_reduce.is_disable:hover { + cursor: no-drop; + background-color: #efefef; + border-color: #ccc; +} +/* 购买商业证书 end */ + +/* 证书类型 */ + +.business_class_list { + position: relative; + height: 165px; +} + +.business_class_loading { + background-image: url('../images/loading-2.gif'); + height: 32px; + background-repeat: no-repeat; + position: absolute; + top: 50%; + left: 50%; + margin-left: -100px; + margin-top: -16px; + padding-left: 40px; + font-size: 14px; + line-height: 32px; +} + +.business_class_item { + height: 42px; + line-height: 38px; + border: 1px solid #ececec; + padding: 1px; + cursor: pointer; + transition: border-color 500ms; + position: relative; +} + +.business_class_item:hover { + border: 1px solid #20a53a; + z-index: 99; +} + +.business_class_item.active { + border: 2px solid #20a53a; + padding: 0; + line-height: 38px; + z-index: 99; +} + +.business_class_item:nth-child(n + 2) { + margin-top: -1px; +} + +.business_class_item .business_class_title, +.business_class_item .business_class_original, +.business_class_item .business_class_price { + display: inline-block; + font-size: 13px; +} + +.business_class_item .business_class_title { + width: 270px; + padding-left: 15px; +} + +.business_class_item .business_class_original, +.business_class_item .business_class_price { + width: 130px; + text-align: right; +} + +.business_class_item .business_class_original { + text-decoration: line-through; + color: #cdcdcd; +} + +.business_class_item .business_class_price { + color: #f0ad4e; +} +/* 证书类型 end */ + +/* 域名数量 */ +.domain_number_group { + padding-top: 3px; + display: inline-block; +} + +.domain_number_input { + border: 1px solid #d6d6d6; + width: 50px; + height: 35px; + vertical-align: middle; + text-align: center; + margin: 0 2px; +} + +.domain_number_input:focus, +.domain_number_input:active { + outline: none; +} + +.domain_number_input:hover, +.domain_number_input:focus { + border: 1px solid #20a53a; +} + +.domain_number_input::-webkit-outer-spin-button, +.domain_number_input::-webkit-inner-spin-button { + -webkit-appearance: none; +} + +.domain_number_input[type='number'] { + -moz-appearance: textfield; +} + +.domain_number_reduce, +.domain_number_add { + height: 35px; + width: 35px; + border: 1px solid #ececec; + display: inline-block; + vertical-align: middle; + cursor: pointer; + position: relative; +} + +.domain_number_reduce::before, +.domain_number_add::before { + content: ''; + display: inline-block; + position: absolute; + left: 50%; + top: 50%; + margin-left: -7px; + margin-top: -1px; + height: 2px; + width: 14px; + background-color: #555; +} + +.domain_number_add::after { + content: ''; + display: inline-block; + position: absolute; + left: 50%; + top: 50%; + height: 14px; + width: 2px; + margin-top: -7px; + margin-left: -1px; + background-color: #555; +} + +.domain_number_add.is_disable::after, +.domain_number_add.is_disable::before, +.domain_number_reduce.is_disable::before { + background-color: #ccc; +} + +.domain_number_add.is_disable:hover, +.domain_number_reduce.is_disable:hover { + cursor: no-drop; + background-color: #fff; + border-color: #ececec; +} + +.domain_number_add.is_disable:hover::after, +.domain_number_add.is_disable:hover::before, +.domain_number_reduce.is_disable:hover::before { + background-color: #ccc; +} + +.domain_number_reduce:hover, +.domain_number_add:hover { + background-color: #20a53a; + color: #fff; + border: 1px solid #20a53a; +} + +.domain_number_reduce:hover::before, +.domain_number_add:hover::before, +.domain_number_add:hover::after { + background-color: #fff; +} + +.domain_number_tips { + display: inline-block; + margin-left: 15px; + color: #888888; +} + +.domain_number_tips span { + color: #f0ad4e; + /* display: inline-block; */ +} +.domain_number_tips span:nth-child(2) { + color: red; +} +/* 域名数量 end */ + +/* 选项内容 */ +.bt_business_tab { + padding: 25px 60px 0 60px; + width: 100%; + display: none; +} + +.bt_business_tab.active { + display: inline-block; +} +/* END */ + +/* 微信(支付宝支付) */ + +.ssl_applay_info { + padding-top: 40px; + border-radius: 4px; +} + +.ssl_applay_info .payTitle { + margin-bottom: 15px; + height: 50px; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALcAAAAyCAYAAAAeE0r0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RERDMENDNjk2OTNDMTFFNzhFQTlBQ0RDMzI3NzNCQzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RERDMENDNkE2OTNDMTFFNzhFQTlBQ0RDMzI3NzNCQzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpEREMwQ0M2NzY5M0MxMUU3OEVBOUFDREMzMjc3M0JDMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpEREMwQ0M2ODY5M0MxMUU3OEVBOUFDREMzMjc3M0JDMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pu+PnjYAABY7SURBVHja7F0JnBXF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) + no-repeat center center; + text-indent: -999px; + background-size: 150px; +} + +.ssl_applay_info .guide_nav { + height: 50px; + line-height: 50px; + text-align: center; + margin-bottom: 45px; + font-size: 0; +} + +.guide_nav span:nth-child(1) { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAACp0lEQVRIS8WVTUhUURTH/+c9532MZhCEfYi4sBYVtYkgqKjGafowooUSUW0jgmBmIe6aoEWrYlokSbQog7Ao+0DSUQMrWhkWZGGBm8HIjQTy3rszzT3xRkdm5s3oMIZeeJtz/+f87j0f9xFWYNEKMLD6EG1Q21YllXMguZlBDSA0gtEI4HfmIxoHy6eaSA7/acFMqawUv0kfag1Vi0ChMAG1S6aUkAAjZs+I22hDslDvgfj79Rap4gYxti8Z3Cv4BFau2EfsD7lbeRDzrVmPlPwIQn0FgAUXUnHKOixeZg35kLjeA6C1QsAUGM9YpedOwBl265lsTo67sRYgRr8WJYWuVgAYBXGPBPWKZjHhj+snGOhgyUNOKBnNg5hx/R2AfTmQCQY2lCw84RWYH9tOshcnYVW/8e2SqtoO8Fk3BhO+Os1ixwLEP+LfyCI9lV8svg/mTknKdQJC83sWA91Q6JETcEZcW01fzfq0728E4A5PV0m52wqlRjPpMoaM8yT5QaFIlb662dDstJvKzOmYusVR8TOr8w/ol5nQDqChWJoJuGgFRVcGYsb1MICbRYS37KCIFNrNAe00iFx7bno97qzQBSfgPJyDDGitIHI7y7PslDBwHCKjG/LtQVoNg/hMOQ1CurrJOmD9mktX3GgA+AsBawudWfI10tR7SMkwCJ5bLQJ7bwfF/sLuugPgUjknLEfjHs7TwniBNaZf/wGgrpwgS2ie2EHRltXkTXz1oLZTMn1eFoSRgE/Zax+yE0Uh8/U5SOC7ALZWABsliagVEq9zfYs+9Yt1WwmwO3Bd7kyUmBev2RjU+4hxDMA0S+4khdYxoYkktoDQBGCMiMdY4htV0ffcF7dsiBnXGYQYpynmhJzJCtKW57L6//jl3qBkd/2vwLlx/gEqxfAaZBkG6QAAAABJRU5ErkJggg=='); +} + +.guide_nav span:nth-child(1).active { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAACAUlEQVRIS8WVTYhOURjHf/+dDUppfKVZYIHYSCnKTholC5KwlZRiITszZWFFY0EmWTBKCCE7s/CR1Qjlo6FsRGZjN8Xmr2c6d9z3zrnv+877auap07nd5zn///N5jpgF0SxwMPckttcCB4HlwEqgN62fQKwPwF1gRNKvuqxkI7G9ADgJnADiu5V8AwaBi5L+VI2nkdjeBZwD1rVCzuhfA8clvSzrGkhsrwBeAbF3I7slPSwAqiS3gb0don8H7gH3JY1EPSVFzf51l+1+4EwHBKNAOPdA0pjtPuA08FRSYDaQPAe2lkjGgCVNCv8IuJXAJ2xvBE4BBxLGe0nrp0hsLwUi3LJcAy4DZ4EdSTEBDAM3JT2Lf7YXp04M76uySdLoZE1sHwKuZ4x6JI2nVIZ6WNKXws72seR9zFBOjkgaKkhiHs5nrC5IinlpENt7kvfl9OZIDku6UZBER0XxcjJP0u8U8eY0oPtrbKu/l0n6UZBEuO+AhZnDA8DVBD4tqiZkLyRtC/3UnNi+BBxt08N2zAZyLTwf+Az0tIPQwuaOpH2FTXXiNwBvuySJy3KLpNgnJXdBbgeuAGs6IIvp75f0uHy27qpv1m057gAfipnIKetIngA7gfE09YuAVcDqtL8BYn0EPpVv3JmQOD1Cg5K+dpC2hiNz/8Z3G0Ftd/0v4DLOXwwcoxqzt88zAAAAAElFTkSuQmCC'); +} + +.guide_nav span:nth-child(2) { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAACkklEQVRIS72WS0hUURjH/9+Z0Yg2jY80aiHmVbA20aIIIiVy1wOCVi3ahM31AQUuWo0ugrKd4szUwl2bgrCgXaCREbRoU2njKCTYA9S5Uy3EnHv+cZU7zdwZrzMi3t055zvf73zvK9iFT3aBgaKQmodfD2b+rrWU+4BgZUViqbPhh/deASQUTY4L0FYuwJUnMGGZRnvu/TxIKDozJJCe7QL+gzhsmc297joLqY4lDpFqwRdAPZA9FxXxkxXRh5fDLd8cmSxk/3CyTQUw7ndR22hP9xgTVSOJfmwBcWV9IY5vvUDaGHAhFHW2SICzsSwZ4ij1KnIgjtUFgAAiuQlTEqSY2zTQljaN11WxZAREfymu3Tomgn7NHLfZEARAobYRDP7imvxOdzfOh0aSYyK4lAvdtiW5Sih4boWNy6HY1DFhxUevVSVC+AjEFES+a2BVgJOAtAp4CkA9BdessPG4KjozCEhfmRCmFFQHxf5JjRtK1AcgkFgyGxOOorrY7IEM2bFcs/okZO2tl4x+D0FdmRBcFUg9waG8i+QXgYxpqJdW15FJ96wmOn1CU10QURcJHHf3fd3lZJAqUiPZlkHcsbqMe01DyT2zvcZq7kM24hPoANR5beO+k+7Fs0vhKCh9IK8XFCMYtszmeG18zrC1ngGxQOFdZ88rWxufMhZvtiY3SWFOpszmM+u1AGkAuY/AC+q1N+nu1vnq+Nw5av3Ko3SZ5GAmyNE/nS1LRTrBxpand70VbT9QEvy82NU0u34em25QDDod+vamRUisiJJhoRp1EyXPkpK6sF+JF6QXTqe6jXd5EGexU/MEkGcps+mKy93xyQjgqYi+5c6SAkuyub/NGW9X6k++gS/H3eXK7sov0T/6gk8p0/94ewAAAABJRU5ErkJggg=='); +} + +.guide_nav span:nth-child(2).active { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAB8UlEQVRIS72WO2gVQRSGv7+ysPeBFjYiaBqxUAQxIWjnAwJWFmksLBQULKw0haCmS5pgYWejIBqwE4wYEVLYaIJRG8FXoYI2YiG/nMtsmOzd7N69kTvd7jlnvp3/PGbFAJYGwKASYnsrsKuPD1iW9KUc1wWx/QQY7gNQhMxJGsnjV0FsTwHn1gEoQqclnS8eViC2twEfGwATmf1Kg+92SZ/CJ4eERCFV3RqRNGf7KtAE6fg2QToOpTWRQQ5X2PNc9gzJ5ensmSBVhREnaw2pkm1Y0lPbsWFI1ihtk1xhj41y2SKHBv4CP4Ffkj7YfgCcKBF7kqupkh9KOml7CHhV4dwT5BawBHwG/gD7gd3AAWALcFrSHds3gUttIT+Ao8BX4AzwEohxsRwb2d6U7HcTbAHY3BZyKgVH9+frDRDaP5I0Xxhs7wOOAceBvVlArVxRhlU9UsRflnTd9gZJIePKSvkJFY4AN+qacU/SeLxCgrOSZmzvBN6mMXQt3pV9w0fSu7VKeF7SodQLO4CNwCzwLJXrKPC4tOl3IArgtqRvZeBas+s5MAksSnqfEh7AmNAXa2r7NzCdYJ1CKZ+klync1Du5/aCkF6sg6Wv/131yX9JY10myklzvzXgPuFDcJV0nyUD93vGvaxPfRuy2vgP5JfoHdyLWGkb9msUAAAAASUVORK5CYII='); +} + +.guide_nav span.active { + background-color: #20a53a; + color: #fff; +} + +.guide_nav span { + width: 250px; + display: inline-block; + font-size: 16px; + background-color: #f3f3f3; + cursor: pointer; + color: #666; + background-repeat: no-repeat; + background-position: 65px center; + padding-left: 25px; +} + +.ssl_applay_info .paymethod { + width: 240px; +} + +.ssl_applay_info .paymethod .pay-wx { + text-align: center; +} + +.ssl_applay_info .lib-price-box .lib-price-name { + font-size: 18px; +} + +.ssl_applay_info .lib-price-box .price-txt { + font-size: 20px; +} + +.ssl_applay_info .lib-price-box .price-txt b { + font-size: 28px; +} + +.ssl_order_check .lib-price-detailed, +.ssl_applay_info .lib-price-detailed { + margin: 0 auto; + margin-top: 50px; + width: 500px; + border-top: 1px solid #dedede; + border-bottom: 1px solid #dedede; +} + +.ssl_order_check .lib-price-detailed .info, +.ssl_applay_info .lib-price-detailed .info { + overflow: hidden; + display: flex; +} + +.ssl_order_check .lib-price-detailed .info span, +.ssl_applay_info .lib-price-detailed .info span { + display: inline-block; + padding: 12px 15px; + font-weight: 500; + color: #555; + font-size: 14px; +} + +.ssl_applay_info .lib-price-detailed .info span:nth-child(2) { + flex: 2; +} + +.ssl_order_check .order_paly_success { + font-size: 24px; +} + +.ssl_applay_info .lib-prompt span { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAADMElEQVR4Xu1abU7bQBB9YxupUo3qcoHSE5QI+N1wg9yg9AQNJ6A9AekNwg1yA+jvtEo4QeEC1AgjVYq9g9bUNA0f3vFqqVE2v9/OvHnzdrO7XsKS/2jJ64cXwDtgyRXwU8DGAMkECTh+VxuD8rO08/u0FjcHSCYv1sHRm9oxlJ2kHaS1uAcAjRygCw/yeB9EfZPEDKQczjqmIujig2Llp0nsEsM8UFH2pYkQYgF08ZTHR0S0YUwQgCL1Md28GpqMWRvHn0G0b4KtMMw85SjbkYogFmDtezwA6JOEnMaqcPbWmQNuyfDX863MyJXVEJEApfWL1V+3qgMXBB4qxuhRQaL81LT4Kk65BuTR+mNxA0KPQbsEvKpwKrx8LXGBTIBx3A2Ijv6SkisudU4dftGRinkn3c6O68Y1c8CCANJkpqQkuMSSk5UDvABCu0k6a4r1DvBT4N+FWTot/RpgOtc0zna+SXKZYm05eQeYKl06YO6QwsAFh7MN6Q5Pks8Eu3hwkmy5dXyRA25FyKNdFeXD/138/LY5aMhJLIBJV54TxgvwnLrlgqvYAWvj+IAJossQF8Tvi0mM6fl2tifJJxJg8T9XkuipsE+6E3yqoiR5nAqgiegLCAb1CKi/sZUwt8QycEbgkdMrMUuOrRwuWgNaWYElKS+AVMDytrYI3yMsvrVpK9yUk8gBC4ch0dceqdCmeM2JipUJAYke4/QwZHv2Ni1KgrPlJHOA5f2bpDBTrBfAsineAaZWKy9DLNWW5DLF2nLyDjBV2jvAT4G7awCwbJ/H7z6QSIl4oAiPf4939EgqYHSZqV/tAm92gg4fSNzcB6zqdz4fJGtHk0dS89tbQa7D863LXQG+yXcBJFTExwSqfx43x0SR2ks3rwYm5JIfL/sBBwcm2ArD4BMOs67keYweK/obrJL9eSukizF2guSQIn4mBxyq8LIvLb6xAPNCII83AqD7ULdUwCmCYiQ9OpfHbhX2AkXlKe++nwKOEWXTJoVX8Ro5QGLNtmO9AG3vkGt+3gGuFW57fO+AtnfINT/vANcKtz2+d0DbO+San3eAa4XbHt87oO0dcs1v6R1wDSbCMF8UwqNRAAAAAElFTkSuQmCC) + no-repeat; + display: block; + margin: 0 auto; + margin-top: 25px; + padding-left: 55px; + width: 200px; + height: 35px; + background-position: 25px 0px; + background-size: 40px; + text-align: center; + line-height: 35px; + font-size: 16px; +} + +.ssl_order_check { + padding: 20px; +} + +.ssl_order_check .order_paly_success { + font-size: 25px; + text-align: center; + padding: 15px 0 0; + color: #20a53a; +} + +.lib-price-button button { + padding: 8px 45px; + margin: 0 15px; +} + +.lib-price-button { + margin: 25px 179px 45px; +} + +.ssl_order_check .lib-price-detailed { + margin-bottom: 40px; + width: 520px; + font-size: 15px; +} + +.ssl_order_check .lib-ssl-parsing { + margin: 20px 0 5px 0; +} + +.ssl_order_check .lib-price-button { + margin: 0px 0 0 65px; +} + +.paymethod { + margin: 0 auto; + width: 200px; +} + +#libPay-pay .paymethod .pay-wx canvas { + width: 160px; + height: 160px; +} + +.paymethod .pay-wx canvas { + width: 240px; + height: 240px; + border: #ddd 1px solid; + margin: 6px auto; + padding: 5px; + border-bottom-color: #00c800; +} + +/* END */ + +/* 完成支付 */ + +.order_pay_title { + text-align: center; + padding-top: 100px; + font-size: 22px; + position: relative; + background-image: url(/static/img/tip_suu.png); + background-position: top center; + background-size: 80px; + background-repeat: no-repeat; + width: 100%; + margin-top: 35px; + padding-bottom: 27px; +} + +.order_pay_money { + margin-top: 10px; + text-align: center; + font-size: 25px; +} + +.order_pay_btn { + text-align: center; + text-align: center; + display: block; + height: 100%; + padding: 10px; +} + +.order_pay_tips { + text-align: center; + font-size: 13px; + margin-bottom: 15px; +} + +.order_pay_btn a { + padding: 10px 20px; + color: #fff; + font-size: 13px; + border-radius: 2px; +} + +.order_pay_btn a:nth-child(1), +.order_pay_btn a:nth-child(2) { + border: 1px solid #20a53a; + background-color: #20a53a; + margin-right: 20px; +} + +.order_pay_btn a:nth-child(1):hover, +.order_pay_btn a:nth-child(2):hover { + color: #fff; + background-color: #10952a; + border-color: #398439; +} + +.order_pay_btn a[data-type='clear'] { + color: #555; + background-color: #fff; + border: 1px solid #ccc; +} + +.order_pay_btn a[data-type='clear']:hover { + color: #fff; + background-color: #10952a; + border-color: #398439; +} + +.order_pay_btn a:active, +.order_pay_btn a:focus { + outline: none; +} + +.ssl_order_check .lib-price-detailed { + margin-bottom: 30px; +} + +.ssl_order_check .help_info { + margin-top: 25px; + text-align: center; + font-size: 15px; +} +/* END */ + +/* 表单下开关行 */ +.line .line-switch { + display: flex; + align-items: center; + min-height: 32px; +} + +.line .line-switch .btswitch-btn { + margin-bottom: 0; +} +/* end */ + +/*证书解决方案样式*/ +.bt_ssl_suggest { + position: relative; + margin-left: 5px; + cursor: pointer; + color: #20a53a; +} + +.suggest_content { + display: none; + position: fixed; + /*left: -267px;*/ + top: 0; + left: 0; + width: 210px; + background: #fff; + box-shadow: 0 2px 5px 1px rgb(54 58 80 / 20%); + padding: 8px 15px; + border-radius: 3px; + cursor: auto; + z-index: 10; +} +.suggest_content:after { + content: ''; + width: 10px; + height: 10px; + border-left: 1px solid #e5e5e5; + border-bottom: 1px solid #e5e5e5; + border-top: 10px solid #fff; + transform: rotate(136deg); + -webkit-transform: rotate(136deg); + position: absolute; + top: -5px; + left: 160px; +} +.suggest_content li { + display: inline-block; + width: 190px; + font-size: 14px; + color: #20a53a; + font-weight: 700; +} +.suggest_content li:nth-child(2):after { + content: ''; + display: inline-block; + position: absolute; + top: 10px; + left: 0; + bottom: 10px; + border-right: 1px solid #e7eaef; +} +.suggest_content p { + font-size: 12px; + font-weight: normal; + color: #333; + margin-top: 8px; +} +.suggest_content div { + margin-top: 8px; + font-size: 12px; + font-weight: initial; +} + +/*证书解决方案样式 end*/ + +/* 人工服务支付成功界面*/ +.bt_business_tab.order_service_check { + padding: 20px; +} +.prder_pay_service_left { + width: 310px; + display: inline-block; + margin-top: 50px; + margin-left: 40px; +} +.order_service_check .order_pay_title { + background-size: 40px; + background-position: top left; + padding: 6px 0 25px 60px; + margin: 0px; + text-align: inherit; +} +.order_service_check .lib-price-detailed { + font-size: 14px; + line-height: 25px; +} +.order_service_check .lib-price-detailed .info { + display: inline-block; +} +.order_service_check .lib-price-detailed .info-line { + height: 10px; + width: 1px; + background-color: #bbb; + display: inline-block; + margin: 0 10px; +} +.prder_pay_service_right { + display: inline-block; + vertical-align: top; + width: 250px; + text-align: center; + margin-top: 15px; +} +.prder_pay_service_right .order_wx_qcode { + width: 140px; + height: 140px; + border: 1px solid #20a53a; + display: inline-block; + margin-top: 25px; + padding: 10px; +} + +.service_consult { + text-align: center; +} +.service_consult_title { + color: white; + font-size: 16px; + background: rgba(32, 165, 58, 0.1); + line-height: 46px; + height: 46px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.prder_pay_service_right .order_wx_qcode, +.service_consult .contact_consult { + position: relative; +} +.prder_pay_service_right .order_wx_qcode i, +.service_consult .contact_consult i { + position: absolute; + top: 50%; + left: 50%; + margin-left: -12.5px; + margin-top: -12.5px; +} +.contact_consult img, +.contact_consult_qcode img, +#wx_qcode img { + border: 1px solid #20a53a; + width: 140px; +} +/* 人工服务支付成功界面 end*/ + +/* 证书资料页面 */ + +.perfect_ssl_info { + padding: 25px 30px 45px 30px; +} + +.perfect_ssl_info .ssl_title { + font-size: 14px; + color: #20a53a; +} + +.perfect_ssl_info .line .tname { + height: 35px; + line-height: 35px; +} + +.perfect_ssl_info .info-r { + min-height: 35px; + line-height: 35px; + margin-bottom: 0; +} + +.perfect_ssl_info .info-r input[type='text'] { + height: 32px; + width: 400px; +} + +.perfect_ssl_info .info-r input:active, +.perfect_ssl_info .info-r input:focus { + outline: none; + border-color: #20a53a; + box-shadow: none; +} + +.perfect_ssl_info label { + /*margin-right: 7px;*/ + margin-bottom: 0; + cursor: pointer; + font-weight: 500; +} + +.perfect_ssl_info label input { + vertical-align: middle; + margin-top: 0; + width: 16px; + height: 16px; +} + +.perfect_ssl_info label span { + vertical-align: middle; + font-weight: 500; +} + +.check_model_line .info-r { + flex-wrap: wrap; +} + +.check_model_line .info-r .check_method_item { + display: inline-flex; + align-items: center; + min-height: 3.5rem; + line-height: 1.4; + cursor: pointer; +} + +.check_model_line .info-r input { + margin: 0; + margin-right: 6px; +} + +.perfect_ssl_info .testVerify { + display: inline-flex; + align-items: center; + margin-left: 6px; +} + +.perfect_ssl_info .testVerify::before { + content: '['; +} + +.perfect_ssl_info .testVerify::after { + content: ']'; +} + +.perfect_ssl_info label i { + font-style: inherit; + font-weight: lighter; +} + +.perfect_ssl_info .loading-ico { + margin-right: 2px; + height: 12px; +} + +.perfect_ssl_info label .bt-ico-ask { + margin-left: 2px; +} + +.perfect_ssl_info .next-plan { + padding: 8px 30px; +} + +.ssl_help_info { + padding-left: 15px; +} + +/* #config_server_table .table>tbody>tr>td, +#config_server_table .table>tbody>tr>th, +#config_server_table .table>thead>tr>td, +#config_server_table .table>thead>tr>th { + padding: 10px 8px; + line-height: 22px; +} */ + +/*禁用拖拉*/ + +textarea { + resize: none; +} + +/*插件下载进度*/ + +.soft_download_speed .layui-layer-content { + padding: 0 !important; +} + +.soft_download_speed .waiting-down-list .done-progress { + height: 5px; +} + +.soft_download_speed .waiting-down-list li .down-progress { + height: 5px; +} +/*end*/ + +/* 商业证书 */ +.dynamic_head_box .bt_checkbox_groups { + display: inline-block; + height: 16px; + width: 16px; + border-radius: 1px; + cursor: pointer; + border: 1px solid #c2c2c2; + position: relative; + text-align: center; + line-height: 20px; + margin: 0; + transition: all 200ms; + vertical-align: top; +} + +.dynamic_head_box .bt_checkbox_groups.active { + border: none; + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: 400; + line-height: 1; + -webkit-font-smoothing: antialiased; + background: #5fb878; + color: #fff; +} + +.dynamic_head_box .bt_checkbox_groups.active:after { + content: '\e013'; + font-size: 12px; + transform: scale(0.85); + position: absolute; + left: 2px; + top: 2px; +} + +.dynamic_head_box .box-group .bt_checkbox_groups { + vertical-align: sub; +} +/* end */ + +/* 需求反馈 */ +.icon-demand { + width: 16px; + height: 16px; + background: url(/static/img/feedback/demand.svg) no-repeat; + background-size: cover; +} +.nps_survey_banner { + position: relative; + background: url(/static/img/feedback/QA_banner.png) no-repeat; + width: 100%; + background-size: 100%; + height: 92px; + margin-top: -1px; +} +.nps_survey_banner i { + background-image: url(/static/images/svg/logo-white.svg); + background-repeat: no-repeat; + background-size: 18px; + display: inline-block; + width: 20px; + height: 20px; +} +.nps_survey_banner .Ftitle { + position: absolute; + left: 32px; + top: 16px; + font-size: 17px; + color: #fff; +} +.feedBtn { + margin-left: 176px; +} +/* end */ + +/* 安全风险项提醒 */ +.forbid { + margin-bottom: 20px; +} +.forbid_title { + display: flex; + align-items: center; + justify-content: space-between; +} +.forbid_content { + color: rgb(153, 153, 153); + font-size: 12px; + padding: 2px 0 0 2px; +} +.total_tips { + border: 1px solid #fb7d00; + border-radius: 8px; + color: #fb7d00; + cursor: pointer; + display: inline-block; + font-family: arial; + font-size: 12px; + font-style: normal; + height: 14px; + line-height: 14px; + margin-right: 5px; + text-align: center; + width: 14px; +} +.button-link { + background-color: #20a53a; + color: white; + float: right; + margin: 15px 0; + width: 90px; + height: 30px; + border-radius: 2px; + border: none; +} +.confirm_button { + position: absolute; + right: 20px; + display: flex; + align-items: center; + bottom: 10px; +} + +.forbid .daily_details_mask { + position: absolute; + box-shadow: 5px 5px 12px rgba(0, 0, 0, 0.15); + z-index: 9999; +} +.forbid .daily_details_mask:after { + content: ''; + position: absolute; + top: -5px; + left: 214px; + width: 10px; + height: 10px; + border-left: 1px solid #e5e5e5; + border-bottom: 1px solid #e5e5e5; + border-top: 10px solid #f6f6f6; + transform: rotate(136deg); + -webkit-transform: rotate(136deg); +} +.forbid .daily_details_mask tr td { + border-right: 1px solid #ddd; +} +.forbid .daliy_details_table { + max-height: 250px; + overflow-y: auto; +} +.warning_scan_icon { + display: inline-block; + background: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQuMDAwMDAwIiBoZWlnaHQ9IjE0LjAwMDAwMCIgdmlld0JveD0iMCAwIDE0IDE0IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KCTxkZXNjPgoJCQlDcmVhdGVkIHdpdGggUGl4c28uCgk8L2Rlc2M+Cgk8cGF0aCBpZD0icGF0aCIgZD0iTTEzLjUwNTkgMTEuNDczN0wxMS4yMjMxIDExLjQ3MzdDMTAuOTUwMiAxMS40NzM3IDEwLjcyOSAxMS4yNDQzIDEwLjcyOSAxMC45NjEzTDEwLjcyMzggNC45MjY3N0MxMC42OTI2IDIuODE2MTIgOS4wMzkwNiAxLjIwNTM4IDcgMS4xOTQ2M0M0Ljk2MDk0IDEuMjA1MzggMy4zMDczNyAyLjgxNjEyIDMuMjc0NTQgNC45MjY3N0wzLjI3MSAxMC4xNjIxQzMuMjcxIDEwLjE2MjEgMy45MDg2OSAxMi40NDQ4IDUuNDI3NDkgMTIuMTc5NkM1LjU0MzMzIDExLjc4MDEgNS45NTExNyAxMS42Mjk2IDYuMjEzNzUgMTEuNjI5Nkw3LjgxMzg0IDExLjYyOTZDOC4zNTk4NiAxMS42Mjk2IDguODAyMjUgMTIuMDg4MiA4LjgwMjI1IDEyLjY1NDRMOC44MDIyNSAxMi45NzUxQzguODAyMjUgMTMuNTQxMyA4LjM1OTg2IDE0IDcuODEzODQgMTRMNi4zNDE2NyAxNEM1LjkyMzQ2IDE0IDUuNTY3NSAxMy43Mjc3IDUuNDIyMzYgMTMuMzQ2QzUuMzk4MTkgMTMuMzMxNyA1LjIwMTE3IDEzLjM0OTYgNS4wMDc2OSAxMy4zMDY2QzMuNTA5NTIgMTIuNzUxMiAyLjg1MjkxIDExLjQ2NjUgMi44NTI5MSAxMS40NjY1QzIuODI2OSAxMS40NzE5IDIuODAxMDMgMTEuNDc1NSAyLjc3NTE1IDExLjQ3NTVMMC40OTQxNDEgMTEuNDc1NUMwLjIyMTE5MSAxMS40NzU1IDAgMTEuMjQ2MSAwIDEwLjk2M0wwIDUuNzA5NzRDMCA1LjQyNjY1IDAuMjIxMTkxIDUuMTk3MzEgMC40OTQxNDEgNS4xOTczMUwyLjEyNTM3IDUuMTk3MzFDMi4xMjUzNyA0Ljc2MzcyIDIuMTIzNjYgNC45MjQ5NyAyLjEyMzY2IDQuOTI0OTdDMi4xODIzNyAwLjAxNzQ3MTMgNi45MTg4MiAwLjAwMTM0Mjc3IDYuOTE4ODIgMC4wMDEzNDI3N0M2Ljk1Njc5IC0wLjAwMDQ1MDEzNCA3LjA0NDkyIC0wLjAwMDQ1MDEzNCA3LjA4MTE4IDAuMDAxMzQyNzdDNy4wODExOCAwLjAwMTM0Mjc3IDExLjgxNzYgMC4wMTkyNjQyIDExLjg3NjMgNC45MjQ5N0MxMS44NzYzIDQuOTI0OTcgMTEuODc2MyA0Ljc2MTkyIDExLjg3NDYgNS4xOTczMUwxMy41MDU5IDUuMTk3MzFDMTMuNzc4OCA1LjE5NzMxIDE0IDUuNDI2NjUgMTQgNS43MDk3NEwxNCAxMC45NjEzQzE0IDExLjI0NDMgMTMuNzc4OCAxMS40NzM3IDEzLjUwNTkgMTEuNDczN1pNMi4yMjcyOSA2LjY5ODc3QzIuMjI3MjkgNi41MjQ5NyAyLjEzNzQ1IDYuMzgzNDMgMi4wMjY4NiA2LjM4MzQzTDEuMTgzNzIgNi4zODM0M0MxLjA3MzEyIDYuMzgzNDMgMC45ODMxNTQgNi41MjQ5NyAwLjk4MzE1NCA2LjY5ODc3TDAuOTgzMTU0IDkuOTMyODFDMC45ODMxNTQgMTAuMTA4NCAxLjA3MzEyIDEwLjI0ODIgMS4xODM3MiAxMC4yNDgyTDIuMDI2ODYgMTAuMjQ4MkMyLjEzNzQ1IDEwLjI0ODIgMi4yMjcyOSAxMC4xMDY2IDIuMjI3MjkgOS45MzI4MUwyLjIyNzI5IDYuNjk4NzdaTTEzLjAxNjggNi42OTg3N0MxMy4wMTY4IDYuNTI0OTcgMTIuOTI2OSA2LjM4MzQzIDEyLjgxNjMgNi4zODM0M0wxMS45NzQ5IDYuMzgzNDNDMTEuODY0MyA2LjM4MzQzIDExLjc3MjcgNi41MjQ5NyAxMS43NzI3IDYuNjk4NzdMMTEuNzcyNyA5LjkzMjgxQzExLjc3MjcgMTAuMTA4NCAxMS44NjQzIDEwLjI0ODIgMTEuOTc0OSAxMC4yNDgyTDEyLjgxNjMgMTAuMjQ4MkMxMi45MjY5IDEwLjI0ODIgMTMuMDE2OCAxMC4xMDY2IDEzLjAxNjggOS45MzI4MUwxMy4wMTY4IDYuNjk4NzdaIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiMyMEE1M0EiLz4KCTxkZWZzLz4KPC9zdmc+Cg=='); + background-size: cover; + background-repeat: no-repeat; + background-position: center; + height: 14px; + width: 14px; + margin-right: 4px; + margin-top: 2px; +} +#auto_repair .divtable .table thead th { + color: #333; + font-weight: 500; +} +#auto_repair .divtable .table { + color: #666; +} +.result_span { + max-width: 240px; + max-height: 70px; + overflow: auto; + display: block; +} +.result_span::-webkit-scrollbar { + height: 14px; + width: 5px; +} +/* 滚动条轨道 */ +.result_span::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); + border-radius: 10px; + background: #fff; +} +.result_span::-webkit-scrollbar-thumb { + border-radius: 10px; + background: #9090908a; +} +/* 安全风险项提醒 end */ + +/* New 支付界面 */ +.libPay-view.layui-layer-page .layui-layer-content { + overflow: visible; +} + +.libPay-view .layui-layer-setwin { + z-index: 999; +} + +.libPay-content-box { + display: flex; + height: 100%; + overflow: hidden; +} + +.libPay-content-box .libPay-product-content { + flex: 1; + overflow: hidden; +} + +.libPay-product-introduce { + position: relative; + width: 240px; + height: 100%; + padding: 40px 8px 40px 22px; + background-color: #fff5e1; +} + +.libPay-product-introduce:before { + content: ''; + background-image: url('../images/libPay-pro-bg-logo.png'); + width: 144px; + height: 110px; + position: absolute; + left: 50%; + bottom: 30px; + margin-left: -72px; +} + +.pro-left-introduce .pro-left-title div { + font-size: 20px; + margin-bottom: 10px; +} +.pro-left-introduce.plugin .pro-left-title div, +.pro-left-introduce.ver .pro-left-title div { + font-size: 23px; + width: 165px; +} +.pro-left-introduce .pro-left-title div span, +.pro-left-footer-recom span { + color: #e8a833; +} +.pro-left-introduce.ltd .pro-left-title div span, +.pro-left-introduce.ops .pro-left-title div span { + background-image: linear-gradient(to right, #e8a833, #ebc874, #ae7222); +} +.pro-left-introduce .pro-left-title > span { + color: #888888; + width: 156px; + height: 34px; + display: inherit; +} +.pro-left-introduce .pro-left-list { + margin-top: 38px; + font-size: 15px; + color: #666; +} +.pro-left-introduce .pro-left-list .pro-left-list-title { + margin-bottom: 15px; +} +.pro-left-introduce .pro-left-list .pro-left-list-content { + position: absolute; + font-size: 13px; + z-index: 1; +} +.pro-left-introduce .pro-left-list .pro-left-list-content .pro-introduce { + padding: 10px 0; +} +.pro-left-introduce .pro-left-list .pro-left-list-content .pro-introduce span.glyphicon.glyphicon-ok { + color: #feaa04; + margin-right: 8px; +} + +.pro-price-herf { + display: flex; + justify-content: center; + padding-right: 18px; +} +.pro-left-introduce .pro-price-herf a { + font-size: 16px; + text-align: center; + border: 2px solid #ffb95a; + border-radius: 5px; + padding: 6px 16px; + position: absolute; + bottom: 50px; + cursor: pointer; + background: linear-gradient(to bottom, #e8aa36, #e9c571, #af7323); + -webkit-background-clip: text; + color: transparent; + z-index: 1; +} +.pro.pro-left-introduce .pro-price-herf a { + background: none; + color: #ff8f00; + border: 2px solid #ff8f00; +} + +/* 支付菜单 */ +.libPay-menu { + background: #efefef; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + align-content: center; + align-items: center; +} +.libPay-menu .libPay-menu-type { + position: relative; + min-width: 160px; + height: 75px; + padding: 0 12px; + font-size: 12px; + text-align: center; + cursor: pointer; +} +.libPay-menu .libPay-menu-type.active { + background: #fff; + z-index: 99; +} +.libPay-menu-type p:first-child { + padding-top: 17px; + font-size: 16px; + font-weight: bold; +} +.libPay-menu-type p:last-child { + margin-top: 7px; + color: #777; +} +.libPay-menu .libPay-menu-type.lib_pro .glyphicon { + color: #ffa904; +} +.libPay-menu .libPay-menu-type.lib_pro.active > p span { + color: #ff8f00; +} +.libPay-menu .libPay-menu-type.lib_pro.active > p span { + color: #ff8f00; +} +/* end */ + +/* 支付主体 */ +.libPay-content-box .libPay-layer-item { + display: none; +} +.libPay-content-box .libPay-layer-item.aShow { + display: block; + width: 100%; +} +.libPay-line-item.proTname { + margin: 10px 0; + font-size: 15px; +} + +.libPay-line-item.proP { + position: relative; + width: 100%; + overflow-x: hidden; + overflow-y: hidden; +} + +.libPay-line-item .pay-pro-cycle { + display: flex; + position: relative; + width: 9999px; + padding-top: 8px; + transition: all 500ms; +} + +.libPay-line-item.proP li.pay-cycle-btns { + min-width: 164px; + height: 112px; + margin-right: 20px; + text-align: center; + border-radius: 4px; + padding: 16px; + font-style: normal; + border: 2px solid #eee; + position: relative; + cursor: pointer; +} + +.libPay-line-item.proP li.pay-cycle-btns:last-child { + margin-right: 0; +} + +.libPay-line-item.proP li.pay-cycle-btns.active, +.libPay-line-item.proN .btn_nums.active { + color: #333; + border: #b87100 2px solid; + background: #fff9f1; +} + +.libPay-line-item li.active, +.libPay-line-item li.active:hover { + z-index: 9999; + box-sizing: border-box; +} + +.libPay-line-item.proP .pay-head-price { + padding-bottom: 5px; + border-bottom: 1px dashed #ccc; +} + +.libPay-line-item.proP .pay-head-price .new-price { + display: flex; + align-items: baseline; + justify-content: center; + font-size: 14px; + color: #999; +} + +.libPay-line-item.proP .pay-head-price .new-price .cycle { + margin-left: 4px; +} + +.libPay-line-item.proP .pay-head-price p { + text-decoration: line-through; + color: #bdb8b8; +} + +.libPay-line-item.proP .libPrice { + display: inline-block; + color: #ff9600; + font-size: 20px; +} + +.libPay-line-item.proP .pay-cycle-btns.active .libPrice { + color: #ff4d00; +} + +.libPay-line-item.proP .libPrice i { + font-size: 18px; + font-style: normal; + font-weight: bold; +} + +.libPay-line-item.proP .pay-foo-price { + color: #999; + margin-top: 10px; +} + +.libPay-line-item.proP .pay-cycle-btns em { + position: absolute; + left: -7px; + top: -10px; + background-image: linear-gradient(to bottom, #f8d68c, #ebb261); + border-radius: 5px; + color: #7e4c0d; + transform: scale(0.9, 0.9); + font-style: normal; + padding: 5px; +} + +.libPay-content-box.pro .libPay-line-item.proP li.pay-cycle-btns.active:before { + content: ''; + width: 38px; + height: 38px; + position: absolute; + right: -2px; + bottom: -2px; + background: url('../images/svg/lower-select-pro.svg') no-repeat right bottom; + background-size: 38px; + border-radius: inherit; +} + +.libPay-line-item.proP .switch-cycle-left, +.libPay-line-item.proP .switch-cycle-right { + height: 112px; + width: 30px; + display: flex; + justify-content: center; + align-items: center; + background: #f8f8f8; + cursor: pointer; + position: absolute; + top: 0; + color: #bbb; + z-index: 9999999; + margin-top: 8px; +} + +.libPay-line-item.proP .switch-cycle-left { + left: 0; +} + +.libPay-line-item.proP .switch-cycle-right { + right: 0; +} +.libPay-line-item.proP .switch-cycle-left:hover, +.libPay-line-item.proP .switch-cycle-right:hover { + background-color: #efefef; +} + +.auth-num{ + display: flex; +} + +.pay-auth-item { + position: relative; + min-width: 93px; + color: rgba(51, 51, 51, 1); + padding: 8px; + border: 2px solid #eee; + cursor: pointer; + margin-right: 10px; + text-align: center; + border-radius: 4px; + font-size: 14px; +} +.pay-auth-item:last-child { + margin-right: p; +} +.pay-auth-item.active { + color: #333; + border: #b87100 2px solid; + background: #fff9f1; +} + +.pay-auth-item.active:before { + content: ''; + width: 38px; + height: 38px; + position: absolute; + right: -2px; + bottom: -2px; + background: url(../images/svg/lower-select-pro.svg) no-repeat right bottom; + background-size: 38px; + border-radius: inherit; + background-size: 22px 22px; +} + +.pay-auth-item em { + position: absolute; + right: -4px; + top: -13px; + background-image: linear-gradient(to bottom, #f8d68c, #ebb261); + border-radius: 1px 11px; + color: #7e4c0d; + transform: scale(0.9, 0.9); + font-style: normal; + padding: 4px; + font-size: 11px; +} + +.libPay-mode { + position: relative; + display: flex; + height: 220px; + margin-top: 24px; + border: 2px solid #eee; + border-radius: 4px; +} + +.libPay-qcode-left { + width: 144px; +} + +.libPay-qcode-right { + flex: 1; + display: flex; + flex-direction: column; + padding: 16px 24px; +} + +.pay-radio-type { + display: flex; + flex-direction: column; + height: 100%; +} + +.libPay-qcode-left .pay-type-btn { + border-right: 1px solid #eee; + border-bottom: 1px solid #eee; +} + +.pay-type-other { + flex: 1; + border-right: 1px solid #eee; +} + +.libPay-qcode-left .pay-type-btn.active { + position: relative; + border-right: 1px solid #fff; + z-index: 12; +} + +.libPay-qcode-left .pay-type-label { + display: block; + width: 100%; + height: 40px; + line-height: 40px; + margin: 0; + padding-left: 16px; + cursor: pointer; +} + +.libPay-qcode-left .pay-radio-tit { + font-size: 13px; + font-weight: 500; +} + +.libPay-qcode-left .pay-type-btn.active .pay-radio-tit { + color: #ff8f00; +} + +.libPay-content-box.pro .libPay-qcode-right a.btlink { + color: #ff8f00; +} + +.libPay-qcode-right .libPay-qcode-item { + flex: 1; + overflow: hidden; +} + +.libPay-qcode-right .libPay-qcode-right-head { + display: flex; + justify-content: space-between; +} + +.libPay-qcode-right .userinfo { + display: flex; + font-size: 14px; + margin-bottom: 6px; +} + +.libPay-qcode-right .userinfo .info_value { + margin-left: 4px; + margin-right: 8px; + font-weight: 600; + color: #555; +} + +.libPay-qcode-right-head .endTime { + font-size: 14px; +} + +.libPay-qcode-right-head .endTime span { + font-weight: 600; + color: #555; +} + +.libPay-qcode-right .pay-box { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; +} + +.libPay-qcode-right .pay-box .pay-price { + display: flex; + align-items: baseline; +} + +.libPay-qcode-right .pay-price .price-label { + margin-right: 4px; + font-size: 14px; +} + +.libPay-qcode-right .pay-price .libPayTotal { + font-size: 24px; + font-style: normal; + font-weight: bold; + color: #ff7300; +} + +.libPay-qcode-right .pay-price .libPayCycle { + margin-left: 4px; +} + +.libPay-qcode-right .pay-price .libPayCycle i { + font-style: normal; + margin-right: 7px; +} + +.libPay-qcode-right .pay-price .org_price { + margin-left: 4px; + color: #aaa; + font-size: 12px; + font-weight: normal; + text-decoration: line-through; +} + +.libPay-qcode-item .pay-btn-group { + width: 100%; + margin-bottom: 16px; +} + +.libPay-qcode-item .btn-pay { + background-color: #ff8f00; + border-color: #ff8f00; +} + +.libPay-qcode-item .btn-pay:hover { + background-color: #e78303; + border-color: #e78303; +} + +.libPay-qcode-item .btn { + margin: 16px auto 0; + padding: 6px 32px; +} + +.libPay-qcode-item .li-tit { + width: 100%; + margin-bottom: 10px; + font-size: 14px; +} +.pay-subscription { + display: flex; + align-items: baseline; + margin-top: 6px; +} +.pay-subscription input { + position: relative; + top: 2px; + margin-right: 8px; +} +.pay-subscription .org-price { + margin-left: 4px; + color: #aaa; + font-size: 12px; + font-weight: normal; + text-decoration: line-through; +} +.pay-subscription .first-price { + display: inline-flex; + align-items: baseline; + margin-left: 8px; + margin-right: 4px; + font-size: 24px; + font-style: normal; + font-weight: bold; + color: #ff7300; +} +.pay-subscription .first-price .symbol { + margin-right: 2px; + font-size: 18px; +} +.pay-subscription .bt-ico-ask { + margin-left: 12px; +} +/* end */ +.tooTool-links { + position: absolute; + right: 25px; + bottom: 20px; + font-size: 13px; + color: #777; +} + +/* end */ + +/* 网站名称悬浮快 */ +.web_name { + position: relative; +} +.web_name_hover { + display: inline-flex; + align-items: center; + position: absolute; + color: #666; + flex-direction: column; + /* top:-80px; */ + border-radius: 4px; + z-index: 99999999; + border: 1px solid #dcdfe6; + box-shadow: 0px 3px 16px 0px rgba(153, 153, 153, 0.42); + padding: 8px 12px; + background: #fff; + transition: all 0.2s linear; + /* // min-width: 120px; */ + white-space: nowrap; +} +.web_name_hover:after { + content: ''; + position: absolute; + width: 0; + bottom: -7px; + height: 0; + left: 86px; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-top: 8px solid white; + z-index: 999; + transition: all 0.2s linear; +} +.web_name_title { + padding: 6px 0 6px 6px; + width: 100%; + max-width: 300px; +} +.web_name_text { + word-break: break-all; + max-width: 160px; + white-space: normal; +} +.web_name_setting { + display: flex; + border-top: 1px solid #dcdfe6; + align-items: center; + justify-content: center; + width: 100%; + min-width: 180px; + padding-top: 6px; +} +.web_name_copy, +.web_name_rename { + width: 50%; + justify-content: center; + text-align: center; +} +.web_name_copy { + border-right: 1px solid #dcdfe6; +} +.web_name_rename_icon { + background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjk3Nzc0NjE2Nzg4IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjY2NTciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxwYXRoIGQ9Ik01MzkuNzUgNzA2LjI1aC0zMzNjLTE1LjMyIDAtMjcuNzUtMTIuNDMtMjcuNzUtMjcuNzV2LTMzM2MwLTE1LjMyIDEyLjQzLTI3Ljc1IDI3Ljc1LTI3Ljc1aDMzM2MxNS4zMiAwIDI3Ljc1IDEyLjQzIDI3Ljc1IDI3Ljc1cy0xMi40MyAyNy43NS0yNy43NSAyNy43NUgyMzQuNXYyNzcuNWgzMDUuMjVjMTUuMzIgMCAyNy43NSAxMi40MyAyNy43NSAyNy43NXMtMTIuNDMgMjcuNzUtMjcuNzUgMjcuNzV6IG0tMjIyLTIyMmMtMTUuMzIgMC0yNy43NSAxMi40My0yNy43NSAyNy43NXMxMi40MyAyNy43NSAyNy43NSAyNy43NWgxNjYuNWMxNS4zMiAwIDI3Ljc1LTEyLjQzIDI3Ljc1LTI3Ljc1cy0xMi40My0yNy43NS0yNy43NS0yNy43NWgtMTY2LjV6IG00NDQgMzMzSDY3OC41di02MTAuNWg4My4yNWMxNS4zMiAwIDI3Ljc1LTEyLjQzIDI3Ljc1LTI3Ljc1cy0xMi40My0yNy43NS0yNy43NS0yNy43NWgtMjIyYy0xNS4zMiAwLTI3Ljc1IDEyLjQzLTI3Ljc1IDI3Ljc1czEyLjQzIDI3Ljc1IDI3Ljc1IDI3Ljc1SDYyM3Y2MTAuNWgtODMuMjVjLTE1LjMyIDAtMjcuNzUgMTIuNDMtMjcuNzUgMjcuNzVzMTIuNDMgMjcuNzUgMjcuNzUgMjcuNzVoMjIyYzE1LjMyIDAgMjcuNzUtMTIuNDMgMjcuNzUtMjcuNzVzLTEyLjQzLTI3Ljc1LTI3Ljc1LTI3Ljc1eiBtNTUuNS00OTkuNWgtNTUuNWMtMTUuMzIgMC0yNy43NSAxMi40My0yNy43NSAyNy43NXMxMi40MyAyNy43NSAyNy43NSAyNy43NWgyNy43NXYyNzcuNWgtMjcuNzVjLTE1LjMyIDAtMjcuNzUgMTIuNDMtMjcuNzUgMjcuNzVzMTIuNDMgMjcuNzUgMjcuNzUgMjcuNzVoNTUuNWMxNS4zMiAwIDI3Ljc1LTEyLjQzIDI3Ljc1LTI3Ljc1di0zMzNjMC0xNS4zMi0xMi40My0yNy43NS0yNy43NS0yNy43NXoiIHAtaWQ9IjY2NTgiIGZpbGw9IiM2NjY2NjYiPjwvcGF0aD48cGF0aCBkPSJNNzYxLjc1IDg3NC4zN2gtMjIyYy0xNi4xOSAwLTI5LjM3LTEzLjE3LTI5LjM3LTI5LjM3IDAtMTYuMTkgMTMuMTctMjkuMzcgMjkuMzctMjkuMzdoODEuNjNWMjA4LjM3aC04MS42M2MtMTYuMTkgMC0yOS4zNy0xMy4xNy0yOS4zNy0yOS4zN3MxMy4xNy0yOS4zNyAyOS4zNy0yOS4zN2gyMjJjMTYuMTkgMCAyOS4zNyAxMy4xNyAyOS4zNyAyOS4zN3MtMTMuMTcgMjkuMzctMjkuMzcgMjkuMzdoLTgxLjYzdjYwNy4yN2g4MS42M2MxNi4xOSAwIDI5LjM3IDEzLjE3IDI5LjM3IDI5LjM3IDAgMTYuMTgtMTMuMTggMjkuMzYtMjkuMzcgMjkuMzZ6IG0tMjIyLTU1LjVjLTE0LjQxIDAtMjYuMTMgMTEuNzItMjYuMTMgMjYuMTMgMCAxNC40MSAxMS43MiAyNi4xMyAyNi4xMyAyNi4xM2gyMjJjMTQuNDEgMCAyNi4xMy0xMS43MiAyNi4xMy0yNi4xMyAwLTE0LjQxLTExLjcyLTI2LjEzLTI2LjEzLTI2LjEzaC04NC44N1YyMDUuMTNoODQuODdjMTQuNDEgMCAyNi4xMy0xMS43MiAyNi4xMy0yNi4xMyAwLTE0LjQxLTExLjcyLTI2LjEzLTI2LjEzLTI2LjEzaC0yMjJjLTE0LjQxIDAtMjYuMTMgMTEuNzItMjYuMTMgMjYuMTMgMCAxNC40MSAxMS43MiAyNi4xMyAyNi4xMyAyNi4xM2g4NC44N3Y2MTMuNzRoLTg0Ljg3eiBtMjc3LjUtMTExaC01NS41Yy0xNi4xOSAwLTI5LjM3LTEzLjE3LTI5LjM3LTI5LjM3IDAtMTYuMTkgMTMuMTctMjkuMzcgMjkuMzctMjkuMzdoMjYuMTNWMzc0Ljg3aC0yNi4xM2MtMTYuMTkgMC0yOS4zNy0xMy4xNy0yOS4zNy0yOS4zNyAwLTE2LjE5IDEzLjE3LTI5LjM3IDI5LjM3LTI5LjM3aDU1LjVjMTYuMTkgMCAyOS4zNyAxMy4xNyAyOS4zNyAyOS4zN3YzMzNjMCAxNi4xOS0xMy4xOCAyOS4zNy0yOS4zNyAyOS4zN3ogbS01NS41LTU1LjVjLTE0LjQxIDAtMjYuMTMgMTEuNzItMjYuMTMgMjYuMTMgMCAxNC40MSAxMS43MiAyNi4xMyAyNi4xMyAyNi4xM2g1NS41YzE0LjQxIDAgMjYuMTMtMTEuNzIgMjYuMTMtMjYuMTN2LTMzM2MwLTE0LjQxLTExLjcyLTI2LjEzLTI2LjEzLTI2LjEzaC01NS41Yy0xNC40MSAwLTI2LjEzIDExLjcyLTI2LjEzIDI2LjEzIDAgMTQuNDEgMTEuNzIgMjYuMTMgMjYuMTMgMjYuMTNoMjkuMzd2MjgwLjc0aC0yOS4zN3ogbS0yMjIgNTUuNWgtMzMzYy0xNi4xOSAwLTI5LjM3LTEzLjE3LTI5LjM3LTI5LjM3di0zMzNjMC0xNi4xOSAxMy4xNy0yOS4zNyAyOS4zNy0yOS4zN2gzMzNjMTYuMTkgMCAyOS4zNyAxMy4xNyAyOS4zNyAyOS4zNyAwIDE2LjE5LTEzLjE3IDI5LjM3LTI5LjM3IDI5LjM3SDIzNi4xMnYyNzQuMjZoMzAzLjYzYzE2LjE5IDAgMjkuMzcgMTMuMTcgMjkuMzcgMjkuMzcgMCAxNi4xOS0xMy4xOCAyOS4zNy0yOS4zNyAyOS4zN3ogbS0zMzMtMzg4LjVjLTE0LjQxIDAtMjYuMTMgMTEuNzItMjYuMTMgMjYuMTN2MzMzYzAgMTQuNDEgMTEuNzIgMjYuMTMgMjYuMTMgMjYuMTNoMzMzYzE0LjQxIDAgMjYuMTMtMTEuNzIgMjYuMTMtMjYuMTMgMC0xNC40MS0xMS43Mi0yNi4xMy0yNi4xMy0yNi4xM0gyMzIuODhWMzcxLjYzaDMwNi44N2MxNC40MSAwIDI2LjEzLTExLjcyIDI2LjEzLTI2LjEzIDAtMTQuNDEtMTEuNzItMjYuMTMtMjYuMTMtMjYuMTNoLTMzM3ogbTI3Ny41IDIyMmgtMTY2LjVjLTE2LjE5IDAtMjkuMzctMTMuMTctMjkuMzctMjkuMzcgMC0xNi4xOSAxMy4xNy0yOS4zNyAyOS4zNy0yOS4zN2gxNjYuNWMxNi4xOSAwIDI5LjM3IDEzLjE3IDI5LjM3IDI5LjM3IDAgMTYuMTktMTMuMTggMjkuMzctMjkuMzcgMjkuMzd6IG0tMTY2LjUtNTUuNWMtMTQuNDEgMC0yNi4xMyAxMS43Mi0yNi4xMyAyNi4xMyAwIDE0LjQxIDExLjcyIDI2LjEzIDI2LjEzIDI2LjEzaDE2Ni41YzE0LjQxIDAgMjYuMTMtMTEuNzIgMjYuMTMtMjYuMTMgMC0xNC40MS0xMS43Mi0yNi4xMy0yNi4xMy0yNi4xM2gtMTY2LjV6IiBwLWlkPSI2NjU5IiBmaWxsPSIjNjY2NjY2Ij48L3BhdGg+PC9zdmc+'); + display: inline-block; + width: 18px; + height: 18px; + background-repeat: no-repeat; + margin-right: 4px; +} +.web_name_copy_icon { + background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjk3Nzc0NDIyMTkxIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjU0OTgiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxwYXRoIGQ9Ik03MjAgMTkyaC01NDRBODAuMDk2IDgwLjA5NiAwIDAgMCA5NiAyNzJ2NjA4Qzk2IDkyNC4xMjggMTMxLjkwNCA5NjAgMTc2IDk2MGg1NDRjNDQuMTI4IDAgODAtMzUuODcyIDgwLTgwdi02MDhDODAwIDIyNy45MDQgNzY0LjEyOCAxOTIgNzIwIDE5MnogbTE2IDY4OGMwIDguOC03LjIgMTYtMTYgMTZoLTU0NGExNiAxNiAwIDAgMS0xNi0xNnYtNjA4YTE2IDE2IDAgMCAxIDE2LTE2aDU0NGExNiAxNiAwIDAgMSAxNiAxNnY2MDh6IiBwLWlkPSI1NDk5IiBmaWxsPSIjNjY2NjY2Ij48L3BhdGg+PHBhdGggZD0iTTg0OCA2NGgtNTQ0YTMyIDMyIDAgMCAwIDAgNjRoNTQ0YTE2IDE2IDAgMCAxIDE2IDE2djYwOGEzMiAzMiAwIDEgMCA2NCAwdi02MDhDOTI4IDk5LjkwNCA4OTIuMTI4IDY0IDg0OCA2NHoiIHAtaWQ9IjU1MDAiIGZpbGw9IiM2NjY2NjYiPjwvcGF0aD48cGF0aCBkPSJNNjA4IDM2MEgyODhhMzIgMzIgMCAwIDAgMCA2NGgzMjBhMzIgMzIgMCAxIDAgMC02NHpNNjA4IDUyMEgyODhhMzIgMzIgMCAxIDAgMCA2NGgzMjBhMzIgMzIgMCAxIDAgMC02NHpNNDgwIDY3OC42NTZIMjg4YTMyIDMyIDAgMSAwIDAgNjRoMTkyYTMyIDMyIDAgMSAwIDAtNjR6IiBwLWlkPSI1NTAxIiBmaWxsPSIjNjY2NjY2Ij48L3BhdGg+PC9zdmc+'); + display: inline-block; + width: 16px; + height: 16px; + background-repeat: no-repeat; + margin-right: 4px; +} +.web_name_input { + outline: none; + border: 1px solid #dcdfe6; +} +.web_name_input:focus { + border: 1px solid #20a53a; +} +.path-icon { + display: inline-block; + background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYuMDAwMDAwIiBoZWlnaHQ9IjE2LjAwMDAwMCIgdmlld0JveD0iMCAwIDE2IDE2IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KCTxkZXNjPgoJCQlDcmVhdGVkIHdpdGggUGl4c28uCgk8L2Rlc2M+Cgk8ZGVmcz4KCQk8Y2xpcFBhdGggaWQ9ImNsaXA2NTBfMjQwIj4KCQkJPHJlY3QgaWQ9IuaWh+S7tuWbvuaghyIgd2lkdGg9IjE2LjAwMDAwMCIgaGVpZ2h0PSIxNi4wMDAwMDAiIGZpbGw9IndoaXRlIi8+CgkJPC9jbGlwUGF0aD4KCTwvZGVmcz4KCTxnIGNsaXAtcGF0aD0idXJsKCNjbGlwNjUwXzI0MCkiPgoJCTxwYXRoIGlkPSJwYXRoIiBkPSJNMS4yNjgxMiA2LjQzODZMMCAxMS4wODgzTDAgMi4xNjY2M0MwLjAwMDYyMTc5NiAxLjYxMTY5IDAuMjc4NCAxLjMzMzkyIDAuODMzMzMyIDEuMzMzMzFMNC43OTI5MiAxLjMzMzMxQzUuMDIzMyAxLjMzMjcgNS4yMTk3MiAxLjQxNDA2IDUuMzgyMTkgMS41NzczOUw3LjA4OTI3IDMuMjg0NDhDNy4xMjE3MyAzLjMxNzIgNy4xNjEgMy4zMzM0NCA3LjIwNzA4IDMuMzMzMzFMMTMuMTY2NyAzLjMzMzMxQzEzLjcyMTYgMy4zMzM5MiAxMy45OTk0IDMuNjExNjkgMTQgNC4xNjY2M0wxNCA1LjMzMzMxTDIuNzE1MjEgNS4zMzMzMUMxLjk1MjM3IDUuMzM0NTMgMS40NzAwMSA1LjcwMyAxLjI2ODEyIDYuNDM4NlpNMTUuNjc0NCA2LjMyNzQ1QzE1LjUwODEgNi4xMDgwOSAxNS4yODczIDUuOTk4OTYgMTUuMDEyMSA2TDIuNzE1MjEgNkMyLjI5MTIzIDYuMDAwNzkgMi4wMjMyNSA2LjIwNTYzIDEuOTExMjUgNi42MTQ1NkwwLjE4Mzk2IDEyLjk0NzlDMC4xMTE5MTYgMTMuMjEyOSAwLjE1OTI1NiAxMy40NTQ1IDAuMzI1OTg1IDEzLjY3MjdDMC40OTI3MTQgMTMuODkwOSAwLjcxMzM1NiAxNCAwLjk4NzkxNSAxNEwxMy4yODQ4IDE0QzEzLjcwODggMTMuOTk5MiAxMy45NzY4IDEzLjc5NDMgMTQuMDg4NyAxMy4zODU0TDE1LjgxNiA3LjA1MjA2QzE1Ljg4OTIgNi43ODY5OSAxNS44NDIgNi41NDU0NyAxNS42NzQ0IDYuMzI3NDVaIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiNGMEFENEUiLz4KCTwvZz4KPC9zdmc+Cg=='); + width: 16px; + height: 16px; + margin-right: 4px; + cursor: pointer; + background-repeat: no-repeat; +} +.dir_details_hover_tip { + height: 32px; + border: 1px solid #dcdfe8; + border-radius: 4px; + display: flex; + align-items: center; + justify-content: center; + color: #666; + background-color: #f8f8f8; + margin-bottom: 10px; +} +.dir_details_hover_button { + margin: 8px 0; +} +.dir_details_hover_button button { + margin: 0 6px 0 0; + font-size: 12px; + width: 52px; + height: 24px !important; + line-height: 22px !important; +} +.path_detail_icon { + white-space: nowrap; +} +/* 网站名称悬浮快 end*/ diff --git a/BTPanel/static/images/firewall/intrusion/1.png b/BTPanel/static/images/firewall/intrusion/1.png new file mode 100644 index 0000000000000000000000000000000000000000..c870383ad350aaa9870a9dc478e841f3ee609c89 GIT binary patch literal 66396 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 RRq^LuazLVNk)+AT{{oE8O(g&T literal 0 HcmV?d00001 diff --git a/BTPanel/static/images/firewall/intrusion/2.png b/BTPanel/static/images/firewall/intrusion/2.png new file mode 100644 index 0000000000000000000000000000000000000000..65f5c730a9f5db6da737789624f726a2c27e20fe GIT binary patch literal 25326 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 Kr^X*+ZvPwIm0MK+ literal 0 HcmV?d00001 diff --git a/BTPanel/static/images/firewall/intrusion/3.png b/BTPanel/static/images/firewall/intrusion/3.png new file mode 100644 index 0000000000000000000000000000000000000000..2937ff16fb27038e47977f4b239e06f9b557ce2c GIT binary patch literal 23124 zcmeFZ2UJtrw>KJ(N8x~g4N++a3n)mD76pNGKm@5u3q2rBYUnM5sI;RrrAikOkd{dA zK|n#elmMYcq_>2Ygd`;SHs`*3-&e+W@BQEJjq%lz4l&n&b8+H{pQ^J zATU1m?_|R_I12*(4tjY1Pm|#6%~_2Z7&FAV~HHuXF_*vZgyKG@&`zj&j4?NvDsa6PYt;xFgV$PDJGK^>idPL$a`{?o4E zSiwj8Ga%3pOWDIak7nd9rkh*>{)sET7_tMpYyIrmF%anf)uZEK_KP6UAM(GP1c6S+ z|9i!9Q^yLb3+vv0u1fP~U-PWRA>-cFbsb8LNcM?eo_^r(QgCIq>K4*$q9~NFUST}fQCgrWQj*dpGa20$>_N!wCTo41)D*O=b{WouTEA3@ zPx;+Sn9Ex~HsvDW~SihkC57Ti-*4Ww1b>i*jql zP%*R(Jl`i7^5Zej?pe^qn+1Y0>g@T>4q9`AO(Vmo0R@rSDvurJB4Ng<5?oSI>Cf zG7Y8&I4aHks=D=eY3_Thc?)DP?enKA?Q1r=JJxB z8B%R&Q<-WWGe5;&&F>2v9g>ffjI9m%k$Ky`MndMV5qhBi40tNFp){b5sAgo`CMP_8 zK~W*sc^TWqeI zWpGb7hfH)_)R{OY$MTBfige*+3GrQr=8`VV@!lwK;mEWbJmwjvsLY3Pa>k1Q#AMdx zP3OsZlNS1O2mG21GN8$AzF7ByUKVLDIVNF=Pnh0Qzk=~zoixO#1Ob|ZUy!6egs_Vo z{;X`2J|qow4!4Eb56=h_loZF#m;BNxQM>_Hv#wd@iy7avkPjMipwsok#IwCgvE5Zm zi$O}>1DXiPH`Lx1F=y}sW>sfk_A-hYUr|vx6qi1jHZ_BU7wuu|{GHR$Q~VusSQRv_ zqvslxFWAcAYgL*_c*s_re|uP;ZYGRqh)#yWH98 zQInA61xKWpI<$rYc?^KeFYri+J6^76SqxX@-!YjBjL4TxBnHpy6w zu2hs0znkUVRclRu7dXAq%D*@m*yLpKwG<(;X=Qqw%+?+4_9{X#^;q7^ub0=SNK!+X z@3gSN2f3pstl?eipC_A3SGGJq@np4@8TTXrTalx-f?2r^`WyF6*sa;BhDyn6Wp3&; z(k9(nNwC*tMKyk8i_RmhBdWpf8DCPm`TKrX=G82IbPVN7RZ|h~5*$KdfwWP0b3ezu zpY2K#G4;1lH$DaT%}bc!-uRVo{1__kho0`}ACjhzs0q(N@3^e(L(6|dGJ93%wi#BW zJqOkryjbI4e;q=gEel6mAOj~b5KN2zvJB;Ri*GJ+>2n91-0C~DenKOy+Pz1jo3)8T zpl7OyscSZjVh96Ju?n(v1&$;$q30dr3XoLwx@{r@7cPqhjYt^ zX^OC|2^4a{$ej-+HTyQ}AvTx8DL`3CaXj+To;lf67_d7&SWiVITr<>k$n(Y3tSk*< zEiJ8X2Zf_<1>d0O&2m*!P?uY#Ew{~#A3uIv=>{X_jYvx329yKQH}K6(#Zxh0mvmye z#MU0O8t&}2H=pa7P7>%KMDLf*P0V6U<69Lx1U7wMbY`VH;_)11Id0ZfcNYW4&RZ%b z?m!&oPxNBsR)#*GW*fm7H7m_->jnO@vJsJ!X5t2=z9=0zokWu8rPM*?ZFy~9B+&Mk zTN#iW71Ov%pU3R6ih=(A@{%q6SA~vw#+Q*(!DH8@$Ii2PiXT@!7c0A1>+Wvda(xjs zT#(EE=jCc>yA!mQU<-AHc2Z_T*~I`-!`R9Zi8K*!eWz-X8_&PCKc89Z$S!irqZgTdEjbqTWhd@LA!X|usfjj&(p7X) z%ND2cET^C+XCK>9UhPUiS0&xxRtWyu(Kp+5bjn-!Li!WYdkYvW@s zc&-bg?&=>)`c&IZEmH+bNf%nMj>J3r%#s=}1mW1HkZ6urKQ}fCDh_x}yZbpDefA(te?2~k#jB0DV7f+Fg@wBmYmhyG#WF-ynA?a5&GW*y8IPzW*cX82r` z1V7EXC{Ymehr`7_XYeM0g%#z4y+WKKXPE18ooo$Un;6ZnDg7~$nigaIyT?@P`@o%~ zR|6tr_Y_6DUp%Xv7iYhSIJFxnP@1%qHM-`nojzxIxwqrR_iVzcH5})9pE`R<7Zwhm zV>5P_FpF0&)WUWY%}R{KjxtmObT$IL?wJi|vsRl`m80k0it9_A5=oh}Y^tZ`Gej(~ES37|LaI2^Ecc0j z-57cBPs93R?)3Du=ofMq)Y&~tTJ!hE-O1JSkEYjN=Lx4Oz~)o758v1nAS8mj`gvkj z3?0SX0}w=Q=EHgDy)<|(ytgGvm{9+)r`~x*c>9|dX%`w}KhSttUqhkJ(MCgCL6O)u zm~$i{_yZ)`3qkimqBi-mMq{h zB5Ysy_h~pVN>c4Fm);~_T$l5ijBW}nH0{~#w916%euJj6R`pztDibu4ibusPYA2XR!P& zj)^X|AX)t0`rWjzC# zkE_k>R>~wyS1ON54cdHpF<+F=?P$;Fcj5(>*MJL~njBv7FPt`x=}Xo}c=0&l=ckSJ zIgA`%msjK=qA3JS(#y!(r=%v78ST$l*O!M`pSE z{G2M9d!qljHFD}Qyv?(*!pD?g6>%)OkNu=W%9*&ww_jYn2w)gpMPVUY+51(~?b)D+ z@SzdYg@3&pb2wIYXy*7t#rp>`zn<#4am>La?(qCg(2sS8SLZ<>8Kr*=l)mD;2tdTh zbpYSR{rUC5v!B0oHTtc*vJ?h^8cKQjkBOeICDVy*YOW(6?q7L4X67BA(d;sO9YzP% zj#tKi1=-zqlFgvtk!>HD$TL?jzP$e)5aL!nUKLI*Zv@BzZ>~N^S(l+)1W?%A+#Jhs z@ui&0;3+>Wfj~HdxwEsg8F~*s13=W>>Iwi-&n|Q)<^c%zU}qtw(e#Y*hpu>jFaUM+ zME#hDRNYb$ph+xH4aY9yWqoEZ_Z9r4!%TzEIZ-{CzkohW)aA~{z8}%NA#UebY#T4E zrb_2Ig6$|%oGMb$<~-@t1D~rGRW4~X9o=!d5E0_xb8JC22tc#e)334~odB9Y_8((g zzn5(h^D$%qB2NWg4}U71B>~`RVMl-^Xb5x~{o3HOp#J7z!QWV1Hbd{qn}+#leo=$$ z)$W#K0LD)3aa29{5mD_j=fC0Ib!c+ ze@fyZbCCz}6c`p)O*BBDi`>T?QgVhI4cg$e8Q2hG+mX%*Yw=&yqviM!ozE}Gj}ay3m>m3Qs!E{@Z^CRJ^w#@tD4+m4d9b{2Vbi;D+@I`&J~Qzc4! zqcO2%XJ%(yERi{&7L+GQaL({%*3V|}48{;n%VvPj!7$YEEHzqj0?W6POjl#Th`Emu zd-29%`q}bHylkLn?Y~_tSe{{9nG0RnDuRG(bCvEKR>-al=CSlCKXFi|F95s4cjfZl z9#%s0RQ5)}NOI>OqdD<#n?=h*lGN}FYSUd7vxpxF?E-Yvdrsy-H&t(WOc{1QOKLE0 zi`lQ$o5{rH4du`>a-)u#LEc?RIQlu|QNi(S%u&n)^puGFV8{<1)w_({6`fMtku$&K|y)+twumX`e&vcJE(Yn@BnMiP>(rzVx0D6F;M~d zx7W57zRQR7Bh;@nH8)EaWIC9YR=%$*+>_;K*p#^QM2h~M#tZHj9dPo&g5D*b;kpQ{ zPkDKd!+n7%i+6$~wu-|u$uVNnvB9Ovk$Y`hw)g0L8u2#gGnGklu`Wm|1K+~xOx|)q z(x>}AE??Jyl~tH4i^7Raf^ZNy+*oA+YEzcuM%nc6a7xQ(4v6nx1w$C1N9q7}*L1MLG~|k^Q~~6aSs`ST zu)4Y$T<*V@^q60;G^D)XXmbeC2sJ(9Szb~3#6s6cQg+w0S+=X!>6agw;Gf3|s_tT@|LB9I8Dd)0v|Z>t!5}r+qwA zl$kS|)z@aL%Aa5{-obr84?l&sTmLn4|1Ut0o_)Yl@3|cM z05y^{5Ystls;waJM6b2nDIQ4sR&7;!FCp*hm?TPEwUqesER*A_$ z?Fc56JaM@nGW0wuK=J%pJpLh3&^DzXFMp%8R{jH2cxez}c*4kC!mYkmo}9h?Vk1cf z4ls+nWt8ZvS$q`h=I1LS&6Y#T4;RZW&}Ab0|N-9mPV&`LPEmG(UJu_V>Tf_xop3!z$X7JEu&dkNvE1+I}+@!W$b#RJP=TU zY3Nr%!d#DbN!Ru6bw8|*g4tNzz3KwgwnyY^ORLJ@tqQ>nIzeJTP$fpShO?&C(YTwC z(RV?(Y~z~{EH8HxV_MR!q%Rn*66Fp1`Os zYc&OI%aZqiLnCH?Ub5R4#&skCvUG5fgH~Ooq?L8ECne#C6rD03mi40yHqBJ>w9FjQ zK{sb7D+^o}71m8T^8rekk|T~auM`hbpT2BtDk!*7&6#Dj9yo@@dU&}S;vtro)kCfJ z<}^uyPQdg8Svwk{0h$<1H~XsPZ_CSdGh$EhnBXc`ge%#3y%aI;tt6-}+qk;DeEo#O z3B(5@dKLI7C-^s!6z~{Vb`ZAhBS1okU~{>FpY8Tj!~n)bJko?dmsu*Z;!$|SXVv)p zL8)fpP<;C0(t46m*z-xBN7r;-wRWu-STO4Flvqe_}|>#Z>?bC(Ich-KU}E_OknSy1OWKwxY|uNDFNT4 zk!SBqFGO~c2dxqd`Nq<(!)$8Av1V#=Hp$k)TaRKE!mh~C9SWs$m@!xCE(wQ+uDh^y z$C0eb`%I;Q*{VuABMXy4ecT>PFxiujCiKTL@kP@I@sC*6b-8z20xFB@B8($0+EBk{a_7XRp^R9eG)?LaAd8Ms@#4= zeE|^XgJoTz2EY_HHrv1EuK{?1&MYh6mseUVc3wd1?tJ<&vnl#kP>bR zQyD+q!LM{+l3egqMlCwb%o18p{G=7Kg;XkH%x#FyHTmE1XbObE(+qwNdX9&CbB8i?PpaC{afA?RQ z?mGw9FK*sTF}vPJsauqK5^B}=oyW%Jr>O)mU!QO3kzdJe*A`Yj>$bkGI```-5)-YL~pbZ~ZHXJFTwY`D*tyx5%|Jbx+N&^QYC#Ybvj* zl{jG6zw%o3^5^0n*M|pnR(<8=6^VR=c|u9x96()q{}HhktyK*zOe(i%6>oiCf>cA7 zyR~l)l!=q0HTjjtC$@q&&A%Q|MsTapZ#M@!!Bh=l+HOrL%Qu+5jpT5ciRofZEldE0@~aOC9=DkGU^b{D7!)W2@z^!zpuUkrg# ze@Qe1$wb>!-Za|3E%l~>+Euc#d`Lg7zEKj({OkpFFIO{4qFgSM2lxozRje9@pl5OJJ6f$3fF7vfQ1AQoQNTQ zJ!yAKPSZ_3hyG)xBxo*}5WJDB#d5wgx=2y zdICY6F|dZ9<)7%3TW=8?EKJ{17v)HpTC>;Q%UJwH=j|kHT(Coh-Bfe?}z|wzKlW`vT!eQI(g(g6XLW2@OVZ6H7ei7_7gR6GodIE&S z1Fj_ZWUIgfXBwUuX;dl)6I&^RIm%+rz$t}Wz$xV*LMvrXqHaaa{-BJk*Ge0Jg(uHC zJ%$7KL0!NNvH)~{_T~M@Lv}zIJv316?>PL?xpSDJ3;#z60;1Ma&OkrBQ~++`_VqW~ z)*WVFPsDkk?jV_AuWuhQ1F8Ca3tjP?nxgSnet968+~X+w^8U|gey<}%6rQ*Y0@-Z> zbjwlqf!mu&Wo0sRrY;{_XG6jr}@(a$yZ63dP)U{=%*9s~wy zCuv-4z=-re(+AK>MFxy7lJ$BjA-h|{C{B=!n}0=vK`Wg=2hZ+T4x_#*tQKXdk_pYk z#6U^Vv&UEMymOS0st%h^uEhzf4a!M^yj4cq0e%02Y)T{Q_=EK~>$J3j0-IQOJvW;G z26>RFn^-pnQA@gPb}VOlqimuuTI!YkNK0%0&P6Zw#Iw`tZ)K)CRwHW2?!qfX}9Na1F3&N zV2|(Gch!bW^Zx>hd+Z=*_aShTqp$9~zf_q}xUcJEBXeq9)27LBYa|I(liXf=lN6DY zKXlP%cV4ou1I6VmeC)HSz23<<@^Lm7lR+YUBXm3`^?G-6lR6--_KFR102W839ZAa1 z7r8ZK3vKm+>mmXINKNE|=?xCTvp_F28ik+3x%39Czd0o1vf57sMFAq_W5RFsyA#)Y z2L*L2%77YGs3xVL-?gkl4K(Jtm}51xu_1g*9i0XK{*%)t=1v!^VzJ;Hh6B; zYA?(xm|OT^)N4x!f;G4>|0Ad@rp3FJ!?~uOBGBG6_F4VGW3tD-3Gt1|H=)fSp6CT- z;!xf;vqAzqi=;Q@UOzshK@?drP$vtJ&tu_V=>+#j5#YGF9Mtq2{dNEFRsh1PFEvfc z`{Re*LCn?Poc1JK9IX(4+X#6slcM;neQ1)r6`)c^Qm$cgm27j_f07#yn&9JCSZ`g8 zLchz^8TZ69zkQx4(7FR^xDYq*B15~`TzF03(8;ALa4mrj)r&fc6O(?nClwlsYPik5 zLQRd2JF+(#{PA$FRV31T+b+1OR$WQH1XTx-L5fMb3&maTaiJ7;wvv`JLUYCS0B z9**{{e6x*+Tud9+T84yE{(!JocMKnA(|C9%_}$)|g_9PKz^PPsE%;f@6|!KAj(D4@ zL?r5TQ(z#ru1+<(jN0BSW<|{5tup*H29tKh)ZeN_g=$QUh*`mjY&?NYP2--cmTA+9 zk*5>9pl#KQ$`u30#W3ju=vB!pH8GB++O5H#b_ZiLw4=V)?y=$a zaxEdP_FDAT6V)rpJoRZF=;pSK4ctwVhD}4b(FSI^)Ly-c)k7&M$nmSbh zzm926iFdIMjwWf7ppo_l5@^&kTY~=S^3FOjIg;jW+a{UDB-L;88V2?Hr(%tC1 zE)uE1&mC4=OM3HqO8_n5iD)2VPAWKduFkr;*^r`Tq?>o6bFRBvT6Ik=T(9=J`5W7) zmWJt#r*`vCbs3C+X6(4<%@MSb!kzjJBHH)?LFPyEdrwiOPXTnbzQ13_K2KH z@AkS`EnwE*ve!qs)}za8D+y`iG0DIPfLr<=%?ctZk({mL0QoO3swHz0OYK8F^3}C? z8{p#9lP@@}T+P_*oocekXMAq=_SPU=_z@kULZN6lc^aad+`^Z3a+IeuyqMStPP!qW zy3O^e0AwJY9uyFTf(miJDQ3a1+N~a@;1>9b+4^{nZ3GjuBshES1$LTE#COhRmxQH%7O3Gp?-+ZA>*j z=~wlC+$c&9en_+-t4GwKPOIOru*_=ql@{8}tS|ah7P|j6!lpZDxz3`pTEd?p3wLM^ zs+~7XZhqAHQSyc)9c>Y0mL@PILl#=ULjwe5l&SJp?#TM) zOuf4ei}&R8#1EJ9A(Zq?oiQ7C>OQ8&1S^&0v;7C0SP>sq*%->jusr^(Y~-y#`^QWu zbyko~iI`*hJynhNvmJFQ^|}bXy~VFPR%<0D!hS7t#^oT+i9!59CaNsPsCGP$*mJXD zi;R2@HI~~L?B$X!N=Os9)d&os>usktcmyQ3I8tj1z~PTaRvJ_KZg2ZXEp}G)Y?{P# z;o8O(>c^dmL-y6~RujtmbK_CHQx>K+sd$yw>$lc2!7L-MQ0QR?kVdxqX529_yf0`W zCsN|6-Nxm64|xGO;p^CQEK*c(3@IKX^NN|?lA{P}__j(x^H^+>S0=AIs%BSF)% z#vmc9jh-1T)m0lmqPd#Yz1{~BSMRgWuadP+wox+$X&+hb?Y+u$Qik&Y`qtfph(oij z4d0+%T^$|ntx4}sj^U>4zy#RY&ZTzeZCi}eNs`K|P5Dw~7m~`|k}XLsHZ_~A>H47P zM}e@tG^Zo)&@sFvS@L&(6^;|f(q@f(4}U}p`r;ubftW2sco zd3JhtvFgug_O1pIOUV3Xl?Y#v$ic1YX}Z*JB>^ft_2SdnbV0T3o0i<2GJbVI=VF5_RT!$gCkq|4%pJS zxe*B)NbCDh7q35;GRK$a%paLHZ?aK{*%PDl+Nv!}=_HBLvNryzdMX={GiBCF8MYFQ za&kX8^Lw`GL`zW_jk!6uT;Yni*33NYy`&tJ=D1SXp9#GbNGL5A>;&`C1vH7?TJt@B zuO-;4Pu{gL-P5oMAnlx1|9EKNE*tr%sh}woU@Q8~$%|JRgHL^#EnNIfX-+P&*NNpb z+p{RA&aLMInNSN~R!~`4n^j{GY2MzZ;dQp~dRbYsI=lT`=6ESHDz3Ksg!;FH4$p?R zP?w$&u`D)Eo2XubC({6esvR;XJLT|EJ7+*{&GnI7!qPgiy$N_NkwhJn6#a|Mx*cX zh2mN~t~<}d^CvEYtP%fHG#DnZ#?hX-LqQ?|v=~f&I`N+UDs3aYM5{C?w0Mazh-V*0*0I@!%V!)L^BKxU}WUJIy>GsjQnu*2So%n?{f`D;Geh z+eO+yh_687Gk}@?{l({l?HDqXNlc8hp7+jBCEZk8mo-u)mGHM799&PW1L zx}XMsZm0rzSd85Np#jZN)!_x2I<3wwmJ8qCA=lF+4;`@) z?nJ^`DW)c1X>{J*@K)QxE68SX9%4Jc8C@#1_w+>Ee6Z_AZ*k{{SQ>y)3$R>Ra?tv*0{Lw*h}IZ@k>XU&kh}eeR&O4 z5qu(%FBbhwFL54QD6EjMf`xygjV&0q0SPkoh^?1PLHnmnwk#WcCp@9>Cse`tFMb=s zFr?gmc~Xu`fZO~;2dWslQEwU^FSBUIGdGiF6+UXiqq>h>llHWs?z@XblDi>wF6sLv z3w>4)La1cqi}tGA>rwE&qPeJIAv_j-L&d#L4O6939}*6uw(@+$>YMVY`UhPMJ_~@f zEC2H7XvVN%Uif@P79sQ#4U$MPc(cCcH)m42U#&J9P^v_a$xq`Mp}+x|jAx~XlZ%_D z@Z#CASTz1%;Cqtrz@44Vf<#s+&3%5&Ix%GJTwmui?)Beo@Q-CK{PKW(zJlBhrB0nQ zyu~AyYsESkwSqP|P-l5mc1m90{yZuQrl+7)DizaD3n2o#G@x7}krRPV;C`FL=`_`y z?^_~~>A7(7{R6j)p=D`V!eKvOuHgc=55`>$Z$X(~;zWwHbArjk-B5O*V?LDq(+2k_ zGkx}9y?W+OeTOHX zg=#RKSV67}TT`Kt_zmw(6sw|D7`-E6x#mI!_vot&&1R?;$!X5;BeSx~tq6X)jUwLA ztGO(JzY;J#;z0?c&2qvxi;)5E@p(|@G#Lz|TS`UhqYnzQ=4jZRO{iDXh6JuqnvpmG z9JPmO9VRrlDKTDHVV9nK*>5g`aiSTC>CvdEmkG$Qjk-b}QaO^cC6?Cx=X`uJgJ5hFh=BEC9QK_}`K|&+WhHIA8 z+R^omy-Od=YS)|y*;-4L$RkkkV#t6i{p=!oIccp@V&MTwdJOzY+X7A)uR6P&YJl+p z_5>MzIF=P*g8mca7D=F?jtL>uXrRoT4fZ=lalm2JNJu!@ag zHvZJ#5pA4$d5r=NKTBpSWi{8Yc;&&Zf-6WkYw5!;)rnq+M*QVbqHXZBm2}O$bgQMp zm0T5{=M}cowF*I|&^g+^I~YMuls>&hIOw$jlTgT?jVrcB!dzTKEr*q52gwS00hbX$<*`popHZTiJBlAmTbW+~3%g=^kB-tfkfQ@_+ zK&k+&Wv6SN53xB}={j0u#Q>34z_K|b)|NGi;ks4WP=vlv(Z}AC4i{`M={4*tn^4&pN=!NS!5}>ZqqokQ< zWm7vUJPNg#;UHW#%mZQP?{*wiVDK5#ARtEw@!wDpiCln>E9M-IjI%8-r9nqjn3pK! z_|SIV@ETVtUf(@zKlf6)QRo|*@bI?`%IEPn_=nIKMM)%cxr-Ew{_^tIhPk&#vc2!{ z>v6j;0{H5>5+E#X?-nrhsWV@{FE3Of62r+kKE!=lV5;Vj>WZW_A`ile%l4G1qPkI$ zmZ_SSfZh(EEtg1PPfI4l!@{_fe*!OeRRG^ww>Gv?iht^fa2N#pE-jMNrau(xi1brO zD|o_gw~eZC89K%Gj*CNgjr-EoQYBr#FZ7v~ysO!?Uo4IvurNoIN`g;~Sfw&g2>pHQ z_zhyl8IFXfKWsUj3zk^HPe*rGV9c(SaGJ>mKQ7Y{u2`QubGbVR?Wsg6ghdut=@#Ge zux`7v*c(#o8Zw=-&SET&vxGv)sWvQ~Q_~>p=3h@eJLB6#BC0QpSIBkz-CeR4<=*yJ z?=Z^L3e0PU_BrnLR-ad{V{%QV`_~5(@}~cSM5l?zP=dC zabsM1xeU{MO}Tx|e|j(9XJh+!)-8D2Eq9%u3cAKr6zT*knL#Ux$XMOk@2%L+-nmlhj6vGt=@m1y8N{+<=gXlv``P<37C| zycEEl^fxf7jV%oks#d{01I8UChp+rFZ=^lvAbhHAg{+KhpP{^d3uX{J0lAZVNsZQ1 zW~@dr9dZI$3mrTD<5i}dHj$dtw~n__V~%`PyyR$WhUZPlyC+!m^`o`gp3tO{G%zv( zsk_A|$Mf+zJd#i*W99?;m*eT@D>lZ~y!W0JLJtqKiE6Cf9e7jt;d-`O$R8L`gPzdt z$%ZG+Gfdn~G}DGDCJYS9(L||&a%ENU5_VtNo-PkJ-sz_DB`3pa=dRMnKb<+iq zP&6_)aC8qnNDV9BWb+o3dvVNrso%VX$zPndvaDd!G32x;df7>M7vsXn%Wbi<*b{ns zud(i?a>dg@aNQuM{e$+To7nh`J;c`CJWi`LX|)`Qo62QwU0ZosQ~u9mTId40#O;na zxDcbOXUWiM#U2>jD%Zi9>*Ve4yGuB+HkSWKSYb{O+6mRf)KRSKwXhfl-G$ZdxMd`bqZ$4XmUJz%dsrYh3vrIP~P|0Si75- zE(Lo3ce(Q|=6W9$_o($8s;hjHCql2nE6fA~`m6JA*Mj+b?)=ZYmPifi-2rY?Q60b{ohOhw{X$@?*QIKChaK5qpk*| zqw1CbPR~0)9C$tS_KVwIGYvp~>Sf>!-e(*4MU(Hs$(s#6Uq3`Y3EG~66LXY<4Eljn z?&iR$Ai~U1D9K|8*|81T$_OQ8;SWWd``(j(1tcI@mBaE`=sJoN<+k6rVz*LO``-l)|5*&6(fj`ic>W(}HvhAce+x(d)2jYow5p66Yv9%UOT$Os z1^B-+1pfc5k}ej0juB}VAbNNlX?sv%edxTCH1K)5uR`R^%qh~(_ZD{^NZWq=;qgMR z>f?hm{E=sVJ(HXtLj7v=YyS7wuM|q8&YtEgc=U8?RlnN%_SwbR6wwU#K|$NMni_nP zaRB*EU@gwPT~DsW4zclp!9yW~d(vx++`VkTEBv2+^x)rhObVg;ni1kg9jFWn;AI z9}wQXA1h~NCf~Un437N0Vf#tUVK(JZ6lSL|BY##o^p#+$9*?6|=Yi2|yL#Q)IX8R9 z^$Punj2VHJx2N#4`_774l96G(4|5F+5m?L#u+~JhcyWVrwsm=QBwGPvLJneu_kdJQ zF_k;#X{)*?A_zLgX=$pxdP0fJ+pWuM`%mY;&q^S+bgzvb$MIR$H^(@ua_|NH-YNj6 zKbGCTaVa?EaHkcOhuHr~#r5S|cIr*ATFmc<{MP5-+PKPFUrK%NI>8)Do_UTWQlZbo z2*Z4I$$LjjSer}WL}l%V^RC~GJCut`&anf7hmjyL9JOAXn zJg9q)Qs-r^`HMJX}udALF)X)Pct`A;GI2mfP(4zCRA;*ZU$6 zDiRORs^7TPPs&!o@~N|DaDk|yF z4%~LmAJ1I|yK}*1EODYKGXmvchrPLcE-rTgrhllnMyEL4ew_=&qg${z&ey?d+*7jC z*|Yx#a%=GONQvIrK%RI?g`~$OJb&Bto4>QV_PE&|0?R`a8O`|3%DG{2dDU@w?9qx@ zgt>I{BlEQ$M|EwTheP=hwLJ3~^`U0qUt>ahL=E|b6cx%Fy?d|VYJ?O8s_HBewXRrT zoJ5TBxLuu*4~kFn1V=>aOw74?1smm+>*#V6;FvvFnIKocX+;l+`$UqSi>T4}sgaq( zW0B6QM16Z2?;dzU&iO|RzVinxqJe@SpoBt zR#nZ&XjAb)gXNS1H+FjZld0RA4+z&Su`P0ohYLlr@zsg?^2BPW(Da=<@kwH0uBJxtA)0olXus_wIJ8KHjqhHx^w-^eC^B z_d%CD+^A0+%*{53HMx$;Ue0HpdQdswSl9+7noNB!v~8W6iPD$EeLQg33i{K*psX72 zY&7DG1ipTvk8PF#r(`5}thSX5NBkLYY^ zxzDF4-B@E`eosv~c*~-J^&!xsH`M*+_b}z#o*b4))*+qnVW%`T$;y<=ae8SC*wl7z@@-5yWy?JrLABpo6StX!l(o>p_txAp`OT!%1WGWr zSxwfGxTl6bZgzM~(M0W_SOO>!f;rw=!vPOWyMQ z5~5bNqGHy&D=n#3nzA)LVOcc1Kc-pbsv=+isZz+uY_{_aVqnYTRzB_igxE(Xavv!) z)5Qha`>@a57&$ee#Kd+~)E3q|YB)U6R;6wz=g8F}p-5w?^tQt$+IwqYPk-mP93kDe z;p5r@o<)n#VRdcNZC{faay zbG(@}YAWGjVoF(>z>b^oTdOHnXhFjn2CZ78F8PG1j-v)$J;OFCk*w*LDb8V(KaJZA z!gd+aw{O*}d_t9kF`8?oU_$Xz7QHvcrmXFCi!Watm#-e+Rm6U(G+tUvMuQcrmL`{b zv%0)vA3n@t>}QnTB2BefR;D>*iNkDbBx4&J^(u^!o+&Wu<9NHW)NH2vJl%>oSR=Ii z-bUNTcdh#S$l#cT*P3=Kr)SYSD#dWmPzBw{+ABTI&AJfN-JNH^<18joe{J_6d$Y#! ze(-YpQ*!Xq`UAr?SD=7hBDuR7;JLrcg%wwI7Q+s8WK~}0lv}@2N{W09%z;-S5>{Ta zY&;}usIEFYClAC7LX*&%Sf62frR7#Hq;hE@*!Jv0%Qk2T2ez`%jxHb>(VUiHLp!AuZXO# zTgQ&BwJ#*kZ_XC38+;hlGoLOE)3Dz+k_~eS(_rJgii?GsHaD6e&gaWyw%!R^Tp#gR z>g%_f-P-WD34GrM0ZB_knP5^S!)oN`LeE|Gd{bk=Q7^!}?ohXPa;jB>w+4y+@8LEE6agh@0m%!Haz` zA3H`ioLdO)8}fwOnn<~2aK1Att#X#|)T3m)B;h#K2K-7ba=WvGA%jE)Vr+j-@`%Wz zpAY1$uii`F$j%}TRKQj{)@!MAK*Gp(ga{-=>F4L}#*r_rbM8ap0gS6P87Z%2>G@lm zHRVksU(_IpThtcIhJ{u?L9l4jNMl0pOM{wOXG>#uJs053`HAp*|E-fNe@lAL!ZpoY zEmL`>(sF_8lo_d+k*T2A*zKBIi{_GMl=~VcE-5NgF5G*~%sum}k(r_4j*6%>dd=&W z6^bB+3xXSp2ucX(e0!ex1Lm3EK0ln#Z|A({J?DAP>kXaWEL~gYik~J!tLA9-6GAv! z>9e@KREkC*75<~19%E6g42hw(8}7VMc$DQ3G^ND3;_)YmeBomEaTmqS8k0SD(0}<* z`eO-rvEpEFLUGYK1K^2LBZzKc!feueLgQ;Z+slo^Ri^a>G;pTS#B@~yV2C@Ugq-up zO@;>Qm&w8ksH3O-Nq}atoH4Q-AP>{m0jHWSp84izzc2giu{ZhA9cH+txv@0D;KIgy zSRSj)(P@@6NI$Ikb8~UecvTg{Aur#jNX-$tzodH%V`y2;?{Tu?{1O4!lL1AQS(Eq@ zU}!TUJbul@l>GW-Avx)c6T|Z~WRUL6*ervy>9p%d?WU%f1((0X+eYfOjd@IXrnjNRix;7VHlZ&l~u&9HbUaV(g1=CY>X=C-xcpK3cpt)%iJteY74t|9556}%q z?NwEf;D-{?_G)Ewmrw|Y?e^~rQ@MbMuB$~z?Xn>F47t8h9;0D`j8pmfczQ!b*1JLm zk=F?H^#HV;Q;dO0PLK|@W|{J;1}L4nqi5#9hWdo>RkV^LDCNKUren9iz1vD^l5mD` z5IM>p-%z0b78P==ycc#9{Wvhn;wHo-^{hwNx&pwS@>xRnb)^Y=XC}~4&)T8|k$(Mo zNB5WRyMOB0jEOyzds#h;&bt=nE^n$g{uQG-Ac?Ka&dALgU{ReRK__?fT2VAkW;NX% zwW$Yx?&##W2u8*|46uc2NO@jH)ipVHPSB70+Gu`CI1RJdeu++A3U9xO)woO82zknZ zw^Nhq6b{@J-KTKflhw7FCtUnA3!zt*X45p#JnlS?cKe;bkbQW{D#^l_C z8A}6&$5V9i8^Gwn%PlPmGj&1BR1$S_z^euOWKYKe5_F;1(e^rADtR&2VIY*eS7_Xe; zvM~UD1Prh#>-DDg6N;bWa5DY@1Yo()O}ou@@3x6gwN78pnQM-Y9L4&Lq%|aC{kyiW z3ppW<=F0a4-FklIc3V{Sfe>n?NGz~^_|9Cv>Q|Y%F3%nAp;&?twqN4H{1cHaUWy0g z_-pUXKNA5?R_cRq2@+Y#Mu#~e)59b@$X+BO$=P)&4)3Osa9rie>Yyu0f>JZx*OUq< z-7=`_3d7=Xd2{Di=uGyk#)s0E!ZB9)jx&n_>dBp*U2D*?XWGUt|2f~sWetFmK58uV z_O_~Ms!R1~&y~Q%Dg+5I%6pVx>8D|b2-fmtsbaiJgbwq{4^QjOtu<{6^;r=hVj4d&TNtq4p@GfX5nqXGAOv#)mIy^?Z+HpE66!6k zMFa)4MkKg7C26eAPZJLq%wu5MYwE$l#wcDmJ9v@_yRb_i7#8pbz4|$+H(8jN?{M&1 zx|0urf4t2ck2P%KYR=w3^KW5*BU)+3w8>3lqTfF?f!RqEpGRB^-jAhDMpB6Pg_Op& z2!58*>{HE03{KHtg{6F%4)6=vsx!)N_Bw!{%BY*XQ&8l|0~(c@!S8Zfn@;v6zp2Qa10J6SLS#}5jDX$-lEEz|f4oP>6CHHsIswv6e>W2m4ss^#i z&s#j1WWai40bA>v1V_5WME!7Y^ig!ZIaCI+AACfDa}W~`xJq0ZD>m&Fh90V@6pa)O zEW6>Bg?IR_jZ4_bOBqR(a^Rs+_*lnwUWb2jT^y(Vk$IjYU(*a;*RWVS{YVA zE~%O^Gg`=#SL1X!N+ZfO6}J!y<-PYdbkcP%`pJKnH6Yg*OoN>@**r!dIkuv`VYv!A z-c(Ib!|ms?S-o5S;3vV_+o@go-pR@5q}*R!sVQ1OTUh>043YPVo7H5bL!TK%{pW^C zMtmRe`BD+7$lcn*{~lnB1Us`^$67QOiW^G(6AA4~eg8d?16t6Ti4&Nl;4pj*$F?QFgZ3F< zMQ_od@X4UD#5HM_LkPAOSNOKEbma&Ow$*2BYxjQT4=q4e^`nk2AiMg%l)3-I!byg* Zx;(%4h}Gd!z|wz@+b)WV5+c%#bfI496)v@gLA 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/images/firewall/logAudit/1.png b/BTPanel/static/images/firewall/logAudit/1.png new file mode 100644 index 0000000000000000000000000000000000000000..5a31801ddb74eac863b448da00665549dc436bed GIT binary patch literal 87282 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 z zmexaqDsC?1gY^jTBfP3<&z^aE{jf40Q(DdxWSLEkmkuIObjE|H)U1ZqU((+M>z*+7 z!R{+F&rhTgAy4MXl%y2;uV>v6dNa{6g8XGqPTj`Em1B0Io@g-4m<89yr}mH3HhqIw znb_b-B?y?cXAme&bR^BGVqm>VAMzcJmkElFY&C+7ZSHtA=6pVTW;_|77|RoxqVtF4 z2~G}9?TaFWsMNu{(C3>bI1=r_{Hnmdc1LzdeynTTP%b_h?^De6Jqhn0%pB>wN<4<` zPx#99{ZWEu2X47GtDO7+vuOj3bj-X2L6(eG{JC(i$K|;{cw1hi$J{P742ng|+HOwS zogM*8MVmdpz&^?;I0zg>EKu7+o6uqGLc5x%?b5J~_9aP2hKbTTX=V(`YAr-xvtR$B!o7t3h9}jn1&~FiD z^{jZ7?A>fH+haw}^R8g8;%Pn*8rGW&OL1s86mw`C zoV(t_K+=7B^XIMRO8V-`;ekO^OHok~lMHLl=UGsnXSR%6wex6Izrk=fJ#;nNKBZEf z#v~7AZNxC`Vi2jz3hGSAam^-lcly-n-;Y>KoU)jZ@y(nUK)M=r{yez7*bqVQyQ2H9 z5}6JzdUJOSIp{)r(vHu2VXB3e3%u}qs3-@*cc(FRYfLDeXa)^q;9{juo{CP;qGe|* z+(A{n43zRfq$vx{!|eD1ngK@CwUqK`1iDzngjQZYE?D}UvOHQbYZfcUG9OJyZt~V| zPmWx(>a7v`hhs)HdS%P_wHbm$UY-Hk-<9rj;pp+#mv!7$Kar3Dh+#wn9e@u z!Egr6oxIaPT-Y%MgJ$ja;BH$EF8!-MIzDcFmqg=;%Ej^HW7GcSMGj;5)ax1|W2q8D zu{W?23-KDROc$_r-2xOv)4VF$8}eLmbGOVOG4`6a$3;G;nL{&YpKvK+j)U0 z;je~UbL~oJXg6EO?MV%*Sc0gVSI?WhM*?x{SzJWB13B%iXNCyrZTPp2i(hr~A(^h0 z2$dB5>*Q)z)`&a%2P@>qa*8A!C{!Z%D+p>$l@ycPoUw)=49suVmwhHnXeKkMPt7fq zQY{7g`PZx@rfb*YxKrCH+0Rs(&HsI6eqTAX>I zX$uWa&FaR2;menqvKkR4NyV;x{y{&-8Bs)I-N|KBj2rEni;MeQnhMfC0y;lI5%&m& zA9DrFVK76edjYR%VhE!28UVelvpJd5NL*8Npk)Eg6!L{HdC-b&#IYyr@vVP zE?k6O16<`B0BolQQswbXm-Uyf(-l=6hgqFfJSMh5(6{nF!DP%M(kgf*KAN8AX~cc= zdX#pqBfT=Etybib_$OnA9%+$Vlk;9%2iL4;+6%+VtzDlt2SzX*e!Si0woH1lg` z@n_)$S_@iy%!6Ds##epxPQgxMAhshH8yj}*EU71VT@(e=nAmQl!e^o>j2R4iWfQq& zUF@ASV$r?zPm*e)m9tHmwYVi`b^}46%b3Q|$Q;>GtLIYcsO+fR9u#laTNF9zme(kA z?)7!5mVH!?Ri3S$-_>q)as^a%FS|cOtc2*5xy@>|=Yr6ymM+GTXJHY~C)PCD`Iz? z-Cr(V01W<|5FGq!@}rW!wZijv6w0?%=Yw(Pl%=Kkb`&EN06lNr*nPTtkJ!`Ih6;$k z582<2|0|nh!cV;kKcGmB*&|$#?k^pk|W3XnYrh>^~l$WXXckk9WY@)(hYkOw$RUW!m@Ew=e| zhpv3ZWa?Rv@SLGR@YVN1nC!ECUc#t2HoVH zLnu`W+meWeZ)?UmfrQRWMlRo9ElI*R*1lV7N+m#A%WGkj}3G6tI{ z1gx5b*E({T!|*SHcWUMO$WO6{!Cpzdq7R!0c5 z+@@BtEMA^}Gn!+oh-#|FisA^PTU<#KW4Wbfx}F0HnYkx~l`viS*g%=_C)fUW zPq;2)H0q`JQ^j;pvu9HZvQDnOL;*U{z-WC>!$C zczO#bg&EJtbY_=gt6O!3zH;QVbYd(`zkD#he0Zo1fd|-NL{~0YqsWM5vl6BX*~;1E z4ty)IPVCW(RE;jXL~-_o3`s}W52(wy)-!GQq8e%45>c-k9C_Rjzt-T+GJ%`m5aB-5 zwQ9*eZB9|3`=A~bu)U_l3bs3A5$Nisl)1``nr|zO7??1Ppl~;llxcEem^NqNQf-F| z0@XO<&E{7Es3?S*mSar6i;-@V(>&gqrmc0-pteOpFB5Ey?gELEPMebU1@AYq>1}?JDaE{vS z7YrCyDTi}O^!~(#2Zxr76w$qz0#l`QGJbjGhp##wf|@*#cRV45$}Of%iQYz9_zj4gM0paSnmO3 z@(Gs#z?>KuKYTInkj^*re{wPM{Qqx~U9A}H=GBk$DDP_e^sDvFHvm0}iu(R1^u&L` zb>=efMM6xRGi-XT`LvB4fySjOJo7SuWvOy=GES3vo0=3yMVpm^GRPj)J!!t z35#~Uy`MG%Q15SwO3h-m67721#lHYbyVm@oq^Gxc#b2V^?0$3Ulz|Prv*7%D*c1SP zQ}qsz`Kb8ojkY0E&J=#95mU}A$vfbQN*y^=`-CwccW8qn-W^8K{`YT*PNVa37w#n+ zQ2gywI&;`@V<=rIR}O%N#}*%N@8i(^IB=l=3NdCfl6rIwS^v~+j^8EgDE4LM?jHVI zpw@w-b;YV$Q>7FWsOj66On^E%9jzFmPnh{#c3%+_I}d8{QR{N8!i#|PGo`Cy)QrnanybG+z_bgb=LE*4~KxE0Uf#tWwF+-_tvX@ zqY*ABl5yr07U<%#iS_|?qtklIrOt#>FNPUCCE(Aam$6719m6*B`!fmb zf@4{|U>WO3mdYus`Xp0c-Fo+v*#-g;ai?Hpox9h}PatzFpZ537Xsm2x?8uI= z);@i?W~VvPwlL|gng8Nopwo@4rEh8UYYA_nKPmu+%gqWiD8?$qzLZE3zcNyVJ+~no zA8sqi&pSI>Ja?)WXvhV{t92}^LBHOcm`k|F2|!(Alz;Y{@o>9>!^5F< z^s4@9_{MNw>N7lRuUC}tRCWQ)i@oN9z(cWBK77*S<7ne2AW-CUvtNC=@3fe5rj$7y zKY2paD6!81$KUyXReON(jXTfjLCDhQxR4i+xd;Z)xNC9ioXFA)!S^h1%S7*G<(MQS z4GI>WF5}&9G}vc;`B_sy(!)Tsq&FaN3u_d4Aloi>8(XfKMCG-(waYTwX?~Nln9(Zo zw8UR^CISAFaq__yFHfYs18Q0o9!;(XPZOuxy2J9y^&}-l<^M95Fles4g}Loc7p~+7 zw=1FJX?gO^tm7qoGa6NjZnQE>z5%3O8WE|zQE;;jqjoAdTzFON;jcK#0RLI|!>R`3 zPr}Za5#@3~jY!gF*m+adm&f9b62f9!T~la0iP|c+oXCuy(J!oID(eMU+&xCd5|=?G zhVPN<7nL`qT!b_ziYuRqAYH?xR?lLNTj_+0L3thqz$A%m`r;;w3Y4W^kBu=7lvF8^ z9L|UwH#XL|)5Z;Dtb^uI8m=nVhap~sb1Vp9Fqo-cYBX|ws`*B$7@9m)W&9UmYz&wY z(zT*3r0oV1hD)_mershR7@x4l8OvH)XFy*tPt-%Ay0ab`R3eyKopW|{vJl%fuKm}s zYWnhZBf)QRZ~8wPYg`r}S2|;>YWo!Z-$H&s12PhYd<2J{QMxZ>iGl5-95DA-7)OH? zUDtkB6jjt>(hu_TO~yVn?j49Js$egMu7<9d$->!^mionFt7eVSHR&k?IE4f*OvAgs zIuzD+Jd%VbEi|z4p-9fY^_9ovrv3vulIrB7AC~N zJQ?PVX0|`qMFu*I`U6;QHXQvcx;{17eE0gG!@dG!Ql@%`8vtuj&aq(sld5Rwqx0$aA=MCx&u%-YS9gsRWZ#jA~x4sZg4GuN>!Rl)fX7 zV3sj8gAK!svR(du(RdRluL5g-vPfhR3TMHu=Mg@*8h9M%MEkOzxV>FgO#@i;6Xzd) zw9y_uNo%IR+kzl{_7J>4lGsQudb&+5%8I2|zU8`Lqeb_NtI>?%9+6w|mAd)%7Lsci z_pjwax`=s%$9uGF2aOMjo2S>;0Ki>goAe|GBl84DYFbyd#$9okc+!X{oX}Qo~>9sRGxj zJ%>Urfhq2seXvdb)4P5)u_5cw3;9Vbq7l5XA{^3MngnJg6A8ux(UH@QL5e+J#ZP1? z_estIx}Xp{|KQdt8mkjtCK~r+R>IcX-+A?KHidEaP8TSKO*`^P3RQ}H4jrcHmV7Mm zbczhBVav6efI@4U<@5jtweZrTqH#5pS-54m!jANS(BRa%9I~Qi?+|Qod?3uZBAY-t z_h`i~gWuh$5#qU5?#-N0pV{t{wtu2ieCw5=?jR9x(A<5xO(&tdN?*yUK4(^`oI)g0s-!z|go+wEZ>(a|-z7pomdx+d1v zF+IPcQ8u}q%DnDhJgIyS^cwW|fJPzBpLCggrGj_;j1@mxfsS4)a9>X(ocw zSY>Xt!NS@;`_VnWb8{_yN-V@yA4Lq-7K_jm2z!L<>+YPzN{1W1hg)g+z{|=NYP;&K zqEa$HqQ6Wzd4A#$9kH=?b*UEvvzp06p+y(XXBYmx&7dw9FnEPRV`bCGQ=65xwLE;3 zm&MFN?4|ELjBhYa7o09&aYu18C8i@@6L5$yf3$vgnL!8`!Lw)TkqW90Q1*&Eo8O1>grN z04Q&+!P5!JchC#)Wx^{Ft%^CK+&VcEYnV4OiQyqI7R zXgIUhnzM`4*^<~8>nD^`KldaZuXYe-yIcW4Qi*C1#r^l*+BDz%gw#0l_-kAMF0H}&_YdllUAggW2C3!E{)O+mUyt9>l z^>%B2Gm{d+>v?Gkv=F9u-RM13*C8odO4+PjV5zkjS#LC$^eJg!d*2#RU%G~U@zrrf zIJM8$wn_T*xKde8jJ>zvqdVX9kL?7fr zaU~PLLa~e~c<$pgc(R9J-3cp8D$&wHwY>%WNUDb}1|xIU?Ekn>&5sH(eKDvP$h=K? zZw99Sk}Y?^L@wDWm%Gj;izbT=h%DN1fkumXiVTQ`p*g;;~7oz3|Jn`*% z@0-h*LbX9Xbc3%7VU8J#U>)GMTxfnkntgD%?4{h z;#>N#DS-B+>F?-bn^Xpv14?y)QM9m*^v*kJH#p`yti$#7^}UPlUid(6P_0Q$Mh5(1 zYwriZ2$xCf39Z3E35KbIb%s*g9%V?97A}zdhPYRne}|-hlikO;D=&ES=kE4zNp3n4 z_Nf=Ej&B1Kg7JFHl#|SdF%2zGQn0m|C27kqQ4et?Ojp>ig@7(p;0TP!JQZL1O-? zOCNAhqaV3Po2dg${u2xE(oyfOq?X7>6hl|(&Q$Vmb-}0n(79Jv?|C7uGdoGbs@r1M zPPWrfB}&0>>VCX2Q93U)+u-!XSqEr#hW>uYbNh?K7{l%Y%x62r6KZWu7vyhq7f<^nX-RsxLU!xdPR z`=@r3Ydr+;dzFY?O;$qAf=O608;OC|P=xoyvFh#GrRT*MH>S!Th-w3w_kXT20k{92 zv7@RHBh!3ayWL)?%wqU7A(nj2y7pheNxU)A42g+ifo*uI&O3XlT5*}@vY5Ct0{2>=TaCz&1;rd8I|u?{#h zrwu$6O67>&)#kjsR(JZMvIf`r!f%~fG3c$^+zg0^s{Z}Rrr)0tFHeSLk0s9;`Hh3^ z5~LgN_{Qo>?pL+nVhRcoiWEE2KU=o8w(LaG2#c@rZZdiHzwEd~HrFy`Q0>h)=c0skEP|eyM=G=5d(_^>O;tq;wFy3rcnoKdF7-33 z*KZ3WW6;Tt-kC^R>}OY0UC;BCu~uXZ4hnkbRX9A8i7BqK=PKi;{|r96%m2Q;zB|^Y zdhdCuM~>fjQaJT0TdRfjuIhUHFL8-iK>O)5jvnu&)ktv)!Qc!Nt16+NtQzRycJXC) zd^Tnt%X!W0G>(ocPZg&Ty5;0Ive@sLd76}kEHc@$H+`>Q#f&asW;W|UmjpL&r;6dc zT4r7si?LXePz5a|V&z-pxj_?D+4@9xG)~yF&D2u?{J9SYI~Es5I_!%h3|lH2oA{+O zcwnZkv!(aanAOwBwfC#58Ir)5ai^b^6o<8*g_3Bs+Q=g{Mi-oARIiUd{N6=!VxTEJ zUydi+hs!FZJt~Is$T8nWUce3xoBUV(thXqqR1Nde0~;-&l%mP0 zdk4VW&pp!-zWP+Y`kza5zj~l4fO%1XDILX0XE!uxf{*b!Rrccd%(B3}64?<_tgcWN zFwJGUokDh@b_18R@Vl6iILpCK3coAOQIZ{eKlHkk!noeUd_rn>xe}|MAQ=%~v{>eF z9Yel*%+(Q^7x4!N@ty>){JZZawS)4=AnJ{hr@f-lrUY%xY?39m=5cSO;N!QaLL4jU zb`f(f`C1AYw{D8j7t~S8-pX5_FN5TyC?U7VZG6C1`2h=S7Nh;+?LKclIz!Q|dQ955 z|FA1d@+!A4M0~j`uNGP9qDhca(MjC!az}Q&Co7c2%DQ&_rsat7{S&O4VBj5%rC3rf zBRFy9fnVJS3bmx7z~gd9lp%h=fu?_1rkwFuT*k>Mbc)g}&T?MC@XFT0I$QEM85t@S zni|n9!dYU{eM&Gn{pwxqS|S+S+JF8jSy}7dETjb4P_+3aXydzr;$`}XIgiz#gHBZD zqHg_3@kpK>-XlXMr`3t*oMNj{dm?d$4XPjq(jJ8huK;!$x_9qj#%B$C&qeA{o@~w4 znf$wNnk(8-nbPkZYU5@^&i*xP_hPh$ zNNiv&iOA0g>yb9RXE9Ta?n^4}3XO_OcG^#lCNdp%u#bu($9cS33Q)4%9pBAvl*EC; zm)W|;`qG%ZRZ`Xi3pR}PKTOfpN*_lS0|t-n;B9UO^u;R0rU zyYNom;}nJ?A1h`(kJKjUEvT{PkqGrrM{Q&nT^x3~DFLjE<&>TT@*5%+T3@G{c8D=T zMq)JaaHBf|VyBOCcBJm)5tdz+q~G&HXHDEjG7OAAF8{L8V?F!7k-~`>=%G3KH06gS z`_B3DX;hevPiupPy}bJ`o&cd*kndNr@4Zd&fW|&JoTmfUJ`9YukKgXZ>i>fPJYT1p zEP2@Y^viT8InNKBN55}2UJQ+pp!8JEJFjpjeXuq(l}RQJ!aBZ(7g09SOcC9~_?b+L zsg@)kr{beVzCpCw-9)^h@=$Xfo>HpYOtzzWz5*B6+nFdve7pA`F%5Nnaa3JhJz1h- zk)nC;-blVuE))s{{2Px7t}$X5LBXe`?zJ;xwkXVl6G*41SbH_qTrqbb7TaTtKjWqS zG6PO&+Lm=={DmG1-!U~IV)qUK)x9Q07El&7ot#eM^t`7%Llm^M$SEjhi?wQ13tv9R zieuF)DJsIz{)YeOMgCvbxm$FAPgVWKCoq_L{&qhc$iZ_4$o6Ih82YPb+l=uH?5Z5O z6n-%=F`X9A`U~xRi^&pvo!=B26UAB|1eWf<{K~0q&%Iw8WP^V<9sipUIoYp1n0JQu4<9^@k;fD1!LVD8kV^n|LKh~w z!~XG3nQEDbCZSEknE?>GlrGX@FZq}>HI40^X-tKM41;1I-c4tuQ4Nit7hxZZ)O#w= z4gB%KhZx^Vs|ugdS?K`rXUC~ot(Iet8-=Z;HfJ^mcLixdikFDZ!8MH^+7v#oylfnF zHxs^2-baN{H*BzNtq&pu*}s5SqU}bn+I*6nZ9U#oPM>!KKhfFo(YbhklS1pK3-P|p zmt?q1t9xX%S#TetPA3#;PC8M!;e+NHsx2Owm-9jWhC)NoCnfVC*gLTMZB5RXd(U{$ zWJgquslnI=R@R-Q4!Vm9-GlF+L6go*E#DVrmKb_)Q=#pait2=!t=5LmxT!W%^GKBR zZ*EwqQrOmsyg3Z!R<1NFM^KXxDvE|F8hZ1U{`ISuJk3rUOF)jhk%_Gb+mAGm)3GaZ zWf1&?o1M})mWI$%|jU zQatNsj_m*VT}$f^SnvQ=$dQB^COt!z)Zh!8P~}#o55^xoJ(BhqAe*G0;hc^FUG&7=?4?agNZZ)qn!?kASiwdM@pRNIm*nDj{6>N&Vx16nbEEg>CM5g}ihCp} zjnC(-Ov?)IVf-ofxNP%y_f(is#AWb-%>6pzzPM_9`OnqWP1TjD7E!}uS7Y?n;9HrK zbzhy(4;D=ckaq>FxI;CWVM#;E9*gAoo5Q0@$y4jyLf{pI!$)}JQ*S)~*-?41Q$cs+ zX*@*g$3?yexFeN^%f8Tf>I;6a9J`2<;O>dQZRBimQ{Hy_6PI;BQ@APQ zaJ)WoHPfmYB#I(rt@@P4g|Sc*b3Q~}uGcCut%%Qe*vWt=Q~}dkzb+nm2F>$gZgtGD zFd55F8DuHAsnr<_CB!e^@jShl$*;+xmYJ&@ywxys4!JlfS?_X7T>4yRfBcSDDL%2E zFfWU#4-QH5$yEi@EFGxnreqT_=m^}%;}_~Vh5nZIxqF1=g4U`>kEnIsoN`Xb;1H7W zFt_VI7qqs(nuxOy$vRU(j8YHW(<^_oBXiG++lK)Ja_OXl2W?X?C8|43deyW%TDLrX zNF$Hkz-s|#EHh@Fz9fbx9zAWT_eqYIX|0GG?Q6;SJJ7uwl)}zfQX60p-coxZc{bG; zMsWjM4$_?J=ZN7V5J=BHUz$oCkS@;hK{oZ4&uvpV&1YwJvrK!)48=Ya`2(deslg$P z2%2>1Cr?z(!!F?+E$#pO@_5`Hp zxV!mtA8=5#oZ;`=%>+O1+9t1J#_l(uP-ZXIxU#&|y$0Sg`zZobC1~?7F)|$2a=xX3B`h z-~}o1E8f>N#cyv=N7YI$s35}f&}ZRgk7(|>97h?(U4}bYn5Que2#g5X%{2+bZn5VZ zJ?1jYA<`ldPmb13R1?S2UQzJyola36bxw7-!MmEfAL&e1=Po2&tq%mNpj-I{krt}S z&>polCA*_F+1SdprXSR6m6b~-1C0n;F_>0)T$q=`ZIfG+jR8lvm%VZZfk$mwPwI$F zxzbwaiF3kIHhSEkkP<0&d|lqt8LYBe?T-$P%rXy8X?hEC3BbH?s&2!3A4VCTbUjT? zp5}Ux|1(#O2=KG_E$Zl2(KMSTElb~mBf8?&O6S!YUK3#A;O&iY2=pdfT`hddQdRZR zNIe+Uh^4=53?ma!tJKvn8cztytxAPG#8{Xx>lPVW{hK=<1byMHk&4eJ_>s}?`xZA9 zuy5Geo3B>}=g8lt6bG~s_I>xQHbgIv+cC@L7khbMrlANyEmb}JY?*oQ}d5*UO$ zCjEQ59^UT7XHFNT!!JWV4w?;E3_~=c$30N(uWYrn8?yxCgm!``4u zQ+BUQEjx)PE{Ioxfj2q7sNQi?adFM?^ofg?hj`XtU9VRdYFc|g#%e?(;;QOKX2370 zwOnZStmb#-f?;gwN?|Ft4Yxo}GRY<_=w>;ZH_OFwOh=-Xk9BF{_)NP9igcQn*X*}D ztV@uP_i|EOk=J~RWl;T~f9=P>JTLLF?(LPRf28>KCjI$WD75DaTbSHuKR4WRY{mfNs>f#DGbNYVe2k*ps7lOeMO7w} z57C|roDG0Q#s{>E5qO)|T#s?n4v97!5B00L3^3iGjzv~Ax^Ajgr;~=O=)qS>I?Eju zN7I|5fW@I>OAYd@B7pOb5e^r2lD;%JUs_;_-?~qhtVj3fX)(&?SH2@Uk~+E&lob|g zfK*---n(0I#C#2qBYb@Pz!X7NRbYPr=rK=}#LL*wX&|&Bo6_7nbIEJoA?o$2y-^ID zH7MjF73%TYh~#RcNuAFSj%cbsE}3GeT(V9_*OsFFZy`qGR3eS88^vnRdOx%uaY%U8 z9L1cqmib(x{7S)>JZc|)`}M!J>5GivihOUclF_8+xcjNdStWzrYh^-c;IY1+UTj+9 zI{p=+BW*5fzY0ntTxA{z_2icDX!_J}Dvx71ehg+D%-L1u zbj&$zCLK|dI69@(+-7H{P0^*YwL(r&5{*ZjnkL&yCBMh+dXOzU@eh!sp;AUvfSxKwcMnwPvtsayczL*15!L6 zzLKXMfVpl&3{%}$SpJxfJvnwtt;w72WRek|Zyq=B_@aDp8OC?_rkXr$0y79i5`>1x zrDL&j0;VYc2)qvI&h3)S29Z9-krv+7bO}|j{7YDuQ0-+OBv;-?_QK-0)Ma2K$TZFM zT7K}>`to=_FvNQ)5KF-T168Evqa&b0y7m0voUt@WvQo(ic=<*g+!Y!D{J6AQHjog1 z{U_Tk{x_HIXNea!ne%P{`@4Wals*O_uDEPfm1wK}G(8XRO92qRyr8i7GxvB1(nj~< zaC$vP=*3;F&lH;*yf-+kRgoS^*gRB33gSA!lE|9}VTst>R7CaLEmLSkW{|yJ)r!@e zrxZBrw$7~_w50!0tvo8%GfD0D3ezl+fUzovn^?K;Ws(faw@K^m1S{m71?Vq z`Kn~w78QhCgKe)X zy@2aK$B50IWmF5yY_YELsz>%S4?YCUE>&yA%pz;mn3S%+$5lzNfQS_{#LQ1(M&w#e zUJS2~Ki-=^#D>tf(@MH)hi675{{g^WvHugjW$GK2dbw57W112CWqAJm?Rus=^!O!T zmHaP)>`!mS?#{kg$?aqw^@!my-{2ml@jSG<`LEBZJbeELYuhzI{ehb2Hx1gNWs0_v zhZwJaUN6tYhts zUcx=Z2n%;(9xBAD0?ev<&F)-N)%(3EE_2fW&bjyCF{cRP;%ME%!lG2Cae}}4{{1W< z!VB2en%z$hz3^MTO|hv*ql$3hM+r6BJITFm!Nk#u`@r2Ht#WBbB{S(e_G9Be#J^_VSie?J7a-uFGJ(4?_7g7Sp;-=lMnNi z3~`C1Uizh5nFzg5bM@K1Z``oc=mF>TtGIU9BUnHm^lBUjOSamNal|FHnunmGlB6qb zp0w_9{AF?DpDIFY#&m+Oydf#C=8upO?9a@T2-rH`e-5Lvp7qcjNWdN`42KEP;s?r9 zs%&_ZCT+<~Jy>v7(Q;lvzHfhVRc-S59iGH+*cdT79o)sJ@h%A35#o2C7^(Gqe@&+& zI(ypOSr3Yeh4YNbw@F8sE8LNawwcT+k74!z`-&LR5aYowuQwS&A<+=Ve*3u>;il~$ zO6h#PV29735v4maifWSh#@i^N<5Fi>U}#{~7Q{uR{T!dwD^C`$#1IBQK2B*TbJCt5 zE>Tx9V6;|s-om&_bKBf>Yd3*MrnsFRy%zM=_b=&RrAeqSD;6`2J{s!hwu27sc%zhxZ2Qm(Nk;hLLoMl^3@|Vj2 zcs=T8o|WQp)m@WanrDR?r_gpv7KwaA9hL&*&hv+%OOPZi9m~PUOyg=LP}bMZL=JyH zuaKHi0l~S5;jt>AFIr^=1ElSrr|XaEaFSwD_;U{YI?=VoPH~`m76wI1@&IX;+Qs9< zlvJBPr-cd4DMOI(o8UD~QiYk92Cc_@wLf+wB8ITvn`7U8vDcsK@4#X>X74^|LbhO6 zR#HbhuOudWPv;x%3`=&Y<3~K;+q6)HHix?q^oyQ$yw3qqkggVSz;g5Hbq z;)HnNUrw*TCm%N<|E5hnco3);pYrmJqSlu>JrD?6wdmsaS^rLU&2|s$uVn3mmDL3k zqq74+czTU(c-C8bNnl3Y_^v9I;@%z2*t8pB@;=stN?IjsODSrZIx_T)_O97sf;kHY z(XI76kF%4e@TIfYq3omekz77W2`MS>fQ31+)6e%l7L&%b&>UNBC8gS{9Pb73gtWoW z?Sxhl`q_&UyJoui77&3_7nMd-TuTNVAA_?cq)xa0sanZ&LZy$TdB)Ya<*k0WA61WC zeID^{928OY-S_Lo;j!O-ON1<)#PK#WRdNY_;ERZ50f#Fl$K*K+`%9zTu;P<3%IEle zEl2xI2$goxQ4p8FNVb!j)`Ge|M`$}Xt;I8h^`9EnxV~DW&*n8+0&PMT!@3Cob6OmZ zj0P}FR^DwI4%m(|xzIl8yUj#H;klc~$g@V!|vg$31>{6K?~o)-TR;^bu3aS8qr;4B`*d zW-6%H{RgTBN!e)aigxCY+Whn@Egi(KSJ0{Ja+7sH_*>fv4Tx=A7cIZLw~6p~6_654 zw)8Gweou)PE?=&v4a&*t2oSLE-9ZpVn7*WgZ1-S;lbjciYqqDKiz{Nmr`(^Q)cdx&R3HNSXHm-mXFQ{n zSm9}wJ{ariW{a|wD9o#%e~OME*LC+0jD!bKS02)Xu80%MqGE1q#?Yb8(RjlJkDRlXct>KD; zV?lMXTNexNS~km*T3jpxgf{en>rn%GvX6t3iwk4CDQmDz3qb^NaQ>9kxYX2jdktQ- z3cBVFW4e-F*$}A#%1lA16AD)5(0lp<|H;{^feE9t{%jDJ#fZ#xeeL}M(jm1#T(Xps zYA1-;XID*eCKIJp51}Hn`RMc-vTi4_yNG_(?J_Vbmg}eW zTLg0wZO(vrnS3WujBb+3(k#&;LA>+lOP?NKTPYdM+wv){yYo*b3qxAv8Lf;x*cXlL z`U-0@li-B3l&06n4(`tr2|8|L;UMZ9rh(LqpDc_|F{|Jn?e`k7W^WcPLLOBc&Kj)E zRAiF)%YF_qb$?Tqt4wh^Mwxfhv5IFSi)|xVOLc!X+m;-!$rk?|gQDyhamn#@P0O;| zX+EaCGv%J!tvtx6f8~6CS%89rs%P4*X>$YgP}b`E@M&G!jpR7-i`}?#YX9B?gR8~` zfQdQzH)?Hd&-U!x&Rvv%g-9^XgN$HQ(NgzpO6U}GYn|X*_uz;=hp^+l7^V~3F!0bl ze?57y)pf%s5FRjJ8vLB^m!ZsI;Lt1;i-C;I+i8bCZ1k+2j_c0Fh0Fr(>C*uQS7)9J zz@ogcSJwJvh(Iu}{ld71A93F2dhvDO>AFCsCH4E1+SX+ORKoWwhr_V5ka4l9DN5UQ zOHEh8=&r?h{PvZ)VYg8|J4B0e1M1`}P7>ErS@B-)!KZI`BCNtbv{?pbvGWoThC99~ zO=1OHAyO$9wT{_wW$WkX`WZ&jbrkuj%OosB5o4CUQnlHNKf77`O&vEph3abRbF(_A zR1_Z=O`V^ocE?bLlt*=wPfpD>M)GrmhTj(%<=!wW4p{!|>!oWqF-FMM=m9&MA)?~^ zpnc^5qTi7I?(KQdDwAQ6)m8Mgpy24EnGh(03`r34nRv&lCnZPyp0tNSds)J?A(+N) z^OHt-7q{J1(T+0QLk*DCx3t{};%t^VBT9?zq*6D=*AZN>Y(w>HpfgrNFRj%$!s9Zb z4AiGtxw*km$-x8c=_9NkSgU>yPd(BO+cip1CHfo^*8|R8ww%3PHA9s96IHerv)Og3 zf74DyGcOyf2rthoSFL$&?g-GVL&aeJpWG&Z9xtCNI1L10Bo)N)T$=-KX%vE!$@^{x-~PftvD|z#OAPCC5iZ%cpbvD?1mqq>)#)v6w^ypDl@Cf5=zId7lu%5 z_lY?AoUFCT?&%EYz`InH<9Nia7?l=bydxm6o`9Kc;v%kk;5LcpF&)HJD&tj&6n!JB zhKe6WsA8(gqDP7v(%g`t7~j@XH1&RIyOr`?&3#pSi1l!gnMWQsiFoaJWXW7Px$;6e zs+F_PRW(s>Y+BNSGh9X#zD+hr#;(R`9nHm~GmR6+E+l8^jK3~^ayTK5E7bP%eRK+! z=eg}<;F^<0S4*XXs_@&xgNCtz3q#e-RKm-!n$#Z)g^kF4sD`*AYf!p zOsnPlR@?n}mtW)@9&wwnyiXtgxp zTDktR6+9<2yUW}e(&RSrD}jScv42~!azgBFxC_tt4HNzPM}@?vq>Y(^oS%Shsvyru z_!yUwYixIPY&zRtY!DQn#$d8(Qq3O?mkp%ugNr2eYidM!nbYI&5Y&!X-aYOhX^ILDR@>L zrhlJC_R~~V9fyU=%62N179u=3wqq8NV>^y*0H0yur)pZKl5ge1n1u>2w!KBIJC-q6>>fAu^St%N-^pY`~a|;|&m0N^~&Dl@Ka?h!FWA ze=Vi75Z}&f%*QiN`!dX&&AO0pKOy9m#;?S!2|HpQ<0X$I=gAJ);OKC?7(Bp@2FKES zTGTt(b7`4XEHKz)jW82kdoc|hIkiN4KyZ(eoWFZ%&TXR^bPK;Ixp<$y_4qiY;+DK`SQVy;I{C5pyi{_gLmNXm9?chJHznF}D=G zx%#MJ6ryD-cd<9Lj-!?Kj08VoFwP8*R1Dkz_b5TEWl$o{LMW91&R$$%W%dtPMb`9+ z_l;&6eP@?He;2%{f2Js3%qppS)eQYte0C?7K%Yh!G#SA?4a96ip)_Iakoj%1piK5K zGXC{)SvzaL0N4WevS~f=p99*vl*k7?4D%ayi*EAEC5^y(d?R@S>JAG%7rJK>TpDFL zyOyO9VIbj0CQZj zh!^9Dl~DSNui(>drwR4_gE0uDGDt_OAwpKxyQ}7KvC=`)`pd*viino(S!HrEBw8z_ zQee~5PSv~|Dp?w+be$L9eP73-=2$i%g@dbtuC+H~?Y`lB+A6rAzYyu3)Y>;OmU^1$ zp8orKK(x}qJ~iTQs(c1Y-E6nUi1==_6|>AwgQI=u68QLFF8LqU)>pvq+N8d_6%f#I zGSC1lTCqhrpzy50O~+i^dj$ru&yb9`|D)r8iyPoeB@@PcEa@LVn5*AVZ&yYn@F}5O z20~^P7;}sJ17C|37>jk)J*t339+yFT*88fujEANA2=0RAH-gu3Ogxlyvm{2vLb1(N zH6mksfgs*cA9bHyeJvvp5b%Q;SBk2Ev3Cv+iLAPvtk=kLTZd5^&pFssDhW@LMfDHY z$j6D%-&6ocOa|Bch_zE8pA#v(jy&$8{ABuy{rqJ!xpjj>vlAQE5K_RdD9&c&u3iI7 zpX+wcKB9ZOA}pj|8=szv>hQSyM!#^I`sE;Dk_JtI-rkY8mQ4QIpNJz_hw@KKl8;_0 zsliKRW@8f@WV349-fM5|q>b&sd)^WIqH+JHg%EU6K&o-QC@#(BSS+gu>n3{j4JWzTLfh?>>F{-m}jgcbt3)gId&BRZITQ zeCF?&3x%7So#mLV^XS&u{bG8pn?IS(zvyn>;GFJ^;sM|Jc6KXE@mWcMW_p>%InYC7 z`J#qu`RsjK<&t)wNX3(*0GT-B<1b3wtT>HEgAFud7mY0?+U2e-Lp|0WFE3G;@ci-% z<{I^n-=Kv$FQKE*&~KNRh$=tKVrIasjRY?FM(dJfRPv1TINREDwc0T?IM=PE0^`!65s8K{O$^z>M6D9 zoCWj7HRqAg?1wvjPukb`XKkv!0rwm?quyzHENoq^tWGCEac3Kc17`%IET@KpBwL%) z@v+3nMwE(l+~dwI>FP+7WK+V9;|V?eQ@q7Ta4zWF&JrUg7cQ}Of(bv0%dp{Rl?=to zl3J>j1VlpV#q0Ql(w$g=j+3j|)H1#$Vr>=bcuK?JwAImAiD6^l8dSm0xx<#MoPrM{ zV$n!KWKT-CDR;zo6S`^dycaZvXVL$&IG1CtPJNW~o%-0eTd~SOw0m zD$!YPIKiCU>6^r3YX)4BoBIe!2k+h2pAFA7zb|$^s`&6Yo9wRPaG}W{!cZO1C2^s9 zrV%2`F`-)16?Fn8{%1IB%pa__yVO?pCSmJFbR$|QO~lgqn9R3RiKV1&%Pz*_DBz~E zz4Xv%bKn%%dZh5Dt=^Qoebbj&=Vfej^6lIr0v_9pA@IJ;dZH6rxgu?Ib?Um zEB*bK^EnIpJ6F6$hZBxm@^DI#Q}!}_PXtKopf|$G;dc{_?C>ug}EeU#wv>Lb|t>`YyJy&&`@cDe3%geEJPWhd=oqY=O(J!l` zUnK{S4r6dB28(VQHe$pia8{%tc`yU#!s4}Fvao>o&E)=J)9O^5jXOfXw#v=s2e#Ek+}_14T~1xXGCG)cVn}Osm{6zh?9V61Bk?g zK0a% zzWM%#f4))BDdA3oF|I2UwFYUqo zMy#54>bI7crSMT6s;%XG4#;=NxCF zLw?C}+MoE=+62cHa;n{+JUwNWj^##N>*(nIt3x*YJ=g@_TwTw75xtZOF5-1ra; zBSDk1YrH2>${`{Xs>uRyaO>MU(zmO-Iky(aH3$zaFs6xFsx2}_#G)nhvSwAen6<%A z6!Rt5vQ9J#a$oee>za0PfhvL(a@(C%dyOC25T<4`&D((TOp`+F(6)cF6+QF1xIX0E zqaJ&ui0hY^iz>w%8fC5Rj}~O3>&lwi!AkUwBCG(3<%Xu_m`_$RLy2l)VAPLbGc`FV zxRL6M@-3@^St_>dc+5q0%KE1z!fIvoiE=v*&y5InRUUB_S}`$e5OsA3r3A^C;lR!X zn|LizA#!DWq3er2Q#f&)qwkQzT%_ba_ml2f%isqo$P-=tOe%(7%4H~YwI&_1h{(pC z3f2;J_b4)95=FVH)E4Ev{lMqxaGD^3DlNI(pQ^}2$~ZRsicEU zqguZrPg!|#+(2XRo3iOl1k@a<8Ok>ofJqT=`Sr_Rg6L1gcJ z&fiMz)t^I;fobUMj~0rW&o!L-Mq=gV76heq+DS3N_=aT3BbD!D^ahxlq9P);<@!ct zA$P<9b%JbHe`Xhh+DQ%9FRu54^3*H09+$fxEop-kn9vFs(8y|K78>tdvxu`~i<0T{ z3$pdjea3|92RUa4RiaPLMuh88C~n<$Zq!_5)tLJ0B;S&cpf>)ZqwxvlKD_e0JpY9S z=Il1HY+1QLRm;~xW{w>17d{-IYE^c7pf2ZLC!uZdw-S35h9gQ0o%%F$w6z!GV0kV-YY+No|8#* zUirL`(5MVXa8c_Z=#EsZ$%sXq#V!7NN~AOYU5eiL64$6Kt!MXriqZ z-yj?lm0^<|DFe6809-7YKS7F91n`zVUwjIfbMZeWR8=eyiw&t8pri7ZU; zt6EPgGkP_y2&2;?+0s26bW45jbz7Oft}3-JT+xG-j5?WqKAkZGkyb z4sV=>MQf5@6dg$Gt#uaQdk8AhCNZDqK)F(MGL70PRKEb%mDCsYZ+T`tBV=fy`b5_k zt%1~eXh&ZsYwANdCTdb!cC5z=eYX^=d7gZTrYp*qe>Zn^sGt0q2Rl|vR!+MOxWjOD zehTeMW8eN9szv7$U@DxGcY(LEQI%)4dK5B2yvmrGi5_IbPb-$Y>R&`9&Doi$waEsw zIPt=vQwm=)kofy$A6s9{37h)#PJR1fq>5a4>=EIFNhv*JYS4mT+r+{k4m&8rVYji% z%Wjtf2XjYhX5NROxhm%I-I6P31|g`#+)xtjPOvfqIxy?X^M}(Zy~5Usf9); zw2y}^DALk)TC2QkX`qtJ6L9SDdy2K(Ia!Ks8LyW@h8-$fK@!Vy?wZym)9v;{cj=JK z7ve3CVk9J}qT@FKQ7d_B%2jkGDdDv>_%l2EyuXqLbAgqJHcXm$H73*ZqZWP3B&lg! z1=|)xW}cOZVLUk5Z}KJqKaDp=YrlLoyjvB~fq7~gX+C>9I@rIBRW(%SXf=CK?Z#v$ zLz1!UeIK}fLxgS+?rV7Bf+PhFH@&9%C(n`^GA!Gd0}a25*ylDT98F#Q#jG7BPUkN= zZrd-QH@CyeM;t6Hc44<3>TV~qN=)QPv+JsRhhZYh2ceTg9Ndmhj%Pfepl4q0%U2@M zhS2K-%w3G*z1^F`{IlClgX%DpCSR&vyXN+po1<{|1`15i84rCR&xVc`czff$$YrU! zH!Ny(XfX)qA{R$g{bIpSBwzwZn90OCNlv?!@8nIXZ_(%19xP{UW0%D*W2^5vy{5Ly zSUFXNqT4|-pG0ruKZG*L5LvJJo~#4m<-c6vXyYDli@5h>_qV z`3svWhD5$w#hKQiqL7Bpr|01?RJ+*~xLC%2LaYo|(AZ<@XVGKd?`pP!@rN zpLNg5L5F^XzG4V8x?Tvlwcv5p=C84??Ja#+8c{?w-^L~h;cH92$j z;o^Hx#-=QzqR-cn z*tV8M?hI*kMj!7`yoz*sRx$CSlo`$^vqYVv{6!8DriuuOh|H)zLYJtC^TFg6flEbC zI6LBIKy)~aHc?w65^I9K^jB|HyRjR8VhgreS@KsC3>1wc7P?Kx)g)C;QN}bxy{k<2 z?V83aTImm*@vIj(t?h)<-s?TRMCvWXP0aK9?$XZ9p~aSY15mr_(yh+n$Mt%8Us%)( z70qV$RR~&Bi= zL3d2gU!2ZFajr|gwE6jL6$cFVqT11_he+ndq9(neF_#}bir1N4nmEF-okZye7QGIq zf#)RssR_Zn%YY0 z?p1r5iQO{m&?!Dk=aOp^5#eYN^fPmi9oG}<@Qxu_zHAj8@qpgSz@mkD-|nSWhcb}?sftoUwRGXg0#Ons9) zpb>5#p6uT;D8E{DZa~IH$sIp9ho@*6fjVp;&2cU@_5%TA<774~g6qxccei z+Hkug{Ra8ro#}3vow<&uPn+W%|79XDzh!uQe%8nJ4UH%WU*xk3V>n4#oqkeK!8CDs zkVBFW1ziBJ+FicQAr{#j>|(M)1bb5LGS&T%CcCc?CQkX3XXJ8>6iU&h;z@iYO->_i zBM(JMqy=r2PZO7%U43$ZTM#s0r(Ii!xrsRaR^oll#+b=uW5Hqh<}>h*Bz9KT_0rAG zV8X!!wo&H^^VxdX&?oXh7|0YiKX>%t;~XBdBo8YqtL>(2a3libJ>s-2NxdCJ^4q^%U+a-$y?nsR#T!Mkc!- zPz*Q3a$i;ewaJ{ucbKe#gLCzG1`Cw_Pd2iyxHH%TiW@;F&;7?68xzp0-86TYmsXYV=QrTXZmbr$h_6e(Y#m-Ac=}VyB6wQmQ;HeW6i7vE zW}KJ>xTGqd+nOl_*Troz!dvYM7K{dTp!EMds7EoBmk{IMSLiaRi_0481Zm&DpuyVbCypWHAyGJ;Yy)3)&aD{*t_n ze})YQwFsP6;Y+b&^5>Ncj9sWoLo8ykEk6+D7tI0c6aKKsawBRG^;M0HsvMt=*YksI zw&*t*DP8e=4CR-T)8^GzOf@)fE4e7}Y#}l=rzd);RXLa; z8Io<~YrEyGVAeoAQ0W$S&^(lSxdBbJ-WT=)l^y`|Crz{wt149&viq7&Bo&Tdw||O{ zQx$-vd*8=Q6S173b}@A<5&1(RKGn3yv@<=_QZCM~f0c;1@GSU1n4HLrT^G@=~qP0paZk*Lxjgga6MM9}&BQ;~s%rn{+KBH$0WT>vkkFlt8R_!uw zoXpDoj+$S%@RT>HXRlCZt@vr7=c8Q*nGE*)DC|&%eOe4;oac58k2 zQIiy$6Leb`1wGT6C2W-f)-(A4Sw8i^m`&o#h%P-^mTn;=OZF`>jgX<$vO#2?%TSV+ zbt^a2ZP2GHb9F7?)L(nDMkOgOGoUizwVd`_XSTtROtIjY&w&j-y(?c8hAW=)hntsu#i7!ZE@^UK$jMJvkpQV`~RWOD%{l@2&r-xh>|88&{f8aZgYv~mbFLTZ=U0VXmID{A`V zgk4_fhFS&wk^6_ruEKeohnBQV_{U$o)~tT*gdM=@fYz7)tPa5O=uZL%eKV!$nu;z& z#P8*XxX5fyrk&P0VuMf0SjiQ5IO2XC10~oOR-%_Ji%_c|Pa?bx4+1oHq>;xSKq*n- z^7bWSEW?abEr37vwvWOS%GDu66v!50XKn$yhG&yttw@ofWiyM~^d*`jS&KJzjIsAX zD2)z9o&allwY-_ zopHDPB2sf={WOYJlyi|S9XUcI3lnwZFL{Nz{4sKOnHd*e%*@5VCMSXl1sMq4iCS6l zxTc@)IZ9RYIi{H_#~a!Ix@m|d*~vCHkcd9*ER21IhPKmqz2;%QyXR^A?N<4$bq{#0 z_co=G9a^fR4~ieYfusxF^%bf%ln#g=4iH*HMaS+o1|Pf7;DzE^qkK~_Qflf^s%-6m zm*4z_zu{L98e?I2RV15g*NfpjYKkN)xjgZ$E$ySHRxh7pKTBp+!<(|{PaX66<4OrK z!#YC5M2EhQ2+@?_jlQG7#DOE-9JwE7oRk2=a21N_4;pwO)ydPLBo<_q%mk$iu8z8>F@7+p7a#xN zI^yQgG88+TD$Hc|`gk%wxiAsK5B{|miLOy%iA4P%9NdkDJ}ZWw7dfLE5QG0c7eGSv z7Z&MT>Y{G`#2?mlRrv$Qalu+&O3xpT9fRG^J$@b)Ua#QErbiLWo#11W7ZZ%)* zDO0tuw7o0WMwL4`^O*q79C*X;yr9$={M;?SHUw>m#OpXYXNB4lpf-;B0NF1ke|*sgy-Lys zj9gPEw{qc#+|HkdLQdn{*4fg^E!vrWmFMG|N&5YuP_;(ip9MdupIHc z{=FLD=@?r_{+z?gXCF4I4IQ&z@9Uh^$<&8#;Rkj;F4-Sij8fXxp5jhf>CKl*kF!k2 z363*V)5qZJPax&tKx!YMy)LUTbrq9;TP$@0FXr)`C=)mN#oFvEqJ`(lisrK)-^aio z-)XE1XPKBaYXXZ>vZ>z$P@A?}@7RGYv>%KR=)YF%=lW)hXHPRv57{Pj0_=oxm1sAk z;96S)o_B3yaX;3Hx%2YqzxmMDDgUk!^mkPz4p%#NKdBL0%e7@@T^TfCZo5vZp=p6_ z(`CjbLyCV5VwWb2oK`;kN|(3LAmpURP@a!ltV&&N=0F?l%7s;&&cwZOv(wzP?QU9n zbli+!X%%s;-{l1LUa3#`a9gq*jNOo#)_+W#eSZ{ z8`8CJcD0d1NA3oLzO%FqF5;l@wA(I`Is|h=@`ehD<-j68>uB!n9kMm{034%{0*KI+Kib}Y1u3HKMspwc%ktpI~|Fu4dtT;tI!zrq@{Z+UFDIpYWTRIA(kawr)hpNVaqn1ao^=&URkdL6<{p5PY&%)bheX%~~82#do*`FxFNbFsBm{v{R#A{s0u+HIz>SJ_gE|&UdZNFK1NNN$^yVxM zR`k>r5KuEMWSRRTmMQiJ9V_I1l56#Y_&`Z`e`u8#7vx9i6NO#|ocEX_sg@Q_jHhlD z$<47fo_PBdh~zUo=Hk6WSQ=|?<_(tPal3X{?TekQb30n?_e8|vHk1XF&d}q#Bow&I z)sk2pRFTRxzP%H&Cj z4t;!O+o)*)ZzCnEW#ERfVo`rQW@w1*K#B=-voQGuKC>pcrT}@|83I_~jN^NZULEQ7 zggXaXU_jlv!Xd!Jy+5C&T`}Jc+C&iyc76jV*vw^>-_Eb9%~}04kH4YLX}QA+u}nU7 zKui%>^W;@G84;|^1Pgq8+np#jnY~VlZGPBcs`Hs6>+fOQ<|rS!Tv!sk$p(XyZ|j_S z23DB@6VHB0WWR{NIg_xquHW)EDLai58g&&O{#GC*jqGfA^6+r6!u z33oj9hX2|;(n@+Pp(kAPj7Ig?RoA=m2@{d8p>kIg^Deh%He*jL5TQl7$i zx=fm@$tLtvqJV4QgJxX%r{Vc*tp+-Juw9oGpyxDb);5G|smWR@3M#80KqI18^NOw& zcCRf!R{i3wZa5{MK8U@8)mdf<=429i-I+8%dNGe~>b$Kua6_5M9@_9J;TU(IMxi|KjU~U3D26lH!Q?$mOl& z{|TpGSdQDkUFW`(nZsTNw>tzq&Fij{Zf`^pX-mXUn-HTXo^nz>QQ@8#0gT3^kA)&; zzho#IjFFg~SJ~mKD&Lr^i)UnU1P|3)(9eN*qNW+y`JGZDs;_5X zEG;q{p)S|~uqchrzJ^8Sy-Ej)R_#^6nWbqas{Gi9{?1)>3MmlHfhej@+P5}>c9xHh1M z`g$rtQZC3xfmWhgE|P(q+>uL599@YWsMeQ9B8(aV&!HV~z_XHCPf`A=>hrvOfCgDu zq$U&DFMG8yp9^vIkfllM+>Hn)`A~>=ymVk{H&BJ80(Slq2*lBiMzfJDB)*$%j&a9D zw`oTqacpWVv-6^^i6uPa<`{WrW8}7miQz3#+D!DF%YOe&g9Xiy`%L3a6#3@p8&_i$<>&M?SqN#a>Vt&_&A7d8d_T=-E=a`lfTVzOt|L zf8yekP|9pAgG8quG%DG7@xi=%TiQAJj1q?fsq(U_=2@vDu8KK`oa=tM#X*=HoC1Q$B0exUm`L!>}_1Pp1uuOpJh~K$NdTL|`XiICi zHZt$L@VCZ)grz7;3R zoFIypdb%V#Gl0ou`x!5H`Dx>t!gwKHe9~OOOWjR+3#BkMCY@c2ztm45z1X+ryOq4J z_@cI_-|{ zYArv~J)Nduch)G{m;yF4qD^BrpR)Q-)xC{tMaV>sn@5N0jve#F3B{xT!r51;a~+&k z_*&7aC?IbwF^>Z~V*;4!eAO5Y)~P2llcDKm_|V|z^p#|9FMWdZl3BY3fx9-{ey}(xcEL!n_b~r2siI<YPf z+UkStTLyvu-L5{cKu%%>0+k0no)O_vB}kIy$NpnO$MU$OITCtm)X<~}gGIZ}x-gYx zcJqR@f)KNrk~0bShZFQA)88=$%j}3rh)x@)9W)D=G{K(G*r{Q?D>wM*kA)gzO${|k zww=OqAMg+#1K@-iM-sSe(L|_>`Tf3>^)OACUlfUR=1(Z!v~kTQM02f5W%*Qcnt+MN z_{BGCT)z0#1_+);%Pa2iDi%kM9`FXG8w0TjPN-nQ{Kh@sBdr3oyJM%C`#mA0y#%l0 z>mLM#A2n>8(_VBKf4LDRcz(En#O%m&0j9WCVRXj;h#c~E{iBO`Vyd8*L^xtb2t0mq z`(J&;2m753mqG*&)VZ1}h^F5X)w0r&-GFYJ`c+4E0}D_?S@)VgH=&~e9Vwh?+)|Vb zPv0EvXTHIDVIZ5czR}P~XB`L{&~#hz39-Uk&C)k)i-0J#IU znK>~81|bdnqh^2dSyj7UJXKb#p|0bzFVLJ`mGt(itm$1M_+G`8Q}j93k3sx5`%@=y zGMeL=7^G04sxW00p~TX!&)yYe{9Ut=gmaJs(Uu?Lm1gt~1i(Bi)4#NS5UVN@is#S= z`8@X{p=w2@OELZrF8=v?omJ&Zq#oE)OA?SQ$sTElf$pYeV$hROJ5K64Jyb{b#O;qT zD}SA0_F2pnTms{&uF>!gJetePyK!>oPA>Sb%qp;cLsta(%T2~L3X}hg@6mhW;N`u> zRfuf#yhppXFb}U(Ma3%ngw?`{L!qoqfk2%mld zo}Na~)*w{p1`Y6DA!vHxQ@>keDc8hxvrws8b%5N>M*byhc;x9E(p_S;D z?kIg>K!<})t817Gs4O z%rVfXTebyZmx?t=@V7cfp~|VUD;}qU%q-jKJ7XZ!Qz;bh zHvLyMf7R_KC6I+JH;xS)3bnyfNs_Xh7aY^+q?;!~M@K_a_lRP&~@d<}S3 z!U?r>M(q>;QrWnh>m~RYkh7(c-T->=<~VS%X^ns8#fopEscGJf=GmEESVeMUDwish zuv(7{z^$$hlTjMMO;|-wF3o39nt<16t~@R`4LZXT(M$!-l!M7`7^>|~I@me7Io$gU z8KmyAdC>POEkI`5uHeo%NU>ax^3(vbu*71`$8|tqJi8>#*!VJ@$+0Sm`i1yDf?ayG^ z-`%!Cx!ZfLEmF5`esTBqqPs~A!@p&>8E9Uu`T7Xl-SQnI)s&q99D!qvK3wBFu~1xl zJ0ED@GZh$B(E}ch{lk%u4wd!Y{MLw?KT{Lo2lz#4)_jR}rWISP)div8{5H$vOuLC1 zH|5xsMQP5VisUJ@a<;e%E?Jc#!YvT?ZzSimPxK23H+H#O&rkuhb;Q#X*X)Kt6PeKY zQ^;UJ0}oW8ve#r`NWp9-#ZOZ#!nZ3Vb3#jNU_}Q(l{a(*p0LuMyU@O1+KmqIw`|t_ zJ;k1hUn<=$e6oSJ#KuSIEU$t8txpxXvYuFd3hDAPjTbPCOUar>C`nMIDpl$@E{kLj zDrU%~mZs%Ck*F*%Y?&VBaUb291H0qx=Yi1j^_CDxwL5~mWz`-4cdkujvbcKNGaZU% zXtDlX6bGv|K~6`iFm|PzAyg8JIAN;03isfv27uw@A^w5k@b_XB*!@==j+wQPhu%{7 z>>R;$@9hL8hXkPuD!E{{`zi<2y;jG}@Rx)#4_?P^?=d_YfJb~Mx;e0m9=K{sO^$U; zSre&iiXFcuo>R9XFvwPZ#&zd?ny|hz(z^y?q}&XyuW;UvvKtY(0!-pOR{M?C+1+ez ze2edZvP>=ce9E65GVvM78`|kmnEH3t`x%bgmM~2Pz~;zVM>7M&%hUvIlq$n!b;i_E z$3t#y8soE*o;P#v1@CS60G}01qiiXZ!A*K~-fjiYO0pv0l$cK^H}BlIm+<2E5`G+N zhfVb1tj)%8{I`U!QvOrIU)?rUmaZPPj2G$x;K_B3U38-VG=blg$BMqPbgfEU1?6_^ zR`-j?K>I{!D!v|n1$L>&hLQ$$5sU91*UAuvh;&`|T6Kd1#Ae|-yDw&K zbUs)ke}P^`a$+oxzBV~DJG7QM2OHc{{I{d}08CUthhz73S*=`zLU$3SIwyi_UR&8xxC{QBVJ2>f0(Eygkmbas z{I3ZJI5ycYUc7KBxCFdb2K|BK*^_t{b6S;}eW7%q^YxYN{LBS_X1tNdP+q(M=7NrE zuRIXDr*AmWeSJ1zqhKGIrQEyfKMk+nMpsyc04;{|$3lXDX?!nxu{F}W8-|xHQ69q0 zqlVnalK)la=3l~M05GTf>i-vD&UCyr5&-iAFh7Dd;1w&~4t#z2*OrP9j3`V@#Rpzm zQxx&te7a|I>|Jplz@?P`J)5)6Wwa?h`eFe(1atr_y%d1!%J|jhuL@Uu0Kqf?V)&||AH0IsTz9jVomjOpjgIhj*2+utlH-d$msvs3 zs!OKhc*m@$0i52Oz@amesGT2EPA>3CqOND!0($FeIpK5viiUQd&pzX7;J*iO8fRVJ z+vKJolF+e!@&EE`ErYhsV&C1)RC_$k((m9XTEH*!feg+fw~KXcGp0p4I-%ry`lCwJZhB zwe0rjZpL_rB!%2X3jX3>h#J%Om7R}c6?XN1umD7_7J%lQ0HD6dY94l4^+JbiZO3LO{HJ|+V);zVO{s7FH zAK^e&90_77J$n4#Zp~YdEh8OHYjNJ!Ft-^Z@V{O7vq@X_DtC1Ql6MdIh($+F|~S${C8Z9DvlL*kJUj%v*7sd15zqEDuIn!02K(X z?F1V`0!sdL;IjjU=-~k~>OzOe->A(bBCr<`Yz^dL0RMca*H_l(_{&M2ndfeQ;iaSL zdM&$xyUjn*?>zv?^P9DwT=`c7JVXCamELM;+{Ht?H>m=B_O+32A<~0H{CRaiNyP`K z^A2AhyD(y<5uWe_z}%#`bygeOkxW{jf@DGQ?cB}DgkWgXXy%Qju^v$B)Y08t0251{ z7nD-&AUFH4*UETuii7N^CtnZi*)*LPjPO_+e=#p853fJ!OkhSoald4Epzc4Lo|T0? z*eG$(T}@)c5BV%=V=^U@I8dXs%ii0*;t*s#L*8eF_}U|xsW|Gdkj+&PZhV61Bc^7b zj5N~jdec30{v_d3Vt_hg5vt&>aFP_MTqKgIuR8tCZ?I+A;2ot?L%I1lp}N!)uBzYT zc2V;=VDyy`v$@;l_V^$~{5ih|Qfob%hE|d4qo2{5_hbz~(?m=De~P9_N+YX|1DzQ7 z=`I1y2F;nY$_Y{DU+1R#<(p|-%DJwB;;x02;DNO~{&2FU^p4XuVA9pC>E#TZ zzbJGYvHzgZPb(ryy@I*kcIiWA35n!w3HdUkTHA#qi>MR<&_l94gtY(Nd!3DwO5-u5 zUmMB~kLv}{eZv#606z%0HsqM}%x<<7z&EGBNR;&fT-8M15pgRW{x^F!TnBZ7TZN=s z-B&t$?||$_mtU*^)2)Sodrfj|VYXmTyg(~Yg0%Y@8JE6M`Wq<{3e<3~4 zzx!Dkj&ELmrt9qMy8;Omm*eAY)Z*!Gvl5<~cn;T?<8?;1;n?3-WL7^?HeI^_=CmuL zQ&1l`&p4|_xGTG>Y#$g!AZ+WFI!wL@I!&gHRmM3Tg`jwsUVUib1p!(q<+FSJOeRoo ztn2F$tY3`mn(Hy$b)7{gAV4?dKMmfca*;dL9UroxiTPa;)9nz{XC@wxa090By8+e9 zlIp8m34{a)vwz9?1Pq6gRqnQy&KD~eT3hUi!%{$Io$ z&_@63kp2H#i2Hx4q>m1i(4A#XjjM2_uXx?0fMq|rsE#`jV2mcGGOzn*q;3}0Em0oN zQydd8+2$&uM5%1}MdY$RBLB^}n?M`?h{D=%sYF{%2yP92x>6XZY#k7M&DhD*{9au( zX)Vzch?Mb3F}(sJuOn7wCiDOZTYy47hAjwC?O~A%Sxrx(-2j(d)_4W#s5H#Sbu44N z^#T4*Tbud4)0d*E>y47>PxLu?^hd>@Vb7SMtgM+gFpt~`XZh#wy+=;=>9Bi)VPDPZ9i~;{yvE! z+ZJYDjoq&c3Xipapjcee_%uVSsArWr$7%w@$MSvMI)1#p-XTC}2l*<6&=%q&}iV0DDHOG4{4URb6ZuWmM-Yy!L3v}E}&8C65t ziX~gK?Xqkow>9WcVGyc}oGm@)^lF3(iXiZyR2ZplV82zpAqC{}dem7Y6rV~s1blHa z$G79|dBZ-7kvot_DzJ=HkI3)g^<8!EYiXhB^T&r_Vw0ZiDus2e^BVqcU`~1bk*MUJ>geZdMs#wZKxKF zU0NtErV?!R@b4k?ejpHwbgwXOaRp8p~>}PeT1F zed2&}OHJla&7AyUgs#5}0|@951JRW&HcUU@4>Se+Fr0aHOk_UE_3OXA=T#)wiUs=& zKZ%gzZTP9gN%vy`sd|SXk@hibV1fWES!H!85I6LTGlX9iZiUnvsP50{$K+164}9BzHol1lkhnk}f9YrVZbs|mDU^S;GtfTV}R zbY^?ce2FATuh3ut9ug%&C9a%ICCgAsHD%{!qKcE6S-z|K>eIN6p8$LW;XwyfF&W}t zRdJEpH<(;Z*;uMl3#W|ri#c!Ok6QXU7$-pnfWnj14aO>tWm}??`n~*G2|!uxcr>bC z>{ewbO@X6>9Tt&m+oDnj|CO$FzyjzbCC8M|rG8RS3HN7zwx(wCC2{X~tG=qSJ&Ud0 z*m?i|gqO|5FJ{K%JMEEq8E1%s+l1^UuUer`Rarb@c-et3m?)7(wP7VvAYW&^eM-T? zDI09+Y`m!EaDVFhe4-z}Y#Vvyi_%e${DCq5w8Tbp!HbJVw_rhA;^|>*<(apS+)Srr z?utbzi~zw~95;`#tw3V_TS@GDG5dA*KS1P#0K50^K;#XAVu{+E`XwZ7PTiWNm{N%c ztSo@3Qa5(-80eWwR?^E)6}h6x#|vh6P3vnx909tVi?Xk>yOMs>B7&Fse~T(6)&kdP z?W_Wrz1Gu*9vP>AuRHxyh)c-)3P|^H_FzK({^7-#2 zOzdKEy16>6pG7&P-6P>_8k?EobbY3CQ4|u~^r=}yc)c{A52%fga$up-V&zAZFzUqC z=y2)IZfDIJ;qD32*mHrKcpxZmUm#0Ly!1J2AzhU`@i+ecxAD*?F#H?4s5a?3@XqM2yq|5DUmtXo1AAxXab8s3N z=bN-q>mxNN>$24KmqEJ1r}jQRv;+P^JfU~y*3lKt#8e=Xfh)R^J>VHjfkp6V0^5%a zHHkJAJ}sullAz6S9ogut5X9QH0a*@5&1E0}g~E%kDD5r)oS3^zGai{qFH}Fs%JV!SSOEjLrTz03u3rn#F+o`4u;E>doQE;}T!RFI^hE1G-|K+f$0UR$6pwN8~1siPx zQ@wARVgCbzYIy(5nEpAj=FhO{%Rg8Wl0TxU_wNXsVIvM3PvdfN2>Nq8P1&;!;CZkT z74G+Mygu$L{z$|3k8JBdd8ZJK`#<=%c1geQ_GnPBGCP|KNaot}u#GotmBr9VkdBro z$o(Aqks${>nd8$3d?o<>kD<@WEwSc7E zW>{x*vxpVeyLt-K;SFOpJUrPRxgyer&=baoa3A%H7Wy+C`VV=0!X5@eOpt4u6JI)Em{i%II3u~9icf&%<#T&Th^*yYs4$5UBFtF5sq zUBwwGtH)OTZFmcSRWe)0GPNY77FUh=A*}}%bWEy)gYzT0mew^p@oQXfsvoc#_Zc5* zsFw{ym2L&U5QoWchu}EqxXrVuxEL1w_(kR@Wg0OmVV^$9x1n{vaDG(e0v`sle^ftr z6QW|TZ!W`voW_hCUsa|;q>L6O96_v#NqX^J`TgifhJ%>YV$s6ZJbNLjw2F12^_&ZZb|aeM#cXa~|zR z3qG`Fa}31(elI#k zg_v!^j=5gHUnH*K`B(_3ur&n#%#^2;}GP=_^F ztEx_E(9m38ju8gbMUKJC;A%Dm$w~7(k8b`MEV`D{{kpBD-C>6>rRdjyf1df`qVvQ? zRs3|`YO)k9MkSW~w_1`NaRsc}sKR2A--25+MlAxnG*Mg(4;VH?$U3`mz7J2?JTKt# zibmb1gHJC@q;;TBR7?knJIe-zLNQl~UU<~+B@54{{5UQouW_@A#0(wnB8#Z=UUiFs zkD5WzkvWqT(IHV|{;S!=H^W=!5hp6;M;C0W0#(>D5v-*upPJqtv5i zc&~q1n2G$%kR?R6AU~$^`c0wA&zHHoNd^lXHhUVoWN5=`MzSJ-{h4OKcZ+rBEHwo4 zq_YdfDmk`in^pW?FjQ9-%fB#Jx{rMF+^t;^&T;sRJ-qp{TgTHk4S{rgzwB`63~P`w z6(=mO%Ia95C;g>hh`j3SnW=jPN#-IyGhvgGyFZ&HcegWmAbzP4^L zOlvoVRM4d^_>@q-vVE@ZQl)I$IGXKfYV6%_*=_iU`c20L8 zS*UY~Y%;^i{(N=wATS7~O8V+uV%FZUOh32&gl0TAi-H(INenuvJENqEq^G3 zu0>?gGk35w{)QAAgyBa8A&;WjmUTQ=)Y4(fWv0xD-8r=?_>&0v@!x0=lSH- z38ZY(aDBMh)+xNm|>WZ!65mc{pJ?ich>qb|H;V^ZOyMKMRn!Z)&6{u=WN8#jolwWcA;J zAp=psv-|9O&2X+=Wb%5(e#A&lajmw9!GBinr!R}UddR}MEAUg_1S$sbV69j+v^Qf_ zfKbFh``jCkVuy8z^DH#PS|ea`X449?k3hyoltreqWk?V;Rq@<8XT#2I;LT~4i3B~p zZSP-Hwh&oXkLjH}+&(W;J&Vww@#^Mg2NjJ>HPT$$^6PUFyr(SY$gcKxJUc)f^KAU4 zx~0$(hvSZc{o1JAC1c^e_RWz0%~~uuh%t%%>GR{YFIP5(+uE0Lu^djdWp{~+rY6Ae z5;>q-@}DH`q@0D1jaDvXh-yjKQM?WA)?e-D%D?dS(!yg2+=@H%Ma6*s{O+}4C(&ze2-C)LTJI6*u+#MS;Mj1pVVeRHsAK90 zQfcS^VDGKNs@@lEZ)}m0ZV&`Px{+3-Q@XpmyHvUb>1HA=-5?+!CEeZK-SvJay7pfC zoW0k3&UyEJ?tP!W<2$~eF^1)k9Xt_D^)r$$<4t2-1w)C)D9pskbj>mwI$|N*^X=ho;cmPPW)h_m z5~n1bAaEH64O|91$e$BYsh9Tt==vhi_glQH8oY-Ybtwixce*)jDCR+ONInNhTym!4 zyU`fVUGN?DHO@cfTC<|n8KKSl>bvt4SxpH|T8B@^qr_6~!rC^`&#SqJ@{kJ|8KIfw zC`gc7=W?15sce_Ns7Czt?l+C8)#Uuy_J%qlwp2Zb>_E;%0U!po4sZA*?UnX zlTWKZA-j(QLtr#_iJ;0BOLHOHb8pZHARQ@>6#s^F{I?|Te-@@}V;-d^`%4|DTZG`> z0LtWN`wJ|vU(4P1D`Acnw4|`evCYJy6-}FCJ-M4>H0{uk~58+T!(lI#< z%;eRg>`6Wlpq!CnJ=XGffb@jsDPh}f2dQYxghJ<|QvrC+PI* z(VLWFV|9>z*~&Qz)DWVHpD+>Mlq$;|JI!mnO{7?p6rICVIhtEcF? zMZ-VK4uZb=a{h9nGidZWWQ6sipg0GOf{Hr3m>R`HbW-y=d0j3%q>Ah@^HBVUY?ii4 zlX%?ze2=RTzANdde^%jkn;UJ(=V5=fMGsRt2ZcEXNEMB>rxVPc_$!*1G3Aj%D;N2; zwN0M(XN1rMDmC>SxSzbWo=U70pJMV;#wk{XKs7IdRwj*ToQJv+BI;UkWzMu=C0AZY z{P9|^o>Vw3`Q9fN9?zZ9C?TspJs?$o^{ROLVKe&>-`(1#BYx6qk}UiOlTB}zOGQ-* z?Nxavc?ET)w>ITZu@Ag)10K7lDH@uyxTYFCR<#{-R`M#?`{hb+NI4LYfamLb_5twG z1MMe0Ny*Gv^2kLlm2FZ%!Qx-5Vj6!zH^HN~1A#u0eu|GUVfDoZ8|>++S-(U_6d{UhM+qR@3CM8i-HXmX9v`qX53qt z63z`yeV4QUhQohR;Ij0>2YEtRsOEz%`%hp%1qG4ox7kHW+_db9^SvU5&@k5$9Ia_p zdC4ZlW`5PV?oPVHL}E2TMl$fZ2Su9gnJiOYV-Mw?Wry;w0u_w%u>&ulv2A179=vzg zHs+;xknwZezHF{bs9P=tVMpm8T)*HhGl`Uq3JQ#!Wa)0=+k;lhz{a$iw}9!5#-Rok ziiFfu?%$3VGecSPHO4)zt9Gvp9yN-y13iYg{ctTr$zXN*gJnt4hyvxA6_i z^yx0I+eL-~q~hcwDnT=1GH6B=oo7J~v!Jj}KxS|GJ{`e9C}ykV9~TS`t-`g2?&sr# zwIPyYEX*p$uX=+_=`+Z!w5z;I(~I9RReue76(v+;z}G@Uir&l#=XB01_3Gf$f%Bl) zZC)}uy+25sppGUGHd3@TG7!93T8bE3=%`_opfN^c$Jm?=_xpI2;tEj=A9X9cf0C!s z^p|x2FExI(1D(TXKSNsPob;Au=?b7#0&i-`SD`7%fm=>vN0Wx%H+EuNfzp>XuhYxV z?>PD9;3{+npU?QiHRZ_^AvmF!=)7^$`KHr8oyC$Fs-z;LW0SnK5o~uX?Qs1qrK`Cm z#N)-RZzDKqqit2*7p?8n6MjxKR+Jabu7;+&#{aAeFN3$wti-LP%pGod-mgAKNegMh zNyyJp3{|*yX6)DO7CHf<(Zce2j9Gnn3q>sicS!R;A=j8ZfJJn;fDv?GP>GR zV5||cj9Ds_nc{IX8#;qHHG#Dwzkkf3<<>=0S?uAsHmsqF958p420bAnBM0Bif1ZzS zJa1^K8qAyShPg~}42YXFMyYxvdc-D!gyfF}D;Yh*CTog{pKqzlC(F0b}-(r8c@9D>D#i2H! z7lzc5mt4$L;8^e96MTBxbg2HS&46|0@M&&!XsWadl-h`j{o1W#+DZCtd(SuZSs=D& z=$IsxncY{{jD0)Meawh95fcbbU$$IgZ%+`tl4~_AsB@Ei2=G-i$&?*!r&I;(4jK}! zXX$KQxLjA#Xp|5x-#LZGu?uo^Yre!gDfVfOM{4G`g4F)5=gl|dm8&;@29bK}N?FXQZ_=h|*5jhOZL@x&I zL#r%5-|3gP3HrKR_Z=am26-1d-X68quy^-Cz9>&wUcSy_{`>v=%bw7>LSB+ZJS-ji zis}UB%MZdKe%Y`}73bY%%HC$i)th_1A8TJu$cTweF|f-aJU9z*3-`~qo~TEMaeard zBi?@yS5;lTC($r)5~=;7r7icdyQdxYckjV(RplLz410Jq+Y=aj(wgRzi+Jd&z*uU=m8LveR{h zpE>M#6VW)2Grvo061hY7yUuJaXqlxfwXpTuhDgL z0%f6{mLw7wA?x8WZS=$$G((6@0sOe*n2V;(A>PK~`z?)|aT}A1Dep1SRH-KM0!S0PIq^`tj2zVt;YKzP zJL^WWIUloT)D!pp5yn>TPX zWKdJZcU3sl1-r)GNRP`E^pgC9e8PE-a}n>IJ06|3!AC+BqL#Yj?`KF}j?9Tw=J18z z4`dx-kyfNZ*6~syZ9^kmNwAWSF9IpFjuiRoeklBWt0v(K_XZmr*GoZtdG9@{KkCc>zvxq_y_~SgGwuR3z5g*3K?MZ% zk}hfxm{v_T{MBCGn~R$G@cXTT2evfsfA*LEEt0uA=4vH5)L2sTwt2+eI>%*1k6tB7 zB*OqSk7UCN=b|8=dFiqnV_@pi>%5cET5-ow-a8QCoCM7y^rQs)!;&@@-Sn%)G0fxe zK}#t8_Cx2*v?S48TV*efv&Ofk+)DA|JT%4B!bJx1Gm&9n*j>uPZ)`nOJ?PxW@7;L? z3m`EX<{CZ@;4e{@Jq_%f<;#87nz6M($4q3@v`qxr*yfCg_m$chK%T1N3(Zq$SK{UC z{$!n!DF0FG+RiD-0b{-R3qosztzXu&K$G=FYv8|5;|Nn&ffQpgdHZwmf?HIhSP_b9 z2n@d^IKSncWul9hvcE8NR3QYZN9Wcpt9oaPHm5*-bd4l@^~I+K?|#qr?QqO8m+uKh zH+N}Om~Ocd{q~BLPTz4-{-a7RaVgcAZZQj(`0t41U@bCAIS$>&G%9IEq{=e`;4Hz7 zi`hS*3~=XYbbkLwx41JVvHl=dz~j=ICO>k#g2dH#zxxJbs^u^+ly6{M=>}zZn9X%G zIcm_|TU_USh(FGdV*uV+!w}~#rds(l>6{6t9Nt^a_4UB_y}Q+B_+}T&w~rg}<`;1m zoC54C$4VjOdnR4p$6bQv){P3(_4a0~@?>}lXnJf6{ma1Q2CRmd+601F6$!x+KC^e? zb(jP;uWugcTuA1jbWo6V@c&gTp0v!{mole0@+0_9a#-L$%3;#?W%Ov!wvCm+Nxx+K z89HqasG%q($Oi2kM{b6%>h52g!K(8Yaucu+$4!zKsOz)O3#UmlGj;!|NJA89u>5i( z=27ViA%gJaF>L$cVu_b5;$w92++FB{S&Y%0hgx!yk*G zt~DqBlvI=gNkw58jIXhmc%@vl(6dDQxA_JjSCBcR z7~h8Ji1xMs?WpxsiCX`O;q&~#yy8MjeMr(95xPob4Uj8>?0t$|>o2sSltBgJ;N_Gg zH56?&QU;eFf>SxpP0I7~Q&B(6h>2%p7hgTM4f;^~(t$f>wU{}x`A-tLTT)3a%APEI z?djSKlkFUXa>eq!hBgeH02Hz)Q6UuyIR3PbpME<2Xf6V}o6^!!oh6?#Y08u*`YL$sFN~LVGa_T3BKKV%c+}nO)p`nnPLZX$3+PeA zj4I0_$bo7McWC*L-o(V%bi2e2lm@D=cPC?(R*jDC_1wRF2X1)cw7;E%*xM@g3klhq zZlp_KK2UN-7NYUZerG#jI%8@#`EgEv;OEyedLmNU{5k9(2^Bb}E}pc6M3dFmq*zej zD$e2R>f?8r_UT6O^2OiZc-!GQE=@_p-eeNrqZnZ?zrnQ%-hnWk1K-8Bd{@KD7-ofA zQKc}5?&{v1i07dCX?663D*9>k-S#DNg-<2uL}N^E8)Q%V%2{^i9!sEDbd6cD-mTl} z-)M;?tLYBnQvH*19xwc*oatLAI`Di=%4$G^KKSAp9dCO|y zR$6`os>1Kl)EN9xV(@ zD#a;qim54rCtnoXtf)!k3kVv?o$~QuvS<4?ld1 zqVf2Ku1~KNLAWDU=2LS}L+d74ayh#^_w$)3P{*1A98ep2aAB11YXlCwyCo+Zd3r+w zy=k5shkS6M`SBfD=G-v@gn0Vq1-?73gQU41z^a*)%nDWy_LkRz`f#D*=dA9mdT#38 zx^7Tsk@04z1;%{jszV~a#CsZjA7^N1Edlo4xd)vsn@UnZ%nWsn(e8nGHU+TJdCg9O z7+JBOnK8Gv8E?Z)&Q{{yNiH&C?SmeKXR8loCIFoKj_(<@1@|Z@b|vBC?fyWo?~vP} z)I=Dw=ob_B$u4(iGGh)&%zC+LDat9y71%#)=M`H56O)q@V|a9%;$unL+Urq$*~a8; z3Y(wB#3CoIL2roX@7|E1pP{!%;F0J#eu*l#b+iC0(Z- zN30J0Jjmp;740QN?7Qxx9PjvwhXRaKFYjCnq~lN*_F4E1Qe*4Ty%5~3Rj1&Lx>Z+& zeo=hd&el3=`lL%trbyyx2M(pz+26(bV*wBB?pL*s=i{(htJ`>{1qh=cIA zSV!)*Vz#o&thZlhrh0XP4ox+u21?!|tkW2_H4O1q5lEt;a%i_Byn9*qVW9f8hQGxo_$~ zBRJnfSRa251zC!l^BjB#eNKU1P6_}R^CYe{#QwI;?+>$i08`ag>x(-U{RLf8UO@O6 zHJ16!M3);Sa0Kv^xOEh||F7$OtH#|t|NBPx|6131qGrReCOH7f=dWoCeUrk$*U`ka1f)!Cwb*++jp^=!zI4j=qXrWsp8v< zgZ#j4l911_Z+og*E-)ZcT9-+h&E&>H^Ch#4FCdVHG5`hXcGriNuM_P0AR9XPB1^qe z=ji)KoB8_Asb*H@ZFjG!l#FQWVfY$36n$oZ z#1M@rv0vdfu_9;ptmYXt4g73l9nY8RH!CHOY<|>W4V%r$D5=!SnZk8rC^TO#DU?B$ zO!~$8br!V3Phoy8s?5?nF{YN48ogu%mk|=P#$fXV=IY0wm+TX<$g(ZtruZ-RC&-3`c`-8xYaI6XrWqPdUI(rchQ6B z6>l3;m4`ox(2rlz-CKKaPG6@0iV;nFi1OLmZSJ+$S?Aw&bwiEPad4YRqqDX6(6jJmvZ!#8rB=0 z-dolxWYuFRhQy>hXUSO1mzUL1La!PUVzUfBp}?E}Q0UwDHssXRuV&hu{5iu6g1OhkH7ZQ5l7XbWX&+PLJpW5I$08Tsh+ zDSusdzH?RtwNm`N6PdjRtTAmdsres3Ig09~8rmvhTTz8+_xJ^=iBJSMVeB7zLoAou z+c%^be>HtXi7*B@eF2S(vNZS#G}``X-(P0e2HPohN_VR2zpmCXddoYGK!U#EY(UK; zM2T6*ms0~k7{n=#m>OZI%ReNoW0S1{UclxXbu?R!2(ojd+m=2Dx@f3@zm*%=6fY0W z310NvoL#q`AQG3ozKOipMuMJUic;$6r;BtgWa9@~zvg8ZRrMT$mJgR~4iEL-Wo?~S z(DLyXdRz3wbn;_*(rWRSuuq$#AX!86r1+5dlPaQ2>T3B|-Pn5NgC=kruVkXbE0U$! z#E6wxj~edBbcm74@`nZ8T_xL11NFC99TX!L*3rQMk>){ohgAME14`h?`h3g=8t5SVl+Mwl z8|p%uMXR%RbB@{RZ_?ZJy~^x>=z=EhiGe?AK4LrKV@yV1cC|(+p=b^*$(E?$D`Ha- z{=`PiCkF8O3UZ_ zKVDyX0_WP+Lg$-G`^1jd5p&J#&+EB# z6%Q+Za-Wk>0`NP+$H#OXC>fyfWaANV%_^KZ?(KTczcjYa6<)-kVk3w--v2wT(Vv)M zG5MR;P`O)qezkPoBPQymygMx6`)HWZ^SDQt88U z>+_tI4i)WVpOu61syod8LsR+@OSektTxB#f)i86wW(uXZ|(p%2aaWS@Ekit~BsxC}&rvL_j(kNSeCQL{CD>dQj>yBF7$7cR}i_6%4gvA!IkY%EceYKh)i$RER*25HEnXRTo_2Q@(D-q83xT0ULw zqy8m4o4%#9a6_)|-&;F{D-7A?QMUL7oNZfvhX>W3qDXJiZ!eFmcgK;(&J?TGfWqv0 zEQ!&nN+v6U4;_YZ`Axg_k28r}gM0KheWC3g;O;0fk}tT8OlR+s@t2O%%&Q zrc6fWibAme@RfM?Nrp}{??PGbEiWyGfdpFksUr=w!*HBhMngKO@#pGXF{93N{=Kw9W%8m>hsH3pzLQISkV0Ir# zU<=;}8A?n8jgAJ0>6@X|^Jvh+M}v&K)RYE19B$ZkMbaakMJ{7dzsII%JZ0sbRV!B*7o2|bn)=B zK0r4jW4vF9zy5;-fDY%pg<{Hd-& z_O==jx=s|aNlRbv0*RX^!ncSTzLuq=3J&*g#Jv+Qj0~HhcjaJcvo*r8O@*hcmaR1f z(7T3=bimA-klVnl|D?)NF%mbLW?XSno@U0=h7|B`($}j+|I76C!+)-?Iom#@b<8jC z3X|}*nZb199K^X|aHI7E{3Fgg+XT44%Lm?KbyLrq`%U^_yi4@Ltw$!i@9z z&L5rUAbg4=iQf7&ruv-t8Phj&6~PIoPtfyNX7{aIU4|5e_x}^SnmhQ|Q}YjsgP=Fb z<1Z0%UyVNApSkfEjC* z9PmU{$&G2h-nA1R2i{7l2Gix81G>?825cp%PHC>eY*woY<(Ww6bw#(>AmhKHIWDsG zpgWfUw4c1pQjxPz6rIeO2(J|9TZ|9DGw=$bFJxWneuS!4zFZ0v9(6Wm*KM@$>}75T zFv%J4iLc^)Xr>)X3B$vvThK@)sG>iW%VGowL`NdGqP#o~Y8y@e0*L|9LJjgK21yD3 zMcnz>R8c7r^eh!%S6dQA_$3lfk$7kdmD<%8c+pcNP`cb0=;6VS1UKJHw!M0!axJZPq&lX!;Ip)8LS<}V%D6lHJ#z% z!O=;B3ov(CJDA8rYiLtcv;gKVQvplH-0W!HAT9ZSnpr(~g16<{qGDq|8T{U&=CImo zxjmmz=jN=^FkwJXiUG86Y#BBEZsF)$67MWCfjOnyL`MWIKA7Rh{4ep4S<)dAbAdhf z&`ler0<*0`CBz+Nq$F;(Z^eo=Gd$O0^V6A<$I?229+&p3B?ydKSOHV`$|_byl$=bs zh*RH=`o^z888%8#QD3sgP#sT!VnjWvmZ zzcC)vcT}>$z_7DQiyK%I|-&#aEg#Bk@i#oUWa^1RcM{{l#@OgAC%|!HyWPVe`E1 zcEbh}aeu6fmFq{&wocaI@NEXM;Aj`y*Z}`Chsr}ac;UgX2tFirPp`G+YXvw~f0NOR z15h%0aRLP(m4ok0b!Y@!vipwc5T-bux*xmOmVI@`akjNg1gGvkI~(kwu17ZKp5UQ8 z+D#0t)@9y(y98>bKyjW$pU-cj+G@n;!|`t}n&qKo&9;X9cmnldKD5|cazzZQ_r^1| zV{Bjc$EEq0xM#A3h+J&kQ`DRd86LhL|DQPMsdbJDqtknz6V4{f^^(YDWTlltuJbkw zJ;+Dni@BPA3{wA|s3D7up{Tf0x%2(e(C#z|S3ztpn5ZcQ6o@P8XP$(>k@o8UE31FY z>YliN3PleDO1S;_OnO0b;iWsCV3?S&E9}^YJIe$eu1ALp9?8Eg!~5S4d#q??+x;`x z!*9%Y&r~j=(*kUH&X{kjjCBXD?;c{;SSN9?v+pY&P1QK8^dz559|1K@3)JY>KkwD6 z-#bc6OS4(&b^>EFx6<^xI&`nzPUg1l?l$K4exU1->Q7})KB!HlXnP;V6A7x6zr)~4 z;s<3)xIBe{;rjO@81bL4B&Wgm%lVs$)=Wt-{b&VHkUyYlXFJFM%)brE{uiLiccp`g z`ZSH3X`8K?fhrr@?VYyO(MYT0?y0STQO1yK3 z0(v~gaHyC8jjfXHt*HBuOxc^A#Z1E&&?&g~NXTjqE2)#5LCVRX=GskhVlq{f=iW{! z3j9Gq$HBLfchRI~uQI;8<$Iu{Dnk~XhPSpqEF|r3!zcTRUzoti`F70yQ!{kTp0Su< zzgIFZuLCQlIszmlBbB<%G!Ls)&4giMs%7CRL?&JH+MGxGK7uF-F(EQCNZRR@Pm>cx z>g%(Gs6LrUnEsG*E5EJ_t)TBPwH=y2`C6JKX@G0Z`mW%;e8;zo+stcIG6yIAb{5hx z+(GOboEf0=SWL|g`RSy31z52UVXlu+g#*V*7>W2_2}43EHp{;y4C6y57rhFU-M2uu zhs3LV@}JhaU%H5@wnO~%~_Q7oE5k$#oTEX83>YsYU;ycQ(s4g6;>Jtnyg`^hV91K=d3?~Z-Yc10g%Cv zn0K*Cf^yNDB@KgKS0_?RHDG+wgt?0sgf+X^D`?0tU?iT%phCVbqlB=gnF;G53>jM} zCw4kGw4?;Q7@}?KZ7JyKtFr0p5xu-n%iWDWSsPhdt?(c=cCv)XXPz|#@$}L5^u2{> zB&KOhTdd|CSMqNx;N7^7qVk*JtjlxMyXJLIi>t!7-+iyq*^qe<}4Mdrox39NM{CZo09+T;d@>K;v|`F|P{ ztT*fV!=0{*FqEs+qPEKYYb1Jk^?00PW&P#fd5;swO4*!Ix|49S%G^uF;^r904}ajq zM*ZaNTPbmc_eK)FW~<@IQY+$^io4X5AqeE^9dy} z#G_u+!!3F`?~_%s`w`iBfx{0}?31+u|LgR!r5&LQ9{HvEYy7Ko1=;$Gv*<%#hrhx#jotDX8yvrjj+uXm=Ak+DyN3G!}CLomL#L&@lcst2N6|ALIZ zD)iM6mvuwnltGo|UBXFju-xfQPi|oSjYNY}+0(QCrYQ}$=>8}FiHrUOGRzOyKuFlC z;-1cWMnlgJF0>?e_i4`9UjjO=ZOIX=7yeEWI()l47L)r^its<^XHuqrrJvm;kvxQN z^mu%)PU=%NF43)O4$4p#3YH;tWlu<_zYmNZr`m*5}E|)a~-UJlf11m3f2v zyN?dT?A5j&LLjsMI($EF-K$Jc&hd9^xq_F?+W%y|SB2-E_Uq(^-X&l!X}ec!f*%%Z zdd`s`{^Tvy+%;q>HpS%n0T<8V`79&L7Ic+y4i37?r~|u5|{+*DO3%)D4_7xarQ_Xm29!xvx4yTjstkYqoDB9sTpH zpX%0!C%@6LvaW{gX>q5{&xQ86;a4hOZ=-NHe!gzCFPV;J=gWQ##+IRg|iS}eX7Tq z-UK$h4Ruu2fXA5vMEr!ko~LkqPyp^V6#8a%0W|^kf7E9LKKnMf21f%;@CC)VVfD!K zw_mbinccwpWV%0`{!2>vtPnbp=-%s$Fc=yV(w)dLQcHl0uz70)8!EcVsz5pA(OY8` z{;NjV?xT$v@ym6|Lk&g$`!ELIUvqgvKc$1O-5*H4g84r75&K{FQvA2v*{=5Mv|5ng zOZrVE)4h{mX{ZE%^&i-BEqk94%)bqa{uiAavq57X*JoMBhoypdU}m@fTA4m%Mz`P2 zOht#52p}Y)63WaISzOt!_KtNHdSsiKa%>_BPO%q;yk!^v*I4p4(K~9@b&Lf&q|2;n z9eyDi!42f0@Go+HS75Pv3+C>oM8*kcye?vJNZGyYJPc{5e&5; z`>F(G1Kmya?aYc&zmJXxJ5Zd>%y!mnKf`D&f=MD@fi5|vh{Z6UkwECoiqco;So-q~ zBBU$Z^}^|LSu0U^RiCZ7EZj#e*6|O+3c6ArCP3i{vM`)qB(mu0*qI@otIh}^e!?+W zNH@g1`#bc9Rz19lcd7(@GBbsEVv7G@^HvVSwnm2KvUEY!B_^$sEs!;Uk`+J>*1?rQ1S(+mA ztEVy*KO1>B$gpp9=Ln*S>+`M&Ro^LdTF@i{U zwuil>0$CKPh|{uVUJmt@7i6wO`z9kk_#2hJuK6{&;P&t4TZfyZhm2zzkWfyPNU(w# zt}U$97o&KOru9ZV*Z&CVt!QMtV={a-dW47twC3w)v;hc=@BRUyXt85}_#(!}{pzf6 zQOl7<5FX6Zv+o=zoInW5HW}Y7W!Mic-*Ebp`SFk13Sq8)Sz9sptG0qiUy=Y?TVa2W z3UeO%5BRbAc|z{p&I%Xk56B-FKC038Uv~jlai#Zi4}^4Ax1WMN>~w)Z9OOPhxIn@J zuCp~LT?uYKXk2f`K3IN+qQ#!K+veES4$me{H;;xyt_Lo_MOA(X*L0;s_mI+&yC0O5 zRk?@))CKH1Qp=Qxv1fL0p?WJtHlcTi=B!`_#$EK^qleGk$K3|N=;1?Af_prerYrnI ztX4%U>`=g4%6TF!_On-Ba`YF#FgQo)Sp3x01(BwstYy1w?HQRD^EB`Sfhf<*by%(7 z(*RfzR^nQO2Rty`J-Jd>A{?Yxuz1K(!N42_0{;D6DZ2k?^KMN4&E`F%qZ>ioh~Gdp zsh+^0p=~n9kD(E*L2bA7JG5}dTFa*Y3q5KxrF~muAttf!Jjkg-ooM-`qyMI78sDot zc*~>d27No{UShD>yvks9Anb<#>n-lmW_4W}zE56_j&r8cejI^h#wp9SpVYSA(}vYh zMp&iDvE(6i&HK+Cy%xIrQ~QZR#!JaW(Y{@uhMQ_u$mnQYAgox08)mraSd>}Sf>=WL zNr^~EHygXP_L+mNJK4*gfbm?i%u~fEVS#2*Xki^`a79tVJR@3PKfG84_f>mfmI3+3 z+9TmTV(BmE6OkW94-1)ig!yb^c7eNnq7|3u_Ir~Nu#nVZTw2ZjllpUI_ zohh41Cj@D%v-#;<`0pmadEQc#T=s|%QdpK z#y!S28;EzzW)W99s~oB|{U$J;Fg)-)_RZ6$ekhPF78!_C*k(Ph=%)9nYRP6ZGE`Y1 zDTuwKW#hY7T2R9LgRQyD4#msOO%jcFLQDZi&uMDe zv*Ksg7{8X56m-)&j*RbGSFnJ^xM?0MhqK-8ZLLO^%YmNm8kKRc2JEUGRgDtE4z4~N zcCyT#0?Zpx-8fB0t{L@60!QmW=`4j_4XUfdl7qQnzWVUcdQ035fd3i3 zs|a*4k&pihRa9c{D^HF`Wa@*yYxpQDhwT7)74GAY?kpu&4fbD+hqN?Ue9f2(Z{po@ z-^uk<6BA3{zut;X?qFGxaaGoO-olcRm=xJ_O+o+zOupwT2gvMVjw~M+T@~l+&fIG4 zbh+4)Bh7pB(GE=wjbuNEt}L~d9c~5B_MdT=;G9Y;`Mw?!Sgujd?;o|xP!aEFjB*>D z!V1h~C=zaGaXobkd{pYI0AC*h}T z2JiSx)Rg?FcX@VBT<~7e*P#qTV&dhD&@Y+s6l-1hbt>>S9V_q3gI`#`Ni7N#OLoT* z%wsntkdrIx(^Tu1fv5I0V^a+La81}mHADa!e*$8Ar;%B3=T;JUpOFn@ll%l!~+xM4D< z`=t{%@b0-eZp{E1is2tDz+8@;Z*Y01RJYKv5zT}W;>3PMR1wZ7CXr)e*Oy@N=?rUq z^Qftg$KUuCXEPL?Cvrm#zu}=ea*L1KTbiXFEi?PR2a_q8?U&O`Q|HPShFu&^-+M9` zM;E7-TX}a|KOU2w=yKC{)hc#R?U}}a+6-bMe2*UC20=bscdIesntMsjE(`nP0+t~7 z=Nc>O=>N?_ds+2a4@De@5&(RRD*N55?i$L%r4*UI?Y z49HS6t7k%dhlv^jQG>~0c8`B}VX`e`G|;T#mVGr2-+G*L@Ix+#(z#SXH}-yCtps>$ znDpH2B{hpb9Tkgq8PCo9mU7h)xXja_xx8&f$*Z&CurV963*pdLb!_cpT%O$9E9%Ng z=60*Locnl{4~-2j{fz9nO$(OZrUg^6ncnemb8~~VVAs#*akt$V0xwXInGZ5xU<4+G z(xDY`@5dH(UZk!(>pNvQfrl=ooc~%%(L(j_=bMLy1?gbE{OXeX-mCe$LhkJ!Ybfvt zx3lH|*kFp$1R@BS&VTtuWEY{w)8IS(4P1N|VjF{PiKJAJ_+2K4HR%8Mp>m&xsK4Yt z7LFLS-wsSp8~(9Dp4#vmZ2lj8QFqMz#tv71#{j_tnD=G%3F~7^Xvx`P&7W<8)Km0z zKFX32TU+kwDpGc5o|f{OdDmVT88y@R^=XQ({1EtI_+6cci=By8Cdfh=QQ3ZUiwb{f zs^`_+!OehoNky*MU=5|>#H5O&8TM@NhY@ITCQ%eL54OzK2pZwpP16sRqp8C&ZwaIP zC`$?qoykP_SaF0 z_M;nA>&xZ5i-mSAC2u75CUn&FP3qy6Szru;?cZ`dPYyKrc+yhRZxnhb1+Jq_yenUq zLdMD}gdSaacoYA0ZLlk*P{9JJge5u3fRFyQa@Ny{Z-dxgio>u1&C4(MU%I#AKPfFM z=2WASS(?|5A!2KW%MPRt6RvpSy#c{03*yg<$7(H}coNnz-)6|3hxYQtH;Mr5K?|A= zOf<~Q8@_u)A&AFv#7_iplZEf_h(;EV7Z6I9aG;wP9efTtdh~ET)4~@4(cyx=1F_=4uZ=Glt_lM+=SkV9oR_(O9q1S0= zmr028Qd_ZB5Bu<)n4z`7s|q`Nfn02OakdE7eVFH^)l3~P&a;M*TxF(`K88XD#KYF} z)aCssHHCIQdAZ@aCN@V*a}mpYRvK?!c7Lsn1b=OH3 zN9O+VUzE?wWvh2GN%KMuwEW{uw~nrqx4Y9q`S=uS!54mFE!DEgXSeT`Y+U94$UFv+>xp!^UWU* zhr7QEG?I(cVO6A2EbY%3zK&n(k2%YV3rAK6^ zdO^O$m?sEybRCHCzVUD-)+6cP)E6TxEvb{>KV4?rkOq;H%J}(dM?fFm&vN(Xc5_x) z(uJ}M{37lJ1VWD0fA(=n>6W$&OCXvQC<>Cnx4%r~q%1*o0Bth=eYJ5)m?ZAIc`P_bv zrz64CYoAZUfh96(&^P_;KJ+zRF)0&vgQCgJBR8&xLrv0I$gA}g+-}rvD#|D4OL_iD zq`m}3>c{JXsMBXP{8eS$TH0$B{6^gKSC(DaV#IN2JDV0d3a)Gx3zrd5A{k(O< z4$NbTtSA?C=@I>NRK<(XF9$E@@@VUDzPQfWNH~fJ7=J{T5cugDw=%#-6QYxCiYLXY z(@0=-?i+;=EKB)X6NiWU1)km_8m%D`k6OzUEd#Q%kGuhm2eATV zIeLIUZlzOm+_(I$Ek~^&sZr-?eP%g0zZ=hnNZ^;JbY@WqJG05dBb{30hQ!ajA zs@?-;+y$LFM~2QrbK=Z?^jtct!C)}S<9Am|>gGqd4ChAZx`v+Nn^GQ6y~&UehO#9c z+EoL_2}0A>9C>_1|F|istQ;~$WaO83Z=wQelP0kRUvoESqO)k5T92 zzl5;7v&Z-^IC0-tb5mK(T-Hsq7bhk3h_D(eJaJ|zWy)!9J=kARK0g+)TysrULU7Ig z`ng3%`XKwgHPRtNW{c@V#>4QF>JX>%3#Z_WFTT*FAc-}gz?L*eD(lT*d1 zN%^d4oEHR#*B#2wwf`-$mmwW%Jk{)Cn7VK=CLl0Zt7Sh(=%Wcm=tKB^f8g~SV`}la^Yu;81r?vVN^IC>13Z)(Sp{Cs4$ghKf~^?C8^9>Q?>45AK2g;N}y;iA@5f{4cr-qR*>0hWI9q z^8yPO=jZ3KW7K;6{v>!mhtrd`7lze&R7b)V&_p=7)jYuM8y;zF7m8)gcz;fyUGpcA zi#>glTlme3@x?#Yx9ep(FR_B7b?)|L3Qr*BQz2qW$K#1IT)~rXih3JT}6Wn2f z+dxVT+0&z$Bi+9?+sirpUh;--ve+TPos<}y4LUUTvB<)C`36h8D#;FDiK{*4stgwH z7}-^J@bOiptUO2Vb8yFo)-Z#Y@jWc9b&I&CS}&`y(hvzK*OgFBuZFZr@I?tfo!VH0 z3+Ui#LsZj-%Gr-B(k`husOq+@L82UKeTm{LA)%pW@>hpz1Kx0$n+{joQ#F(d`L4sa z4b2G9hGzJ#ln>{7dwW$jE2i=UeYbtgbPS*-E*5Gk&kIoSL+da)Ul20Fay{~IiLNpb zV!!*o&-WIEcpNVj@d722>oLIjpWS{T49x#XI{t$Qy{(A@-{~L3gTT*r3A%jMD(gS= zZHj~~HVhcFh5q+nl*s=j9sQ4AWZ8nI;jt5@e%llG^=e7BhbHq>OphWdLFe!;GcM{E zcH}V6K(Z!fE9l#eG3Dlzq$s8Ro1lj(>|`v&0{4#3*ZNYcVzpfdtb3=wQ_&XQ$R&e1 z3*ra^Dh(*sumyyIgcYwlr`2uQ#W20tbJcastx>oSaZ_avmDlyfMsZExhB|MBBAM|+ zZR!tr$ab)3P*H8YH?-_m9o!)CnWiX9FLxQnr4;97CUe8P5}<$el!jHwGw&Nw5x=;{ zcZOD8ck>(&#3eU zA$d=Qrh@cxR8`>_Nq~B`lL}hDlQgfXBpBMaB-1!O`Y{GRJWdT+J3czxMvRW)p*Z>} zzC#vsOYbs?nN;Et);aS_Rm|orJ*x4nh$(qL)r^tPGus%RAzueX!n7N6A>;yA%f+s5 ztgOx@nV!zCYHE-|G)wnl(RNE@U*=w&6EWAw%wcfwv@3dOrnsNmkIq_F5SH-Jb--=9 z4MCrjv~~&~sS~7}&9BFu^iStiMTln7GoatJhl+tgsc}PZ#9OE5sK^f>5b_sqw+TEy z&ya^?zx(9p2isG4RB@3vrQ++_sVa@uylRK5vpVDzQ>9yKLS+oEdG(!jC?P5asyu0M1Czk$*R*J+f<|q+ zU9tf`t^FnT4OZ@A?214{?$U=&p5CtomvZ(7WBjUK30O?%w9pJ%56!`0qhnX3DRVQh zcCL_&d^Oyl(PMjP=fVG~Qhz}pnwFf#?3wZKAm5ZLMU{SY;Dfb1?%At~#Txw|A+-yg zQVhT@YuU;Ysd9aV(+l!>`rJACI!4~XepmNI%2W#|mawIQj0x=|ODYcU*PSPQ-$6!Z z%iz5S-&x$WJh$8!H^~v7eeu0oJ>@EwTTLY6DRMJ;c09cnS?p;n)>uOvkM%S+9mI>lL^& z%_Y{WM5t`wy@+yGiCBI<-Qz(zE2cC1YJkZGe62ea`{9xu^vkJpiVVD-oJy(ciQu>a39c>}d>O zgCam+ihmZV^0Zc+5rWJD0o`vBdKBXrc+53YuVg2pT@t;JKvT#T%4BwSOn!WP@R zQ`#{q+`h$TOkr?Og4J}-4+s9A_TD-!s&?J~*GB~f6e$5I9l9H&RfaCFLV`wCYkZzD}knZ8T2A{ppjv{zk z*@w9hNGQ@)Bz61uvF19>uR;s4Z?E4mE7^{0hYjVMHV-IeX=qu+N;zDs-fbp&Y6sEhb`7PVxd3Wj!$xgAFR)JG*!KFgRhfv^1YcuoqxA;o=}yQ7Bkj_2i|vZ zi4CB@Bo`2AYG52P*i$~rfF!T4sO{qxCX65MC>{nrxs3h}^Au$aoGWhd5CabQt2TK`VO zen=A|1#cS-k18Mbv}}mx)JRoMD-w)3cM^xcYLc%^L#(?a)`ifRZIHuv3q)62Qxk{A z3fL=Tg`CK4N|q4PN^jleta#4X`77Mi`0|lx1RIzBb#Xs8-^PzutCwI{xYGmSmk;_{ zxqC0G2#VAkCX8W(DE347wNhYa1p?OOZ+CR=08u@J=J5KjIjRU*eA_7m_@;mA6cS-uh7|&c_@qBU7r9uP zNUwu_bqe`co#Ve&yucU!haPkibNl$bYi8_is}M6!uF-NBHNSj(5ak+P!|T3|`+3qp z#9*NMX+F(piRljv4H)!l@TenE1Z)y5O@Z~r#r&!7h>%$C8asZ0 z*cQ14OZBMM6APwm?bN8RhRUA~LRMga582S54V$Hw?h2=rzHJ!7&0+%Pxz^)#{U}uq z9qW<;>_1oiWM&mJUv62}ZBzSE9ek=D;9FVTw`%D4iOh-r=D#M1*9J4h8w4V6(m z0NK#=n3`+iVvFx}RKG-=M37ydFmoC&Pv^VT@in$?Y7f_Kvbjfyo_*|7k1dYFUG5xE z{%F`Qum@^athchT$d=Q__b6zL5Ql8~#;{vF;Mg?$OJ`S40sSX7GK||Lgdr94q~qDQ z_n!gh8}Nj`BFA;%}j&jmX?&=;OwRC0tCua8AxL-4a7G z9@@dQx0QY#Y+UHl#E%%Xo@Du5;8}s(vhpd`&es8U)V^-9301!lINVqyCl5j%2+BWM z36%t62Lz?Zq1C#gNqc0x%6~k>kQOH8XF8hT0@WCdz>0 z%ayQ=2HdJHKzcq0D$l{Wq3=To6U?%|< zp?_`!Qvyct)FS(Ruc&lG{kM~xiV-K9^j5+wlx|h^MwORI5usln*4z7yoyxQqVQWB4 zw8I$f26lM>_m*jaTJ(03Yf_uPzGxo{g#izRUDF)BO_TxLCMWaRrZAupMlwv5oHt_eh_vE`USpoGPv?9wA_;@wh1q(~i$E^=>5GPa{vWYnClumq#j^L1X# zmSPq!X^`wr#;(apOiHuzJk}W>2-K;teu~anPvcjK1%&XUx5;-7N6)M)F9<7VGcURXD@?|zvIx=t!t6+eejW>tvD3`JqUGE^T!xO%I;&zW!{k% zTe6_bIYScyf*;_ivWArV7+6o-Y-F1%H~vS+2Nv01l8y#F8Ymk&p=Fo6lu6`6;|dIoPc%5K zIvr(dd&&&hzhfP}#b=9vb4P{$6&S)yQ!}K1Dk>k0nM3k$_Y3=z13Z4g^i|bp438Kq zjKwwxx57V_L4UuzJj(6OOQD5x$&4sgW((vqJ$(Epz+$(!*g?;Rw^-%tE!iSb{A6?0 z=>m;*XFJ~xZLX4|ex@*#ku&8~W=500zT7qLC-Dt{GVI21=voW!@{EtuP1(v+`1N;h z9B#GWV8&D6X$@2>XCbG|q+@U59N|g`TyMM8un!h5FEP$^)X6ew6=4 zK3gLRX4^mALqV?z9RlpIBc0+qZn9G#EFdu95cq{&Kd!%ZHGvxXLU>lc@5Nxh=q7kd zZA+>;AMg;RLE1B`kAq7I1rKEp#5lO_0mJkS_+xIar(QR8%CX3CF-ygZDNnY68XnHm zTzV4MHv);1aO<*CQy8}14~l28UnA@=rP}+7+nb9A@?bzHu~is|VpwEts!p~qbAIha58GwbGZA=riWF5L2vj5B~ z3zLL|&Jb5>WR-47Rwu;x(qEQ{QCL{{jm-kaZk=HO>uOVk;NNNBFK?`z&^(=^hB^OM z?Z%({QoD|A6Y|0Tc z#5oT*34L!HNT#I<7~bT|6>&6DEE#uhu}%TIH+^^EzFn#Y2-20gV$aI4+ z2(`IHvNbY#Xx*`NzM&I#XC<&>E4RKcDb3^g;mB%9Tb+>K^C%)Q<;4;G$nu|9fIVNU z+!Hsc>7jQLTiR&pXWR`EV64E%)QtH#+>NqR+6&oH=_A|1vtXsZt@9JeIoSVNe0@bA zGZwrzuGK`AZX)fmn7O#`$}L$uicoZx`?1p1>))_d?l_jT*rJ&_`i5IL1}piEE~DY) z;h^aoSx;Numt)B$!v|tkiJB}6qrNP~R@FMBQx|Hl@Tm`fV`S%k^z^#X+QBm!7Xp6o z($oKGFBGWWSB6SNEm4)IqUBx1ZeU)u5C>yyukPJ^@iLNjj4^gjyad^ppafCT&Urhz zpBNa)+8T~SyIw~7b2ar<7#cu2srD+S7HDt&S+O`eF9G-)y=&)&G6-ZVTy;erZUdqQ zgZU%^Tv<|Iq+jBuxN;DGR`Q2Rg1?};@M9uYiU{&!qxVGdObbH&H70n2VFprVI1@~E zr!_cl@<-94wjY9V=hmI5I~8~**SWOcY3zP?a!kADdF;MmU(rLkXaiNdv?R>T(ttR$rz`ST zE+?y|07X!_6c#M&2Ux#aqP6NC`gE5sdveZ%X<_}t)Lc3lsaixF(=qwUO#uzu3Y^tA zAd%va$HY66FLKUyN*T&4=O5S+c$Eu7eN%kV+sj*BmsB?@I`4em407RUykw_?zhD(G)JEw@DJz%g~W+tTPh? z)1ZW2>61q7e;`bO!0==x{bu-(D4S#n<QCQDt9q1?Kq-wQX`PR@x$hrq9(K>m|y-T8u>o&lmOk;t* z#ve{ksqzxce0Y@t1SYH+gC60KC`V@kyI)}+qFQUEWaEbFtRVbge?VJTuR-oMKawkF zPTNj|h`JufaFSNeUG$<}OigPJ2*10pRVMk!%TJTKMq#*-P|Ny{ z`*lbj2$z^J<`25W&t&?KiPALQ8EQbmhJv)Ci`$N7iIQT}?P)6n3IO75^5D zoskJVs>ub+axet$%vSMgGM|Xy-Uu z-i;1Mma#|<;9yCS9n&h(`}jctdR|>_Tf?dK0lGWMML8s7|ASzJNA65HlsK$MakH_R zS@h|=E1J7-F7U9UKwngeuyhva=u{a5_qgE_z-?oYzWLG`P#NP8jw{lbYg zwMU`Wd0OvNLM0xazT&H%eYX7KN#<&|u!b@JyL|u%93K8i1RublrrKnbNvR7m{;Z0z zT+ylS{CJP|Csiz!XR`%8+Wczikuy*-)ZfV6`9ssJ4K_PR8v} z{P0$b0)hui?NcioO<{JvI{Rmcogf&D<#|)|(`%Xvp$pJYP?~YG=xy~G!enCurdc|+ z=*)}a%TV=3_{PvMcS16yGlh0IXNz_f4*?L^CXth_!xjzL%m+USuL}bn`ul+uJ5=;i zlG^!`cqE7HoHhBAM83&^Qv{Qucv(Pgwg>4Q@1_3@2<{m24YP5w+?D++B6#5kV3@vD zWM(>U+r!&g|D~HlEF^jOXj3Da5G9V&|C5A-h$y{s<@SrMKda_o z@84DPcUC(wo1*>XI;;L>WtcLT(ZE|>6@O=BQxYH`0Zv~zOmFdhL7vnI3Z z{!U9&(7!TuRM*9wiVPbu4+%Gb?zkFSUWmHX?EW}85f&ni9M4e*+iLrD2=4;OHXV}VGP!=^RSV!b* z0hi5=(Zu3V347C5^s`i|a%+&tH`HFEWDeX1AQTyr;T)BF{0jXu4fdHzOd-9jhx15E zFo$1CTJO43PwJO_%*pg`_VIc1*;XqDvf-$12EE-E)<}15xS(HQBR!HK*Hrnx&rkfX z=YxT}s?!>rWHYRTdlags#NJ)@;ZiKF)^#T6>nIC|&-J%KU(O579%dXF4wrsh>{!>Y ze8ml&Iu1v<8sy{_GhAZO4?wa1hm3Xl9lnX&3ILARY1luJeE9!l_5T)Gty+W-$93m% z8Cf0!FOw<$31AVSjsPr{j?u5wpk|Mw5bh1<*fU5xyC5U!@6!4!)h}u7r=HH1&wTW1 z3My8NRT&df10cgdxaJL{jLwYVi@Z16GmNOa07{`fFsJbtz#SZCY?ynV%JR3PQaiz{ zLJR}|?qc59VDbYuIkNfDaDJQNv~A@fZmF{WEi(K91Ttix?q?@x|8!suOUzU~?2VAW zI++lY3}r%e5~)zX&EIpMBN!0R;Y0Fbpd;mEheiS{bvsvwg0X73(~lg$_l&2(#ccx^ zOD$1N>zPFonJ zHp^t}HWik$s#WS3_oUTF1R^Lu?5LMc;Vs=(*qsVgqTp|zj3zFoug7)^1^I!S6r^`l z7s`CZJp~P9_By^dufTd%&V7t;T}Lg~FbboIIHycvq+(m$ySy*?C!Cn}-CyIxF~J!3 z?EfAoc2_PQ*{);bAg!AhMJ5ud%AaZQ3QZst{v9edmhdn~7|IU_|3gC=K^E8XDL=j= z{W&4@k-@xz&{TePJ$~Ntn32nX=?1behd1b_T=*BD1NHwNLH&oZ3qVk-hL;#&`2k_x z9KdU?SNS|Qh2OUR9MB<4jtW^C{DhBOZgKHkD`ziE~=hLOR&Lv(ySwn1&m1uui!Ed(a z`)>K-vCCILdH@eWrK}y>-|`lJ1sE?H{RLorLj3MdbN4?6jKf->V}7yF%Kep&LwFz* z=I`W)jy1QG>ftyyJ4Auj-{rn`kszeL8#wlzi_6`k;Y=Gee7_ChA09PFsegIf;0@Q? z0BB_NYKn_!w=3Ui6;70n;7ZuAC(#;8%i=y_QyCaQ0f%cY+^v>%VM&c6-p27_6jxvF z0OB7EEtLi#~vVjE<1Eqk4hMjyZt!(bl*wX+MKIw-|GDv#emuhLh{ ze}bF?n5dA=S_LpTsJUtM5M?Me&Z7U*GnSP@zf(qIPd<1IGN0*mAoZHa5yOP$}Hx3jaH7blns8>d` zXU62SIVNu?4VRS|kZ^Qo?(}`HyL|Ujc^vH`rYZaH?Pl!xQ(~W$!6GRHZ?Rd}GXExA zAf0_t_~=HbD^F5r+B?Ir8pkn>enS*UA5#VE*H0@{#jK&3GR zC^0>KSvixu`02_SNK5?98nZw@PWa&nV@EmeZ|qRB(3!ti$z3$>D!7vYk~b65j#uFm zS~BeRvhVeG?q}?q3bkjZ>ZtkUAqD!=9@od?GCpUiH|MFl$l)AI!NI`-S3lbpeQxaD zW5c)n+uKQ&fl=aqL3UGuH_tnSa?Hr@9_gu~akZd*eaXyeWxO+EDA2%dZjygGlhc;b zSK~3~>F{J>I7db#5&dXrPMHsduDGtfsjeZ8($n+~9({vlnx}Nu$PK}nC%g$rLTnBM z2<0%2C1Hi{bQJ|AwD-9$1ke*c>PdK2pZ)MBAwGJTMCU)El(yty@PS*N?zEWX8A(O; z#*oaZN` z(}3k9wr7JhM~$Yyi1!+NkJFZWiLB_TJL>DG7d-Vp$2t+p`1@X>e=gn;zM0Z_9bpvk7;i=|x zxj(_m;!1x7E1QqNF{2Fp0jl^G#jsN-8pHV*8_+eXGO#HKARtA)YNn9M9U7-%yVBmj z2A5f%J;wPDxaG8e%q?@#zIKIf-EzxDChj+E+u|)*2`4K+YVCGoR6qc*@Opz0>BZ;y z$Fs$V;IxL@HQ(vhEGDNI;5X;l&&x=t5dkY~-)>z-iKaT#zGG{!($V-$VA1`n&ebKN(SdVb7FD7ez!+;zp8y<)p14$TCMLa`j zd^luM1<2#qyYZ5vAI}&6APk5Qk=fyGdiR4r(;LQKA5|SEcnL$E`$Wpuf3`hEaS08d z1KRd+QHJ)}Ux`mQZ4PI>2dKM{$U1y1$1>9wgjzVW0K3%d+*S{gdqTw!H04Syate+Z zq@d*DDrnFnN@gO<`E*c_tJ(OcBtG3swBm$j@z??h(W>4=9{h4YY&GGg_dNEI;xWs1Lkej#Z#`Mr( zJ}_`INk*xjuz9;RtZ56~j3fpgFsrR) zQ?6bhgNv(SJnkusrMn|k7UKAUELrA}mHYnaixt#o`s&?O+uqK?-l-7@I-jB z==TyF3`0?MTV;i%_q|Vk4jU9ab##nmq{^h4I?~qPyZhiy5*lgSOCY$bF;nBqVd);L zMKsd4cZ9DrHL1LYS8rzFT&qr?ZOOZrS_5@+HacZm;DZBMe6#cxtv^C$oQjH7D^^mB zA16l*uZ;)akh4fJ)u*hS{LsF0hiF|4{6@hF5t^WaCRRs4{08j3G?-z*^l}|zjl?Bu-nWni_q20amH&0V-c({B1hLPrBwkzMBJ83+D z2?JO}LQwUM0pw%R1zPv-w1_y6?+qB=)BW5)hXU09gnVa~{3YLAAmIi;EeylDhZqr( zQ%FdKP;?wyhdy$vBC@9#d6%nbZj~BNwT$@wWk7X|VS1mr1ABTdy6xj!2l*}Ccq1Y( z7~uyA_wZpvfPNxt@Zu}UyIpJxeIf-K0WK?Kr(3khmQSNVzsJ~T8tS{zOh(ln`lxr4T(v!9}4nTu$32A+C#o<&BxP7W-G zMUk{b^)Jh3WEv_z|M(R{=D8FQo1J)iEAZdP0U47h1YE8d3qTPKm1{2DN)4;+h?gLX z49V01T8lyPdCL~zisMRa7P-~X4{43l9hNl!lKyX&xUehdX@_1%RtajTg8+~t&&^@h zNCnI1CslQN+;Y>@aQWC`sTb=N9F-3G8Fv;p6t?5dB}GRj*joBc@W~>s7VWb!3%g84 z(^j?bWRBJv3nh1b9+kdrDA4eJ`82?KhD~YF>p=_Zmh}Qep-Q94y7qD1OoM3NPBh;X z>NfHIico|33-=6H=7d4f=hSdk2+`VQ8sqXl>%djY2a3%rwk8ovZa1q|m1T=bt@-`@ zHr7+nTGY8n5C<#{#a-j!jRTV{{OZ#>tmPQF@a9Se8ANx0wwXbQhq@@d%YE2=)cVRqzC_gwHj7h&2I*gjWX5VjW7 zy&2F>g$+Mi>QmBk%C9xsR@c^^*BRDeIPK@zGq2wo9Ub*SMz^Go-yGs3Bj7k6~9sBSklKkzVb%WZ_cYymXhoj>?8Z--<`T~o8rYYpT7bj~HvQ59-7Avtv`_(I^^H-U`KlJh>#Fqdl#NAY?GkLIms@y++ z=HlO~8u(yT&nNFWu_Z-;V@JhvVjaQTizun)y*`~6m{vkYl$|L=lfO?`no=hrTK){IS#8Pa0*SVU37$G|8Ck~*^u*!Kw;>FtMq$FSj?fkOcfPMl|k>sz(B zVDK|bNnSoT7w4KzMpk`+^;nsWN?F>{eUXkB4(->NdH6t)y%T46ypZ6Qjf@`e%}P~X z31nM&R%JGqS;2Lk~|=h~ew4%-4bb z>k>_giBDj|uB+7&qu#}|%bLVH?-Y-N>`z@neeoK*Mqe*RLLjCpVQb?$0Yf+>vK`#w z$~N0dmt*7OoD*!Zu!h5a9`;Zq;NIshw+G|yHD2yYi^#rPa+cF|xca(t5o$4QzPz=y zb$PNgt)ri!gZL{!+r;T|{f-$6MlHiB!8W5Wpt&heQb{^xUx%JO62>Nz`pO&TC5eafuY?JQ*Fr+KV=^6t@XFRD9) zxBaH>G&A2mEdM<(6D62zYc)a_5f=#LlW{zl(D2>|W(z9_AMlPB=aiwmmlPQua35Tc zH*wIJ5pPz58DfD~qmAyD9F4GW4%d*T>m4hB^KKcBt0fYv&D)7{?nSM}?&V&SCvc#l z(@b?^W23K+g(EKFgRGM1c@-v(utExn5PyQ^X|LiuVD|r`^Z36s>HndFpRC=YL@V_^&J;|L}L;sZZ^E<&J~=gej;z?ojgh?p(Dj6=)|T_88JKtrk7cO3kAS z*K?yP9e(qri+p1EV=wiwG zQBfwHXq5a1idK77W9P*6q$8Hds5u2}(KJaiTiue6r&1S2zCs*3dSqO(b}shylQ~2f z!HN@S2{F?NyYcC$IoahJ>;|(b(JJpA^UOMMaL*Qe3%$vvWKrLE4^JO#YZvlgn)aK; z$8l6zfV^8|uixwCsFyV%E>R`Jqgr@8D+5f;_AX%jt%n06M=Fh? zE@k;?+5WlI^kaE`fXz8yE zJrb1kt@!8`$%M6wCodetsbm@-e&Zq9(K;=T#(VK~Xd}O8ox0O%_%Us%_2$_~NwF;| zaDL1EI*av$dYXIeU0Tw_s^7VBEBYVo_zdq#?eTdsd#E1pN!F!W&GCNSzlwo0K=Oi$IN>lS=)<}|4T2_S+#Q?B2Jud9zlgJP2byRoi$}liH zd`gN#pm<Tw2KRqU))E6fR1Upy75yt+ME3S;x)+@J9?F;vWmCQGIn)3E0v zS>=Q{7Z8Lt8@9T{e|F?C_LJ4(QNUEuJ&jf=A!BMF?m(O1rT2{)6?iBUYBn3eK|eOB z%Zo4SM4P~7FXWbQm!&V0MI5*&2d)@h@nZDMU<{IofN&)_^6*0JooXS;;PM>})9!pK zkebpVu@$>zYqZbYO60c|bCXgQPP0e7QxmHoYACU|qpD_q6Ag4zPL~}ok-5LbU>Aj+ z_L)y0e}&IjGrL{ck*J(*rM|r?W^9i>Ewyq!Ht?B*;uR2aGFU#(Dr3ihFbR6}vzU?E z8AdB134SR$nhZv_gk0tP#AJf&UhR<7PzLEFD#l(FR!)vYgWdQ}qv&O@eVu9``mDQ~ z(uc?|vDH`80X=H?w)>@7QVZ*XvS!KGi|;nNsVjI1G-1Lyi2_hx4aBAnNGzerHCiUK5WKTFIcsI{cl3o zytsVb)CHQPvnSsnNKQf z=YpQAkWfxZz1hDUKtCmW%tP;A{l?asDX%Gk$b6GKwB3Q$)zTCvR>a4o9 z*Vzbuy!~Tk@~S^Jky}8!Z^br0)ro_heZ#%TV{YROxEeQ|M6aBO|?G$Ew_aJtZ+RplOR#SrZFThbC)#YerUEhM)xg=hjpYd~x-o*)o(lkbGyi4bsKJR%{3M8nw@4q5J;& zP3IiI8}Oq})}rn!vxc^LH?yNFf2d~>Dw=v${+xPafp`B&W9*kYi~c`O5v1N}$)?gZeE^!4tA6 zks+IFk(IAGwy8q&LSVPHjiVAcExQ9d5w%Bvu2Y0U4RMUfq5R$>sdgxKY11ZfW%Dbv z-`sXsQbxh=87eC(X41m&MUEBXuA>W9OZl6bpqMKfPC9f3pX3ZFqJMtM?vK7Iah*zt5_wj{nIO;VE4Bsjz^6lTl6wBjVNIaZUG7xLNQazD;1j zNb(1F*-POJn&(zOaQXZr69T#xXMC>t#3XXj8?i9DjkVnmZ6`^Z47PW>3u=E8I6X^c zGa94Jk99Gk319zwiRBLd=+Z=I$U3yBak9i~Gjc(d z#u)QP3ee)l=~h0eTG3_s;Kr&M<8dRL4u?X>+)$gQUwTk6HWY4f{(dRhZK-b9-Jv>N zt*TgB;Cp0@_@-d!oZ^N>O9LFZfvNoF1!KN> zn@_hHxk|5dWJk=hRIBhMT0Ky{9l(b%bEDQ>l$!38R7dF4Kdw+Q>dgI=J!B$;_!mTU zL5r0LL(F&7CZjZ78INcFiDQV^x(D~{i>VzQk>kyXR?Xtl%cKm!Nir#QOriG_1zO_w zi?WB?K&-m#N)9B4@R~ZL*l%oHYp5E}@lrR2_F$DbQYP;z3J6D(<$>o)f+bQKmr-mi zL_@lwfFfw%L}hAc{}Wwz-rKsdw0^%`8ON2wyTD$@+4SV>+P;noRZWfk5M<#X)cX=s7r|jx!htK+zLj=VKdI$_^PtC;AQ82&C5ukE3#3G-PM>K|IdoAv+v0u{ z=4cPsyRx(|%(BvlzHd~INsY14gmJ5+m-yyt74vH5K{JR(QF+D7Dt8E1j@tT%UEcI> z4Rg$*?j)Aw7t^Jf+jBchxkM(TT6PQP_~2ti#B3#_j*kOtU82C;eALy~c1w}`82;+c z8*_MFFJCTC1`eg`ZU*}+0#I3#c##2TZu`p>v4iD^2YrlXuQIVAkluO_0O>XS zL7_BD_`pT}d|7OtkRf{UeT_t!`lC}WcAsK-kIH&@;nzjFd&Mo!L#jVk)zO{%wzDps zqo*jBB{&Oe@^{a}l;%{`BTsgVkTAqT!|4?*sl>Nz_DJnMn$y(pSS`t77dO6E1qZjI zFlQqnSIp%dDHo(it z?A(DX7T!g!Pt=?QXBRgKiP~PRPlJzdKR}Xufuv`7v;;CQ}_I-jB(E{ zLA6||EOW|L9MsX_0cL63hqOsAFWd}b zU4Tev7r;7WLs+TvCf4Pk#YYN7-@Gp(6Vpwk+94hgH(~2px><_XA|^&eD+bn$`&MGzm{)-M`O3@k z()Ss`-GTzeN0ZBr=@%lW@WqU+;yJ}9I7&9XBCO{UnXe${!QCGs%#Zf#1MXj;a&Bez zq%TN?QXM*jUV=ger!bnX8pMa9Lsqw7Fdq8{9=jh(j7PpOKGD>`ju0@?>gnznw%ig^ zNeU=h!96B+$urn?s=$W@wl8;IMD`kG80p(RSC@H~O-djYgWWTYMpF(q>SjC|5XOy? zQ(c7`EXAwnrdv$*!I5xMhth-R7d2PD!-_G@K%n?eCld3T(*%{oR}u9q{OJNCWuEF( z+%L_r2HWY;7mj0-3PT4Dgmdm#Jx&3hXt&vhxiAUSx8Nzkm*E9LqJTSax!z3epzv*) z0Hw>kJsJ9TPX68|DaNBuE)9+(bOg`qD2j_9=jgNdNH;`PQOn`tH_g+Ee3pnw-~6i} z5zfA!%e{2QB_ai2=QC0Q8X^jEut%#CPl*@3w5d&pz(Amn`5Q$@5lD$1G>0DT@V~14ThfWJHD5cxEAk#A0OD3ks!c|KHV@Q5yc4_tA9zJ1-aK@eSo6}Y(&<{*Z;T3d0T!k zG^GNpX#&YGCp|ZBhFcH(iyM0|p{+7iZFlVH4EJ)1o3lNtZ0!aA85>qpLHKDVbnSbB z(yO{T6~H;qc$P&)bJN%V5@W-4&GMyllLYv;V|aM#{pgUKdCwf{6OLCPpwAqMgV0hR z$rfd&z;cYa{YCYV2HZCX?scUU$QT?j;ts)aTIY9JGc4oM9+E%JTP?Q6e6Ie!j*0p% zM(Jd!%IrpCojS=)L(cYH-~4U!tJwseIrBTQO%sl^k;TEojCWw*>9WM@$21ASWjR!aH^36aFAanTxR!UhsI@KX zJ#%=wv=2dxO_Q}cS`C2K8pA4UqCEc?U~co!aom*roTVOF=8BWY!f0|zrwjfxI{S`Q z=4eD&Op8rC@=80b zz$SQnr}t)ijj?0xw^7#g&1e2!gtF?fDI?6o;PyPhC{o}~v~ z)tKaR%~jZ=EDfcc*;XNbMFCb-8IGRamysb%fzmKu;xbzGvXO;tKhvQ0+TIS@Z+Gq} z%7PyJkV0%~$8)#*iV_^ImF!6P^q)Ocg@kChH^m8HSoM3-%BCfl`LjLYn;BfX*R1t6 q@U}!t=eygA;s349*dH?44sZBg9_*iHH4P%XBQYUqaM4>G@Bah8WJMnU literal 0 HcmV?d00001 diff --git a/BTPanel/static/images/firewall/system/1.png b/BTPanel/static/images/firewall/system/1.png new file mode 100644 index 0000000000000000000000000000000000000000..78c5d25a5193a8d29cf05cad3c39c4a34f8d0c8f GIT binary patch literal 61670 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 I>G|S+04Jq3k^lez literal 0 HcmV?d00001 diff --git a/BTPanel/static/images/firewall/system/2.png b/BTPanel/static/images/firewall/system/2.png new file mode 100644 index 0000000000000000000000000000000000000000..46af6f3b94db0e1e6dbcafaa0f8b6cccc8aa10f0 GIT binary patch literal 33937 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/images/firewall/system/3.png b/BTPanel/static/images/firewall/system/3.png new file mode 100644 index 0000000000000000000000000000000000000000..21c5b9c60b449e7a4ed030665150e33f2fe34366 GIT binary patch literal 50814 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/images/loading-2.gif b/BTPanel/static/images/loading-2.gif new file mode 100644 index 0000000000000000000000000000000000000000..5bb90fd6a49107a321c35b9cee4a7b810314b51f GIT binary patch literal 1787 zcmZXTYfw{X9>&iJhvXcHF*h)T1OnEW1i^?zgDfop1p?usL*#PMGT;HQkSO{q6FlJyb$PWkPf|h*eTST}7h8z$}MF(XD(aQ)ZLZ zM?v0rT<1C4XHn<6PbNA{XL@>1^)apdD_@tcYDrW#m`k#MmslI7p^P;Az74wGs`!SI zLs$GEZHsafXsu1i-WleMzAL(yw$-LK{0hv;6hrx8kx!!4$``dAyBnY9Jz&DqJo2$A z!(L$H=KqBeY~CF_viHPz^tTglc?D97CqEBjzUwH}7GI zapg8YZM~>2Wk%E$d&r@9ly9b4Q zJpM7T@}r63I(OExUlG%Xcjz3MU+9U^r!SkpjNThDtaP)7>j6L5z%o5|^hlVOyI*uY zt^UU6NTuY?(Lb4ZIU2Zb5Vz}Pb7KF%ivf&j^CL>$cDz?rMNTQQ|NqDVD7mhghUp%h zhIA{gi{S8y9YhIIbSv$`B!JiPi!0#4#Jge0)p&YVPHchWcyAn zQhvb8ggXGXs9;k`u9Uq*YB>O+Q3Rq=2hlLFcG{Q3ORH_}JnY8C+r%@}6|%ySP%bWG zV~mA;?P`Q2L_Ss})nrJ{$TmeA9Tt*4=}X5x%RioM@_?ZsKSEST-f+GBv~Ya)xX3O{ z8!d=YthI-13OI;RN~`>|6u5L{z20oBp%9MIj)n$!Aw{Wpq&Rtr4~*_74Gjo@3el>B zz(Rk;;>2lp73<2;d=r*8z%WkdsG=vRuG_fvxO#uN^El|+5Qoz^X!2MfxJ3m}vyi?> zMLLDi8+${Z6YbUg?8GNR>-+SwHKdFyr%HqWcs|X_l*-DAC^bG&KCqWg7-_`UlwQ`EdOp_LJkr`L$mHHs75uP?fSgVfsDjuE#ft2b8HDt0yFt!+;C zEgL=)G9ZFt4wa+N3Xg7FGc0~`&EEt6_%7tyzmnb9B_h1~7~GD4V-Bhx7~QKRkF>&aT>(-!Us@aJxAY@8E?HW$G8g zSz@7Jcp>iCp;lU1ieF6n7!oAa-1E!rS0 zF1lBFVS%G#ZO}b@*+bIk+7@Q|iG60vIDVpV%4tW8rKyzwRo_<25;8*Ky@n z-sX>W*b;M){5lB_Edc@m1`VHy0@dg$PTR9uE$O2&a?KAe?xRlCj&Z$iZYw + + + + + + + + + + + + + + + + +PRO + diff --git a/BTPanel/static/images/pro_pay.svg b/BTPanel/static/images/pro_pay.svg new file mode 100644 index 00000000..9e53931e --- /dev/null +++ b/BTPanel/static/images/pro_pay.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + +Pro Advantages + diff --git a/BTPanel/static/images/recommend/disk.png b/BTPanel/static/images/recommend/disk.png new file mode 100644 index 0000000000000000000000000000000000000000..2d47b481cf2c9ca4df3aa8d705e16a3152bcea97 GIT binary patch literal 27660 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
    oOK4}dQ0Q*=!{f5BFu1ncoN&$TQO$wO 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 + + Created with Pixso. + + + + diff --git a/BTPanel/static/img/feedback/QA_banner.png b/BTPanel/static/img/feedback/QA_banner.png new file mode 100644 index 0000000000000000000000000000000000000000..510624924ddc6c0a958b470351ece841826aebec GIT binary patch literal 5279 zcmYLtc{o(>|Nb!sGng?3*)x_2*~wm(vCL3evSyzmMR}7YChOPvD`@#8>U}^w+V+_n8)GH9;90LICmIk`o=Kh&0Sq~qHblG<`k8Vy)Y*v2QX*?r2 z`QTyt=AW?SB&TXxkwpHiK^s+ZEleLAq>CvR7V3o1=(93nKzFf%u_P7ASs-N-Y0$SI zl!=S2i5l0)J}LinAjqq}yFR@#z2bh$^;Nv)`#0|oaBkyJPLTk2?D<#Ve09`(&d~ zJ-AVuC{9o1s?)V%CIA3me#A)IT5G}p>o=t;!=DZ3y|0Snt!z3tWg1rBG%G7C=ZjTN%B~o;H+@mc zkGy?{*TI3(usMg)I;}v8%7QYH6^sQP`;L|D^$u%({dYHMjRyFVcE&e#Hf*EO-+xJQ z>e73rQzH0JGVtM2F-nixkmuDMB<0his9L;&6_y$FANTevaw@PBAu6FqE?6)?zWyLf z6dF&+A|$GwP#OByRL0$OccqqXJjnLv(VR2`@HdUNy*o7#@qVLLN>*w~^+N%G=P=Wv zZ`^F{A^3&wV&g&lLBRRE9BO_ezW^u4Tei1(e@veM(C?u}wobm6fkrTL26Tmo`pv8gUEUcecZWPi3UM zBjg=B>DA4D^t$XZWwmq57q-d!hN`VoQ)S$*%A5YV4f(u;NJE(~^+P#Bj8uIFiy;cn z5FD3)6uEqb|4LCWWZ%NE1e%UsY5J{v-ravREowi3^C)@=1ESsdRcpd3k7YvH1M``qKDt1LQ|7 z;IC6};3VqoY9*N>F*K1x@Au8_>E3l8b5wBRH5cw$@}&sq~#VQS(ed-yRnH?h|BTw$Oqy8fyChgEr)PL|HOdQU}#s>R! z?*AkA{w-GLEfwJ9rSAE$GoF)5(QDxgH)X1RI9(dmn|s<-VmYWrbF=AU4_ldR9AryV zNi{@gUV3O5ucMKTReJt?#1HNA|EOSb&~Z{Z+Uc?usGJ5Tj&GOnURE`OS}Z)m6@5gH z%&{5X)OZIE1!R*aCpMHMytsII+Y|YxQMm8OXbH178AfH~{m(f|!8)hb0f~q4 zh`4#&T)TpHlTAOuIPtgxKS8S^F}9e)IRni#etqhwx_GHk~P42^_1du{y1$NUKUho$lzp4)@jj zS24=R7UDJF5w`GWtQ@kPIb(cN0p7+l{Z}k9ejs#T9MG&bl{2gRUi#YgBAlH!!?48c zv>R_RjJAx4RD;b6bbH~FSSYdLu5!p51jgrR?m_{Fwye77>Uah1eqgY>x~OzBw1U6` zIF0HjJJ!Rys{SD_)p$8e##RIJn5}>Rd}C&hfScAUbDU#Z9Q%TJp6ssht3|<++q!H< zbg!vNmDN-@X23V{1;KrUXu?7>L$K(QV0)i<-LcoUNuEaH)(IklnFp!W>n8*(v^!cl zB5c%$cN3Yy`|hbfV`>{8=L-GV7i-`AI@dC)dJOeSlOoxFqHeO!9XQ)&p(1t9SrR1` z`WDe`t@RPv4SBbzMF=gy-==F#grq;kD||2#vwn68hS_76oZT zfVGy}Lp|0Lf`;!~LBJxpFzxkNqUqQ*v$;!Vgsg$GWMuH*y78PhLO9>vyxqZK#1swU9~Xz9;=0`S!2A9LX4YsVwL zyS_(?lN{0aCTm+OC4rWY#n@9ufYVBvIx1wxc%!+--oL>v;n4myvgm85FR;9K8;ZJV z;4CEyOSZ@(YupEQ+Z-7fcVG~A$1-}2E*!8f`!c=sP8dmOS`B-H&e=RSeX;#q3I5fM z)SKoFHB!xq=qq?Y66b1z<>G@T6Pg_Oj|d=~U~oM~-hUif^e!P-4`cks!!75AJ|pF0 zGO(H?ed+M*a%_0s@71|+|6l!qF4=_R8QHpE1KZ|wa5-L`MG7VhZp~PzR@piiq>dow zs7;s)gLBTmR2$)Hya&_1&Cq)C&iaPFcV1HApgPe}sO_3ltCYKJHlx%-R+#*h3an`> zHuMb8NO@cKz(f8@a;VXMyZZ+L?Vl0LLuO*l#|%xC(Pv6qs(#(H-{(MwR<2xpLIau2 zN8f+qiPjd%zBWY87p=Xqw)7M=u77jQw^B}Rii?O~k6hqZDp%mU6ZhRj@=CtZ&3vcs zu!^^ziT{en>E zGdXy`PE3UCP>k2-4!lN#LObKmT?vrwnebM|&qV_Rc_A~and?9bQi zDwQZ`Xuw-O{JBwYr(bLiA{Q_#3BxN7&lr}SrJ*R=KbhEuIu~ld!v68ydX|+pgzWK5 z6jf#FE(mRKxp=Mbz0s02;_gy^Hk}^I`l}e7(?${QMq-?w1{9Y zf&6q3U2rOM1d9u$YKZOIUdr?Dwe{xbbM2&QL!U(1Nsn3cQ4~`blC+-84CyUh){L0q z2wCxPIPnAVw!B}tXztUR8j%cl$wh0I)1JGxFiMms3*2p=^Iecgy0Aw6f;Tfv=2vutC0cN~hLD>31!@2;Is!`wNBxV`BQC{y%P z|2>SQ0ZukoW5d45H2frbUoQ}66!u8XO}n6rLx^Nv(9#o<^gM;1<{J$$9 zZQl<1=j1Qa0p-7kZQ$(TJkT=3Fpj!4jODvL66p7nj+n{8is>hX7KP7Y?a#skYTY_o zKdTNfFK}XTDHVb~<}z_Pk{K*mNoVIQ5#Ri`2N7C7N5YH*aja_12A^Gxg__Gdi6%+r z=Oee;7EP@K!G`?0%gFh{B#d)|x*=o7-1*cv@OcZXGmCasxxoC+-qVuitY%rt(zH0-z~``u=5t4-AMblFsY5F zanNdKs_oNw!Jx98mqRH?SUeY zcV=GuVldYE zNJSTsM*_aOwb)!m**+HIswCZFvBRW6<_T_%E8a%PUm5q9yT=P_c>lbJpA<%}y#9hc6Bn}_J?nPW z+>ma%Q6;lj9N|#!^47|fnXw~h;Li*`==eiXW&pJ3a=H^`C#d^qstl#R{gl2RQIUYs z#nW1s(A+s@Lku})>d#!<++BG7q*Z-W6rXxUm1!_tQV9vUj73MBfhrmk+Sly)gT6Ld z1Rl8?lb;oo2bdP2*l#>iD0 zYtRzL2$$~gIBAu(ocY#9D3>rx#lkPghakuO-|3zc)@QQ!=bOn3jz^xC`yU>Ee;gZ! z5*so&G>O<^L<0^l%ha}ti$VhyWVY{h6cCJ>HGw-ZMvEiK3_S=sH1c&)_>0|Ga8ljM z`UeIA@1?!Y-6l@WgFzOr&EC3dNd^E&{-PnZq|HASM$&F!2W$;T0)@z*LKA^^pqz*> z5Xnv?^ZA$2_=~zwq60ityciWsILe|-Uy5u#`Vc)C{36mBj?8!^K*D1UbwFfXD8GNi z=Yhj>H=X@Wf1AXQW8a3NsCMNBB{S-ZM5WEBt`7$PgSi|Np&#wfLCekPqf=%E)IQi* zbKeUeBp#G~I?0+&VdsB5los70S_u}S6C6b?lbk)8DD)SbJ&~e)SzsXW@KU%Glfj{4 z#tl?#OFE;L3TOa_SjNYK6E0-}DMFA0SsA>Az&J(hPH|$24N~$YZNb=6d1&-D+oD68 zz@^RWK%!)I8xxc0QO}|S6YNS4)Kd&-U*6vH;%TI-ew{q!(M9czy2pcfl5z+2AJ|$ z+LmI9#faSH1Jju?JLf?B7`J@sAH^|?X=^z<$^oBPIz2eTf0w{?=A9IZX3Kkz;R&UA zvNBzdE_cj!)Teu%D6ss9^d1x%NLbN4c-$4#vs>ThIdhz(`!(eENmI1hFIUguf-%us zBAqA@uzJ{+8;zQOlq$9p@URIw{d52E8#jz4*7II=+^Hv#`lx(XdMbU!jTPQJ@ZERC`ju+HPRtnMZ0C-8$-ku{s zs27EEni8E_1zb$7X%j9xHgB|dxyIM7Y`Y*p4I`DX{A3V`RXmI&_AZ?xW%k@bcChRY z6I2dmi#ecLH{*wsAu&-CQg&`hgZ59!Sq%+aAJ|B)|lclND<;Bm8s8?22MfiwbdQC146MpchTAbEz z?)j=C54Px^VWE4$Z+r_{SiS`X_2~DM31IKOX`HJfW!$ND*!CJGpumS442p^cg0;O4 z{RUgg+q_*YoHTXq`SGI2JT3x;C5GApmO$CeI4PJ&-}zV0u^J!I{xOo;#=&>2a~P%0OQ!YZBxWj#bAfk1p4OFB#Yx4Uj~+>&9B@N6#az2HU;OcbvdP%g}K zKQuvA@JJUL>2h7q;+)GGR`wODBV%GNcy=AHJdvzB*QW`{W~67<4rT1VYUQllhP$t_ zJ$qnNRT5RU-}|BI`}9L32Kk9n(XKa%i)Rvd&Hw2!qs9oDK*E(%(rJFg?pC#;BShk_ zkCyfM(P3h^#V3<6f6sg*LHy3%Y+j-))0Yc|j{jS_b-F|sqz(?6>pWqozA&SIW?}jQ Q^^YT9pl768ig6J95^PDOFQw>?&P#KhP9Y!!q1Ou>mh9Ew|7><*ls-t)=(oTXIqJFZVgUjo-2^LZ7X rEd0-`qB=@dboaE~+b7AK+QomeXwB`P<@4_V9nRqC>gTe~DWM4fbf{q) literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/feedback/QA_emoj.png b/BTPanel/static/img/feedback/QA_emoj.png new file mode 100644 index 0000000000000000000000000000000000000000..b2e5015d2fa3073157ad702d9547acc35b53f9ec GIT binary patch literal 13376 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%0A9@8vqHkNxtYzA`C~?1yAO9 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/feedback/QA_like.png b/BTPanel/static/img/feedback/QA_like.png new file mode 100644 index 0000000000000000000000000000000000000000..28aa3c2e687bcdc7dc2b570f4732fcfba3e45444 GIT binary patch literal 789 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
    |#FhGsMs z${U}CQeZvsUIivimHhB)Hx5=vqNRqK=$&x$`MfLGvzR?n00a)z2N1Q;BPyg=OwWu> zlu;?65en2p3Qx!iqF}3@7R~sIB2XqGt5R0)b?-+%5BCl${N9ra6o?1!rWr=`cdXPf zN}NeBd=inv1_?sdV*CzIl_W)&H$2axdU-n8#^+$%LBq|h{aC6GeF`eYY|fSP9t-?kaC0b%VU24{F@{%saCF{&U1uy0}{Qf@7cJ(aWF3*T>L)|>&1OdP_F zL(kxhwlYgY7YxJBI2)s?3YS_PyhM>iczN^{9LXMw5K7hXbS8xu!T3oDUq;Lt)(k*^ zh)E$3u>j-1#6gTq90Ve7kfC>d#Qmxkm2)(MZsnU+H@z9PV6M6sI`Yhw_`>6HH8fY( z0RT}$NJKM;G0;F>(_-MD;q^f(ZhAe5#_Nl)aoqf6pnQ)mE=Nr2>K?B*}*PDPvW!t9ue>ueYf@%4#6E6QxaFTJkWq>hy^h?#?} zRJj|mQCL>>0*Q!N0RN?(F=RaFa$P>eZDzSeTk*qg6s0Hrnwe<>Hqb_F zr1`jk1^`-)8^kb%g$=uiSnVlm+g!|T8^&?m{ZDUv;^x2nNl}@SBn@Iv4q!kT>s#| z;7gBc$WixQw@?ugVuYlCyabn6M{zW%pxPusvh?D|FB*wXC%|1Zj`2gU3_(8bR5_aK5JKC&n zhB|}6#~F0gfwBQ59dwKh0X&33XA?FlKXR)@jwwK)Dj@)}9Y+!lQf-8ZE&|V0aOX+T z9DuqQsvQt%1`-4nX>@5(Qh{dyfbfUYr6}&QwznnbGI$}tZ44wO*iry>AfW^fs{stC z0Sxf^qOsE!P8KX6DlJ~aYc``TCE#=@&>R7DGiW}5IRH8dNE0Z*U>l%_A43XQ0x|&r z3gcm~8?1 z6oEPvWEVrt1u$0tT?*W;z)1nN01^x(KKJM6?di;C&jNr$ZL{*^JH0&5yuw*$%^tA@ zB`l}}0F1LZVM&o@s4fOs0)W?hv9dPgL>}495gf^Nq03!gqF2+xHlSm2)X#q%P z;I>h!J+bT1-1{CsJobtI z7|!|Mr;&iL07?Ly5}*`&e-i>J%Yr5MVV@X0HN2WL5|-&G5_pXWL;*84j^2<4GY5=avA!XH9w-iJ_Hs2RdE>=foRgE@yB1FRUr1=tlJ?Yd?FeD61Q zFT4BSpT0(uq8eO%)uMnn!^5M!U-{av-~8`i-@O7*N_e(}%V3vbD}VW=_(t=w;{r5FpmBh+1j-SRCs3Xs9ENfka2aqF;1YyGpgg=ZSx@@#1i+&NaZCV57&r{z z2;dyc!yOYyWaeN_{uqv_4O8?`S}?4BEj0jGM{p#ikm?{z%qG}#72J8`Ik>tQ+zyB| z0SSO@1}p&*3J?S(R3JUT450uh0d^U}A#k2SS%#YdXcWLP298MZAq91qkv=Mr8Jml_ z8Tdo;Eom_|D0Ejd0Cx;?a-BFf?gGRhCP>GHlLdHOLUu5?jX)^{ktDzd$O0S-fDl1! z9W#8R(ghp>=Ky3GZiYZ(9x>=RfTId@49J}rMQ#F^n|m6AY7;i`9r2UpTQ~`b_z9w; ztFVsZXwrex#z?dSssrE-3E9q2Z46E`L`nb&fNTO;1SOTPo&=!0UIrWi$`M4?fs-ZB zgbOup!yYAwQGzpS!5YgUH!+5>oE}|8%eI(O6giO0c#KPMi64)VNG6a=DX6qWI;G&I z87d_}Nd=W8pBM_tl91#AkO48+VQ@}BWLU=k3s+JFso zKF;T1ETsW-J1+quEdbPQJ)5CYd?mr?LDz!r#hGSZZO$ zpQl-Xjsfn3~{|^|k@s@U@Ow|AY002ovPDHLkV1g_@ B65#*< literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/feedback/demand.svg b/BTPanel/static/img/feedback/demand.svg new file mode 100644 index 00000000..c1cec108 --- /dev/null +++ b/BTPanel/static/img/feedback/demand.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/BTPanel/static/img/feedback_2.svg b/BTPanel/static/img/feedback_2.svg new file mode 100644 index 00000000..f091a691 --- /dev/null +++ b/BTPanel/static/img/feedback_2.svg @@ -0,0 +1,7 @@ + + + Created with Pixso. + + + + diff --git a/BTPanel/static/img/ftp/ftp-logs.png b/BTPanel/static/img/ftp/ftp-logs.png new file mode 100644 index 0000000000000000000000000000000000000000..10ea7e84362ac652588c9ee3bd5820a7ccb467d8 GIT binary patch literal 19056 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 bM-+U~**af@hrIz+08)IS_PFrTvv>aok-|L^ literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/hint-confirm-icon.svg b/BTPanel/static/img/hint-confirm-icon.svg new file mode 100644 index 00000000..e679cda2 --- /dev/null +++ b/BTPanel/static/img/hint-confirm-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/BTPanel/static/img/ico/icon-text-hint.svg b/BTPanel/static/img/ico/icon-text-hint.svg new file mode 100644 index 00000000..9233dd9f --- /dev/null +++ b/BTPanel/static/img/ico/icon-text-hint.svg @@ -0,0 +1,7 @@ + + + Created with Pixso. + + + + diff --git a/BTPanel/static/img/icon-ssl-service.png b/BTPanel/static/img/icon-ssl-service.png new file mode 100644 index 0000000000000000000000000000000000000000..e97c09ee1f8b4e81c5a62b9bb164244ae406dc5c GIT binary patch literal 304 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/nginx_firewall/1.png b/BTPanel/static/img/nginx_firewall/1.png new file mode 100644 index 0000000000000000000000000000000000000000..2cc34f1e4340f25141e957d4f5707145a9d8d4e3 GIT binary patch literal 119273 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

    Vg?eTDduiV>9!5F=fG9;{jiKaEId! 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

    p;_ER!ZoXp7q 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 z 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 z z#+s-YRlW7hUYc_%^sCcymHO-{7W7Wzba2OskYGAlS&2QMx}>=Lab(h%El zHZS(hNZRP!oiis__o~+q!w5(*5(~s}OqY?6=+lFOb#G zA-XOa;|jk>KA2)%^jq)XV|G9bSg@fY8APMIR3(qGHWyBH2e7 z0G;85edm&IHY(|+a0G{XNw)m=Ov=l|K&3A?WZX(VB2-v zo{Zd~`T@KYWpjVo7hZg6wgNvb6u1J~|DRc)JBsE1MUKHCq>>O$wNs7KJv?1uKfjV3 zc5lk=vQ~ja5BLNOB?1t{z1+r429n8HJMRG9dU^-rKSg?%y8a@7fCE z-$Yn(P-T;wNtt~RgVN*8T%`t$^!8<=JTmcA+9)`Co>&kEEQN8cmdEx9SHet7{ z1{jgan)$W$pi3qkbYKDC+v2_wG2|PXaC$WCxuoQjo@JHYSDWCCIt}gp+VV%^3j}Vh zk(uB15>*tmVKXl>_xvPMj+NqQzUUT-+Inhl`MfKh^2{E9

    gQu>|HuUB@SO!_uBw zx|j$!?spB~fn>RCi0~mSKR0Nc@uyN}5Nn%uru~|Jr#cV$v(?w;y_j*Z>6imP*%xZ| zeGezXs+>W(aGv`fi7@y)g$PlDVa~I%^0uJdqdL35&{fK<4a_8Q(*#~#VSo19_0_!h z%fMElv1}34M4XfeQ#*~*cA?PR84`Aj za!O)g>}}c9%{BTMy+d~Cz~GJHd+Ky&oQ0mjyY~Bvm-!P@!5O@rEj(IGW%+J6@p>z) zqmveh_PAPsB1Y4j<0g2w8H`n>gPVj{V{9YY4OtCqHT*J8nyIjes=9K~WRswLE95{9 z(Ag!o7Dtbij_jUYFG{d_m``va?+LYi9r%t-eH}9AD0bV(fjjc@mF&0M7l(}(4lV-& zt`Ae8P~7@@=89LI5&18w_BZVF0ld0nH~{^$XL98o$Ftw!0H*9I(6U?$c!Xg52H$dd z!r7RSa$iH|;bU6gKgqk?_g576@=cQn)Onr)TkP?cM(d8bph%pq{1QFZ<%9qiMTF_k z@Xk#g-w-Z7(mowLd4Rk?#}bZFkf{mt7w`^Dj0FC%7eKpViM&>G1sIW_>~^fp{@dG3 zVzxAVs6ibm{fjzw0t71&Xf-UI%rc|E@}rz6Z8q-4Rl#|U`}KDj_S+W@t7p`fNBxB+VkP0~$Oz6Bs(Z#Oilt*r5wQJY!DR8s zc!}ObeSk>xJt1$k(P3U<15u%BjolC$^*^?qDAK)CbGMk*Gx z5Zk}7ivfQ12YP8tc%r~b97F+f^f~dT9~K|gz7Pvhx@o-+$MMD2)$GE`jpI%13Eugc z>N)zQp|)!PFDa*?zej;c+jM1ZpnrYq@2R!QgWhss$eM9eQsz3epcG*YVleQ&akk>e zTZ}FnnX$dI<_}tY)*ti!o3K9 zlX)Hj46=_oXj>z)02t3wtaCQXqnNUO6d#iRIfqnZQ~&}2i)8-bb&W)*KLjS@&G42P zy+k>UdA8?r9w}YXIiUK1V@~{(NB_UD2f^*$C`@rmC4;UnsF{h;(UDb+waJz_h9bCW z%++{75=5+Isn`e?AevY2N(8*f7EgtScu7kocA^767u?|(vL1G^+u&O?DDStL%7k*yQrRya2|Ecwnm`S(j^nrcH`;FC~F*{@oa@Y_3z`bOaW4V)jcPj{#S4 zJzT1kM3nKJN1!EP;CwtVmxvg{oD#0;sl}Fv>)4%ADNy^c;q&PmxBP6LzZuMsf1U*Ah%!zZ!vo z=(m(qTV&==+2o}ftMfsO13m>29qDzYpwFdnBr_I^{L z#rm7POpX<$Gy#&oGG=IzSe24`S`qM>jZO~>vm%Py`yMIuG!abL6et=>moHlfHs?)h zuhSk&ho&&9T|L6NH5k zOO=+u7dBMrS0B}yK!>feF!YA4)FQLH6^%KC1>@zirI@jR&*uH36|(TCLgi@=n&1y2l?)76F&2`O!ePn zz95^KiTe%p83q&aC&?Z^f$>$|TVKi5-%CcXUKzWko1_joV2HLN7O-B;oFlh;hl+Di z~AIM`uQ)PvS~bN#AiO>tn<~MungLSAH{0&F|z1);#96S+J7Pkk9=j?u6+|%c`x_$t>(1Y zYO26lXs_FyJ6)oOKl|a*8 z5=i4t-X=is1SeP$8VMTQA-F?ux8%j$9fAjG96ES{yL$&naCg_cnq;5v+xMKk@3;3o z`*5F5v>TarfRn=PakvZpIq}UP~2wlSOqn}^v+1@4M&WOkf%39)yk>--uS-!Ef zE%?_b`fqk;Vu>%3iD?YR;G&9rW?EvdwviahMD9 z8CIyNZQtXntRURKb^e|G)9K?a#@8|0ErgN6<&(N%9U@R2f}{mG3`{Qx65rg*urZ=z z+OABHzn%M3cls8Z-XQ3(WtH>8v3@CQ*OLFkX`U`{kE^2G$!3tou-{6@kk{hqwTXBDvm4$ysFN7oV;#;8^;dwVQJXv)|B18sO)V_Har z?-@>w{p;vLy=DSP35TXS9Z>>(o3o z-*czM8fUfXP0|2uI$al&`i#iuD$~|3kLe9pbj8XlEGk-75*7;;denwO^PNl<7o z<>g8f4(OgIiAK^AtuqRvWRenzcKAP!l-L5f#$uq*&cFsbvl#;MJ12>)Oj9ExOr;rh z1@7dm-Lakuz&0Q67Mgp#bzE=h>FJGcVkpt+o5#n;6WC2b|5S~4@18(`bN*;+=4vs~ z5)_->oUT)QhuVrwM(7|;%aPxLNjNz`2eEgSXr9Vx_`36WDI8vS3k!4cR0N^(85C&6 z=Tl#;GC;k#HFl4;9lRDh(h?Gxn2(cQG&1Z~+5%k6OUFuBUa+<)RwgY57q%be(;n-!A7Iexx&hHhUL1^|{qlD^ z9~pQrB1H?U(2_lm{IprmHz)?;@GXPS4E+^>HEEu}o?_2ELmO)X)T)%iB)lTcAE-LCNu2!q zJ7s)l?gBCn&*z>{q&gm!9iX2TMP+WBAp1Cz&W05jP&?~z5_JZACnn>s)RfH@g6ms% zT^)3sN|`I|rl(zo5h9S9EoCGH^X2|>*WbkW9pgVu3zvtMbe1~T+G_TDkF#5My(kmq zj(Y0tmStP&i(s(KV(xPjNq;>t0a&`;JD7d6UFsy{OjZEKGnAKk@D2uB?PDBCz0sYD zXY%5s{p7p0RrZ_dtkg~qTkd|LrIcs5H{{`72ig7t)j2)DZ%DXwLLwL{I9$}ftv*VC zt}<-Ixi>i8ydf#kFs*$jfz3+nSQy>WwyD0feWf{n*t9pA5lfsVg|_psBjoVXeV@S6 zU_!RGfturZZ20BLX<*5I&*C<+&x|`$U$JU;x5lXHm90Y=?CL|S zd%Jz9!i4qH={lpPZ&ekg`2{J@njU1(Ve>*t$!jy39#k}MrRm%*aSqOBzID^flT~qn zxi*YVS|{RTr3MbNl=bLcN+&)+v7lFRSDksKeF3ua@FO)ey)d-LX*)2-|0~3kl-8CB z_ip+l^y!)k{jI~Gp3<@@o6lXGY zoIEu3QNu-d_Nru=A_tt6N8BTYoOYRS=V0w_N@`QMh`@2+`5T{P!7Z}~p@DwqTkX-a zTCENsAPu-3N^JIh~ryU|%(5WiB96Rf?F3|pE8J`53Q;?+^?IYKucaGo2*Jea85 zl+|K@Kxn7on_pcy-O#>HkeCy49Yj7N@-Fc!-JLCZa94oBW8B`LNayHylfB`<@$W(k z`cC?4wU1uY+`h!c*tsLZ>xHKe1+^IN?d8!1Byi02ms1D*UIqon{s%4*|a1FTMslhCxE(O#svDsCI1pm z-TFLEfSjy8Ti@jifW53s&KMDK>!?5v@72{BJ$79v`BZ*TXJsoLQ-I&4F}p`^sqVF9 z@s{{-qh^fs(w{V>RlL;{ zj#Ft?m9Rncv@(*#6C*03})3-boxFB4sa(JrEBrY};x3-KwAK zDd-UHv3GJhM^7<0T{04ruZ9YNHVkr4SMq5LemFa8#oA;S3UDF>)OZnZgl~E~Ay{?s z3|}@auGFC>Ipgx&4)lMfKd|+uVIZRMZkZo?tE4yoxDi`sB0U zMA}(RPabv8D*MN^pjVM}y`s5-cF^03M}9m%Z_!{QjN$JP%U+(u;+}?zEjkafuLPx^ z{IqI({Fhq3Z1ei_k88YMij1RX2tU6O5>edQfo4ID_=&qEPm->Dr{G>Hvgvsv7H}S; zNrk+HqZw-wNtH4Vz4AyuIpwq%&$Td%6hi+cvwI06PiN4=JtvNXLVm(Mgv}FP@ zcl#`btj94*P{R7X79CUvvw@MMx94E^%42M+TlMmQK)19C)~tfF6Lk9c`$wl*@AE)g zXCBIhVE&oc;i5SRmy{8uV{lotT%`P2wZjX|E|uSGUccLa?odD}xZ`n%~+=vb(O!hSRs=>!ATKre%W55EaPg$r%U zgD^_fNRgonFHOnNSmm+C7;_@$=bE2YD~*PFDNW#;K_AKq*tjiK(&MzdN+0oAsVXvv zvq5CaBz`I8C&-rxau!k@$qT{C$MdX(Y-qnj#9=RrH07ptJU>?VWZ8!{U;P?WBP0>1 zK1LhCB&z=99A)_N=j(1vzL-)gse*ndIWyK1{aS-%ZNz}8e&3If5t4f~wt^)WrJ6X9 zfl5mZgNp~~-it?n&uXFCiM|H~K?v_olMPv+4$+3W^H#&|D{z^RGYboF`eS z7iXPklz1i`+InlL^qDsTrq5;ddMVFg-`*_F^mhAJy0~hMxX{NgPoQz9JMkuLV%Q#6Y9p$@)0wa&*X=t$Q!ZiLv&9b~W zgN9e@@3tq)Z{ygv8{Mx_4W?@;HB$&?e7&0(fP{ZBaed*P$)7)nc{>|{W6Ai~eg&TA z$9U++m>%GCkWgA@tUW{I+1Aq!AF3JN#14M}@t-LW6T8@;IE)sO;*7z9(F^&w>8CQ7 z2v7{@^cj7{o<2Fd4;INJB;VEGDyJoffXg8|1d_{BCQxEA`>8>~jEgN)=KaoP!qrym zgj?SsIQL`!uC3c@dV{v@)87v|Afydzz1B4i#g&W(+0}wL8Ie z=50yQ*dSmOhEQd}CeB(1qVe<}LudsYZMRA)$5+Gf_}z4kMVUT^4U60eotUE%E0J^L zdO5Cq8N$^?`t&jUM}*y4O2wzM*`bcsbdNgq<3TlAg;H|YnVe&NsI8ql$eUtbeU5}w$L#rsnq3VRK;S|cjRB*F2-$45+>sqZ=! zu9hS{vPph@1I^}zZLSU~?$a;f;{0-YW!oB}5klVZRAjJ-qixgmFYlhtkuBF%z>@ysaBQWsoI>N87)6KmR886Bx{A0SUl7|TWhJjphz}y; z_te_4^!rHagVJ|D)kg(A0^>f9>7t1b36Bk>4ir0jsui`#y^4$+9o>(J7M|E^ec<8S z^`_%^rSx(f-8V=2LpvxYqwjDAfTJ zxTvi_wL%QG=#Jg~VXie8Z~^?Yz<1B9sL7wAV!b2Ee|iJ0YXO~eE?YJ*Kua^+j=DD`1Hd7ap<<^0yFvik35`8{P zKOFthSm+VLl8%C_LPc*}>CnAzQ^`~e%m_87hWb+jWGyV~^lL{KTpLZq0(+a$e2>sY zU_ML=>ow)9s#QYd>RFXe>Gf6{58ajrc`(*UForM$CLUW5K7+(h{~Z6B`clY#;V@EJ zw1eVpcOn4R!kYJQ9itIU{f6s1?{%ON&!B^G#5mpc9@nUxs_A3z1W<}b@1#eo4IDn(}sx{kCIPBb@6R5}N*-zE7yv3X67w2BrQk3m6eaL8< zjYJ2a2v^3?xNZNe1?Qd-KT{h9u9Z=!B|%MhRL!*@z5yiee;(!3qr+qfvabkoho zt>(O92ESzHY7bU7cJh^T3_*~xNg@T8Q$I2>ds1SjQTHP-q(eRLA&jKfrPM*EE8NFx zIsc$f54T=bZuZ<}uUGhFcFX_m4f{UrwXDPS7Z?Rx2G76tHbv|3t8WEiQfo~N^krVE z0|2i5Wb(PWyZ{*3JTBLx6^#{d-vx&O@b5Ma{4ak6F+y25j(z)5ZHQMa8geKINu}Z8 zcBY4PWk({deYI*NMeJe3`f-YW(ap8ak_uFWY)e`o!rI}<+e=p@kuX%2Ezq1>#Q3I7+ zGg{UCEF9xI0u%({iLqmwym<7qmpfPseGaWcrRq^wQ!nepH<%#dJ5`EKgiT5>7glUa zP8{b9r!8mpe|!tIthnOlgfDqbq}?5>ir)OZ()|=b0`Y$Ax7~!cAmV8j*hrD+oPV># z^tyDjv(`@6-N`>B{yEk8Ss`&u)_-D5Vdp?=+k&)B6ZHJ{)#f~)T`DPpdIXs*p(gRTh7Tmx{b&+ddt zS!4&aEw=UTqkdF*BP8XfcJ(7@_>H5TUN*6Gm{|2+XSd!kT6|7(Y%26W?ERHMnV76{ zzx1u%dM^Ri7d+{;usFlrpLAF~o7|7NrsE&8F5Z0~XaTDRP&imt9ds+v#Zc6GL5VxL$WhvzD+zzJQyCdn* z<;PQ*_icYo*l6-Whkh?$51hnjCx6*ooLljHQvPsh(W; zi#m>*H6>f}isULzdVZyM#)Fzw7u-Z01*Yo z3Le7Jie{Fr`E&~qTWW1F6o_^g#+s*m!%#|oT&OjspGedH)Sd5Zz2bfQL@7~D^QC>c zcP1e|D)xfpaY~Xc3z{+w{^HSOEa%ya9m;cG6f5rJ!J1DJ0HW67`%e*dDfv68Sds_Ai=j@28L+vZLiEIz% z)CVSMye@1>n4X$ho#!>Y8HeTpV&I3dK;fc-oCGU*^J7Q}O!0?M^r4uUa2AL#)C#S0 ztiMn2-Gy2gre!y8zQuoOgAarK0nRGcY!aNP&`c@9PF}z^w^AjciS-sksf8qc5?o-; zqk$&*sQK+Kwlr0S0loTa!`-;M$cM-TH5^D!)~%+of;<%;X!eXpm-#L1T+;GartL;V zR&7!v*?xGnc%gR^FHyXlB#NojyQk}%Xfyc;gDFKIZoMn8ag{yD!U}Q6;DkaG6(7AG zDwJhxxQamoipT*KoH*%ODb6v8C#3ex8bW=7N;3399uh*4|o`enl@vwAxjZ% zL)Gh_yduaNjMq=)8Z_i+Y~U;og0XamZ=Xzt9d`w%p3Ij^_}O5|!RGTPS@OA)L>G!B z099>ilJe?vM-`HzZ;xL9{QrIWq20avP}Wn8W?H;Rcf?) zXlTEC1c(Dxl|7dDVWMKi%eg8UWZ}t$4?oME3B!m6$qWEo_U-+;fx`wtOTAW{3}63X zTvcP7ix~Ve!O$$TBpiC%X97s=z_b9xtDKwds_q;OGH zeikex+%fL4G}>8My18r}%HpStFqipZA*mzqt*pP&)E?RqPqbPwC|>YRq&=bPkR_`w ztb0-4{w~}cS><0+>?6%7EozvVUXY(&&~Q4I@4J@%*n0%$vPGs(w!!-9d zD{AdsR^vqR<1u5*?n)Fb&_1K~(_+MIH9;cQzEYGB46N0Hr|&g$o#;9B^15@Q$k7YgTXL`wOkEN{QdpHfB4^nWTLG5V!)IKm6J$e@Z>dJB`Jm6?LKK1iDU z>=dNhq>@b=fHb1&E&diEm-O^N=9})JqrdDrE_nzhM@$2yzp)5w(3LM!-QiIxm*LV{ zvOgU~g}91CD=p7})FFK0f#FskAQ8`?^?ZqSYC?d)X{hD+AOMD&kA-g~hKE8g3Cay*k*8I?WIFBx?(+Dp^zgddk!15&+m>#*T06(IKlPpc#Mqr@R zRMKKTPp%F$6Wz%#oWwhB`YNwXsVIg`XT>BbJLZtm|A=Pv`Pq6`!G;l-P1G6-$18#t zchpC8xk(&kIsRqHLw@@758~-H9*cSorhkm@m%P6b4$kL%amT$_;{9c19r9Z%_1WgnFPMR&0 zrlF>my?d{hP#gaiv1i-ZAgbrj6DSZ(pE&H|8MUkZ0XxOJ|Dt@lg-T&Zdy6tA$MAq| zp{VWug@kF1{2>7J*dHACe#-Ek%txMVqHNWkZQ>#5j|6}oYmI#3xv&Yu*FSHxM9u+h zr8oZ7O1J(x8=N;}*RC)0PYc!mR4*lpK-D^bf8XiE(V(M+@?`lg+E48l87L%(hW6hU zlphgW9+8G{F45G+( zJWc`8DcvO>Kp@VVDY*ZZVGS(z_RK1>@mhm{pm}u2s#Zwq&aW6Y8r(Q`*CbE8^uWHO z>@1{0gHYkH9!MSMpMYw4A#*vm+$E;TQyIjSn&#&x>lW4b=vzja^P{;Ko_@BiR0v9z zU=1>{`^)(@11o@XiBJ?Z5uCR_WB5Obv`V!95NUr})qin41HG_xKNVGNUQz>C1_=8L z&bmj_@RLnh#XwRcLILES=E5btuTb}8vfV|)x$V*7HM4VkI53@kB#fEmeWw-Z3Ws}- zmiX=Py4q+`+_svt%Wqr(G1sjj^$SlNzC^of+;fy{ox)JSqa3GrDsaRfhySyE5b5i& z7AQ&^jX~xn;HKM`SAwi_&RhEBGlW+GdGKTzl}`PSrd8t^bI! zdgf2S`2zJA02?H4xD1yI51^}8l6T<23+N&oedSB8XOW|&etyH!mgdg}e)1XUYCPSqBB`bB%iKW=wHQ~z=T3I4$S*h>4q0y+#xn?ymBQUB z^7p>aRv}e?sl(t_#(fU1^&kyqko$J5f3@=RuM@2X701QFHljzGC$?8{8?))p}{6pF>;?Qwiwg?-}zIuQMb_5MzpFDm(>OoivYsMtPGCCLt z4P^Kyq<5V82SdAEEcVSKc_i*zB^%<2XY?!B5HNCVThYI9R&BPewBbUf)UsMH~F z`#xGJy)6^vKNQ?2*mOxqJ5gK5pux#WT)WK2Sf)=P-4s-b;M3jJF~;tiBYYssHl zKXVnLPJ5{@vM#ifeMRX}#lsY__oV;WP^+tBjYnEDwjlp$>AwA2xkI*%3uKAFp}8c} zXFq@2RvX%9E;C%!Z6S5*`_4k9`((HfK)7#=-&TW(9gzo128tF^KZXxD6syCaGC%9yxtg(aMg5&mlm0}1U~74Xq50kR_iB~1qq;N_6?y(V zg(sPcB;-q4llGDyV;G6oHt@av@31pcyrAFz^RC#di|1V8e{|mj>i+>e8z26A;JL)k z;QU#;9I;Y|DAIe|{N&nHP#y6ij-n>f{Arj=%b986xti4nR3pm>3&^!wJngnwU%Qt_*0?bQkK7U4VVUY*wyw4F62x{4e8yU@@WAIH8A`-u*CE1u%)tclfT9_6bj^E z0x=RdkuEBH^$)9B=X2gU#BP@J`kt0*2r6r&(-}7R$_6iyRXSaJnajY7i3n?J!mVp~ z>hhuG-;gU60%v6KjP;KIOzcPcKU8D`i+C*_<#dS#a`i1M?~B*s5g09V+{8~S=f4-N z^(wbx5;49uRB`GY{NS z1^RWfU6Gc(C`t(El8n-ZjQ`byf+fyR06=^s@9(!~XL_Goi?6KdUd=;6oV_L$6aD^shBIy^GL2Zx@4dJPXp(6p;zoZ#9%lu35vmlGxZ9skWH4Nx;k@ znQ83b$y&29mpI+og>WGl{i&Eyqx~J2`IEb+oAv;!PY#;ZZQEnJWUNK z3v!%T8hPe1i`(kycY4b~f-Ugqn1o)LvWN)wp3X@K#_5&;VCk1+`h~W{CEGGVghzR> z;HT4zn>Q3B8dAt1k9%;QzhP``r|%t~-bVy|MelX&0364ckuMQpzYsv#r4!O2T4zCy z@sdkQ|NSsYQB6=7Fd_K4#c!t4@7^py6G5nq?EjoI8N2!2F69+Hr_~ZY`R9&qe!tt= z2gJgN=7uK|x&KZXo-nwOFr|Uy6u)7-G4|IK?+fg{iN|dDZ|iS7$qC?GPxyM0CF(zA z^E2|%FCQ;#NQn#P{+auapTYQ+qHlM&+!raG^0hxVcWfUF9K6)eZ6m-2jytG1FY|8+ zSYII2l`d5y?y~>N62m+HSpe83YQ9X_V7v}Vb!u>vJ9#yV`*6?ru6WWa z|NKL)iVfsbM2I>gsOU_oBFpCl+Mex| z3z<)uU5zDTBtL6gMZOL>rCc2(?jF+8 z+?a2>+B(`j^;(jv>|N_GQy`)Uv}8H+AXys^s?*@_Bq3qv(P`cErB(CDj^lGHaUfpd zC5qRjXX>f{@Kaw|}jm#=YS zB|ZgT@uaVlGP&d_emDk!Sx<|t4=-(@3wsPpj?5(;z@@J&$5K-!_`*VSbtXcFVrQQ zPh&tkr&p~{kllPXFNapjRqGL|{#@cTnu;#9(^3$K{uW7a;KiKgv}1WSu6t-B5eFMHQF^fp5M+K+p> zOdV1Zba^`LNFz>u%o%UIH_x&vakw#;N|*Ol*LXfRo1~(u?y)K4eom@hTlC z_xe=zen#`G0@QNJmZr_uQe~J}r{?6yRSs(k3w6GPUl{ z#?<7Ze-zzsu-;8L-Zvh?7L!9`Bs#;&`U=$kZZX)GEQg%Zt6jK!}2>$Qx$eAGcgL#7_N!{EO|@X=-yD8sWKB```? zMHIbinqB}*5;yC_a36)Sp&&6KqRk!&kH1d{6 zY5w@F>*8pRwewv4-@e>=-0~tp61fLG%tN z&hAMy{|^(or*BKpzarHBr=#*~NB@A>+4tlbBTzO6Oc(NiMH?Ik@29^j={{KCF3L(b z<#+;w^vt%|m298e?G+wVUn{JEexesuz^okQHfVy!;j0Cw1&Cqk6_`&U5Mu@kuF{hm zzA<-|s@!YEwP`i8J9O=pJPG$ z7QxDKoUpcO3A9aME9>_dO5~T&e2LH9|J;2M^(36OR&=DJ{I3qpT3i&0(9Yk^vr+By zSckg~S*;k?0)pj?JpTuiGMu#SjftewG(+xv(meHvq30i9dMH>e&XWa^Hxvc$Mg@hMqW2!XNZw;7c?C&XI5JsVl_Nld0T^zcX}WPBE`&tD|I}RQ}@cb5Q6+|ge@-rQb}IO-K5&!PV&r1?@t{b==7`S%(_pB_Pq z3QIZ%rlGbz*Il8rz%ohv@%^Hqt2YNONwoJ99XL7(JP>l6J+{je`OU2lffUqLw>)m< ztNC#_Pl;_U=He$=`1?Db)_B!vnew!?RFqnN)ktrN;hS?0K7Sm1P3~ST5~m)_v}%$j`;->&B8C$$9~GdZ<#@Izj-T_cx+^{y}RPujfA? zw%nIp`AW+)vIl=_Y?_x<=uTBu5U@cYc5Y_9pR{--AUDJ4y?gQ2!IJvT1yQ*^l~ST& zU-{1no3kz^AuB55`{vG+sf8`m+Q!ip19OK6p1ua^FFy8wOT)UYoGL-ddXNb*Qd++n(kMSwZ zIITHPrZnXwdJwiNU$EJ(mE&Z7$WyPJmga%?*)BIe5)fl{^s@(AEzXw2j)h&@LQPDW zA;Zn|+T;Aj?|rONX39)}i-@BQzq7Z>K2j0P)ifsx=g=uxA@ZqLehgGMT=tEGo>B{{ z!gsPB^>7qO?tEAlJiGBlns(7Q+s}_(#~(00HKUSoH@>|YSLOb&>AT^}>WiR%r)kZm z$9WAKXECU*{l;}GfN04oOPR$o?3{k23sigZ|fYoLV%u@wDxIH{o{LV{(fMA`b*7blwNh}weh1{ zxG#8YJpc^J^arA6CC_No%Gd?{T0-Z)muSNUjB~sn9;NG+Qk5A0lm5Dsg%3nQ#GI0V zf1kj=sc~4xjUh9&yjGJS!Kj1zQm`U&P^W?YtN4Y6YW&4zD$Q!0%5M96mHtXgoGagK zqXa)cl$Uw4Tz|TQYSzG)Tzv_JjnzsS?@6!6tFv#CHsX9xL&2<)iC@Mlga#V9DW%a> z=Yh`_JkS{!uItJGIzndH>@RX>3Uebml64e+ZUk9g87D7Eive{#@Q5p!|xtvgjY~*z5CIMe-ZwD=Df?RUlPk zzrDW!sN;GHPREQE5?NW^kkk{=X%oU{Rum^kzh|?8D-eD$L$aXza16q~Y^j9{ENc~lJ{DiIrJujvY~C&IW!EUX#;w#13}X-Z);U!3*W-~T&gj~)7SAfRMgjN* zHwhxEA#RKtULn+mTu)LLqeoueagV@MNbwJYntN*#c3Tvbg z%xOnS*2QtV1q3lIn>%h5;5nzo2Z73!mPf@|@=JZ!ZYCxf7%*O~BzyO03yIBVX=MN{q!|2)-z-Uv zEGP=i9(Arm)Yzn>>7WMBjk*{Feu9LOrwOHk-%X)w_`k>)$Tx2HY#k-u2&L9R>Aydk z+f&CGa)!TYO*UpVt!~L05TaO~U8fjDU3^FvMA3PU^iO_!Cw)R1;{U9*^rYg| zOO!DaOVU(hd@@G8i;u6DXXv!F0P?GuZR>8_;qq+r58r0DNzd7WO2>C{?RWs8G7{Dr zD7^62^BPb4Sz(MptrIBt$B+yc|L+-+I}W+ZhQ)nBATV#Md-AG$(2063{csP$82suJ zYLZMj%+?4Y7^@>buBDIRODl2xEcN!R|BNPWbnV}~05e5?e4K^F+?DCCbGa4V%L*DA z1P3j~f z;c;bCgJZnHaBVJ0T8kr&`^@hf_P#rP>K()Z33%9s?Wus;1g5HJyT~aUuG4ZvnsQR~ zJ#0Tki;3z&cdhgL6(Ba!(j?)cYEetgXAXo{5(?~fth6r8V$eT5qofnk>n3NmQZ%06 z^Ue4ays+gbI(3e;GBDQvo9nl@+zd@j-f1n7;C}Jr8>6^O3%AUd-}dAL9K^wyezwTC z-ptS{`(Tb!{_4y7tt_wOzFUY_QiYO)k|kb-l>azBWE8J-N|N-aQ+}@ah3ZSCGnr&*`>N2wgDy={1IC zZHx+3LG;zB6K{_^JEr1}aM$LxUkY^O_d?-N22#z{{|JXt7&EbWX6c%lne`;F=PMO4 zJ$v>z9OTgg3$4dq52uijki*tA<1^HzTwxOJ$GiXbCr~Bfe z`JJKTiLQurc0jq|myfq2c6}+23^42dVM`^~=&Z<+Xt>#J?MBiNq)y_eD0V(*CE_wM z)HCV>Y)TQLcepoBx%0u#z{SJUuUllMjc=3O^Y`~3zVVS&IPSLBou4}uf1@%|n<1e4 zn0klO=U@L-mv2hD1FAW!=hKuIz&%XH`d`Y~{hyWTZk#IfO^T~y5et%A+s{&5cRT(# zdgrLxynHCmf8Isef2|z=()@2)ec!jBtkeq&Z=Q(!M#%I-@&UuK7|!pmQ*)Ky{F57+ zzVT?rLx7$A;NobeNVS6QVBsTq)E@^h{m}66FtAxSoQpGzrR>iLr>HkSLmBHgINx8s(^J?R6f21p#*Li$f&XQ}_k+ zWyKQve63%5MjL~BmWql>ns=ueG2?!=ftcanX~qG2Oh*e;`ahN0-u!lR@{ek+Y#@4Z z53OoeJ(#D&r-hg4e|0&2z2KM}TigiZmBj(fu-c4K$m#V!C|~09i8L8m4!KxrK_KCu zP!hE!OpoD*y4BvNaZK+btYLX+HGY-HLr(^h zWKj9bG<2x~nf`yWgh}TNT@EkY(>LD(SQ5%0%YY_&c9Rrq=JkWoclGMZ0r?U zg^1)_DA}>f972ws41WxX?jmucw|+{#vQi;b3X4M>46RJR|p695-i7eTT z09i{z*^xZAASHu(Uq>rvY>jW!FlWIC3~-CRB)KVffUW)Xv|1Va%oOTpdM+3b*s%Gj zS5<9I07C!|=ea5@X$9>}sQK+^|4<^MNR#@c{|nz4cY~p5Uk}mcD~$%5*$p`gB?@;< zy?u~Q)6R-DC7%Lx0!?6O%M0x_*A~p&8}}X*o*5Yb7$`L`yWnAS;u;J^>1|a;u?+nkf^Hz{{6e0|*hKjV=cz)Cs;rMW(%IK%r7eP4{2&*m$?_7JTQ$jXXk4#@P-zRw55ttjROZxVa0Ht#{a1bdV{1r5I~{SI-f#pPJ^tjCsLumGnL zewTmE9CWYuGmuijy;1rriNo~ZuFGYAP9Fs}B>WemcT|C2Y#dtD>7mFp6~l>_-L7i{*bDNUE+u5$O~oe)3#h9J&;hSy_UmM8-WFp&Smcu<&wQ` zw;|yJ$Vwx27qOuSWh52CLK8IzbNH-uR%0jP8A>G6C~r;N~N*ONnc-z-z|2Sut{ z#NH7UYW+dntgb0~yLU#~&rkH%nvGchb3q;!RK__6sq-+=S#KGg5X``Rc`+iUec*|z z+0@^=){;(^hKWZX{Ynwl>X$K^X|{a>t;}^LstYc2;xs7sK7>1~qj6pAXxND0WvCOg z-?I^y95U2JLEHYS{QsB;)BXu0X!ps9gw}V@ktuxyi7T3SSbGtjYEIRO`Vg8Up_5}RRSda)pQiDibF#9aQ-)>V zuFL!Dso?$FC;ez3TW!i_7(p|WeEkIm7lvdsa#J}uxw7l#7oI0N!sy$_31Z==EHf9V z8?QJBtia@2V4=7G%L-U9wlaeyYr7p9P~T_JMLE1;_xd|MPGZNg>6UK9{H~j^{S0K{ zgcgC{>H#`g0NUKz;DzfISgb&)Uyv2FH^q$ldKY2G6R$QU8JPi8#|yB2OgCJwH>kw~ z>`?-Y^p-nnu~BZl{&%2DSyWUMSZ;8BFE{RI%{bCvPk~Aq^}n6%g5%1q$U?7$7Jv5n z8UoZ&6fyrp&)Cl^%PmZuNv=KqkSqVgF!7nd8(Adgi37ru=n(&pcq3mYITZ2oL~rEs z>G_KeSHG?*zLP7;Y`LF+Ud~X2OZ%z{_VkOGKMv;W7vbqtd7`Q##d$v%9DhA#9C?}> z@$NlS2l>|?m$)5Av(R94EUNo6q0Y}2;|)^`Q`#)f_x2uovfTPznd24F$KSm2=ZCL< zul?_Qey_4<&jkO}CyDy&59{9f_&0lvrho5uO!L3(-!!-kpergVac2C!xqq@3+xNdy zR5VC1P(f`IWrlsQX11OlOF~b$jG`hn6trj2h~IXU0OGqFL6*O9WvB z{o0Xgx8KvN6gjMUGhe^|jU(ntaz4Q~s@ksc ztHkCv_P_+KDF3`Xq8tL=7*E-4@MqY(t;lvy1-+PWzTwmMwIR^VFl#F@%TevAY< z5=R9!aK(IeMwr`;uhBitL$1I43c^!a{o8N%^WgRWxuN|3)`k85&*s1L>|}Sd^}sED zKaY-*#ebS6{hxdw|GU?1T)ov1^l?=98Jo-RVd}cVY2H^|OSj<)&%AREpA!zBVST2i zT}Z>>XqitEuIp5-QNwrSoGJs`oWk_U;nRZHfIbfcEfMspwM6bGcS`&it0tdm{EEN- zUX9WS?PtvDo+0i<9HPEct4Z3Y)zNe@VnLWLer=^bF89V3eG>8Z8RgD-pysmE+WC%O z+XO4TlXpdB@NAoaBa+>U!!9aNSc#+z*Ye;fw{Vh>48x>k-$R!(c1*5AUAo#Q#i?Zj z=^0z5Fs>S}lGehpv$wQs>$0eS@P@lfvD2N?F>96_%~1vnjrFYzL_~)kOFZdl_3Ehs z$AS8YdB>$srzBrXHp?u;Bi5Fh%p+yLhCes^4wJDH!4RS4BW4)QZp!}IMdaYTRYcZt zR+qQh^XV*KxSRxxpwZs?#gNii)+0lK>(f2Rt#}zNp*dU~N_X`&r4o1Rl!FbD%cS1u zCvv`)gou80K|ob|pH_J9@^5!&TB_(W1zEo1uZ$&U9mD2A?eoykF#-j%Z|9$t_)A;h z)*k+<5Uw1Gi6dl+2L>r`1R>^et$W$ly1z}EgTH9nce?ZQ?0fq@1^!mrMVbx%f61TR zKGR>Yy;2Bs;=EVKcO2nk+q$g0nJE~62f6$cM8gy%a7*FIiCXQa9iSkBwqngtCp13dhpasabxp;FXt{Z?#G9R!wY{CylJI$1 zck>=(?OP@KVUvTvJ!*1Z{P5u;%J03ABT#6)&j-0#Bt_6oD!$YoU(jhXDyr+b1BqqF zs@cz0%|pNrj9AS=JI=t<#@>)cy0yDAJCtjFbR6HiCg^I_57|w?DLL?z%D27giKw^Ld6#+vFJ%o_(X1;H|f5Urz+UMML&be!^v(Iz) zv+mjt6oP|ahCj>i$@@{S#@|93(BKEj8&|q-DBvw;AMDkw#tVTbDnyQ7HRICW4knKZ zZc7HSi=Z91rW~{&efw6H{ajy#PSkzim-GY0nG1|18XMT-poe&lUg3EuAqtd!VPEIY zw&{M)9s~L9J@+f-C)6yBd3B&bkRq{cxm(r&%v;(*;l0Lfzbb+9-yP>wY@JkEWj4qa zsU~_LuTCx^mW$p&h%CP$3f`hhM$0ciC(ferc+Ct3hFgkikRxfSYkt6di_U8cLxx>j zoc>(rx0@dzQcqnmou@}GL_S|F+fwOaooo|<$t8~RL`>+Q)!mV?rjqkwg@yiPPsE@% zqm;jO5c|BtYsy+Sc(>~*Q|o}$HItrwouY+)k&$&A;0)1-#9CkW;nj!+|6fcmj{615 zhgVu3x7~Bl44RrlUc0RLzG2q0C?jk&{2B|q#dPa z{JM6OH;C7ov2M?w{y^bEMVWJ4Ad_Av zKT&=YRUB3t1BZ!6UK{e9-!<~v?+B=8&HHO(4r!a4Iny=;za2!A0*@k5qD}W^KUMQ0>hFTM1wRu8XODy{oF}SYlBYY#{QD< z%uc2O&{C7*g0>?yH4IX-m3{7EhRQWUH7&K4D{8cx@>e)*>mdiko0KfK=D^-bJr6y48WSLW;}U@(Wd^3Z@obE3#p9QQ+^Z9_2$YNsb+_9hvt%w{CmBs?TGTr}0Xk&qM*@4I zQvB7w#lb>b5~to?ndB{6`OF6uH;*Zu^5>-XXAcNnytn~Y%>j~YO5`GSTAyR>(@+wt zxudD>STo&n3!<)qjh6Iem_3;0Jw$i){ztOYH%#&6Y|Z7#ML}?(sHuP*V2$K`lALed z+@GzCFtl*hdJ;PQ$VCix;l+9?v+m5Fj}OT-HDPs`Jc)}z+Od1ekPkImVHE^>u}uk% zj1ywgQE{-^h$p(G6lzjg@XpIKs9ah7Y4O(3LGGSzFEclHuhZ3Jnb-k%)i%g_xyHEp znr6OVbi_In%UnLxnhk0+(mjHmbY_ZHd5_iF=fbB2KPOnkKFeeay>~Gv_Hk)BzZVeo zJ+cHvqEXF-_R7^jOc9|m9LAD6(1>lPh8>t?iZkK4^B+&P}ZFZzKpZPME8L&VZt=RU&z2u62-H-1cV^k0sZKx?#>qd zjIk!yz8Y(?Dr;M$M7`fG=-)zS&77W_J%nH}F-f%Z-1QZV#=J;!Z5jz;(|VF-Y5KrL6o@=8 z>H+S25-Irl6D@8x#!fzwa0(gF$meW&jQ<~yYp--DRTyR<8}poJp$!)1Jeo~-xP*Hz zzw+}WJ+aS$r~MUqGr#VvTL*IO;h3d|7N=6s_A6L~x%W_KH)VL6Wd^?Q^h8!#N->7} z{bQeMadvv`#Lq6bYC$EFBwYT>#*h4N1MAlN8Tucw(o&=d57qo(?w7h{P^C0p+G#iW z0l_1~MHKS)rIB9cQ0~C5dTz48y^F7M9C)W6c8Y2w+cN(4@3o)OX4|^;Bw$rJ^Sc1p z&>~Rlr?UzHXlqXV?5-}+95EyR(Slg{SNWgDk*TZ^XofzTeEwa%E$<`h4<1UofaQxc zoTskf9u()QY!*39h_tm@`wW3^gJ8s?q;5vxgy&I^xR}*cS0Uaj9#&?9L?lXqY_A&r}Q%R0xL7CUpLa! zARSeqao>@}voCur4#wwQe~A}w801a;8aUd%6RvvN8@j~BcPb?cNnQ)W#V=(?$?uF< zp=937w_;hiWl2)8-WOVZD`7IEsa}1t%9P&eIotTHK)xyYa&c&s!SrX@>P*vcPEytc z(%%qq?3IAu36;!KeXwOueypt_Lr$?n)^K2}%ZC)Pg=IgyLv@AZcYZ|S17|(&K|0^P zLz7^t=LWIwjW=wTb1wmVplKqUInjKFY~S1%$y~Fr@lPQ>H^@1S|`YZiz?E;}91^7%2dZ6&^e3cVC?f_-1+5$Wh-^RG-u~_6&Wnis z1x=x9?=hyzVBB^$8;=l}ViUG*ZYR-BouZmC)QTln@zo} z?v1S^_eV^LzDqX~q0AUH)HcG3Dpc|=m*Kz*WvF1~@u(1Q7UgJDzzOdR8tz6CXERzI z`&d@-OHs#ToGvBrzRxDc7#kD5gBj2hg3QwqZ;TpZEN{_HneDDo18xUx#5(k&FQ=>M zFOsQANO&Q9T)%zd3SXliF9-c9P-6!Aec6<)ulv*LzWq&fij{ISs751tV)nN1N`~@) zdspJ2Fuw#pTOr-RvQ_b#;9te?=F-EDYbe~`0ivdD^ErXL9(FGABGeF9#2Y~}3!|4X zHY&@q>7CMOJPk|P(=~lu(crH=1blP_uCtjm3y_f-54lS*zy8D8taPo7n${+ad9YXKlunT(K$&uN$Y1{kw{PGJoAQpbF!;gBdxbc&%7m#J zOk>Ki$k|V|pGQ;dTpS&S7Qp-A3T3Xa*RtaZswzc#uLfL;$?$(Wq= zte;yS>=~xicaMLqtsqx z&%HK-x_JqFj?_DXwJ*cC^40TxYyFL4sQb|BoSJ}5*rlRY*?6B4&4|p{)MmU?fOV2( zoN)xBkB4lK9((R8)sB45{Za2?;B`I9 zf#g+5IE?u?3``%tLq5aa2YYkJ0OT_m_OlK5@=vUXtK4ap@iv1hAkf(a zDG>0TaU^`86%rdi7knRhb6bqgqm!qF9pw02A2si)b~HLzT`M&k8^S*n*Vzc+N_r9OH@9Vmrd+&g^$}$9alz1Qzh(JyjtO^3% zaRq^Ht=zo{99f^aK>_@^XDh4i00I#$hxOMpeGCz~*Y}IalgpmxvvN(cx7vcVp1iIk#Sq{J5C=FZyjR7I zv(t5XOsOsOE&Kuv?R4QlFt|SE^45QNytXAhygfwmTTPz1)eF7e$R*pml0BOxhm&D$ z9f<$d;Dz_y8+1>;FC4eT_;I%>a@Dmpd^uj>A|$3LJVKu-^Kra-#U@NndC=v*E1O9#*3@c(pfHWZbVs%L$v{JF00_i7_OEp5`afgmd@%X4k4*YCT8j7-Z^lp$5( zWc2p+eqFmP{m&Khd0@Vi)1#iX zcW{QM8{gsJFmin9jw4mLA2WGlI#>ln zWMt8M@$fXid^1m*=-|y7wrXo+X7;++wj4)g>GCO&20{A8tVhc#O?Z3ZOEhdloCRO^iSlR0+;QN}O~?AEm#er-`fZW4 z3=34YSp8V*lSRPtH+B>7RLn7d(L!Nt#kkKhS($r@-mL$4ja~Z#^@X5J(3}=t+dy}$ z*u1_)kZ`!fwy&|N1H%)K?qr`T7D9A{U%0Epe9(bHYtJjnN=L*?UP7y;YpM)t#gG>l z*$iy-^fL)no4wB}Z(eqJ82_H&O*1xD3BAkWIz92DHcbGbvWZ)FD`)YG=F;QIa5sX; zQUMy>JBpy{V>OrQt8<*n$WdIasdH=$u}H zZdr!%Q4U+DQnL*+V$$RMlfMUiuOxcwT*q~9vje+$v~oWlsI@IoApf+;gcCM1ubOxa z^9C$7O`fhMt=c!E%R2k}P2jP=@r>?wHmB(UZ)UnGb;f~0AG4y&m+fKC=-1dE_WT+k zT?;|}uz3^1m2g;Iu3|$xW~f1z{*G|<>9hTW&u-bj>n&hYRU4m~G4_pARmMX$VdopV zxAu*YKExMy2N^ZZ`JI{RrmKmGCq@s6+`9DhEM=s+Rh>xJ3m~GjRPB*$w#M1=($uKg z)gH%=yZ}#E#_F96C#5H+ylFOfi;;*xD+iXk6cx&tH>mzYohU~ed=EHUSWAL5tC}Fjl z>&))0Sp*atdPeUD`!!YjYtH`fGL(j}@lm(FNOJCirr#M~M8o%2l}Q4RG|aI{&MJ0w zA3Y^b9#^kjcmUo&uds?*%)UO94n9o!lFNjPHMtH{d7AP0Ns63ZPFh0M;U`bIWFM2xgSapcu zm?7cdfZBy5w9!d%6KDZD>!Xgt*-cfMr1yn*%8tQJk8-nEyvngnDfnTe%Pa*IVz!Uu zR2x5xf*9{gh$VQA)i!yWRYV!NdD9>W2b|p+5G;d06dzyL$k+Y`B{V^=D?r(Eb@$hIZpjboUOpdWxZSHz@@7AdN*4^q z+GX@Nq^!|Nf%T`zX}fm+objvExEqfo%alZhJ|xCOZimuyVY`cyl__8<-6Vo<;U29- zps}IGjlV3XSLW{*Fut@PY%eTYyQo@@EOwgpk-t1y^H4{4?@*A1Jru7j!Y&$)eGEBE zHxKnY=>5*gEKHtpFlZCCAx9xkJpk9CfB4$HA|oJMCIGuTRA)7A0Ye&_;g(K43i0w? z>l3dLB41j`$38{bC?(s|aKpA}pOG$t-a;zDwUh6v%r^6gzB!8Cl!B(oBdwgp_7|eg zhbrsIsu%0Zvv(XjYQ`(vP#R<=x7*K+)xCayrX|{5SaLH#TcQ|J%@4EPbiLk9(bFd! z55je!r}lQX$)wxFZHZi*uTpuUT1MH+q@&=Fek0{|FTsjWyqFGih4Ov-Lz+nHY?XhjO&&z1VGf%c0^THKVD=R zIbqZ^jwhrU<*_eE0y7kMb9#7%<3n+M{|GEjJ#&KNIgI?mV;5xLdiUHTlqtoLHSdrw z5L;BL{4McqChUu;iTp_VkFk^da4_M4zVhxWbcQVK-6dQuNwcYRtK&Pgxb-ZN_m09s zFUGFt0<#xYDs_+aM*r!lYR{?Oet0=V1{Od+{8Ti8*1?qQ zQQ#O{2V6D%XDlL26f#`1%#3847FGQ?tUxqUq(~gLAvep`{xbrN|0;&FGD)j*X_5_t za;erz8(;9BqUv?HkkoJ;h(-30J5+OwL`xfoBk?x>B=ycZW;+)?s-@43g%Ad1+QOBBaV{U`~`Cb3Bte{{8J}^#pr0uQ0SqJ_f$k z1Fg(><)W1TOwLaYKr|OH&@F<(``?=M;J@F`6f=I#bS^ZmjenX_1=Z25%xmH~_8Aw& z+!4PweF^rwD>!BSIGYO>$tdp%3(J?`?37ioPl2?L3?)#}Qp# zR8wT$;n;Ksg`Wsv#P;s>UF$>!iwIguXdy6Q+vp89- zBKzZlzLd6zp>t>U!5xJ)%VW1HnZ5fef+ z#3MOkL$|QfEB_4=EgEmU^q9$$n($amdj6yhGea8IahWgpb}tmhBFgMIgGVa(c6XL8 zQrnyJ1+4wY(!5NAlgDX-ICCmKeLH+gXq%;2w_fIr^pWG(-gI6y{LS`srB@>Tn?^D^ zm8>Y$yrzT3ANq0q15ZUA72|(!$XFsSG#~=ER)#muMT={_dZ^mPRxq&{*fjHwdoXZ! z{nem%Z~38rBni!pksQo2nu3ojb#Cod5ADnjdTR7meI8n;X@b|MzGs3wr`@K^c;}R) zMx8U2lJIzaN7-hoL}-#NWu4u6Op^-3()J3Sm*;|RSJ}I6%J3T(Rq6fdC2x7(yDA)V zf3-4>WQq5R;VgZE2rWI*f}A|FEu@3;=GknjsQY*|(T=jV&spZ9Vg(p#x6shRZx6M5 z$yl>cPJ{AbWs8SzPyfV?z~A_6es!;f52K{J@2ecY7cFN%9L~Gnb9C4AtkLIXiSjpV zeZE(`jZmSml<;yA5D=0qa>OAH>)dAVcpJ@n5%~+Q>hCYBVBxCKNFJWY?pAC&j0&`5 z$V)6qyIj2=)f&~M3+B}dz)l;ERY^Ujdvsxh+B?pHkWdR1rJqs^{l1?}jCYH!%u{6N zg|^dcJ|O%E>VV#W>+AApi2%rCWFvu1VADNXAnPQsQC;5Qthsski1!n7Y=qv%O}!9vx6oYfezI|DQFHS zbh~D#2xXOR@%udON=B`f={a_?=AAuJn&~#B%hBxf-cPCCG^*#|chXNR>D-ub$W%9{ zXDNdKUIQHih4v+Jpz}Di5_Nx8@(HBtGWIAAkSN%9#RbxINQQGMuG38GIT&QQp`6j7 z7duoYcEvx{O#lY~E!5D!RjoTbCLOV!R{f})E8ue*=cTSuZbfO0qw{L+&~!cHEt=v$ zXf6lAG~rU7v$3$f!!eV%pW5fcj&+(JRBPjqbNh?H{DDI5ZwXBLMtsXQVGJP)XFFd! z)}gdxPBX$^73lTV#0oI*8JZdNN)D!y52axGo+kE^ZRoseF9uWW7dcD5*S-zmQvh?- zS|RmZpgYfEH87!PA;&$=2jUDlz1Dg}S!%TwJv`MX1)6PZWQ$3vhs3su7%3YY853pa2MwqE{6J z!t~?X^DiSm<);!@65N89gWbo_rd+dYB%Ut z!eXd#740b25`?|y2jbzzL%D}2&1&^udW(CS!WvyDRIt8J>Zo~$p2+wt(zxW8%odYZ zd5vSqs#LUy5&jki=z$^JQwifo)ny6^%sek!-sU$H%Lh$wC=$25np*E7piai1^f+GB z<=+8;aN?Khzuw=CSl`&F^1$qUxkqwZDY0V4*1h<(_?S@*G5`M{<>VoR8jC^&6d^Z2 zpVr4>xXq-4DbxGR=a@y3AdDaYe2=JJDE?BA`b(1BHXQu`1j0{A-g8p`fnI?DgH9Sx z4Tu7spZvWKaC@BnVET)k=J}qMHLV(KEhzNK-nRb=ETH=u&{7man|+I3}gq) zc>wvs!ouR2bdao)Qm}aM_u&yIbDr3uqN0!x!hdNo_?q%PI8uqt<|~p(5})&Z#SXi! zuLsFxt31V#nz>0ZQuU8MVJrHC|No#Y@gD+5+F{ngXui=|7R^5uF|TmlH9Y^?_CGI< zg!7I5qgo{)E?j5!yXSeWH#Ko8pZdUz*X|B1+_@AwF30NLp|~#eX?COKEMdkjrDXHv zJHTg`pfsK1e_ia>ET6$1|I7G>n0?nSGR>MtT?VB_{=Kcht|M*UYAx@-lpTCC-~s+z z;9l9jD#CUBMn-{rw)ra>ajbbCr5HWRb(<*6l4M9p8(k>PP>q#b)M zaaUQ`>P(g3nQ)8)+1gSlHLtzL>B%F4#6VzbgFex+o_0M`>7k+!+^paBZIy&`(f7W3 zUj(t(PqcEzIvw|fe#8`9s8$6!$+s*Xb+gd)v-gj=NjoelcEpG>u0yM4qc0DF4F^W( zdP6#>1r3e253kJp<77EO1f6<8Z+~_w>A>Y|bMZkt(MszeP9~vSB#_V#_6yeY5SQLch;KM{916Zc1Cb(e&MaExDK4@k4#ME*(dj@M=%aaBM56u0SdRaKC+&uPNG)4GO zDuMBd`=Ja(=4VwUA>GQC_+wR&zv2WAA5Oj%~2qZ z!;hh(P8$gD0wee3h&9QJe!nZ(7c}Q|T`NNV;KXRBfw0ut@GPRXK7$I0kw(ABN-}XC z2smTdEt7Vl=Frb1nVG(S_yHT|(@E|5Hv z&Wm7|wMWFn@7BoP;h3~mF!St&`$sKLiu{6z&9?fw+wX{(($LNyOF z6Xm+Tr>oQ&u$jnc9zMwJ*=a9Wdkh{92X~hwIANV!pbiwKlLDI~_b>N>n#r)eVsU8B zBf~Dw3u86A0*J67 z!H;ZsQw44bt(udERyllE(w;{gp6D;TDCyKAT4ZmuzO5i}*$jaT_eVx%Sj<(m-DXS1B zhr1hhIQq@DSgF!FjnAHZk=h1NX~)Au#It?jU|2;2`}cY6 za=1o}N2NYQI-~Qfa&;9gBcjBG52^5Q^V>#>1!0-`?aD8QTqbL?8louGA+h?o2NN31O2*GGlGN1PPFceUqKT#wf>0G&97wof{!@)_Y(75 z!RnpBz^%_{)(A5ahPuvvB`blaXi_cR>v3ht{nHA#KhM%~*lY&iX6|QBk(teY9oSm0 z>fg25uPIDKjAs^KbrR@Jdk9Z!nV<6v-(u?+ZHw5b%Smf%JmM$SiRR)#d>jXLh^%NC zB$_#KQ?Ni895r=}T&+gCjQ@;#{$N}SL*y+%QBn=xDqJl^YgQ<*R>C~fRS)Vb3-vu$ zcgiw}rubX)eQyx(tYl^?SSkF)ob}4InCt~g6xaH;Z)a>z3!_81n9;53!uy)D8tWUOE$-$1y$XIdc&XINH zxRiMEu_Mk`uX=ooXy8zWBNzGgdW0S-^q4k^c_4kZHl>Pr`e>`XCqo6j&yH0}&w(f9 zKXtG~y4V3fQ>p#dZ<|A-x2tRissx>;o19cS5<|dQPamLN0Z){CMjA}u3~Wu(%Kx-oc1ExT5kD(dE7#ZGE}yO@WGncDR@ZR!nUt;2L5{% zdiqrdEaxjs}Fk+=rJ*qsnX-=EoqFBT&cGV-0*L8pRxhGdNH=}+`; z!=`WMsc*W0f;v=)^tHXD!PFqU*<+7>A-Cok)7!WK=9U)fXwj&QsMhXlVDxGI&!pc{ zu*mSM(RtPvUvG4o-+lgq+QM>=-}9kYc2B!(v`RM*FA|f+>lrI{qJ-CT$y4&JDBGSC z48GZR*REf@=&Q=T`@o ztl((wx^bbrAgUOw#RNu-HMK9kcF?_J<-oN)p?2^kOP(V^+SRl+n$y;3!W}Avy8<`;B5=56=A^i$l<=z2KGjg{y!Kf!QzRxD1}= z5TjOYl31e4_0%;gSeae24HiI=HE+1D5x;-nHKB{96?Xo3$-7uF+8Mz{-N zrN+grD=#uEbm=hSqCtbUSk?78%}dODj~M213yYvb9$mwQKCP=d%5shA?&DV8lMHjQ zgPecm(61s#%zF2jzt)@|Xo;)A{<$>{pM!$AUmS)4{PlcIyrtbrVByks7j=2wGF%wRD@meZx&@#R?UD&uxlZ@--vc4VJr z={(TpGas8%lFY?5lYBatmxvTQ8f#~ng)RBLc&7nYT#$FkAh9X?F2?P zCw+sp2=ji=nRqVG1^=*HyXyr8;}TSW6& ztgiI5$Yw?xhQyw>wZd%h*Sj%j53OJd-TsHGr-DXq-6Uv3S65&3FLs!TU-G1@ajOof z{rtN&gi1tU-QaMzxxDUjB%zX7Gr_z~)vWKq!9fv^yW;i5HQ8c!C|w`W*aHLv2Al)N z($ns}Xm*IDl~twvqP&?|CeSOKhK;RZ&tyWk8jiWH2bk=mn*?&OgO$E7kFRedc{{Q6 zpOy0evuoiN7dmI@3emZG<^6f6>nDSDsQ~L%`clvGuwM8)CmuB&(Ht(0jt4U@ug||G z%1}nSA8m|;RhN&G`?-CNEJ=6hp?w3K=%~11ufbh@VNP zWn?6Xc~)EwkJcLfE4M=8U@;o{@}2MC;Co^V7)=fbP?P4$Kd<5 z>G)=ldb|rtlL!CK-0=QyRFt1}7i(W?O(E$hxr3#bgNbe_=9*+o>?P}Ps1>b8ZF zk?4_cE%|K&@OPkqOvvwob`jya<)o6|IoTZi#hz?LApdZzL~6;Z@xB4S(Q95e%D98( zw*?8)o$IV1$se`Nvp@V73^zYVnn>GOk1uZP@L74=mAF!dFJ-yiHRf3fQgG^u6o&9B zoo?-t_hhKHND$v^vOfnZp~B7+C@II$7l-P6$eQXdN7XI98d_v)@Uu_cd@%QZf=_lK z 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 avQ0beC8@q6Dr(D7bN!d6V?E-=gZ}}}8YJle literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/nginx_firewall/5.png b/BTPanel/static/img/nginx_firewall/5.png new file mode 100644 index 0000000000000000000000000000000000000000..b616967b38ec482b6863356334a5668cf8bae1f0 GIT binary patch literal 85537 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/nginx_firewall/6.png b/BTPanel/static/img/nginx_firewall/6.png new file mode 100644 index 0000000000000000000000000000000000000000..667a038ea5cbf3e252c0df2d74488c040bb66028 GIT binary patch literal 90006 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"},j=function(a,e,f,g){return'"+a+''};if(this.options.title&&!this.multiple&&(h--,!this.$element.find(".bs-title-option").length)){var k=this.$element[0];g.className="bs-title-option",g.appendChild(document.createTextNode(this.options.title)),g.value="",k.insertBefore(g,k.firstChild),void 0===a(k.options[k.selectedIndex]).attr("selected")&&(g.selected=!0)}return this.$element.find("option").each(function(b){var c=a(this);if(h++,!c.hasClass("bs-title-option")){var g=this.className||"",k=this.style.cssText,l=c.data("content")?c.data("content"):c.html(),m=c.data("tokens")?c.data("tokens"):null,n="undefined"!=typeof c.data("subtext")?''+c.data("subtext")+"":"",o="undefined"!=typeof c.data("icon")?' ':"",p="OPTGROUP"===this.parentNode.tagName,q=this.disabled||p&&this.parentNode.disabled;if(""!==o&&q&&(o=""+o+""),d.options.hideDisabled&&q&&!p)return void h--;if(c.data("content")||(l=o+''+l+n+""),p&&c.data("divider")!==!0){var r=" "+this.parentNode.className||"";if(0===c.index()){f+=1;var s=this.parentNode.label,t="undefined"!=typeof c.parent().data("subtext")?''+c.parent().data("subtext")+"":"",u=c.parent().data("icon")?' ':"";s=u+''+s+t+"",0!==b&&e.length>0&&(h++,e.push(i("",null,"divider",f+"div"))),h++,e.push(i(s,null,"dropdown-header"+r,f))}if(d.options.hideDisabled&&q)return void h--;e.push(i(j(l,"opt "+g+r,k,m),b,"",f))}else c.data("divider")===!0?e.push(i("",b,"divider")):c.data("hidden")===!0?e.push(i(j(l,g,k,m),b,"hidden is-hidden")):(this.previousElementSibling&&"OPTGROUP"===this.previousElementSibling.tagName&&(h++,e.push(i("",null,"divider",f+"div"))),e.push(i(j(l,g,k,m),b)));d.liObj[b]=h}}),this.multiple||0!==this.$element.find("option:selected").length||this.options.title||this.$element.find("option").eq(0).prop("selected",!0).attr("selected","selected"),e.join("")},findLis:function(){return null==this.$lis&&(this.$lis=this.$menu.find("li")),this.$lis},render:function(b){var c,d=this;b!==!1&&this.$element.find("option").each(function(a){var b=d.findLis().eq(d.liObj[a]);d.setDisabled(a,this.disabled||"OPTGROUP"===this.parentNode.tagName&&this.parentNode.disabled,b),d.setSelected(a,this.selected,b)}),this.tabIndex();var e=this.$element.find("option").map(function(){if(this.selected){if(d.options.hideDisabled&&(this.disabled||"OPTGROUP"===this.parentNode.tagName&&this.parentNode.disabled))return;var b,c=a(this),e=c.data("icon")&&d.options.showIcon?' ':"";return b=d.options.showSubtext&&c.data("subtext")&&!d.multiple?' '+c.data("subtext")+"":"","undefined"!=typeof c.attr("title")?c.attr("title"):c.data("content")&&d.options.showContent?c.data("content"):e+c.html()+b}}).toArray(),f=this.multiple?e.join(this.options.multipleSeparator):e[0];if(this.multiple&&this.options.selectedTextFormat.indexOf("count")>-1){var g=this.options.selectedTextFormat.split(">");if(g.length>1&&e.length>g[1]||1==g.length&&e.length>=2){c=this.options.hideDisabled?", [disabled]":"";var h=this.$element.find("option").not('[data-divider="true"], [data-hidden="true"]'+c).length,i="function"==typeof this.options.countSelectedText?this.options.countSelectedText(e.length,h):this.options.countSelectedText;f=i.replace("{0}",e.length.toString()).replace("{1}",h.toString())}}void 0==this.options.title&&(this.options.title=this.$element.attr("title")),"static"==this.options.selectedTextFormat&&(f=this.options.title),f||(f="undefined"!=typeof this.options.title?this.options.title:this.options.noneSelectedText),this.$button.attr("title",a.trim(f.replace(/<[^>]*>?/g,""))),this.$button.children(".filter-option").html(f),this.$element.trigger("rendered.bs.select")},setStyle:function(a,b){this.$element.attr("class")&&this.$newElement.addClass(this.$element.attr("class").replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi,""));var c=a?a:this.options.style;"add"==b?this.$button.addClass(c):"remove"==b?this.$button.removeClass(c):(this.$button.removeClass(this.options.style),this.$button.addClass(c))},liHeight:function(b){if(b||this.options.size!==!1&&!this.sizeInfo){var c=document.createElement("div"),d=document.createElement("div"),e=document.createElement("ul"),f=document.createElement("li"),g=document.createElement("li"),h=document.createElement("a"),i=document.createElement("span"),j=this.options.header&&this.$menu.find(".popover-title").length>0?this.$menu.find(".popover-title")[0].cloneNode(!0):null,k=this.options.liveSearch?document.createElement("div"):null,l=this.options.actionsBox&&this.multiple&&this.$menu.find(".bs-actionsbox").length>0?this.$menu.find(".bs-actionsbox")[0].cloneNode(!0):null,m=this.options.doneButton&&this.multiple&&this.$menu.find(".bs-donebutton").length>0?this.$menu.find(".bs-donebutton")[0].cloneNode(!0):null;if(i.className="text",c.className=this.$menu[0].parentNode.className+" open",d.className="dropdown-menu open",e.className="dropdown-menu inner",f.className="divider",i.appendChild(document.createTextNode("Inner text")),h.appendChild(i),g.appendChild(h),e.appendChild(g),e.appendChild(f),j&&d.appendChild(j),k){var n=document.createElement("span");k.className="bs-searchbox",n.className="form-control",k.appendChild(n),d.appendChild(k)}l&&d.appendChild(l),d.appendChild(e),m&&d.appendChild(m),c.appendChild(d),document.body.appendChild(c);var o=h.offsetHeight,p=j?j.offsetHeight:0,q=k?k.offsetHeight:0,r=l?l.offsetHeight:0,s=m?m.offsetHeight:0,t=a(f).outerHeight(!0),u="function"==typeof getComputedStyle?getComputedStyle(d):!1,v=u?null:a(d),w=parseInt(u?u.paddingTop:v.css("paddingTop"))+parseInt(u?u.paddingBottom:v.css("paddingBottom"))+parseInt(u?u.borderTopWidth:v.css("borderTopWidth"))+parseInt(u?u.borderBottomWidth:v.css("borderBottomWidth")),x=w+parseInt(u?u.marginTop:v.css("marginTop"))+parseInt(u?u.marginBottom:v.css("marginBottom"))+2;document.body.removeChild(c),this.sizeInfo={liHeight:o,headerHeight:p,searchHeight:q,actionsHeight:r,doneButtonHeight:s,dividerHeight:t,menuPadding:w,menuExtras:x}}},setSize:function(){if(this.findLis(),this.liHeight(),this.options.header&&this.$menu.css("padding-top",0),this.options.size!==!1){var b,c,d,e,f=this,g=this.$menu,h=this.$menuInner,i=a(window),j=this.$newElement[0].offsetHeight,k=this.sizeInfo.liHeight,l=this.sizeInfo.headerHeight,m=this.sizeInfo.searchHeight,n=this.sizeInfo.actionsHeight,o=this.sizeInfo.doneButtonHeight,p=this.sizeInfo.dividerHeight,q=this.sizeInfo.menuPadding,r=this.sizeInfo.menuExtras,s=this.options.hideDisabled?".disabled":"",t=function(){d=f.$newElement.offset().top-i.scrollTop(),e=i.height()-d-j};if(t(),"auto"===this.options.size){var u=function(){var i,j=function(b,c){return function(d){return c?d.classList?d.classList.contains(b):a(d).hasClass(b):!(d.classList?d.classList.contains(b):a(d).hasClass(b))}},p=f.$menuInner[0].getElementsByTagName("li"),s=Array.prototype.filter?Array.prototype.filter.call(p,j("hidden",!1)):f.$lis.not(".hidden"),u=Array.prototype.filter?Array.prototype.filter.call(s,j("dropdown-header",!0)):s.filter(".dropdown-header");t(),b=e-r,f.options.container?(g.data("height")||g.data("height",g.height()),c=g.data("height")):c=g.height(),f.options.dropupAuto&&f.$newElement.toggleClass("dropup",d>e&&c>b-r),f.$newElement.hasClass("dropup")&&(b=d-r),i=s.length+u.length>3?3*k+r-2:0,g.css({"max-height":b+"px",overflow:"hidden","min-height":i+l+m+n+o+"px"}),h.css({"max-height":b-l-m-n-o-q+"px","overflow-y":"auto","min-height":Math.max(i-q,0)+"px"})};u(),this.$searchbox.off("input.getSize propertychange.getSize").on("input.getSize propertychange.getSize",u),i.off("resize.getSize scroll.getSize").on("resize.getSize scroll.getSize",u)}else if(this.options.size&&"auto"!=this.options.size&&this.$lis.not(s).length>this.options.size){var v=this.$lis.not(".divider").not(s).children().slice(0,this.options.size).last().parent().index(),w=this.$lis.slice(0,v+1).filter(".divider").length;b=k*this.options.size+w*p+q,f.options.container?(g.data("height")||g.data("height",g.height()),c=g.data("height")):c=g.height(),f.options.dropupAuto&&this.$newElement.toggleClass("dropup",d>e&&c>b-r),g.css({"max-height":b+l+m+n+o+"px",overflow:"hidden","min-height":""}),h.css({"max-height":b-q+"px","overflow-y":"auto","min-height":""})}}},setWidth:function(){if("auto"===this.options.width){this.$menu.css("min-width","0");var a=this.$menu.parent().clone().appendTo("body"),b=this.options.container?this.$newElement.clone().appendTo("body"):a,c=a.children(".dropdown-menu").outerWidth(),d=b.css("width","auto").children("button").outerWidth();a.remove(),b.remove(),this.$newElement.css("width",Math.max(c,d)+"px")}else"fit"===this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width","").addClass("fit-width")):this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width",this.options.width)):(this.$menu.css("min-width",""),this.$newElement.css("width",""));this.$newElement.hasClass("fit-width")&&"fit"!==this.options.width&&this.$newElement.removeClass("fit-width")},selectPosition:function(){this.$bsContainer=a('
    ');var b,c,d=this,e=function(a){d.$bsContainer.addClass(a.attr("class").replace(/form-control|fit-width/gi,"")).toggleClass("dropup",a.hasClass("dropup")),b=a.offset(),c=a.hasClass("dropup")?0:a[0].offsetHeight,d.$bsContainer.css({top:b.top+c,left:b.left,width:a[0].offsetWidth})};this.$button.on("click",function(){var b=a(this);d.isDisabled()||(e(d.$newElement),d.$bsContainer.appendTo(d.options.container).toggleClass("open",!b.hasClass("open")).append(d.$menu))}),a(window).on("resize scroll",function(){e(d.$newElement)}),this.$element.on("hide.bs.select",function(){d.$menu.data("height",d.$menu.height()),d.$bsContainer.detach()})},setSelected:function(a,b,c){c||(c=this.findLis().eq(this.liObj[a])),c.toggleClass("selected",b)},setDisabled:function(a,b,c){c||(c=this.findLis().eq(this.liObj[a])),b?c.addClass("disabled").children("a").attr("href","#").attr("tabindex",-1):c.removeClass("disabled").children("a").removeAttr("href").attr("tabindex",0)},isDisabled:function(){return this.$element[0].disabled},checkDisabled:function(){var a=this;this.isDisabled()?(this.$newElement.addClass("disabled"),this.$button.addClass("disabled").attr("tabindex",-1)):(this.$button.hasClass("disabled")&&(this.$newElement.removeClass("disabled"),this.$button.removeClass("disabled")),-1!=this.$button.attr("tabindex")||this.$element.data("tabindex")||this.$button.removeAttr("tabindex")),this.$button.click(function(){return!a.isDisabled()})},tabIndex:function(){this.$element.data("tabindex")!==this.$element.attr("tabindex")&&-98!==this.$element.attr("tabindex")&&"-98"!==this.$element.attr("tabindex")&&(this.$element.data("tabindex",this.$element.attr("tabindex")),this.$button.attr("tabindex",this.$element.data("tabindex"))),this.$element.attr("tabindex",-98)},clickListener:function(){var b=this,c=a(document);this.$newElement.on("touchstart.dropdown",".dropdown-menu",function(a){a.stopPropagation()}),c.data("spaceSelect",!1),this.$button.on("keyup",function(a){/(32)/.test(a.keyCode.toString(10))&&c.data("spaceSelect")&&(a.preventDefault(),c.data("spaceSelect",!1))}),this.$button.on("click",function(){b.setSize()}),this.$element.on("shown.bs.select",function(){if(b.options.liveSearch||b.multiple){if(!b.multiple){var a=b.liObj[b.$element[0].selectedIndex];if("number"!=typeof a||b.options.size===!1)return;var c=b.$lis.eq(a)[0].offsetTop-b.$menuInner[0].offsetTop;c=c-b.$menuInner[0].offsetHeight/2+b.sizeInfo.liHeight/2,b.$menuInner[0].scrollTop=c}}else b.$menuInner.find(".selected a").focus()}),this.$menuInner.on("click","li a",function(c){var d=a(this),e=d.parent().data("originalIndex"),f=b.$element.val(),g=b.$element.prop("selectedIndex");if(b.multiple&&c.stopPropagation(),c.preventDefault(),!b.isDisabled()&&!d.parent().hasClass("disabled")){var h=b.$element.find("option"),i=h.eq(e),j=i.prop("selected"),k=i.parent("optgroup"),l=b.options.maxOptions,m=k.data("maxOptions")||!1;if(b.multiple){if(i.prop("selected",!j),b.setSelected(e,!j),d.blur(),l!==!1||m!==!1){var n=l
    ');q[2]&&(r=r.replace("{var}",q[2][l>1?0:1]),s=s.replace("{var}",q[2][m>1?0:1])),i.prop("selected",!1),b.$menu.append(t),l&&n&&(t.append(a("
    "+r+"
    ")),b.$element.trigger("maxReached.bs.select")),m&&o&&(t.append(a("
    "+s+"
    ")),b.$element.trigger("maxReachedGrp.bs.select")),setTimeout(function(){b.setSelected(e,!1)},10),t.delay(750).fadeOut(300,function(){a(this).remove()})}}}else h.prop("selected",!1),i.prop("selected",!0),b.$menuInner.find(".selected").removeClass("selected"),b.setSelected(e,!0);b.multiple?b.options.liveSearch&&b.$searchbox.focus():b.$button.focus(),(f!=b.$element.val()&&b.multiple||g!=b.$element.prop("selectedIndex")&&!b.multiple)&&b.$element.trigger("changed.bs.select",[e,i.prop("selected"),j]).triggerNative("change")}}),this.$menu.on("click","li.disabled a, .popover-title, .popover-title :not(.close)",function(c){c.currentTarget==this&&(c.preventDefault(),c.stopPropagation(),b.options.liveSearch&&!a(c.target).hasClass("close")?b.$searchbox.focus():b.$button.focus())}),this.$menuInner.on("click",".divider, .dropdown-header",function(a){a.preventDefault(),a.stopPropagation(),b.options.liveSearch?b.$searchbox.focus():b.$button.focus()}),this.$menu.on("click",".popover-title .close",function(){b.$button.click()}),this.$searchbox.on("click",function(a){a.stopPropagation()}),this.$menu.on("click",".actions-btn",function(c){b.options.liveSearch?b.$searchbox.focus():b.$button.focus(),c.preventDefault(),c.stopPropagation(),a(this).hasClass("bs-select-all")?b.selectAll():b.deselectAll()}),this.$element.change(function(){b.render(!1)})},liveSearchListener:function(){var d=this,e=a('
  • ');this.$button.on("click.dropdown.data-api touchstart.dropdown.data-api",function(){d.$menuInner.find(".active").removeClass("active"),d.$searchbox.val()&&(d.$searchbox.val(""),d.$lis.not(".is-hidden").removeClass("hidden"),e.parent().length&&e.remove()),d.multiple||d.$menuInner.find(".selected").addClass("active"),setTimeout(function(){d.$searchbox.focus()},10)}),this.$searchbox.on("click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api",function(a){a.stopPropagation()}),this.$searchbox.on("input propertychange",function(){if(d.$searchbox.val()){var f=d.$lis.not(".is-hidden").removeClass("hidden").children("a");f=d.options.liveSearchNormalize?f.not(":a"+d._searchStyle()+'("'+b(d.$searchbox.val())+'")'):f.not(":"+d._searchStyle()+'("'+d.$searchbox.val()+'")'),f.parent().addClass("hidden"),d.$lis.filter(".dropdown-header").each(function(){var b=a(this),c=b.data("optgroup");0===d.$lis.filter("[data-optgroup="+c+"]").not(b).not(".hidden").length&&(b.addClass("hidden"),d.$lis.filter("[data-optgroup="+c+"div]").addClass("hidden"))});var g=d.$lis.not(".hidden");g.each(function(b){var c=a(this);c.hasClass("divider")&&(c.index()===g.first().index()||c.index()===g.last().index()||g.eq(b+1).hasClass("divider"))&&c.addClass("hidden")}),d.$lis.not(".hidden, .no-results").length?e.parent().length&&e.remove():(e.parent().length&&e.remove(),e.html(d.options.noneResultsText.replace("{0}",'"'+c(d.$searchbox.val())+'"')).show(),d.$menuInner.append(e))}else d.$lis.not(".is-hidden").removeClass("hidden"),e.parent().length&&e.remove();d.$lis.filter(".active").removeClass("active"),d.$searchbox.val()&&d.$lis.not(".hidden, .divider, .dropdown-header").eq(0).addClass("active").children("a").focus(),a(this).focus()})},_searchStyle:function(){var a={begins:"ibegins",startsWith:"ibegins"};return a[this.options.liveSearchStyle]||"icontains"},val:function(a){return"undefined"!=typeof a?(this.$element.val(a),this.render(),this.$element):this.$element.val()},changeAll:function(b){"undefined"==typeof b&&(b=!0),this.findLis();for(var c=this.$element.find("option"),d=this.$lis.not(".divider, .dropdown-header, .disabled, .hidden").toggleClass("selected",b),e=d.length,f=[],g=0;e>g;g++){var h=d[g].getAttribute("data-original-index");f[f.length]=c.eq(h)[0]}a(f).prop("selected",b),this.render(!1),this.$element.trigger("changed.bs.select").triggerNative("change")},selectAll:function(){return this.changeAll(!0)},deselectAll:function(){return this.changeAll(!1)},toggle:function(a){a=a||window.event,a&&a.stopPropagation(),this.$button.trigger("click")},keydown:function(c){var d,e,f,g,h,i,j,k,l,m=a(this),n=m.is("input")?m.parent().parent():m.parent(),o=n.data("this"),p=":not(.disabled, .hidden, .dropdown-header, .divider)",q={32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9"};if(o.options.liveSearch&&(n=m.parent().parent()),o.options.container&&(n=o.$menu),d=a("[role=menu] li",n),l=o.$newElement.hasClass("open"),!l&&(c.keyCode>=48&&c.keyCode<=57||c.keyCode>=96&&c.keyCode<=105||c.keyCode>=65&&c.keyCode<=90)&&(o.options.container?o.$button.trigger("click"):(o.setSize(),o.$menu.parent().addClass("open"),l=!0),o.$searchbox.focus()),o.options.liveSearch&&(/(^9$|27)/.test(c.keyCode.toString(10))&&l&&0===o.$menu.find(".active").length&&(c.preventDefault(),o.$menu.parent().removeClass("open"),o.options.container&&o.$newElement.removeClass("open"),o.$button.focus()),d=a("[role=menu] li"+p,n),m.val()||/(38|40)/.test(c.keyCode.toString(10))||0===d.filter(".active").length&&(d=o.$menuInner.find("li"),d=o.options.liveSearchNormalize?d.filter(":a"+o._searchStyle()+"("+b(q[c.keyCode])+")"):d.filter(":"+o._searchStyle()+"("+q[c.keyCode]+")"))),d.length){if(/(38|40)/.test(c.keyCode.toString(10)))e=d.index(d.find("a").filter(":focus").parent()),g=d.filter(p).first().index(),h=d.filter(p).last().index(),f=d.eq(e).nextAll(p).eq(0).index(),i=d.eq(e).prevAll(p).eq(0).index(),j=d.eq(f).prevAll(p).eq(0).index(),o.options.liveSearch&&(d.each(function(b){a(this).hasClass("disabled")||a(this).data("index",b)}),e=d.index(d.filter(".active")),g=d.first().data("index"),h=d.last().data("index"),f=d.eq(e).nextAll().eq(0).data("index"),i=d.eq(e).prevAll().eq(0).data("index"),j=d.eq(f).prevAll().eq(0).data("index")),k=m.data("prevIndex"),38==c.keyCode?(o.options.liveSearch&&e--,e!=j&&e>i&&(e=i),g>e&&(e=g),e==k&&(e=h)):40==c.keyCode&&(o.options.liveSearch&&e++,-1==e&&(e=0),e!=j&&f>e&&(e=f),e>h&&(e=h),e==k&&(e=g)),m.data("prevIndex",e),o.options.liveSearch?(c.preventDefault(),m.hasClass("dropdown-toggle")||(d.removeClass("active").eq(e).addClass("active").children("a").focus(),m.focus())):d.eq(e).children("a").focus();else if(!m.is("input")){var r,s,t=[];d.each(function(){a(this).hasClass("disabled")||a.trim(a(this).children("a").text().toLowerCase()).substring(0,1)==q[c.keyCode]&&t.push(a(this).index())}),r=a(document).data("keycount"),r++,a(document).data("keycount",r),s=a.trim(a(":focus").text().toLowerCase()).substring(0,1),s!=q[c.keyCode]?(r=1,a(document).data("keycount",r)):r>=t.length&&(a(document).data("keycount",0),r>t.length&&(r=1)),d.eq(t[r-1]).children("a").focus()}if((/(13|32)/.test(c.keyCode.toString(10))||/(^9$)/.test(c.keyCode.toString(10))&&o.options.selectOnTab)&&l){if(/(32)/.test(c.keyCode.toString(10))||c.preventDefault(),o.options.liveSearch)/(32)/.test(c.keyCode.toString(10))||(o.$menuInner.find(".active a").click(),m.focus());else{var u=a(":focus");u.click(),u.focus(),c.preventDefault(),a(document).data("spaceSelect",!0)}a(document).data("keycount",0)}(/(^9$|27)/.test(c.keyCode.toString(10))&&l&&(o.multiple||o.options.liveSearch)||/(27)/.test(c.keyCode.toString(10))&&!l)&&(o.$menu.parent().removeClass("open"),o.options.container&&o.$newElement.removeClass("open"),o.$button.focus())}},mobile:function(){this.$element.addClass("mobile-device")},refresh:function(){this.$lis=null,this.liObj={},this.reloadLi(),this.render(),this.checkDisabled(),this.liHeight(!0),this.setStyle(),this.setWidth(),this.$lis&&this.$searchbox.trigger("propertychange"),this.$element.trigger("refreshed.bs.select")},hide:function(){this.$newElement.hide()},show:function(){this.$newElement.show()},remove:function(){this.$newElement.remove(),this.$element.remove()},destroy:function(){this.$newElement.before(this.$element).remove(),this.$bsContainer?this.$bsContainer.remove():this.$menu.remove(),this.$element.off(".bs.select").removeData("selectpicker").removeClass("bs-select-hidden selectpicker")}};var f=a.fn.selectpicker;a.fn.selectpicker=d,a.fn.selectpicker.Constructor=e,a.fn.selectpicker.noConflict=function(){return a.fn.selectpicker=f,this},a(document).data("keycount",0).on("keydown.bs.select",'.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input',e.prototype.keydown).on("focusin.modal",'.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input',function(a){a.stopPropagation()}),a(window).on("load.bs.select.data-api",function(){a(".selectpicker").each(function(){var b=a(this);d.call(b,b.data())})})}(a)}); -//# sourceMappingURL=bootstrap-select.js.map \ No newline at end of file diff --git a/BTPanel/static/js/control.js b/BTPanel/static/js/control.js index 5adedabb..676d70d0 100644 --- a/BTPanel/static/js/control.js +++ b/BTPanel/static/js/control.js @@ -1,988 +1,1353 @@ -//默认显示7天周期图表 -setTimeout(function(){ - Wday(0,'getload'); -},500); -setTimeout(function(){ - Wday(0,'cpu'); -},500); -setTimeout(function(){ - Wday(0,'mem'); -},1000); -setTimeout(function(){ - Wday(0,'disk'); -},1500); -setTimeout(function(){ - Wday(0,'network'); -},2000); -$(".st").hover(function(){ - $(this).next().show(); -},function(){ - $(this).next().hide(); - $(this).next().hover(function(){ - $(this).show(); - },function(){ - $(this).hide(); - }) -}) -$(".searcTime .gt").click(function(){ - $(this).addClass("on").siblings().removeClass("on"); -}) -$('.time_range_submit').click(function(){ - $(this).parents(".searcTime").find("span").removeClass("on"); - $(this).parents(".searcTime").find(".st").addClass("on"); - var b = (new Date($(this).parent().find(".btime").val()).getTime())/1000; - var e = (new Date($(this).parent().find(".etime").val()).getTime())/1000; - b = Math.round(b); - e = Math.round(e); - console.log(b,e); - switch ($(this).attr('data-type')) { - case 'getload': - getload(b,e); - break; - case 'cpu': - cpu(b,e); - break; - case 'mem': - mem(b,e); - break; - case 'disk': - disk(b,e); - break; - case 'network': - network(b,e); - break; - } -}); -//指定天数 -function Wday(day,name){ - var now = (new Date().getTime())/1000; - if(day==0){ - var b = (new Date(GetToday() + " 00:00:01").getTime())/1000; - b = Math.round(b); - var e = Math.round(now); - } - if(day==1){ - var b = (new Date(getBeforeDate(day) + " 00:00:01").getTime())/1000; - var e = (new Date(getBeforeDate(day) + " 23:59:59").getTime())/1000; - b = Math.round(b); - e = Math.round(e); - } - else{ - var b = (new Date(getBeforeDate(day) + " 00:00:01").getTime())/1000; - b = Math.round(b); - var e = Math.round(now); - } - switch (name){ - case "cpu": - cpu(b,e); - break; - case "mem": - mem(b,e); - break; - case "disk": - disk(b,e); - break; - case "network": - network(b,e); - break; - case "getload": - getload(b,e); - break; - } -} +var controlObj = { + // 监控 + conTrolView: { + init: function () { + var that = this; + var networkType = bt.get_cookie('network-unitType') + if (!networkType) { + bt.set_cookie('network-unitType', 'KB/s') + networkType = 'KB/s' + } + var diskType = bt.get_cookie('disk-unitType') + if (!diskType) { + bt.set_cookie('disk-unitType', 'KB/s') + diskType = 'KB/s' + } -function GetToday(){ - var mydate = new Date(); - var str = "" + mydate.getFullYear() + "/"; - str += (mydate.getMonth()+1) + "/"; - str += mydate.getDate(); - return str; -} + $(".network-unit .picker-text-list").text(networkType); + $(".disk-unit .picker-text-list").text(diskType); + $(".network-unit .select-list-item li:contains(" + networkType + ")").addClass("active"); + $(".disk-unit .select-list-item :contains(" + diskType + ")").addClass("active"); + $(".bt-crontab-select-button").on('click', '.select-picker-search', function () { + $(this).next().toggle(); + if ($(this).parent().hasClass('network-unit')) { + $(".disk-unit .select-list-item").hide(); + } else { + $(".network-unit .select-list-item").hide(); + } + }); + $(".bt-crontab-select-button").on('click', '.select-list-item li', function () { + var _button = $(this).parents('.bt-crontab-select-button'); + $(this).addClass('active').siblings().removeClass('active'); + _button.find('.picker-text-list').text($(this).text()); + _button.find(".select-list-item").toggle(); + var cookie_type = $(this).parents('.bgw').find('.searcTime .time_range_submit').attr('data-type'); + setCookie(cookie_type + '-unitType', $(this).attr('data-attr')); + $(this).parents('.bgw').find('.searcTime .gt.on').click(); + }); + // 默认显示7天周期图表 + setTimeout(function () { + that.Wday(0, 'getload'); + }, 500); + + setTimeout(function () { + that.Wday(0, 'cpu'); + }, 500); + + setTimeout(function () { + that.Wday(0, 'mem'); + }, 1000); + + setTimeout(function () { + that.Wday(0, 'disk'); + }, 1500); + + setTimeout(function () { + that.Wday(0, 'network'); + }, 2000); + + $('.btime').val(that.get_today() + ' 00:00:00'); + $('.etime').val(that.get_today() + ' 23:59:59'); + + that.GetStatus(); + + $(".st").hover(function () { + $(this).next().show(); + }, function () { + $(this).next().hide(); + $(this).next().hover(function () { + $(this).show(); + }, function () { + $(this).hide(); + }) + }); + + $(".searcTime .gt").click(function () { + $(this).addClass("on").siblings().removeClass("on"); + $(this).siblings('.ss').children('.on').removeClass('on'); + }); + + $('.time_range_submit').click(function () { + $(this).parents(".searcTime").find("span").removeClass("on"); + $(this).parents(".searcTime").find(".st").addClass("on"); + var b = (new Date($(this).parent().find(".btime").val()).getTime()) / 1000; + var e = (new Date($(this).parent().find(".etime").val()).getTime()) / 1000; + b = Math.round(b); + e = Math.round(e); + var type = $(this).attr('data-type') + var callback = that[type] + if (callback) callback(b, e); + }); + }, + + // 指定天数 + Wday: function (day, name) { + var data = this.get_date(day); + var b = data.b; + var e = data.e; + switch (name) { + case "cpu": + this.cpu(b, e); + break; + case "mem": + this.mem(b, e); + break; + case "disk": + this.disk(b, e); + break; + case "network": + this.network(b, e); + break; + case "getload": + this.getload(b, e); + break; + } + //处理日报页面resize导致监控页图表没有重绘 + var event = document.createEvent("HTMLEvents"); + event.initEvent("resize", true, true); + window.dispatchEvent(event); + }, + + get_date: function (day) { + var now = Math.floor((new Date().getTime()) / 1000); + var b = 0; + var e = now; + if (day == 0) { + b = (new Date(this.get_today() + " 00:00:00").getTime()) / 1000; + } else if (day == 1) { + b = (new Date(this.get_before_date(day) + " 00:00:00").getTime()) / 1000; + e = (new Date(this.get_before_date(day) + " 23:59:59").getTime()) / 1000; + } else { + b = (new Date(this.get_before_date(day - 1) + " 00:00:00").getTime()) / 1000; + } + b = Math.floor(b); + e = Math.floor(e); + return { + b: b, + e: e + } + }, + + get_today: function () { + var mydate = new Date(); + return bt.format_data(mydate.getTime() / 1000, 'yyyy/MM/dd'); + }, + + get_before_date: function (day) { + var now = new Date(this.get_today()); + var now_time = now.getTime(); + var before_days_time = (now_time - (day * 24 * 3600 * 1000)) / 1000; + return bt.format_data(before_days_time, 'yyyy/MM/dd'); + }, + + //取监控状态 + GetStatus: function () { + + loadT = layer.msg(lan.public.read, { icon: 16, time: 0 }) + $.post('/config?action=SetControl', 'type=-1', function (rdata) { + layer.close(loadT); + if (rdata.status) { + $("#openJK").html("") + } + else { + $("#openJK").html("") + } + $("#saveDay").val(rdata.day) + }) + }, + + //设置监控状态 + SetControl: function (act) { + var day = new Number($("#saveDay").val() || 0) + if (day < 1) { + layer.msg(lan.control.save_day_err, { icon: 2 }); + return; + } + if (act) { + var type = $("#ctswitch").prop('checked') ? '1' : '0'; + } else { + var type = $("#ctswitch").prop('checked') ? '0' : '1'; + } + + loadT = layer.msg(lan.public.the, { icon: 16, time: 0 }) + if(!/^-?\d+$/.test(day)){ + return layer.msg('The number of days to keep must be an integer', { icon: 2, time: 2000 }); + } + $.post('/config?action=SetControl', {type:type,day:day}, function (rdata) { + layer.close(loadT); + layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); + }); + }, + + // 清理记录 + CloseControl: function () { + bt.show_confirm(lan.control.close_log, lan.control.close_log_msg, function () { + loadT = layer.msg(lan.public.the, { icon: 16, time: 0 }) + $.post('/config?action=SetControl', 'type=del', function (rdata) { + layer.close(loadT); + $.get('/system?action=ReWeb'); + layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); + setTimeout(function () { + location.reload(); + }, 2000); + }); + }); + }, + + // 字节单位转换MB + ToSizeG: function (bytes) { + var c = 1024 * 1024; + var b = 0; + if (bytes > 0) { + var b = (bytes / c).toFixed(2); + } + return b; + }, + + /** + * 获取默认echart配置 + */ + get_default_option: function (startTime, endTime) { + var interval = ((endTime - startTime) / 3) * 1000; + return { + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'cross' + } + }, + grid: { + bottom: 80 + }, + xAxis: { + type: 'time', + boundaryGap: ['1%', '0%'], + minInterval: interval, + axisLine: { + lineStyle: { + color: "#666" + } + }, + axisLabel: { + formatter: function (value) { + return bt.format_data(value / 1000, 'MM/dd\nhh:mm'); + } + } + }, + yAxis: { + type: 'value', + boundaryGap: [0, '100%'], + splitLine: { + lineStyle: { + color: "#ddd" + } + }, + axisLine: { + lineStyle: { + color: "#666" + } + } + }, + dataZoom: [ + { + type: 'inside', + start: 0, + end: 100, + zoomLock: true + }, + { + bottom: 10, + start: 0, + end: 100, + handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z', + handleSize: '80%', + handleStyle: { + color: '#fff', + shadowBlur: 3, + shadowColor: 'rgba(0, 0, 0, 0.6)', + shadowOffsetX: 2, + shadowOffsetY: 2 + } + } + ] + } + }, + + /** + * 补全数据 + * @param {*} rdata + */ + set_data: function (data, startTime, endTime) { + if (data.length <= 0) return; + var time; + // var min = data[0]; + // min.addtime = min.addtime.replace(/([0-9]{2}\/[0-9]{2}).{1}[0-9:]*/, '$1 00:00'); + // data.unshift(min); + // for (var key in data[0]) { + // if (key == 'addtime') continue; + // data[0][key] = 0; + // } + + for (var i = 0; i < data.length; i++) { + if (typeof data[i].addtime === "number") continue; + time = this.get_time(data[i].addtime, data[data.length - 1].addtime); + data[i].addtime = time; + } + }, + + get_time: function (date, endDate) { + var endMonth = endDate.split(' ')[0].split('/'); + endMonth = parseInt(endMonth); + var today = new Date(); + var str = date.split(' '); + var dateStr = str[0].split('/'); + var timeStr = str[1].split(':'); + var month = parseInt(dateStr[0]); + var year = today.getFullYear(); + var toMonth = today.getMonth()+1; //当前月份 + if (month > toMonth || (month == 12 && month == endMonth)) { + year -= 1; + } + var newDate = new Date(year, month - 1, dateStr[1], timeStr[0], timeStr[1]); + return newDate.getTime(); + }, + + cpuTopData:{}, + //cpu + cpu: function (b, e) { + var _that = this; + var that = controlObj.conTrolView; + $.get('/ajax?action=GetCpuIo&start=' + b + '&end=' + e, function (rdata) { + that.set_data(rdata, b, e); + var myChartCpu = echarts.init(document.getElementById('cpuview')); + var xData = []; + var yData = []; + //var zData = []; + if (rdata.length > 0) { + for (var i = 0; i < rdata.length; i++) { + var item = rdata[i] + yData.push([item.addtime, item.pro]); + if(_that.cpuTopData === undefined) _that.cpuTopData = {}; + _that.cpuTopData[item.addtime] = item.cpu_top; + } + var startTime = rdata[0].addtime / 1000; + var endTime = rdata[rdata.length - 1].addtime / 1000; + var option = that.get_cpu_option(startTime, endTime, yData); + myChartCpu.setOption(option); + window.addEventListener("resize", function () { + myChartCpu.resize(); + }); + } + }); + }, + + /** + * 获取cpu图表配置 + */ + get_cpu_option: function (startTime, endTime, yData) { + var that = this; + var option = this.get_default_option(startTime, endTime); + option.tooltip.formatter = function (config) { + var legendList = ''; + for (var i = 0; i < config.length; i++) { + var item = config[i]; + legendList += '
    '+ item.seriesName + ':' + item.data[1].toFixed(2) +'%
    ' + } + return that.echarts_formatter({ + time: config[0].axisValueLabel, + data: that.cpuTopData[config[0].axisValue], + legend: legendList + }) + }; + option.tooltip.padding = 0; + option.tooltip.backgroundColor = 'rgba(255,255,255,0.95)'; + option.tooltip.borderColor = '#eee'; + option.tooltip.position = function (pos, params, dom, rect, size) { + return that.echarts_position('cpuview',{pos:pos,size:size}) + } + option.yAxis.name = lan.public.pre; + option.yAxis.min = 0; + option.yAxis.max = 100; + option.series = [ + { + name: 'CPU', + type: 'line', + smooth: true, + symbol: 'circle', + showSymbol: false, + itemStyle: { + normal: { + color: 'rgb(0, 153, 238)' + } + }, + data: yData + } + ]; + return option; + }, + + memTopData:{}, + //内存 + mem: function (b, e) { + var _that = this; + var that = controlObj.conTrolView; + $.get('/ajax?action=GetCpuIo&start=' + b + '&end=' + e, function (rdata) { + that.set_data(rdata, b, e); + var myChartMen = echarts.init(document.getElementById('memview')); + var xData = []; + //var yData = []; + var zData = []; + if (rdata.length > 0) { + for (var i = 0; i < rdata.length; i++) { + var item = rdata[i] + // xData.push(rdata[i].addtime); + // yData.push(rdata[i].pro); + // zData.push(rdata[i].mem); + zData.push([rdata[i].addtime, rdata[i].mem]); + if(_that.memTopData === undefined) _that.memTopData = {}; + _that.memTopData[item.addtime] = item.memory_top; + } + var startTime = rdata[0].addtime / 1000; + var endTime = rdata[rdata.length - 1].addtime / 1000; + option = that.get_mem_option(startTime, endTime, zData); + myChartMen.setOption(option); + window.addEventListener("resize", function () { + myChartMen.resize(); + }); + } + }) + }, + + /** + * 获取mem图表配置 + */ + get_mem_option: function (startTime, endTime, zData) { + var that = this; + var option = this.get_default_option(startTime, endTime); + option.tooltip.formatter = function (config) { + var legendList = ''; + for (var i = 0; i < config.length; i++) { + var item = config[i]; + legendList += '
    '+ item.seriesName + ':' + item.data[1].toFixed(2) +'%
    ' + } + return that.echarts_formatter({ + time: config[0].axisValueLabel, + data: that.memTopData[config[0].axisValue], + table:[ + {title:'PID', width:'40px', index: 1}, + {title: lan.control.process_name, index: 2}, + {title: lan.control.memory_usage, index: 0, unit:function (val){ + return bt.format_size(val) + }}, + {title: lan.control.startup_user, index: 4}, + ], + legend: legendList + }) + }; + option.tooltip.padding = 0; + option.tooltip.backgroundColor = 'rgba(255,255,255,0.95)'; + option.tooltip.borderColor = '#eee'; + option.tooltip.position = function (pos, params, dom, rect, size) { + return that.echarts_position('memview',{pos:pos,size:size}) + } + option.yAxis.name = lan.public.pre; + option.yAxis.min = 0; + option.yAxis.max = 100; + option.series = [ + { + name: lan.index.process_mem, + type: 'line', + smooth: true, + symbol: 'circle', + showSymbol: false, + itemStyle: { + normal: { + color: 'rgb(0, 153, 238)' + } + }, + data: zData + } + ]; + return option; + }, + + diskTopData:{}, + //磁盘io + disk: function (b, e) { + var _that = this; + var that = controlObj.conTrolView; + $.get('/ajax?action=GetDiskIo&start=' + b + '&end=' + e, function (rdata) { + that.set_data(rdata, b, e); + var diskview = document.getElementById('diskview'), myChartDisk = echarts.init(diskview), rData = [], wData = [], xData = [],zData = [],yData = [], unit_size = 1, _unit = getCookie('disk-unitType'); + $(diskview).next().removeClass('hide').addClass('show'); + switch (_unit) { + case 'MB/s': + unit_size = 1024; + break; + case 'GB/s': + unit_size = 1024 * 1024; + break; + default: + unit_size = 1; + break; + } + + var is_gt_MB = false; + var is_gt_GB = false; + for (var i = 0; i < rdata.length; i++) { + var item = rdata[i]; + var read = (rdata[i].read_bytes / 1024).toFixed(3); + var write = (rdata[i].write_bytes / 1024).toFixed(3); + // rData.push(read / unit_size); + // wData.push(write / unit_size); + // xData.push(rdata[i].addtime); + + rData.push([rdata[i].addtime, read / unit_size]); + wData.push([rdata[i].addtime, write / unit_size]); + yData.push([rdata[i].addtime,rdata[i].read_count + rdata[i].write_count]); + zData.push([rdata[i].addtime,rdata[i].read_time + rdata[i].write_time]); + if(_that.diskTopData === undefined) _that.diskTopData = {}; + _that.diskTopData[item.addtime] = item.disk_top; + var read_MB = read / 1024; + var write_MB = write / 1024; + if ((read_MB >= 1 || write_MB >= 1) && !is_gt_MB) { + is_gt_MB = true; + } + if (is_gt_MB) { + var read_GB = read_MB / 1024; + var write_GB = write_MB / 1024; + if ((read_GB >= 1 || write_GB >= 1) && !is_gt_GB) { + // console.log(read_GB); + // console.log(write_GB); + is_gt_GB = true; + } + } + } + if (!is_gt_GB) { + $('#diskview').next().find('.select-list-item li').eq(2).hide(); + } else { + $('#diskview').next().find('.select-list-item li').eq(2).show(); + } + if (!is_gt_MB) { + $('#diskview').next().find('.select-list-item li').eq(1).hide(); + } else { + $('#diskview').next().find('.select-list-item li').eq(1).show(); + } + if (rdata.length > 0) { + var startTime = rdata[0].addtime / 1000; + var endTime = rdata[rdata.length - 1].addtime / 1000; + var option = that.get_disk_option(_unit, startTime, endTime, rData, wData,zData,yData); + myChartDisk.setOption(option); + window.addEventListener("resize", function () { + myChartDisk.resize(); + }); + } + }) + }, + + /** + * 获取磁盘IO图表配置 + */ + get_disk_option: function (unit, startTime, endTime, rData, wData,zData,yData) { + var that = this; + var option = this.get_default_option(startTime, endTime); + + option.tooltip.formatter = function (config) { + var legendList = ''; + for (var i = 0; i < config.length; i++) { + var item = config[i],_unit = ''; + if(item.seriesName === lan.control.disk_rw_times) _unit = '/s' + if(item.seriesName === lan.control.disk_rw_wait) _unit = 'ms' + if(item.seriesName === '读取' || item.seriesName === '写入') _unit = unit + legendList += '
    ' + + '' + + ''+ item.seriesName + ':' + item.data[1].toFixed(2) + ' ' + _unit +'' + + '
    ' + } + return that.echarts_formatter({ + time: config[0].axisValueLabel, + data: that.diskTopData[config[0].axisValue], + width: '510px', + table:[ + {title: 'PID', width: '40px',index:3}, + {title: lan.control.process_name, width: '50px', index: 4}, + {title: lan.control.disk_usage, index: 0, unit:function (val){ + return bt.format_size(val); + }}, + {title: lan.control.read, index: 1, unit:function (val){ + return bt.format_size(val); + }}, + {title: lan.control.write, index: 2, unit:function (val){ + return bt.format_size(val); + }}, + {title: lan.control.startup_user, index: 6}, + ], + legend: legendList + }) + }; + option.tooltip.padding = 0; + option.tooltip.backgroundColor = 'rgba(255,255,255,0.95)'; + option.tooltip.borderColor = '#eee'; + option.tooltip.position = function (pos, params, dom, rect, size) { + return that.echarts_position('diskview',{pos:pos,size:size}) + } + option.legend = { + top: '18px', + data: [lan.control.disk_read_bytes, lan.control.disk_write_bytes, lan.control.disk_rw_times, lan.control.disk_rw_wait] + }; + option.series = [ + { + name: lan.control.disk_read_bytes, + type: 'line', + smooth: true, + symbol: 'circle', + showSymbol: false, + itemStyle: { + normal: { + color: 'rgb(255, 70, 131)' + } + }, + data: rData + }, + { + name: lan.control.disk_write_bytes, + type: 'line', + smooth: true, + symbol: 'circle', + showSymbol: false, + itemStyle: { + normal: { + color: 'rgba(46, 165, 186, .7)' + } + }, + data: wData + } + , + { + name: lan.control.disk_rw_times, + type: 'line', + smooth: true, + symbol: 'circle', + showSymbol: false, + itemStyle: { + normal: { + color: 'rgba(30, 144, 255)' + } + }, + data: yData + } + , + { + name: lan.control.disk_rw_wait, + type: 'line', + smooth: true, + symbol: 'circle', + showSymbol: false, + itemStyle: { + normal: { + color: 'rgba(255, 140, 0)' + } + }, + data: zData + } + ]; + return option; + }, -//取监控状态 -function GetStatus(){ - loadT = layer.msg(lan.public.read,{icon:16,time:0}) - $.post('/config?action=SetControl','type=-1',function(rdata){ - layer.close(loadT); - if(rdata.status){ - $("#openJK").html("") - } - else{ - $("#openJK").html("") - } - $("#saveDay").val(rdata.day) - }) -} + //网络Io + network: function (b, e) { + var that = controlObj.conTrolView; + $.get('/ajax?action=GetNetWorkIo&start=' + b + '&end=' + e, function (rdata) { + that.set_data(rdata, b, e); + var anetwork = document.getElementById('network'), myChartNetwork = echarts.init(anetwork), aData = [], bData = [], cData = [], dData = [], xData = [], yData = [], zData = [], unit_size = 1, _unit = getCookie('network-unitType'), network_io = [{ title: lan.control.all, value: 'all' }], network_select = $('[name="network-io"]'), network_html = '', is_network = 0, network_io_key = bt.get_cookie('network_io_key') || ''; + $(anetwork).next().removeClass('hide').addClass('show'); + switch (_unit) { + case 'MB/s': + unit_size = 1024; + break; + case 'GB/s': + unit_size = 1024 * 1024; + break; + default: + unit_size = 1; + break; + } + network_select.unbind('change').change(function () { + bt.set_cookie('network_io_key', $(this).val()); + that.network(b, e); + }).removeClass('hide'); -GetStatus() + var is_gt_MB = false; + var is_gt_GB = false; + for (var i = 0; i < rdata.length; i++) { + var items = rdata[i]; + if (is_network < 1 && typeof items.down_packets === 'object') { + for (var key in items.down_packets) { + network_html += ''; + } + network_select.html(network_html); + is_network++; + } + if (typeof network_io_key != 'undefined' && network_io_key != '') { + if (typeof items.down_packets === 'object') { + // zData.push(items.down_packets[network_io_key] / unit_size); + zData.push([items.addtime, items.down_packets[network_io_key] / unit_size]); + } else { + // zData.push(0); + zData.push([items.addtime, 0]); + } + } else { + // zData.push(items.down / unit_size); + zData.push([items.addtime, items.down / unit_size]); + } + if (typeof network_io_key != 'undefined' && network_io_key != '') { + if (typeof items.up_packets === 'object') { + // yData.push(items.up_packets[network_io_key] / unit_size); + yData.push([items.addtime, items.up_packets[network_io_key] / unit_size]); + } else { + // yData.push(0); + yData.push([items.addtime, 0]); + } + } else { + // yData.push(items.up / unit_size); + yData.push([items.addtime, items.up / unit_size]); + } + var up_MB = items.up / 1024; + var down_MB = items.down / 1024; + if ((up_MB >= 1 || down_MB >= 1) && !is_gt_MB) { + is_gt_MB = true; + } + if (is_gt_MB) { + var up_GB = up_MB / 1024; + var down_GB = down_MB / 1024; + if ((up_GB >= 1 || down_GB >= 1) && !is_gt_GB) { + is_gt_GB = true; + } + } + // xData.push(items.addtime); + } + if (!is_gt_GB) { + $('#network').next().find('.select-list-item li').eq(2).hide(); + } else { + $('#network').next().find('.select-list-item li').eq(2).show(); + } + if (!is_gt_MB) { + $('#network').next().find('.select-list-item li').eq(1).hide(); + } else { + $('#network').next().find('.select-list-item li').eq(1).show(); + } + if (rdata.length > 0) { + var startTime = rdata[0].addtime / 1000; + var endTime = rdata[rdata.length - 1].addtime / 1000; + var option = that.get_network_option(_unit, startTime, endTime, yData, zData); + myChartNetwork.setOption(option); + window.addEventListener("resize", function () { + myChartNetwork.resize(); + }); + } + }) + }, -//设置监控状态 -function SetControl(act){ - var day = $("#saveDay").val() - if(day < 1){ - layer.msg(lan.control.save_day_err,{icon:2}); - return; - } - if(act){ - var type = $("#ctswitch").prop('checked')?'1':'0'; - }else{ - var type = $("#ctswitch").prop('checked')?'0':'1'; - } - - loadT = layer.msg(lan.public.the,{icon:16,time:0}) - if(!/^-?\d+$/.test(day)){ - return layer.msg('The number of days to keep must be an integer',{icon:2,time:2000}); + /** + * 获取网络IO图表配置 + */ + get_network_option: function (unit, startTime, endTime, yData, zData) { + var that = this; + var option = this.get_default_option(startTime, endTime); + option.tooltip.formatter = function (config) { + var data = config[0]; + var time = data.data[0]; + var date = bt.format_data(time / 1000); + var _tips = ''; + for (var i = 0; i < config.length; i++) { + var item = config[i] + _tips += '
    ' + + '' + + ''+ item.seriesName +':'+ item.data[1].toFixed(3) +' '+ unit +'' + + '
    ' + } + return that.echarts_formatter({ + width:'280px', + time: config[0].axisValueLabel, + legend: _tips + }) + }; + option.tooltip.padding = 0; + option.tooltip.backgroundColor = 'rgba(255,255,255,0.95)'; + option.tooltip.borderColor = '#eee'; + option.tooltip.position = function (pos, params, dom, rect, size) { + return that.echarts_position('network',{pos:pos,size:size}) + } + option.legend = { + top: '18px', + data: [lan.index.net_up, lan.index.net_down] + }; + option.series = [ + { + name: lan.index.net_up, + type: 'line', + smooth: true, + symbol: 'circle', + showSymbol: false, + itemStyle: { + normal: { + color: 'rgb(255, 140, 0)' + } + }, + data: yData + }, + { + name: lan.index.net_down, + type: 'line', + smooth: true, + symbol: 'circle', + showSymbol: false, + itemStyle: { + normal: { + color: 'rgb(30, 144, 255)' + } + }, + data: zData + } + ]; + return option; + }, + + // 负载 + getload_old: function (b, e) { + $.get('/ajax?action=get_load_average&start=' + b + '&end=' + e, function (rdata) { + var myChartgetload = echarts.init(document.getElementById('getloadview')); + var aData = []; + var bData = []; + var xData = []; + var yData = []; + var zData = []; + + + for (var i = 0; i < rdata.length; i++) { + xData.push(rdata[i].addtime); + yData.push(rdata[i].pro); + zData.push(rdata[i].one); + aData.push(rdata[i].five); + bData.push(rdata[i].fifteen); + } + var interval = ((e - b) / 3) * 1000; + option = { + tooltip: { + trigger: 'axis' + }, + calculable: true, + legend: { + data: [lan.control.sys_resource_usage, lan.control.m1, lan.control.m5, lan.control.m15], + selectedMode: 'single', + }, + xAxis: { + type: 'category', + boundaryGap: false, + data: xData, + minInterval: interval, + axisLine: { + lineStyle: { + color: "#666" + } + } + }, + yAxis: { + type: 'value', + name: '', + boundaryGap: [0, '100%'], + splitLine: { + lineStyle: { + color: "#ddd" + } + }, + axisLine: { + lineStyle: { + color: "#666" + } + } + }, + dataZoom: [{ + type: 'inside', + start: 0, + end: 100, + zoomLock: true + }, { + start: 0, + end: 100, + handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z', + handleSize: '80%', + handleStyle: { + color: '#fff', + shadowBlur: 3, + shadowColor: 'rgba(0, 0, 0, 0.6)', + shadowOffsetX: 2, + shadowOffsetY: 2 + } + }], + series: [ + { + name: lan.control.sys_resource_usage, + type: 'line', + smooth: true, + showSymbol: true, + symbol: 'circle', + sampling: 'average', + itemStyle: { + normal: { + color: 'rgb(255, 140, 0)' + } + }, + data: yData + }, + { + name: lan.control.m1, + type: 'line', + smooth: true, + showSymbol: true, + symbol: 'circle', + sampling: 'average', + itemStyle: { + normal: { + color: 'rgb(30, 144, 255)' + } + }, + data: zData + }, + { + name: lan.control.m5, + type: 'line', + smooth: true, + showSymbol: true, + symbol: 'circle', + sampling: 'average', + itemStyle: { + normal: { + color: 'rgb(0, 178, 45)' + } + }, + data: aData + }, + { + name: lan.control.m15, + type: 'line', + smooth: true, + showSymbol: true, + symbol: 'circle', + sampling: 'average', + itemStyle: { + normal: { + color: 'rgb(147, 38, 255)' + } + }, + data: bData + } + ] + }; + myChartgetload.setOption(option); + window.addEventListener("resize", function () { + myChartgetload.resize(); + }); + }) + }, + + loadCpuTopData: {}, + // 系统负载 + getload: function (b, e) { + var _that = this; + var that = controlObj.conTrolView; + $.get('/ajax?action=get_load_average&start=' + b + '&end=' + e, function (rdata) { + that.set_data(rdata, b, e); + var myChartgetload = echarts.init(document.getElementById('getloadview')); + var aData = []; + var bData = []; + var xData = []; + var yData = []; + var zData = []; + + for (var i = 0; i < rdata.length; i++) { + // xData.push(rdata[i].addtime); + // yData.push(rdata[i].pro); + // zData.push(rdata[i].one); + // aData.push(rdata[i].five); + // bData.push(rdata[i].fifteen); + zData.push([rdata[i].addtime, rdata[i].one]); + yData.push([rdata[i].addtime, rdata[i].pro]); + aData.push([rdata[i].addtime, rdata[i].five]); + bData.push([rdata[i].addtime, rdata[i].fifteen]); + if(_that.loadCpuTopData === undefined) _that.loadCpuTopData = {}; + _that.loadCpuTopData[rdata[i].addtime] = rdata[i].cpu_top; + } + if (rdata.length > 0) { + var startTime = rdata[0].addtime / 1000; + var endTime = rdata[rdata.length - 1].addtime / 1000; + var option = that.get_load_option(startTime, endTime, yData, zData, aData, bData); + myChartgetload.setOption(option); + window.addEventListener("resize", function () { + myChartgetload.resize(); + }); + } + }) + }, + + /** + * 获取平均负载图表配置 + */ + get_load_option: function (startTime, endTime, yData, zData, aData, bData) { + var that = this; + var option = this.get_default_option(startTime, endTime); + var interval = ((endTime - startTime) / 3) * 1000; + option.tooltip.padding = 0; + option.tooltip.backgroundColor = 'rgba(255,255,255,0.95)'; + option.tooltip.borderColor = '#eee'; + option.tooltip.position = function (pos, params, dom, rect, size) { + return that.echarts_position('getloadview',{pos:pos,size:size}) + } + + option.tooltip.formatter = function (config) { + var tdList = '', selectList = '', resource = ''; + for (var i = 0; i < config.length; i++) { + var item = config[i]; + switch (item.seriesName){ + case lan.control.m1: + case lan.control.m5: + case lan.control.m15: + selectList += '
    '+ item.seriesName +':'+ item.data[1].toFixed(2) +'%
    '; + break; + case lan.control.sys_resource_usage: + resource = item.data[1].toFixed(2) + break; + } + } + return that.echarts_formatter({ + time: config[0].axisValueLabel, + data: that.loadCpuTopData[config[0].axisValue], + legend: '
    ' + lan.control.sys_resource_usage + ': '+ resource +'%
    '+ selectList +'
    ' + }) + }; + + option.legend = { + data: [lan.control.m1, lan.control.m5, lan.control.m15], + right: '16%', + top: '10px' + }; + option.axisPointer = { + link: { xAxisIndex: 'all' }, + lineStyle: { + color: '#aaaa', + width: 1 + } + }; + // 直角坐标系内绘图网格 + option.grid = [ + { + left: '5%', + bottom: 80, + right: '55%', + width: '40%', + height: 'auto' + }, + { + bottom: 80, + left: '55%', + width: '40%', + height: 'auto' + } + ]; + // 直角坐标系grid的x轴 + option.xAxis = [ + { + type: 'time', + boundaryGap: ['1%', '0%'], + minInterval: interval, + axisLine: { + lineStyle: { + color: "#666" + } + }, + axisLabel: { + formatter: function (value) { + return bt.format_data(value / 1000, 'MM/dd\nhh:mm'); + } + } + }, + { + type: 'time', + gridIndex: 1, + boundaryGap: ['1%', '0%'], + minInterval: interval, + axisLine: { + lineStyle: { + color: "#666" + } + }, + axisLabel: { + formatter: function (value) { + return bt.format_data(value / 1000, 'MM/dd\nhh:mm'); + } + } + } + ]; + option.yAxis = [ + { + scale: true, + name: lan.control.sys_resource_usage, + min: 0, + max: function (value) { + // 最大值超过100 + if (value.max >= 100) return Math.ceil(value.max); + // 最大值超过80 + if (value.max >= 80) return 100; + // 小于80取当前最大值的首位数字 + return parseInt((value.max + 10).toString().slice(0,1) + '0') + }, + // y轴网格显示 + splitLine: { + show: true, + lineStyle: { + color: "#ddd" + } + }, + // 坐标轴名样式 + nameTextStyle: { + color: '#666', + fontSize: 12, + align: 'left' + }, + axisLine: { + lineStyle: { + color: '#666', + } + }, + }, + { + scale: true, + name: lan.control.load_detail, + gridIndex: 1, + splitLine: { + show: true, + lineStyle: { + color: "#ddd" + } + }, + nameTextStyle: { + color: '#666', + fontSize: 12, + align: 'left' + }, + axisLine: { + lineStyle: { + color: '#666', + } + } + } + ]; + option.dataZoom[0].xAxisIndex = [0, 1]; + option.dataZoom[1].type = 'slider'; + option.dataZoom[1].left = '5%'; + option.dataZoom[1].right = '5%'; + option.dataZoom[1].xAxisIndex = [0, 1]; + option.series = [ + { + name: lan.control.sys_resource_usage, + type: 'line', + smooth: true, + symbol: 'circle', + showSymbol: false, + lineStyle: { + normal: { + width: 2, + color: 'rgb(255, 140, 0)' + } + }, + itemStyle: { + normal: { + color: 'rgb(255, 140, 0)' + } + }, + data: yData + }, + { + xAxisIndex: 1, + yAxisIndex: 1, + name: lan.control.m1, + type: 'line', + smooth: true, + symbol: 'circle', + showSymbol: false, + lineStyle: { + normal: { + width: 2, + color: 'rgb(30, 144, 255)' + } + }, + itemStyle: { + normal: { + color: 'rgb(30, 144, 255)' + } + }, + data: zData + }, + { + xAxisIndex: 1, + yAxisIndex: 1, + name: lan.control.m5, + type: 'line', + smooth: true, + symbol: 'circle', + showSymbol: false, + lineStyle: { + normal: { + width: 2, + color: 'rgb(0, 178, 45)' + } + }, + itemStyle: { + normal: { + color: 'rgb(0, 178, 45)' + } + }, + data: aData + }, + { + xAxisIndex: 1, + yAxisIndex: 1, + name: lan.control.m15, + type: 'line', + smooth: true, + symbol: 'circle', + showSymbol: false, + lineStyle: { + normal: { + width: 2, + color: 'rgb(147, 38, 255)' + } + }, + itemStyle: { + normal: { + color: 'rgb(147, 38, 255)' + } + }, + data: bData + } + ]; + option.textStyle = { + color: '#666', + fontSize: 12 + }; + return option; + }, + + // 统计图图例定位 + echarts_position: function (id,config){ + var boxWidth = config.size.contentSize[0], + boxHeight = config.size.contentSize[1], + winWidth = window.innerWidth, + winHeight = window.innerHeight, + _box = document.getElementById(id).getBoundingClientRect(), + _x = config.pos[0] + _box.left, + _y = config.pos[1] + _box.top, + _top = 0, + _left = 0; + if(_x + boxWidth + 80 < winWidth){ + _left = config.pos[0] + 20 + }else{ + _left = config.pos[0] - boxWidth - 20 + } + + if(_y + boxHeight + 80 < winHeight){ + _top = config.pos[1] + 20 + }else{ + _top = config.pos[1] - boxHeight - 20 + } + if(_y - boxHeight < 0) _top = 0 -_box.top + 10 + + return [_left, _top] + }, + // 统计图图例 + echarts_formatter: function (config){ + var time = config.time, legend = config.legend; + var thead = '', tbody = ''; + if(typeof config.data === 'undefined') config.data = [] + if(typeof config.table === 'undefined'){ + config.table = [ + {title:'PID', width:'40px', index: 1}, + {title: lan.control.process_name, index: 2}, + {title: lan.control.cpu_usage, index: 0, unit:'%'}, + {title: lan.control.startup_user, index: 4}, + ] + } + for (var i = 0; i < config.data.length; i++) { + var item = config.data[i]; + if(i === 0) thead += '' + tbody += '' + for (var j = 0; j < config.table.length; j++) { + var tableItem = config.table[j] + if(i === 0) thead += ''+ tableItem.title +'' + var value = '', itemVal = item[tableItem.index] + if(typeof tableItem.unit === 'function'){ + value = tableItem.unit(itemVal) + }else{ + value = itemVal + (tableItem.unit || '') + } + tbody += ''+ value +'' + } + if(i === 0) thead += '' + tbody += '' + } + + return '
    \ +
    \ + path\ + ' + lan.control.date + ': '+ time +'\ +
    \ +
    '+ legend + + '
    \ +
    \ + \ + \ + '+ thead +'\ + \ + '+ tbody +'\ +
    \ +
    \ +
    \ +
    ' + } } - $.post('/config?action=SetControl','type='+type+'&day='+day,function(rdata){ - layer.close(loadT); - layer.msg(rdata.msg,{icon:rdata.status?1:2}); - }); -} - -//清理记录 -function CloseControl(){ - layer.confirm(lan.control.close_log_msg,{title:lan.control.close_log,icon:3,closeBtn:2}, function() { - loadT = layer.msg(lan.public.the,{icon:16,time:0}) - $.post('/config?action=SetControl','type=del',function(rdata){ - layer.close(loadT); - $.get('/system?action=ReWeb',function(){}); - layer.msg(rdata.msg,{icon:rdata.status?1:2}); - }); - }); -} - - - -//字节单位转换MB -function ToSizeG(bytes){ - var c = 1024 * 1024; - var b = 0; - if(bytes > 0){ - var b = (bytes/c).toFixed(2); - } - return b; } //定义周期时间 -function getBeforeDate(n){ - var n = n; - var d = new Date(); - var year = d.getFullYear(); - var mon=d.getMonth()+1; - var day=d.getDate(); - if(day <= n){ - if(mon>1) { - mon=mon-1; - } - else { - year = year-1; - mon = 12; - } - } - d.setDate(d.getDate()-n); - year = d.getFullYear(); - mon=d.getMonth()+1; - day=d.getDate(); - s = year+"/"+(mon<10?('0'+mon):mon)+"/"+(day<10?('0'+day):day); - return s; -} -//cpu -function cpu(b,e){ -$.get('/ajax?action=GetCpuIo&start='+b+'&end='+e,function(rdata){ - var myChartCpu = echarts.init(document.getElementById('cupview')); - var xData = []; - var yData = []; - //var zData = []; - - for(var i = 0; i < rdata.length; i++){ - xData.push(rdata[i].addtime); - yData.push(rdata[i].pro); - //zData.push(rdata[i].mem); - } - option = { - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'cross' - }, - formatter: '{b}
    {a}: {c}%' - }, - xAxis: { - type: 'category', - boundaryGap: false, - data: xData, - axisLine:{ - lineStyle:{ - color:"#666" - } - } - }, - yAxis: { - type: 'value', - name: lan.public.pre, - min:0, - max: 100, - splitLine:{ - lineStyle:{ - color:"#ddd" - } - }, - axisLine:{ - lineStyle:{ - color:"#666" - } - } - }, - dataZoom: [{ - type: 'inside', - start: 0, - end: 100, - zoomLock:true - }, { - start: 0, - end: 100, - handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z', - handleSize: '80%', - handleStyle: { - color: '#fff', - shadowBlur: 3, - shadowColor: 'rgba(0, 0, 0, 0.6)', - shadowOffsetX: 2, - shadowOffsetY: 2 - } - }], - series: [ - { - name:'CPU', - type:'line', - smooth:true, - symbol: 'none', - sampling: 'average', - itemStyle: { - normal: { - color: 'rgb(0, 153, 238)' - } - }, - data: yData - } - ] - }; - myChartCpu.clear() - myChartCpu.setOption(option, true); - window.addEventListener("resize",function(){ - myChartCpu.resize(); - }); -}) -} - -//内存 -function mem(b,e){ -$.get('/ajax?action=GetCpuIo&start='+b+'&end='+e,function(rdata){ - var myChartMen = echarts.init(document.getElementById('memview')); - var xData = []; - //var yData = []; - var zData = []; - - for(var i = 0; i < rdata.length; i++){ - xData.push(rdata[i].addtime); - //yData.push(rdata[i].pro); - zData.push(rdata[i].mem.toFixed(2)); - } - option = { - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'cross' - }, - formatter: '{b}
    {a}: {c}%' - }, - xAxis: { - type: 'category', - boundaryGap: false, - data: xData, - axisLine:{ - lineStyle:{ - color:"#666" - } - } - }, - yAxis: { - type: 'value', - name: lan.public.pre, - min:0, - max: 100, - splitLine:{ - lineStyle:{ - color:"#ddd" - } - }, - axisLine:{ - lineStyle:{ - color:"#666" - } - } - }, - dataZoom: [{ - type: 'inside', - start: 0, - end: 100, - zoomLock:true - }, { - start: 0, - end: 100, - handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z', - handleSize: '80%', - handleStyle: { - color: '#fff', - shadowBlur: 3, - shadowColor: 'rgba(0, 0, 0, 0.6)', - shadowOffsetX: 2, - shadowOffsetY: 2 - } - }], - series: [ - { - name:lan.index.process_mem, - type:'line', - smooth:true, - symbol: 'none', - sampling: 'average', - itemStyle: { - normal: { - color: 'rgb(0, 153, 238)' - } - }, - data: zData - } - ] - }; - myChartMen.clear() - myChartMen.setOption(option, true); - window.addEventListener("resize",function(){ - myChartMen.resize(); - }); -}) -} - -//磁盘io -function disk(b, e) { - $.get('/ajax?action=GetDiskIo&start=' + b + '&end=' + e, function (rdata) { - var myChartDisk = echarts.init(document.getElementById('diskview')); - var rData = []; - var wData = []; - var xData = []; - var yData = []; - var zData = []; - - for (var i = 0; i < rdata.length; i++) { - rData.push((rdata[i].read_bytes / 1024 / 60).toFixed(2)); - wData.push((rdata[i].write_bytes / 1024 / 60).toFixed(2)); - xData.push(rdata[i].addtime); - yData.push(rdata[i].read_count); - zData.push(rdata[i].read_time); - } - option = { - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'cross' - }, - formatter: function (config) { - var _tips = ''; - var unit = 'KB/s'; - var time = config[0].axisValue; - var _style = ' ' + item.seriesName + ': '; - if (item.seriesName == lan.control.disk_read_bytes || item.seriesName == lan.control.disk_write_bytes) { - _tips += item.data + unit + (config.length - 1 !== i ? '
    ' : ''); - } else { - if (item.seriesName == lan.control.disk_rw_count) { - _tips += item.data + '/s' + (config.length - 1 !== i ? '
    ' : ''); - }else{ - _tips += item.data + 'ms' + (config.length - 1 !== i ? '
    ' : ''); - } - } - } - return lan.control.time + ": " + time + "
    " + _tips; - } - //formatter: lan.control.time+":{b0}
    {a0}: {c0} Kb/s
    {a1}: {c1} Kb/s", - }, - legend: { - data: [ - lan.control.disk_read_bytes, - lan.control.disk_write_bytes, - lan.control.disk_rw_count, - lan.control.disk_rw_time - ] - }, - xAxis: { - type: 'category', - boundaryGap: false, - data: xData, - axisLine: { - lineStyle: { - color: "#666" - } - } - }, - yAxis: { - type: 'value', - name: lan.index.unit + ':KB/s', - boundaryGap: [0, '20%'], - splitLine: { - lineStyle: { - color: "#ddd" - } - }, - axisLine: { - lineStyle: { - color: "#666" - } - } - }, - dataZoom: [ - { - type: 'inside', - start: 0, - end: 100, - zoomLock: true - }, - { - start: 0, - end: 100, - handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z', - handleSize: '80%', - handleStyle: { - color: '#fff', - shadowBlur: 3, - shadowColor: 'rgba(0, 0, 0, 0.6)', - shadowOffsetX: 2, - shadowOffsetY: 2 - } - } - ], - series: [ - { - name: lan.control.disk_read_bytes, - type: 'line', - symbol: 'none', - itemStyle: { - normal: { - color: 'rgb(255, 70, 131)' - } - }, - data: rData - }, - { - name: lan.control.disk_write_bytes, - type: 'line', - symbol: 'none', - itemStyle: { - normal: { - color: 'rgba(46, 165, 186, .7)' - } - }, - data: wData - }, - { - name: lan.control.disk_rw_count, - type: 'line', - symbol: 'none', - itemStyle: { - normal: { - color: 'rgba(30, 144, 255)' - } - }, - data: yData - }, - { - name: lan.control.disk_rw_time, - type: 'line', - symbol: 'none', - itemStyle: { - normal: { - color: 'rgba(255, 140, 0)' - } - }, - data: zData - } - ] - }; - myChartDisk.clear() - myChartDisk.setOption(option, true); - window.addEventListener("resize", function () { - myChartDisk.resize(); - }); - }); -} - -//网络Io -function network(b,e){ -$.get('/ajax?action=GetNetWorkIo&start='+b+'&end='+e,function(rdata){ - var myChartNetwork = echarts.init(document.getElementById('network')); - var aData = []; - var bData = []; - var cData = []; - var dData = []; - var xData = []; - var yData = []; - var zData = []; - - for(var i = 0; i < rdata.length; i++){ - aData.push(rdata[i].total_up); - bData.push(rdata[i].total_down); - cData.push(rdata[i].down_packets); - dData.push(rdata[i].up_packets); - xData.push(rdata[i].addtime); - yData.push(rdata[i].up.toFixed(2)); - zData.push(rdata[i].down.toFixed(2)); - } - option = { - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'cross' - } - }, - legend: { - data:[lan.index.net_up,lan.index.net_down] - }, - xAxis: { - type: 'category', - boundaryGap: false, - data: xData, - axisLine:{ - lineStyle:{ - color:"#666" - } - } - }, - yAxis: { - type: 'value', - name: lan.index.unit+':KB/s', - boundaryGap: [0, '20%'], - splitLine:{ - lineStyle:{ - color:"#ddd" - } - }, - axisLine:{ - lineStyle:{ - color:"#666" - } - } - }, - dataZoom: [{ - type: 'inside', - start: 0, - end: 100, - zoomLock:true - }, { - start: 0, - end: 100, - handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z', - handleSize: '80%', - handleStyle: { - color: '#fff', - shadowBlur: 3, - shadowColor: 'rgba(0, 0, 0, 0.6)', - shadowOffsetX: 2, - shadowOffsetY: 2 - } - }], - series: [ - { - name:lan.index.net_up, - type:'line', - smooth:true, - symbol: 'none', - sampling: 'average', - itemStyle: { - normal: { - color: 'rgb(255, 140, 0)' - } - }, - data: yData - }, - { - name:lan.index.net_down, - type:'line', - smooth:true, - symbol: 'none', - sampling: 'average', - itemStyle: { - normal: { - color: 'rgb(30, 144, 255)' - } - }, - data: zData - } - ] - }; - myChartNetwork.clear() - myChartNetwork.setOption(option, true); - window.addEventListener("resize",function(){ - myChartNetwork.resize(); - }); -}) -} -//负载 -function getload_old(b,e){ -$.get('/ajax?action=get_load_average&start='+b+'&end='+e,function(rdata){ - var myChartgetload = echarts.init(document.getElementById('getloadview')); - var aData = []; - var bData = []; - var xData = []; - var yData = []; - var zData = []; - - for(var i = 0; i < rdata.length; i++){ - xData.push(rdata[i].addtime); - yData.push(rdata[i].pro); - zData.push(rdata[i].one); - aData.push(rdata[i].five); - bData.push(rdata[i].fifteen); - } - option = { - tooltip: { - trigger: 'axis' - }, - calculable: true, - legend: { - data:[lan.control.sys_resource_usage,lan.control.m1,lan.control.m5,lan.control.m15], - selectedMode: 'single', - }, - xAxis: { - type: 'category', - boundaryGap: false, - data: xData, - axisLine:{ - lineStyle:{ - color:"#666" - } - } - }, - yAxis: { - type: 'value', - name: '', - boundaryGap: [0, '100%'], - splitLine:{ - lineStyle:{ - color:"#ddd" - } - }, - axisLine:{ - lineStyle:{ - color:"#666" - } - } - }, - dataZoom: [{ - type: 'inside', - start: 0, - end: 100, - zoomLock:true - }, { - start: 0, - end: 100, - handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z', - handleSize: '80%', - handleStyle: { - color: '#fff', - shadowBlur: 3, - shadowColor: 'rgba(0, 0, 0, 0.6)', - shadowOffsetX: 2, - shadowOffsetY: 2 - } - }], - series: [ - { - name:lan.control.sys_resource_usage, - type:'line', - smooth:true, - symbol: 'none', - sampling: 'average', - itemStyle: { - normal: { - color: 'rgb(255, 140, 0)' - } - }, - data: yData - }, - { - name:lan.control.m1, - type:'line', - smooth:true, - symbol: 'none', - sampling: 'average', - itemStyle: { - normal: { - color: 'rgb(30, 144, 255)' - } - }, - data: zData - }, - { - name:lan.control.m5, - type:'line', - smooth:true, - symbol: 'none', - sampling: 'average', - itemStyle: { - normal: { - color: 'rgb(0, 178, 45)' - } - }, - data: aData - }, - { - name:lan.control.m15, - type:'line', - smooth:true, - symbol: 'none', - sampling: 'average', - itemStyle: { - normal: { - color: 'rgb(147, 38, 255)' - } - }, - data: bData - } - ] - }; - myChartgetload.clear() - myChartgetload.setOption(option, true); - window.addEventListener("resize",function(){ - myChartgetload.resize(); - }); -}) -} -//系统负载 -function getload(b,e){ - $.get('/ajax?action=get_load_average&start='+b+'&end='+e,function(rdata){ - var myChartgetload = echarts.init(document.getElementById('getloadview')); - var aData = []; - var bData = []; - var xData = []; - var yData = []; - var zData = []; - - for(var i = 0; i < rdata.length; i++){ - xData.push(rdata[i].addtime); - yData.push(rdata[i].pro); - zData.push(rdata[i].one); - aData.push(rdata[i].five); - bData.push(rdata[i].fifteen); - } - option = { - animation: false, - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'cross' - } - }, - legend: { - data:['1分钟','5分钟','15分钟'], - right:'16%', - top:'10px' - }, - axisPointer: { - link: {xAxisIndex: 'all'}, - lineStyle: { - color: '#aaaa', - width: 1 - } - }, - grid: [{ // 直角坐标系内绘图网格 - top: '60px', - left: '5%', - right: '55%', - width: '40%', - height: 'auto' - }, - { - top: '60px', - left: '55%', - width: '40%', - height: 'auto' - } - ], - xAxis: [ - - { // 直角坐标系grid的x轴 - type: 'category', - axisLine: { - lineStyle: { - color: '#666' - } - }, - data: xData - }, - { // 直角坐标系grid的x轴 - type: 'category', - gridIndex: 1, - axisLine: { - lineStyle: { - color: '#666' - } - }, - data: xData - }, - ], - yAxis: [{ - scale: true, - min: 0, - max: 100, - name: lan.control.resource_usage, - splitLine: { // y轴网格显示 - show: true, - lineStyle:{ - color:"#ddd" - } - }, - nameTextStyle: { // 坐标轴名样式 - color: '#666', - fontSize: 12, - align: 'left' - }, - axisLine:{ - lineStyle:{ - color: '#666', - } - } - }, - { - scale: true, - name: lan.control.load_detail, - gridIndex: 1, - splitLine: { // y轴网格显示 - show: true, - lineStyle:{ - color:"#ddd" - } - }, - nameTextStyle: { // 坐标轴名样式 - color: '#666', - fontSize: 12, - align: 'left' - }, - axisLine:{ - lineStyle:{ - color: '#666', - } - } - }, - ], - dataZoom: [{ - type: 'inside', - start: 0, - end: 100, - xAxisIndex:[0,1], - zoomLock:true - }, { - xAxisIndex: [0, 1], - type: 'slider', - start: 0, - end: 100, - handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z', - handleSize: '80%', - handleStyle: { - color: '#fff', - shadowBlur: 3, - shadowColor: 'rgba(0, 0, 0, 0.6)', - shadowOffsetX: 2, - shadowOffsetY: 2 - }, - left:'5%', - right:'5%' - }], - series: [ - { - name: lan.control.resource_usage, - type: 'line', - lineStyle: { - normal: { - width: 2, - color: 'rgb(255, 140, 0)' - } - }, - itemStyle: { - normal: { - color: 'rgb(255, 140, 0)' - } - }, - data: yData - }, - { - xAxisIndex: 1, - yAxisIndex: 1, - name: lan.control.m1, - type: 'line', - lineStyle: { - normal: { - width: 2, - color: 'rgb(30, 144, 255)' - } - }, - itemStyle: { - normal: { - color: 'rgb(30, 144, 255)' - } - }, - data: zData - }, - { - xAxisIndex: 1, - yAxisIndex: 1, - name: lan.control.m5, - type: 'line', - lineStyle: { - normal: { - width: 2, - color: 'rgb(0, 178, 45)' - } - }, - itemStyle: { - normal: { - color: 'rgb(0, 178, 45)' - } - }, - data: aData - }, - { - xAxisIndex: 1, - yAxisIndex: 1, - name: lan.control.m15, - type: 'line', - lineStyle: { - normal: { - width: 2, - color: 'rgb(147, 38, 255)' - } - }, - itemStyle: { - normal: { - color: 'rgb(147, 38, 255)' - } - }, - data: bData - } - ], - textStyle: { - color: '#666', - fontSize: 12 - } - } - myChartgetload.clear() - myChartgetload.setOption(option, true); - window.addEventListener("resize",function(){ - myChartgetload.resize(); - }) - }) -} -$('.btime').val(GetToday() + ' 00:00:00'); -$('.etime').val(GetToday() + ' 23:59:59'); \ No newline at end of file +function getBeforeDate (n) { + var n = n; + var d = new Date(); + var year = d.getFullYear(); + var mon = d.getMonth() + 1; + var day = d.getDate(); + if (day <= n) { + if (mon > 1) { + mon = mon - 1; + } + else { + year = year - 1; + mon = 12; + } + } + d.setDate(d.getDate() - n); + year = d.getFullYear(); + mon = d.getMonth() + 1; + day = d.getDate(); + s = year + "/" + (mon < 10 ? ('0' + mon) : mon) + "/" + (day < 10 ? ('0' + day) : day); + return s; +} \ No newline at end of file diff --git a/BTPanel/static/js/countryCode.json b/BTPanel/static/js/countryCode.json new file mode 100644 index 00000000..18bd0da7 --- /dev/null +++ b/BTPanel/static/js/countryCode.json @@ -0,0 +1,1346 @@ +[ + { + "country_id": 100006, + "country_code": 244, + "country_name_en": "Angola", + "country_name_cn": "安哥拉", + "ab": "AO" + }, + { + "country_id": 100007, + "country_code": 93, + "country_name_en": "Afghanistan", + "country_name_cn": "阿富汗", + "ab": "AF" + }, + { + "country_id": 100008, + "country_code": 355, + "country_name_en": "Albania", + "country_name_cn": "阿尔巴尼亚", + "ab": "AL" + }, + { + "country_id": 100009, + "country_code": 213, + "country_name_en": "Algeria", + "country_name_cn": "阿尔及利亚", + "ab": "DZ" + }, + { + "country_id": 100010, + "country_code": 376, + "country_name_en": "Andorra", + "country_name_cn": "安道尔共和国", + "ab": "AD" + }, + { + "country_id": 100011, + "country_code": 1264, + "country_name_en": "Anguilla", + "country_name_cn": "安圭拉岛", + "ab": "AI" + }, + { + "country_id": 100012, + "country_code": 1268, + "country_name_en": "Antigua and Barbuda", + "country_name_cn": "安提瓜和巴布达", + "ab": "AG" + }, + { + "country_id": 100013, + "country_code": 54, + "country_name_en": "Argentina", + "country_name_cn": "阿根廷", + "ab": "AR" + }, + { + "country_id": 100014, + "country_code": 374, + "country_name_en": "Armenia", + "country_name_cn": "亚美尼亚", + "ab": "AM" + }, + { + "country_id": 100015, + "country_code": 247, + "country_name_en": "Ascension", + "country_name_cn": "阿森松", + "ab": "" + }, + { + "country_id": 100016, + "country_code": 61, + "country_name_en": "Australia", + "country_name_cn": "澳大利亚", + "ab": "AU" + }, + { + "country_id": 100017, + "country_code": 43, + "country_name_en": "Austria", + "country_name_cn": "奥地利", + "ab": "AT" + }, + { + "country_id": 100018, + "country_code": 994, + "country_name_en": "Azerbaijan", + "country_name_cn": "阿塞拜疆", + "ab": "AZ" + }, + { + "country_id": 100019, + "country_code": 1242, + "country_name_en": "Bahamas", + "country_name_cn": "巴哈马", + "ab": "BS" + }, + { + "country_id": 100020, + "country_code": 973, + "country_name_en": "Bahrain", + "country_name_cn": "巴林", + "ab": "BH" + }, + { + "country_id": 100021, + "country_code": 880, + "country_name_en": "Bangladesh", + "country_name_cn": "孟加拉国", + "ab": "BD" + }, + { + "country_id": 100022, + "country_code": 1246, + "country_name_en": "Barbados", + "country_name_cn": "巴巴多斯", + "ab": "BB" + }, + { + "country_id": 100023, + "country_code": 375, + "country_name_en": "Belarus", + "country_name_cn": "白俄罗斯", + "ab": "BY" + }, + { + "country_id": 100024, + "country_code": 32, + "country_name_en": "Belgium", + "country_name_cn": "比利时", + "ab": "BE" + }, + { + "country_id": 100025, + "country_code": 501, + "country_name_en": "Belize", + "country_name_cn": "伯利兹", + "ab": "BZ" + }, + { + "country_id": 100026, + "country_code": 229, + "country_name_en": "Benin", + "country_name_cn": "贝宁", + "ab": "BJ" + }, + { + "country_id": 100027, + "country_code": 1441, + "country_name_en": "Bermuda Is.", + "country_name_cn": "百慕大群岛", + "ab": "BM" + }, + { + "country_id": 100028, + "country_code": 591, + "country_name_en": "Bolivia", + "country_name_cn": "玻利维亚", + "ab": "BO" + }, + { + "country_id": 100029, + "country_code": 267, + "country_name_en": "Botswana", + "country_name_cn": "博茨瓦纳", + "ab": "BW" + }, + { + "country_id": 100030, + "country_code": 55, + "country_name_en": "Brazil", + "country_name_cn": "巴西", + "ab": "BR" + }, + { + "country_id": 100031, + "country_code": 673, + "country_name_en": "Brunei", + "country_name_cn": "文莱", + "ab": "BN" + }, + { + "country_id": 100032, + "country_code": 359, + "country_name_en": "Bulgaria", + "country_name_cn": "保加利亚", + "ab": "BG" + }, + { + "country_id": 100033, + "country_code": 226, + "country_name_en": "Burkina-faso", + "country_name_cn": "布基纳法索", + "ab": "BF" + }, + { + "country_id": 100034, + "country_code": 95, + "country_name_en": "Burma", + "country_name_cn": "缅甸", + "ab": "MM" + }, + { + "country_id": 100035, + "country_code": 257, + "country_name_en": "Burundi", + "country_name_cn": "布隆迪", + "ab": "BI" + }, + { + "country_id": 100036, + "country_code": 237, + "country_name_en": "Cameroon", + "country_name_cn": "喀麦隆", + "ab": "CM" + }, + { + "country_id": 100037, + "country_code": 1, + "country_name_en": "Canada", + "country_name_cn": "加拿大", + "ab": "CA" + }, + { + "country_id": 100038, + "country_code": 1345, + "country_name_en": "Cayman Is.", + "country_name_cn": "开曼群岛", + "ab": "" + }, + { + "country_id": 100039, + "country_code": 236, + "country_name_en": "Central African Republic", + "country_name_cn": "中非共和国", + "ab": "CF" + }, + { + "country_id": 100040, + "country_code": 235, + "country_name_en": "Chad", + "country_name_cn": "乍得", + "ab": "TD" + }, + { + "country_id": 100041, + "country_code": 56, + "country_name_en": "Chile", + "country_name_cn": "智利", + "ab": "CL" + }, + { + "country_id": 100042, + "country_code": 86, + "country_name_en": "China", + "country_name_cn": "中国", + "ab": "CN" + }, + { + "country_id": 100043, + "country_code": 57, + "country_name_en": "Colombia", + "country_name_cn": "哥伦比亚", + "ab": "CO" + }, + { + "country_id": 100044, + "country_code": 242, + "country_name_en": "Congo", + "country_name_cn": "刚果", + "ab": "CG" + }, + { + "country_id": 100045, + "country_code": 682, + "country_name_en": "Cook Is.", + "country_name_cn": "库克群岛", + "ab": "CK" + }, + { + "country_id": 100046, + "country_code": 506, + "country_name_en": "Costa Rica", + "country_name_cn": "哥斯达黎加", + "ab": "CR" + }, + { + "country_id": 100047, + "country_code": 53, + "country_name_en": "Cuba", + "country_name_cn": "古巴", + "ab": "CU" + }, + { + "country_id": 100048, + "country_code": 357, + "country_name_en": "Cyprus", + "country_name_cn": "塞浦路斯", + "ab": "CY" + }, + { + "country_id": 100049, + "country_code": 420, + "country_name_en": "Czech Republic", + "country_name_cn": "捷克", + "ab": "CZ" + }, + { + "country_id": 100050, + "country_code": 45, + "country_name_en": "Denmark", + "country_name_cn": "丹麦", + "ab": "DK" + }, + { + "country_id": 100051, + "country_code": 253, + "country_name_en": "Djibouti", + "country_name_cn": "吉布提", + "ab": "DJ" + }, + { + "country_id": 100052, + "country_code": 1890, + "country_name_en": "Dominica Rep.", + "country_name_cn": "多米尼加共和国", + "ab": "DO" + }, + { + "country_id": 100053, + "country_code": 593, + "country_name_en": "Ecuador", + "country_name_cn": "厄瓜多尔", + "ab": "EC" + }, + { + "country_id": 100054, + "country_code": 20, + "country_name_en": "Egypt", + "country_name_cn": "埃及", + "ab": "EG" + }, + { + "country_id": 100055, + "country_code": 503, + "country_name_en": "EI Salvador", + "country_name_cn": "萨尔瓦多", + "ab": "SV" + }, + { + "country_id": 100056, + "country_code": 372, + "country_name_en": "Estonia", + "country_name_cn": "爱沙尼亚", + "ab": "EE" + }, + { + "country_id": 100057, + "country_code": 251, + "country_name_en": "Ethiopia", + "country_name_cn": "埃塞俄比亚", + "ab": "ET" + }, + { + "country_id": 100058, + "country_code": 679, + "country_name_en": "Fiji", + "country_name_cn": "斐济", + "ab": "FJ" + }, + { + "country_id": 100059, + "country_code": 358, + "country_name_en": "Finland", + "country_name_cn": "芬兰", + "ab": "FI" + }, + { + "country_id": 100060, + "country_code": 33, + "country_name_en": "France", + "country_name_cn": "法国", + "ab": "FR" + }, + { + "country_id": 100061, + "country_code": 594, + "country_name_en": "French Guiana", + "country_name_cn": "法属圭亚那", + "ab": "GF" + }, + { + "country_id": 100062, + "country_code": 241, + "country_name_en": "Gabon", + "country_name_cn": "加蓬", + "ab": "GA" + }, + { + "country_id": 100063, + "country_code": 220, + "country_name_en": "Gambia", + "country_name_cn": "冈比亚", + "ab": "GM" + }, + { + "country_id": 100064, + "country_code": 995, + "country_name_en": "Georgia", + "country_name_cn": "格鲁吉亚", + "ab": "GE" + }, + { + "country_id": 100065, + "country_code": 49, + "country_name_en": "Germany", + "country_name_cn": "德国", + "ab": "DE" + }, + { + "country_id": 100066, + "country_code": 233, + "country_name_en": "Ghana", + "country_name_cn": "加纳", + "ab": "GH" + }, + { + "country_id": 100067, + "country_code": 350, + "country_name_en": "Gibraltar", + "country_name_cn": "直布罗陀", + "ab": "GI" + }, + { + "country_id": 100068, + "country_code": 30, + "country_name_en": "Greece", + "country_name_cn": "希腊", + "ab": "GR" + }, + { + "country_id": 100069, + "country_code": 1809, + "country_name_en": "Grenada", + "country_name_cn": "格林纳达", + "ab": "GD" + }, + { + "country_id": 100070, + "country_code": 1671, + "country_name_en": "Guam", + "country_name_cn": "关岛", + "ab": "GU" + }, + { + "country_id": 100071, + "country_code": 502, + "country_name_en": "Guatemala", + "country_name_cn": "危地马拉", + "ab": "GT" + }, + { + "country_id": 100072, + "country_code": 224, + "country_name_en": "Guinea", + "country_name_cn": "几内亚", + "ab": "GN" + }, + { + "country_id": 100073, + "country_code": 592, + "country_name_en": "Guyana", + "country_name_cn": "圭亚那", + "ab": "GY" + }, + { + "country_id": 100074, + "country_code": 509, + "country_name_en": "Haiti", + "country_name_cn": "海地", + "ab": "HT" + }, + { + "country_id": 100075, + "country_code": 504, + "country_name_en": "Honduras", + "country_name_cn": "洪都拉斯", + "ab": "HN" + }, + { + "country_id": 100076, + "country_code": 852, + "country_name_en": "Hongkong", + "country_name_cn": "香港", + "ab": "HK" + }, + { + "country_id": 100077, + "country_code": 36, + "country_name_en": "Hungary", + "country_name_cn": "匈牙利", + "ab": "HU" + }, + { + "country_id": 100078, + "country_code": 354, + "country_name_en": "Iceland", + "country_name_cn": "冰岛", + "ab": "IS" + }, + { + "country_id": 100079, + "country_code": 91, + "country_name_en": "India", + "country_name_cn": "印度", + "ab": "IN" + }, + { + "country_id": 100080, + "country_code": 62, + "country_name_en": "Indonesia", + "country_name_cn": "印度尼西亚", + "ab": "ID" + }, + { + "country_id": 100081, + "country_code": 98, + "country_name_en": "Iran", + "country_name_cn": "伊朗", + "ab": "IR" + }, + { + "country_id": 100082, + "country_code": 964, + "country_name_en": "Iraq", + "country_name_cn": "伊拉克", + "ab": "IQ" + }, + { + "country_id": 100083, + "country_code": 353, + "country_name_en": "Ireland", + "country_name_cn": "爱尔兰", + "ab": "IE" + }, + { + "country_id": 100084, + "country_code": 972, + "country_name_en": "Israel", + "country_name_cn": "以色列", + "ab": "IL" + }, + { + "country_id": 100085, + "country_code": 39, + "country_name_en": "Italy", + "country_name_cn": "意大利", + "ab": "IT" + }, + { + "country_id": 100086, + "country_code": 225, + "country_name_en": "Ivory Coast", + "country_name_cn": "科特迪瓦", + "ab": "" + }, + { + "country_id": 100087, + "country_code": 1876, + "country_name_en": "Jamaica", + "country_name_cn": "牙买加", + "ab": "JM" + }, + { + "country_id": 100088, + "country_code": 81, + "country_name_en": "Japan", + "country_name_cn": "日本", + "ab": "JP" + }, + { + "country_id": 100089, + "country_code": 962, + "country_name_en": "Jordan", + "country_name_cn": "约旦", + "ab": "JO" + }, + { + "country_id": 100090, + "country_code": 855, + "country_name_en": "Kampuchea (Cambodia )", + "country_name_cn": "柬埔寨", + "ab": "KH" + }, + { + "country_id": 100091, + "country_code": 327, + "country_name_en": "Kazakstan", + "country_name_cn": "哈萨克斯坦", + "ab": "KZ" + }, + { + "country_id": 100092, + "country_code": 254, + "country_name_en": "Kenya", + "country_name_cn": "肯尼亚", + "ab": "KE" + }, + { + "country_id": 100093, + "country_code": 82, + "country_name_en": "Korea", + "country_name_cn": "韩国", + "ab": "KR" + }, + { + "country_id": 100094, + "country_code": 965, + "country_name_en": "Kuwait", + "country_name_cn": "科威特", + "ab": "KW" + }, + { + "country_id": 100095, + "country_code": 331, + "country_name_en": "Kyrgyzstan", + "country_name_cn": "吉尔吉斯坦", + "ab": "KG" + }, + { + "country_id": 100096, + "country_code": 856, + "country_name_en": "Laos", + "country_name_cn": "老挝", + "ab": "LA" + }, + { + "country_id": 100097, + "country_code": 371, + "country_name_en": "Latvia", + "country_name_cn": "拉脱维亚", + "ab": "LV" + }, + { + "country_id": 100098, + "country_code": 961, + "country_name_en": "Lebanon", + "country_name_cn": "黎巴嫩", + "ab": "LB" + }, + { + "country_id": 100099, + "country_code": 266, + "country_name_en": "Lesotho", + "country_name_cn": "莱索托", + "ab": "LS" + }, + { + "country_id": 100100, + "country_code": 231, + "country_name_en": "Liberia", + "country_name_cn": "利比里亚", + "ab": "LR" + }, + { + "country_id": 100101, + "country_code": 218, + "country_name_en": "Libya", + "country_name_cn": "利比亚", + "ab": "LY" + }, + { + "country_id": 100102, + "country_code": 423, + "country_name_en": "Liechtenstein", + "country_name_cn": "列支敦士登", + "ab": "LI" + }, + { + "country_id": 100103, + "country_code": 370, + "country_name_en": "Lithuania", + "country_name_cn": "立陶宛", + "ab": "LT" + }, + { + "country_id": 100104, + "country_code": 352, + "country_name_en": "Luxembourg", + "country_name_cn": "卢森堡", + "ab": "LU" + }, + { + "country_id": 100105, + "country_code": 853, + "country_name_en": "Macao", + "country_name_cn": "澳门", + "ab": "MO" + }, + { + "country_id": 100106, + "country_code": 261, + "country_name_en": "Madagascar", + "country_name_cn": "马达加斯加", + "ab": "MG" + }, + { + "country_id": 100107, + "country_code": 265, + "country_name_en": "Malawi", + "country_name_cn": "马拉维", + "ab": "MW" + }, + { + "country_id": 100108, + "country_code": 60, + "country_name_en": "Malaysia", + "country_name_cn": "马来西亚", + "ab": "MY" + }, + { + "country_id": 100109, + "country_code": 960, + "country_name_en": "Maldives", + "country_name_cn": "马尔代夫", + "ab": "MV" + }, + { + "country_id": 100110, + "country_code": 223, + "country_name_en": "Mali", + "country_name_cn": "马里", + "ab": "ML" + }, + { + "country_id": 100111, + "country_code": 356, + "country_name_en": "Malta", + "country_name_cn": "马耳他", + "ab": "MT" + }, + { + "country_id": 100112, + "country_code": 1670, + "country_name_en": "Mariana Is", + "country_name_cn": "马里亚那群岛", + "ab": "" + }, + { + "country_id": 100113, + "country_code": 596, + "country_name_en": "Martinique", + "country_name_cn": "马提尼克", + "ab": "" + }, + { + "country_id": 100114, + "country_code": 230, + "country_name_en": "Mauritius", + "country_name_cn": "毛里求斯", + "ab": "MU" + }, + { + "country_id": 100115, + "country_code": 52, + "country_name_en": "Mexico", + "country_name_cn": "墨西哥", + "ab": "MX" + }, + { + "country_id": 100116, + "country_code": 373, + "country_name_en": "Moldova, Republic of", + "country_name_cn": "摩尔多瓦", + "ab": "MD" + }, + { + "country_id": 100117, + "country_code": 377, + "country_name_en": "Monaco", + "country_name_cn": "摩纳哥", + "ab": "MC" + }, + { + "country_id": 100118, + "country_code": 976, + "country_name_en": "Mongolia", + "country_name_cn": "蒙古", + "ab": "MN" + }, + { + "country_id": 100119, + "country_code": 1664, + "country_name_en": "Montserrat Is", + "country_name_cn": "蒙特塞拉特岛", + "ab": "MS" + }, + { + "country_id": 100120, + "country_code": 212, + "country_name_en": "Morocco", + "country_name_cn": "摩洛哥", + "ab": "MA" + }, + { + "country_id": 100121, + "country_code": 258, + "country_name_en": "Mozambique", + "country_name_cn": "莫桑比克", + "ab": "MZ" + }, + { + "country_id": 100122, + "country_code": 264, + "country_name_en": "Namibia", + "country_name_cn": "纳米比亚", + "ab": "NA" + }, + { + "country_id": 100123, + "country_code": 674, + "country_name_en": "Nauru", + "country_name_cn": "瑙鲁", + "ab": "NR" + }, + { + "country_id": 100124, + "country_code": 977, + "country_name_en": "Nepal", + "country_name_cn": "尼泊尔", + "ab": "NP" + }, + { + "country_id": 100125, + "country_code": 599, + "country_name_en": "Netheriands Antilles", + "country_name_cn": "荷属安的列斯", + "ab": "" + }, + { + "country_id": 100126, + "country_code": 31, + "country_name_en": "Netherlands", + "country_name_cn": "荷兰", + "ab": "NL" + }, + { + "country_id": 100127, + "country_code": 64, + "country_name_en": "New Zealand", + "country_name_cn": "新西兰", + "ab": "NZ" + }, + { + "country_id": 100128, + "country_code": 505, + "country_name_en": "Nicaragua", + "country_name_cn": "尼加拉瓜", + "ab": "NI" + }, + { + "country_id": 100129, + "country_code": 227, + "country_name_en": "Niger", + "country_name_cn": "尼日尔", + "ab": "NE" + }, + { + "country_id": 100130, + "country_code": 234, + "country_name_en": "Nigeria", + "country_name_cn": "尼日利亚", + "ab": "NG" + }, + { + "country_id": 100131, + "country_code": 850, + "country_name_en": "North Korea", + "country_name_cn": "朝鲜", + "ab": "KP" + }, + { + "country_id": 100132, + "country_code": 47, + "country_name_en": "Norway", + "country_name_cn": "挪威", + "ab": "NO" + }, + { + "country_id": 100133, + "country_code": 968, + "country_name_en": "Oman", + "country_name_cn": "阿曼", + "ab": "OM" + }, + { + "country_id": 100134, + "country_code": 92, + "country_name_en": "Pakistan", + "country_name_cn": "巴基斯坦", + "ab": "PK" + }, + { + "country_id": 100135, + "country_code": 507, + "country_name_en": "Panama", + "country_name_cn": "巴拿马", + "ab": "PA" + }, + { + "country_id": 100136, + "country_code": 675, + "country_name_en": "Papua New Cuinea", + "country_name_cn": "巴布亚新几内亚", + "ab": "PG" + }, + { + "country_id": 100137, + "country_code": 595, + "country_name_en": "Paraguay", + "country_name_cn": "巴拉圭", + "ab": "PY" + }, + { + "country_id": 100138, + "country_code": 51, + "country_name_en": "Peru", + "country_name_cn": "秘鲁", + "ab": "PE" + }, + { + "country_id": 100139, + "country_code": 63, + "country_name_en": "Philippines", + "country_name_cn": "菲律宾", + "ab": "PH" + }, + { + "country_id": 100140, + "country_code": 48, + "country_name_en": "Poland", + "country_name_cn": "波兰", + "ab": "PL" + }, + { + "country_id": 100141, + "country_code": 689, + "country_name_en": "French Polynesia", + "country_name_cn": "法属玻利尼西亚", + "ab": "PF" + }, + { + "country_id": 100142, + "country_code": 351, + "country_name_en": "Portugal", + "country_name_cn": "葡萄牙", + "ab": "PT" + }, + { + "country_id": 100143, + "country_code": 1787, + "country_name_en": "Puerto Rico", + "country_name_cn": "波多黎各", + "ab": "PR" + }, + { + "country_id": 100144, + "country_code": 974, + "country_name_en": "Qatar", + "country_name_cn": "卡塔尔", + "ab": "QA" + }, + { + "country_id": 100145, + "country_code": 262, + "country_name_en": "Reunion", + "country_name_cn": "留尼旺", + "ab": "" + }, + { + "country_id": 100146, + "country_code": 40, + "country_name_en": "Romania", + "country_name_cn": "罗马尼亚", + "ab": "RO" + }, + { + "country_id": 100147, + "country_code": 7, + "country_name_en": "Russia", + "country_name_cn": "俄罗斯", + "ab": "RU" + }, + { + "country_id": 100148, + "country_code": 1758, + "country_name_en": "Saint Lueia", + "country_name_cn": "圣卢西亚", + "ab": "LC" + }, + { + "country_id": 100149, + "country_code": 1784, + "country_name_en": "Saint Vincent", + "country_name_cn": "圣文森特岛", + "ab": "VC" + }, + { + "country_id": 100150, + "country_code": 684, + "country_name_en": "Samoa Eastern", + "country_name_cn": "东萨摩亚(美)", + "ab": "" + }, + { + "country_id": 100151, + "country_code": 685, + "country_name_en": "Samoa Western", + "country_name_cn": "西萨摩亚", + "ab": "" + }, + { + "country_id": 100152, + "country_code": 378, + "country_name_en": "San Marino", + "country_name_cn": "圣马力诺", + "ab": "SM" + }, + { + "country_id": 100153, + "country_code": 239, + "country_name_en": "Sao Tome and Principe", + "country_name_cn": "圣多美和普林西比", + "ab": "ST" + }, + { + "country_id": 100154, + "country_code": 966, + "country_name_en": "Saudi Arabia", + "country_name_cn": "沙特阿拉伯", + "ab": "SA" + }, + { + "country_id": 100155, + "country_code": 221, + "country_name_en": "Senegal", + "country_name_cn": "塞内加尔", + "ab": "SN" + }, + { + "country_id": 100156, + "country_code": 248, + "country_name_en": "Seychelles", + "country_name_cn": "塞舌尔", + "ab": "SC" + }, + { + "country_id": 100157, + "country_code": 232, + "country_name_en": "Sierra Leone", + "country_name_cn": "塞拉利昂", + "ab": "SL" + }, + { + "country_id": 100158, + "country_code": 65, + "country_name_en": "Singapore", + "country_name_cn": "新加坡", + "ab": "SG" + }, + { + "country_id": 100159, + "country_code": 421, + "country_name_en": "Slovakia", + "country_name_cn": "斯洛伐克", + "ab": "SK" + }, + { + "country_id": 100160, + "country_code": 386, + "country_name_en": "Slovenia", + "country_name_cn": "斯洛文尼亚", + "ab": "SI" + }, + { + "country_id": 100161, + "country_code": 677, + "country_name_en": "Solomon Is", + "country_name_cn": "所罗门群岛", + "ab": "SB" + }, + { + "country_id": 100162, + "country_code": 252, + "country_name_en": "Somali", + "country_name_cn": "索马里", + "ab": "SO" + }, + { + "country_id": 100163, + "country_code": 27, + "country_name_en": "South Africa", + "country_name_cn": "南非", + "ab": "ZA" + }, + { + "country_id": 100164, + "country_code": 34, + "country_name_en": "Spain", + "country_name_cn": "西班牙", + "ab": "ES" + }, + { + "country_id": 100165, + "country_code": 94, + "country_name_en": "Sri Lanka", + "country_name_cn": "斯里兰卡", + "ab": "LK" + }, + { + "country_id": 100166, + "country_code": 1758, + "country_name_en": "St.Lucia", + "country_name_cn": "圣卢西亚", + "ab": "LC" + }, + { + "country_id": 100167, + "country_code": 1784, + "country_name_en": "St.Vincent", + "country_name_cn": "圣文森特", + "ab": "VC" + }, + { + "country_id": 100168, + "country_code": 249, + "country_name_en": "Sudan", + "country_name_cn": "苏丹", + "ab": "SD" + }, + { + "country_id": 100169, + "country_code": 597, + "country_name_en": "Suriname", + "country_name_cn": "苏里南", + "ab": "SR" + }, + { + "country_id": 100170, + "country_code": 268, + "country_name_en": "Swaziland", + "country_name_cn": "斯威士兰", + "ab": "SZ" + }, + { + "country_id": 100171, + "country_code": 46, + "country_name_en": "Sweden", + "country_name_cn": "瑞典", + "ab": "SE" + }, + { + "country_id": 100172, + "country_code": 41, + "country_name_en": "Switzerland", + "country_name_cn": "瑞士", + "ab": "CH" + }, + { + "country_id": 100173, + "country_code": 963, + "country_name_en": "Syria", + "country_name_cn": "叙利亚", + "ab": "SY" + }, + { + "country_id": 100174, + "country_code": 886, + "country_name_en": "Taiwan", + "country_name_cn": "台湾省", + "ab": "TW" + }, + { + "country_id": 100175, + "country_code": 992, + "country_name_en": "Tajikstan", + "country_name_cn": "塔吉克斯坦", + "ab": "TJ" + }, + { + "country_id": 100176, + "country_code": 255, + "country_name_en": "Tanzania", + "country_name_cn": "坦桑尼亚", + "ab": "TZ" + }, + { + "country_id": 100177, + "country_code": 66, + "country_name_en": "Thailand", + "country_name_cn": "泰国", + "ab": "TH" + }, + { + "country_id": 100178, + "country_code": 228, + "country_name_en": "Togo", + "country_name_cn": "多哥", + "ab": "TG" + }, + { + "country_id": 100179, + "country_code": 676, + "country_name_en": "Tonga", + "country_name_cn": "汤加", + "ab": "TO" + }, + { + "country_id": 100180, + "country_code": 1809, + "country_name_en": "Trinidad and Tobago", + "country_name_cn": "特立尼达和多巴哥", + "ab": "TT" + }, + { + "country_id": 100181, + "country_code": 216, + "country_name_en": "Tunisia", + "country_name_cn": "突尼斯", + "ab": "TN" + }, + { + "country_id": 100182, + "country_code": 90, + "country_name_en": "Turkey", + "country_name_cn": "土耳其", + "ab": "TR" + }, + { + "country_id": 100183, + "country_code": 993, + "country_name_en": "Turkmenistan", + "country_name_cn": "土库曼斯坦", + "ab": "TM" + }, + { + "country_id": 100184, + "country_code": 256, + "country_name_en": "Uganda", + "country_name_cn": "乌干达", + "ab": "UG" + }, + { + "country_id": 100185, + "country_code": 380, + "country_name_en": "Ukraine", + "country_name_cn": "乌克兰", + "ab": "UA" + }, + { + "country_id": 100186, + "country_code": 971, + "country_name_en": "United Arab Emirates", + "country_name_cn": "阿拉伯联合酋长国", + "ab": "AE" + }, + { + "country_id": 100187, + "country_code": 44, + "country_name_en": "United Kiongdom", + "country_name_cn": "英国", + "ab": "GB" + }, + { + "country_id": 100188, + "country_code": 1, + "country_name_en": "United States of America", + "country_name_cn": "美国", + "ab": "US" + }, + { + "country_id": 100189, + "country_code": 598, + "country_name_en": "Uruguay", + "country_name_cn": "乌拉圭", + "ab": "UY" + }, + { + "country_id": 100190, + "country_code": 233, + "country_name_en": "Uzbekistan", + "country_name_cn": "乌兹别克斯坦", + "ab": "UZ" + }, + { + "country_id": 100191, + "country_code": 58, + "country_name_en": "Venezuela", + "country_name_cn": "委内瑞拉", + "ab": "VE" + }, + { + "country_id": 100192, + "country_code": 84, + "country_name_en": "Vietnam", + "country_name_cn": "越南", + "ab": "VN" + }, + { + "country_id": 100193, + "country_code": 967, + "country_name_en": "Yemen", + "country_name_cn": "也门", + "ab": "YE" + }, + { + "country_id": 100194, + "country_code": 381, + "country_name_en": "Yugoslavia", + "country_name_cn": "南斯拉夫", + "ab": "YU" + }, + { + "country_id": 100195, + "country_code": 263, + "country_name_en": "Zimbabwe", + "country_name_cn": "津巴布韦", + "ab": "ZW" + }, + { + "country_id": 100196, + "country_code": 243, + "country_name_en": "Zaire", + "country_name_cn": "扎伊尔", + "ab": "ZR" + }, + { + "country_id": 100197, + "country_code": 260, + "country_name_en": "Zambia", + "country_name_cn": "赞比亚", + "ab": "ZM" + } +] diff --git a/BTPanel/static/js/crontab.js b/BTPanel/static/js/crontab.js index 648b72ed..74a6b5e7 100644 --- a/BTPanel/static/js/crontab.js +++ b/BTPanel/static/js/crontab.js @@ -1,1402 +1,1508 @@ -var num = 0; -//查看任务日志 -function GetLogs(id){ - layer.msg(lan.public.the_get,{icon:16,time:0,shade: [0.3, '#000']}); - var data='&id='+id - $.post('/crontab?action=GetLogs',data,function(rdata){ - layer.closeAll(); - if(!rdata.status) { - layer.msg(rdata.msg,{icon:2}); - return; - }; - layer.open({ - type:1, - title:lan.crontab.task_log_title, - area: ['700px','490px'], - shadeClose:false, - closeBtn:2, - content:'
    \ -
    \
    -          
    \ - \ - \ -
    \ -
    ', - success: function () { - var log_body = rdata.msg === '' ? 'The current log is empty':rdata.msg,setchmod = $(".setchmod pre"),crontab_log = $('.crontab-log')[0] - setchmod.text(log_body); - crontab_log.scrollTop = crontab_log.scrollHeight; - $('#clearLogs').on('click',function (){ - CloseLogs(id); - }); +var backupListAll = [], siteListAll = [], databaseListAll = [], allDatabases = [],allTables = [], + backuptolist = [{ title: 'Local disk', value: 'localhost' }, + // { title: '阿里云OSS', value: 'alioss' }, + // { title: '腾讯云COS', value: 'txcos' }, + // { title: '七牛云存储', value: 'qiniu' }, + // { title: '华为云存储', value: 'obs' }, + // { title: '百度云存储', value: 'bos' }]; + ]; +var crontab = { + typeTips: { site: 'Backup Site', database: 'Backup Database', logs: 'Cut Log', path: 'Backup Directory' }, + crontabForm: { name: '', type: '', where1: '', hour: '', minute: '', week: '', sType: '', sBody: '', sName: '', backupTo: '', save: '', sBody: '', urladdress: '', save_local: '', notice: '', notice_channel: '' , datab_name : '',tables_name :'' }, + editForm: false, + crontabFormConfig: [{ + label: 'Type of Task', + group: { + type: 'select', + name: 'sType', + width: '180px', + value: 'toShell', + list: [ + { title: 'Shell Script', value: 'toShell' }, + { title: 'Backup Site', value: 'site' }, + { title: 'Backup Database', value: 'database' }, + // { title: '数据库增量备份', value: 'enterpriseBackup' }, + { title: 'Cut Log', value: 'logs' }, + { title: 'Backup Directory', value: 'path' }, + // { title: '木马查杀', value: 'webshell' }, + { title: 'Sync time', value: 'syncTime' }, + { title: 'Free RAM', value: 'rememory' }, + { title: 'Access URL', value: 'toUrl' } + ], + unit: '*Type of task: Shell Script, Backup Site, Backup Database, Cut log, Free RAM, Access URL, Sync time\ + ', + change: function (formData, element, that) { + that.data.type = 'week' //默认类型为每星期 + var config = crontab.crontabsType(arryCopy(crontab.crontabFormConfig), formData, that) + that.$again_render_form(config) + var arry = ['site', 'database', 'logs', 'webshell', 'enterpriseBackup']; + if (arry.indexOf(formData.sType) > -1) { + that.$replace_render_content(3) + setTimeout(function () { + $('[data-name="sName"] li:eq(0)').click() + }, 100) + } + if (formData.sType === 'enterpriseBackup') { + console.log('---') + $('.glyphicon-repeat').on('click',function(){ + that.config.form[6].group.value = bt.get_random(bt.get_random_num(6,10)) + that.$local_refresh('urladdress', that.config.form[6].group) + $('input[name=urladdress]').click() + }) + } } - }); - // setTimeout(function(){ - // $("#crontab-log").text(rdata.msg); - // var div = document.getElementsByClassName('crontab-log')[0] - // div.scrollTop = div.scrollHeight; - // },200) - return false; - }); -} + } + }, { + label: 'Name of Task', + group: { + type: 'text', + name: 'name', + width: '350px', + placeholder: 'Please enter task name' + } + }, { + label: 'Execution cycle', + group: [{ + type: 'select', + name: 'type', + value: 'week', + list: [ + { title: 'Daily', value: 'day' }, + { title: 'N Days', value: 'day-n' }, + { title: 'Hourly', value: 'hour' }, + { title: 'N Hours', value: 'hour-n' }, + { title: 'N Minutes', value: 'minute-n' }, + { title: 'Weekly', value: 'week' }, + { title: 'Monthly', value: 'month' } + ], + change: function (formData, element, that) { + crontab.crontabType(that.config.form, formData) + that.$replace_render_content(2) + } + }, { + type: 'select', + name: 'week', + value: '1', + list: [ + { title: 'Monday', value: '1' }, + { title: 'Tuesday', value: '2' }, + { title: 'Wednesday', value: '3' }, + { title: 'Thursday', value: '4' }, + { title: 'Friday', value: '5' }, + { title: 'Saturday', value: '6' }, + { title: 'Sunday', value: '0' } + ] + }, { + type: 'number', + display: false, + name: 'where1', + 'class': 'group', + width: '70px', + value: '3', + unit: 'Day', + // min: 1, + // max: 31 + }, { + type: 'number', + name: 'hour', + 'class': 'group', + width: '70px', + value: '1', + unit: 'Hour', + // min: 0, + // max: 23 + }, { + type: 'number', + name: 'minute', + 'class': 'group', + width: '70px', + // min: 0, + // max: 59, + value: '30', + unit: 'Minute' + }] + }, { + label: 'Backup Site', + display: false, + group: [{ + type: 'select', + name: 'sName', + width: '150px', + placeholder: 'no site data', + list: siteListAll, + change: function (formData, element, that) { + var nameForm = that.config.form[1] + if (formData.sType === 'enterpriseBackup') { + crontab.getAllTables(formData.datab_name,function(res) { + that.config.form[3].group[3].list = res + that.config.form[3].group[3].display = formData.sName === 'tables' + that.$replace_render_content(3) + var select_data = (formData.sName === 'databases' ? formData.datab_name : (formData.datab_name+'---'+ res[0].value)) + nameForm.group.value = '[Do not delete] database incremental backup[ ' + (formData.sName === 'databases' ? formData.datab_name : (formData.datab_name+'---'+ res[0].value)) + ' ]' + if(!formData.datab_name) nameForm.group.value = '[Do not delete] database incremental backup' + that.$local_refresh('name', nameForm.group) + }) + }else{ + nameForm.group.value = crontab.typeTips[formData.sType] + '[ ' + (formData.sName === 'ALL' ? 'ALL' : formData.sName) + ' ]' + } + that.$local_refresh('name', nameForm.group) + } + }, { + type: 'text', + width: '200px', + name: 'path', + display: false, + icon: { + type: 'glyphicon-folder-open', + event: function (formData, element, that) { + $("#bt_select").one('click', function () { + that.config.form[1].group.value = 'Backup Directory[' + element['path'].val() + ']' + that.$local_refresh('name', that.config.form[1].group) + }) + } + }, + value: bt.get_cookie('sites_path') ? bt.get_cookie('sites_path') : '/www/wwwroot', + placeholder: 'Please select directory' + },{ + label: 'Database', + display: false, + type: 'select', + name: 'datab_name', + width: '150px', + list: allDatabases, + change: function (formData, element, that) { + var nameForm = that.config.form[1] + crontab.getAllTables(formData.datab_name,function (res) { + that.config.form[3].group[3].list = res + that.$replace_render_content(3) + var select_data = (formData.sName === 'databases' ? formData.datab_name : formData.datab_name+'---'+res[0].value) + nameForm.group.value = '[Do not delete] database incremental backup[ ' + (formData.sName === 'databases' ? formData.datab_name : formData.datab_name+'---'+res[0].value) + ' ]' + if(!select_data){nameForm.group.value = '[Do not delete] database incremental backup'} + that.$local_refresh('name', nameForm.group) + }) + } + },{ + type: 'select', + display: false, + label: 'Tables', + name: 'tables_name', + width: '150px', + list: allTables, + change: function (formData, element, that) { + var nameForm = that.config.form[1] + if (formData.sType === 'enterpriseBackup') { + var select_data = (formData.sName === 'databases' ? formData.datab_name : formData.datab_name+'---'+formData.tables_name) + nameForm.group.value = '[Do not delete] database incremental backup[ ' + (formData.sName === 'databases' ? formData.datab_name : formData.datab_name+'---'+formData.tables_name) + ' ]' + if(!select_data) { nameForm.group.value = '[Do not delete] database incremental backup'} + } + that.$local_refresh('name', nameForm.group) + } + } ,{ + type: 'select', + name: 'backupTo', + label: 'Backup to ', + width: '150px', + placeholder: 'No stored information', + value: 'localhost', + list: backupListAll, + change: function (formData, element, that) { + if (that.data.sType!=='enterpriseBackup' && formData.sType !== 'enterpriseBackup') { + that.config.form[3].group[4].value = formData.backupTo; + that.config.form[3].group[5].value = formData.save; + that.config.form[3].group[6].display = formData.backupTo !== "localhost" ? true : false; + switch(formData.sType){ + case 'site': + case 'database': + that.config.form[3].group[0].value = formData.sName + break; + case 'path': + that.config.form[3].group[1].value = formData.path + break; + } + that.$replace_render_content(3) + } + } + }, { + label: 'Keep last', + type: 'number', + name: 'save', + 'class': 'group', + width: '70px', + value: '3', + unit: 'copies' -function getCronData(){ - var laid=layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']}); - $.post('/crontab?action=GetCrontab',"",function(rdata){ - layer.close(laid); - var cbody=""; - if(rdata == []){ - layer.close(laid); - cbody=""+lan.crontab.task_empty+"" - } - else{ - $.post('/crontab?action=GetDataList',{type:'sites'},function(res){ - layer.close(laid); - for (var i = 0; i < rdata.length; i++){ - var s_status = ''+lan.crontab.normal+' '; - var optName = ''; - if(rdata[i].status!=1) s_status = ''+lan.crontab.disable+' '; - for(var j = 0; j < res.orderOpt.length;j++){ - if(rdata[i].backupTo == 'localhost'){ - optName = lan.crontab.local_disk; - }else if(rdata[i].backupTo == res.orderOpt[j].value){ - optName = res.orderOpt[j].name; - }else if(rdata[i].backupTo == ''){ - optName = '' - } - } - var arrs = ['site','database','path']; - if ($.inArray(rdata[i].sType, arrs) == -1) optName = "--"; - cbody += "\ - \ - "+rdata[i].name+"\ - "+s_status+"\ - "+rdata[i].type+"\ - "+rdata[i].cycle+"\ - "+(rdata[i].save?rdata[i].save:'-')+"\ - "+optName+"\ - "+rdata[i].addtime+"\ - \ - "+lan.public.exec+" | \ - "+lan.files.file_menu_edit+" | \ - "+lan.public.log+" | \ - "+lan.public.del+"\ - \ - " + }, { + type: 'checkbox', + name: 'save_local', + display: false, + style: { "margin-top": "7px" }, + value: 1, + title: 'Keep local backup', + event: function (formData, element, that) { + that.config.form[3].group[6].value = !formData.save_local ? '0' : '1'; + } + }] + }, { + label: 'Error notify', + display: false, + group: [{ + type: 'select', + name: 'notice', + value: 0, + list: [ + { title: 'No notice', value: 0 }, + { title: 'Notify on failure', value: 1 } + ], + change: function (formData, element, that) { + var notice_channel_form = that.config.form[4], notice = parseInt(formData.notice) + notice_channel_form.group[1].display = !!notice + notice_channel_form.group[0].value = notice + that.$replace_render_content(4) + + var flag = false; + if (formData.notice !== '0') { + flag = that.config.form[4].group[1].list.length == 0; } - $('#cronbody').html(cbody); - }); - } - }); -} -// 编辑计划任务 -function edit_task_info(id){ - var load = layer.msg(lan.public.the_get,{icon:16,time:0,shade: [0.3, '#000']}); - $.post('/crontab?action=get_crond_find',{id:id},function(rdata){ - layer.closeAll(); - var sTypeName = '',sTypeDom = '',cycleName = '',cycleDom = '',weekName = '',weekDom = '',sNameName ='',sNameDom = '',backupsName = '',backupsDom =''; - obj = { - sBody: { - messageChannelBtnText: '', - channelInitVal: '', - messageChannelDom: '' + that.config.form[8].group.disabled = flag; + that.$local_refresh('submitForm', that.config.form[8].group); + } + }, { + label: 'Notification', + type: 'select', + name: 'notice_channel', + display: false, + width: '100px', + placeholder: 'No config notification', + list: { + url: '/config?action=get_msg_configs', + dataFilter: function (res, that) { + return crontab.pushChannelMessage.getChannelSwitch(res,that.config.form[0].group.value) + }, + success: function (res, that, config, list) { + if(!config.group[1].value && config.group[0].value == 1){ + config.group[1].value = list.length > 0 ? list[0].value : [] + } + if (list.length === 0) { + that.config.form[8].group.disabled = true + that.$local_refresh('submitForm', that.config.form[8].group) + } + } + } + }, { + type: 'link', + 'class': 'mr5', + title: 'Set Notification', + event: function (formData, element, that) { + open_three_channel_auth(); + } + }] + }, { + label: 'Script content', + group: { + type: 'textarea', + name: 'sBody', + style: { + 'width': '500px', + 'min-width': '500px', + 'min-height': '130px', + 'line-height': '22px', + 'padding-top': '10px', + 'resize': 'both' }, - from:{ - id:rdata.id, - name: rdata.name, - type: rdata.type, - where1: rdata.where1, - hour: rdata.where_hour, - minute: rdata.where_minute, - week: rdata.where1, - sType: rdata.sType, - sBody: rdata.sBody == 'undefined' ? '' : rdata.sBody, - sName: rdata.sName, - backupTo: rdata.backupTo, - save: rdata.save, - urladdress: rdata.urladdress, - save_local: rdata.save_local, - notice: rdata.notice, - notice_channel: rdata.notice_channel + placeholder: 'Please enter script content' + } + }, { + label: 'URL address', + display: false, + group: { + type: 'text', + width: '500px', + name: 'urladdress', + value: 'http://', + event: function (formData, element, that) { + if (formData.sType === 'enterpriseBackup') { + $('.glyphicon-repeat').on('click',function(){ + that.config.form[6].group.value = bt.get_random(bt.get_random_num(6,10)) + that.$local_refresh('urladdress', that.config.form[6].group) + $('input[name=urladdress]').click() + }) + } + } + } + }, { + label: 'Tips', + display: false, + group: { + type: 'help', + name: 'webshellTips', + style: { 'margin-top': '6px' }, + list: ['Free RAM of PHP/MySQL/Pure-FTPd/Apache/Nginx, recommended to be executed every midnight!'] + } + }, { + label: '', + group: { + type: 'button', + size: '', + name: 'submitForm', + title: 'Add task', + event: function (formData, element, that) { + formData['save_local'] = that.config.form[3].group[6].value.toString(); + that.submit(formData) + } + } + }], + /** + * @description 计划任务类型解构调整 + * @param {} + * @param {} + * @param {Add} 是否是添加 + */ + + crontabsType: function (config, formData, Add) { + config[4].group[1].name = 'notice_channel'; + config[3].group[4].list = backupListAll; + // config[2].group[0].value = 'week'; + switch (formData.sType) { + case 'toShell': + break; + case 'enterpriseBackup': + config[2].label = 'Backup cycle' + config[2].group[0].display = false + config[2].group[1].display = false + config[2].group[2].display = false + config[2].group[3].display = true + config[2].group[4].display = false + config[6].display = false; + config[3].group[0].list = [{title: 'Database', value: 'databases'},{title: 'Table', value: 'tables'}]; + config[3].label = 'Backup type' + config[3].group[0].placeholder = '' + config[3].group[4].placeholder = '' + config[3].group[4].value = ['localhost'] + config[3].group[4].width = '300px' + config[3].group[2].list = allDatabases + config[3].group[4].list = backuptolist + config[3].group[4].type = 'multipleSelect' + config[3].group[2].display = true; + config[3].group[5].display = false; + config[3].display = true; + config[6].display = true; + config[6].label = 'Compression password' + config[6].group.width = '250px' + config[6].group.unit = 'Note: Please record the compression password, if the compression password is lost, the data cannot be recovered and download' + config[6].group.placeholder = 'Please enter the compression password, which can be empty' + config[6].group.value = '' + config[1].group.disabled = true // 禁用任务名称,不允许修改 + config[5].display = false; + config[4].display = true; + config[7].display = true; + config[7].group.list = '' + config[7].group.unit = 'Tips: 1. The current database does not support SQLServer, MongoDB, Redis, PgSQL backup
    2. Note: Incremental backup temporarily fixes the default backup directory to be: /www/backup
    ' + if (Add) { + config[2].group[0].value = 'hour-n' + config[2].group[3].value = '3' + } + if(bt.get_cookie('ltd_end')<0){ + config[2].group[3].disabled = true + config[3].group[0].disabled = true + config[3].group[2].display = false + config[3].group[4].disabled = true + config[4].group[0].disabled = true + config[6].group.disabled = true + config[8].group.title = 'Upgrade the professional version to use' + } + break; + case 'database': + config[3].group[0].placeholder = 'No database data'; + config[5].display = false; + config[7].display = true; + config[7].group.list = '' + config[7].group.unit = 'The current database does not support SQLServer, MongoDB, Redis, PgSQL backup' + if (Add) { + config[2].group[0].value = 'day' + config[2].group[1].display = false + config[2].group[3].value = '2' + config[2].group[4].value = '30' + } + case 'logs': + if (formData.sType === 'logs') { + if(Add){ + config[2].group[3].value = '0' + config[2].group[4].value = '1' + config[2].group[0].value = 'day' + } + config[2].group[1].display = false + config[3].group[4].display = false + config[3].group[5].value = 180 + } + case 'path': + if (formData.sType === 'path') { + config[1].group.value = 'Backup Directory[' + config[3].group[1].value + ']' + if(Add) { + config[2].group[0].value = 'day' + config[2].group[1].display = false + } + config[3].group[0].display = false + config[3].group[1].display = true + config[3].group[4].list = backupListAll + } + case 'webshell': + if (formData.sType === 'webshell') { + config[3].group[0].unit = '*本次查杀由长亭牧云强力驱动'; + config[3].group[4].display = false + config[3].group[5].display = false + config[3].group[6].display = false + config[4].display = true + config[4].label = '消息通道' + config[4].group[1].name = 'urladdress' + config[4].group[0].display = false + delete config[4].group[1].label + config[4].group[1].display = true + config[5].display = false + } + case 'site': + config[3].group[0].list = siteListAll; + config[3].label = crontab.typeTips[formData.sType] + if (formData.sType !== 'path') config[1].group.disabled = true // 禁用任务名称,不允许修改 + config[3].display = true // 显示备份网站操作模块 + if (formData.sType === 'database' || formData.sType === 'site' || formData.sType === 'path') config[4].display = true + config[5].label = 'Exclusion rule' + config[5].group.placeholder = 'For each rule in a row, the directory cannot end with /, e.g.\ndata/config.php\nstatic/upload\n *.log\n' + break; + case 'syncTime': + config[1].group.value = 'Synchronize server time periodically' + config[5].group.value = 'which ntpdate > /dev/null\n' + + 'if [ $? = 1 ];then\n' + + '\tif [ -f "/etc/redhat-release" ];then\n' + + '\t\tyum install -y ntpdate\n' + + '\telse\n' + + '\t\tapt-get install -y ntpdate\n' + + '\tfi\n' + + 'fi\n' + + 'echo "|-Trying to get from 1.pool.ntp.org Sync time..";\n' + + 'ntpdate -u 1.pool.ntp.org\n' + + 'if [ $? = 1 ];then\n' + + '\techo "|-Trying to get from 0.pool.ntp.org Sync time..";\n' + + '\tntpdate -u 0.pool.ntp.org\n' + + 'fi\n' + + 'if [ $? = 1 ];then\n' + + '\techo "|-Trying to get from 2.pool.ntp.org Sync time..";\n' + + '\tntpdate -u 2.pool.ntp.org\n' + + 'fi\n' + + 'if [ $? = 1 ];then\n' + + '\techo "|-Trying to get from time.cloudflare.com Sync time..";\n' + + '\tntpdate -u time.cloudflare.com\n' + + 'fi\n' + + 'echo "|-Trying to write current system time to hardware..";\n' + + 'hwclock -w\n' + + 'date\n' + + 'echo "|-Time synchronization complete!";' + break; + case 'rememory': + config[1].group.value = 'Free RAM' + config[5].display = false + config[7].display = true + break; + case 'toUrl': + config[5].display = false + config[6].display = true + break; + } + if (formData.sType === 'database') config[3].group[0].list = databaseListAll; + if (Add && (formData.sType === 'database' || formData.sType === 'logs' || formData.sType === 'site')) { + config[3].group[0].value = 'ALL'; + } + config[0].group.value = formData.sType + return config +}, + + /** + * @description 计划任务类型解构调整 + */ + crontabType: function (config, formData) { + var formConfig = config[2]; + switch (formData.type) { + case 'day-n': + case 'month': + case 'day': + formConfig.group[1].display = false + $.extend(formConfig.group[2], { + display: formData.type !== 'day', + unit: formData.type === 'day-n' ? 'Day' : 'Day' + }) + formConfig.group[3].display = true + break; + case 'hour-n': + case 'hour': + case 'minute-n': + formConfig.group[1].display = false + formConfig.group[2].display = false + formConfig.group[3].display = formData.type === 'hour-n' + formConfig.group[4].value = formData.type === 'minute-n' ? 3 : 30 + break; + case 'week': + formConfig.group[1].display = true + formConfig.group[2].display = false + formConfig.group[3].display = true + break; + + } + var num = formData.sType == 'logs' ? 0 : 1; + var hour = formData.hour ? formData.hour : num; + var minute = formData.minute ? formData.minute : 30; + formConfig.group[3].value = parseInt(hour).toString(); + formConfig.group[4].value = parseInt(minute).toString() + formConfig.group[0].value = formData.type; + return config; + }, + /** + * @description 添加计划任务表单 + */ + addCrontabForm: function () { + var _that = this + return bt_tools.form({ + el: '#crontabForm', + 'class': 'crontab_form', + form: arryCopy(crontab.crontabFormConfig), + submit: function (formData) { + var form = $.extend(true, {}, _that.crontabForm), _where1 = $('input[name=where1]'), _hour = $('input[name=hour]'), _minute = $('input[name=minute]'); + $.extend(form, formData) + if (form.name === '') { + bt.msg({ status: false, msg: 'Task name cannot be empty!' }) + return false + } + if (_where1.length > 0) { + if (_where1.val() > 31 || _where1.val() < 1 || _where1.val() == '') { + _where1.focus(); + layer.msg('Please enter the correct cycle range [1-31]', { icon: 2 }); + return false; + } + } + if (_hour.length > 0) { + if (_hour.val() > 23 || _hour.val() < 0 || _hour.val() == '') { + _hour.focus(); + layer.msg('Please enter the correct cycle range [0-23]', { icon: 2 }); + return false; + } + } + if (_minute.length > 0) { + if (_minute.val() > 59 || _minute.val() < 0 || _minute.val() == '') { + _minute.focus(); + layer.msg('Please enter the correct cycle range [0-59]', { icon: 2 }); + return false; + } + } + switch (form.type) { + case "minute-n": + form.where1 = form.minute; + form.minute = ''; + if(form.where1 < 1) return bt.msg({ status: false, msg: 'Minute cannot be less than 1!' }) + break; + case "hour-n": + form.where1 = form.hour; + form.hour = ''; + if(form.minute <= 0 && form.where1 <= 0) return bt.msg({ status: false, msg: 'Hour and minute cannot be less than 1 at the same time!' }) + break; + // 天/日默认最小为1 + } + switch (form.sType) { + case 'syncTime': + if (form.sType === 'syncTime') form.sType = 'toShell' + case 'toShell': + if (form.sBody === '') { + bt.msg({ status: false, msg: 'Script content cannot be empty!' }) + return false + } + break; + case 'path': + form.sName = form.path + delete form.path + if (form.sName === '') { + bt.msg({ status: false, msg: 'Backup directory cannot be empty!' }) + return false + } + break; + case 'toUrl': + if (!bt.check_url(form.urladdress)) { + layer.msg(lan.crontab.input_url_err, { icon: 2 }); + $('#crontabForm input[name=urladdress]').focus(); + return false; + } + break; + case 'enterpriseBackup': + if (form.hour < 1) { + layer.msg('The backup cycle should be greater than 0', { icon: 2 }); + $('#crontabForm input[name=hour]').focus(); + return false; + } + break; + } + if (form.sType == "site" || form.sType == "database" || form.sType == "path" || form.sType == "logs") { + if (Number(form.save) < 1 || form.save == '') { + return bt.msg({status: false, msg: 'Keep latest cannot be less than 1!'}); + } + } + var url = '/crontab?action=AddCrontab',params = form + if (form.sType == "enterpriseBackup") { + var multipleValues = $('select[name=backupTo]').val() + if(multipleValues == null) return layer.msg('Please select at least one backup type') + url = 'project/binlog/add_mysqlbinlog_backup_setting' + params = { + datab_name : form.datab_name, + backup_type : form.sName, + zip_password : form.urladdress, + cron_type : 'hour-n', + backup_cycle : form.hour, + upload_localhost : multipleValues.indexOf('localhost') > -1 ? 'localhost' : '', + upload_alioss : multipleValues.indexOf('alioss') > -1 ? 'alioss' : '', + upload_txcos : multipleValues.indexOf('txcos') > -1 ? 'txcos' : '', + upload_qiniu : multipleValues.indexOf('qiniu') > -1 ? 'qiniu' : '', + upload_obs : multipleValues.indexOf('obs') > -1 ? 'obs' : '', + upload_bos : multipleValues.indexOf('bos') > -1 ? 'bos' : '', + notice : form.notice, + notice_channel : form.notice_channel, + } + if(params.backup_type == 'tables') { + params['table_name'] = form.tables_name + if(form.tables_name == '') return layer.msg("There is no table in the current database and cannot be added") + } + } + if(bt.get_cookie('ltd_end') < 0 && form.sType === 'enterpriseBackup'){ + $.post("plugin?action=get_soft_find", { + sName: 'enterprise_backup' + }, function (rdata) { + rdata.description = ['快速恢复数据','支持数据安全保护','支持增量备份','支持差异备份'] + rdata.pluginName = '企业增量备份' + rdata.ps = '指定数据库或指定表增量备份,支持InnoDB和MyISAM两种存储引擎,可增量备份至服务器磁盘、阿里云OSS、腾讯云COS、七牛云存储、华为云存储、百度云存储' + rdata.imgSrc='https://www.bt.cn/Public/new/plugin/introduce/database/backup.png' + product_recommend.recommend_product_view(rdata,{imgArea: ['890px', '620px']},'ltd',53,'ltd') + }) + return + }else{ + bt_tools.send({ + url: url, + data: params + }, function (res) { + _that.addCrontabForm.data = {} + _that.addCrontabForm.$again_render_form(_that.crontabFormConfig) + _that.crontabTabel.$refresh_table_list(true) + bt_tools.msg(res) + }, 'Add Cron Job'); + } + + } + }) + }, + /** + * @description 获取所有数据库名 + */ + getAllDatabases: function (callback){ + $.post('project/binlog/get_databases', function (res) { + allDatabases = [] + if (res.length == 0) { + allDatabases = [{title:'Current no database',value:''}] + }else{ + for (let i = 0; i < res.length; i++) { + allDatabases.push({title:res[i].name,value:res[i].name}) + } + } + if (callback) callback(res) + }) + }, + /** + * @description 取指定数据库的所有表名 + * @param {object} param 参数对象 + * @param {function} callback 回调函数 + */ + getAllTables: function (param, callback) { + $.post('project/binlog/get_tables', {db_name: param} , function (res) { + var data = [],allTables = [] + for (let i = 0; i < res.length; i++) { + data.push({title:res[i].name,value:res[i].name}) + } + if (data.length == 0) { + allTables = [{title:'Current database has no tables',value:''}] + }else{ + allTables = data + } + if (callback) callback(allTables) + }) + }, + /** + * @description 获取计划任务存储列表 + * @param {function} callback 回调函数 + */ + getDataList: function (type, callback) { + if ($.type(type) === 'function') callback = type, type = 'sites' + bt_tools.send({ + url: '/crontab?action=GetDataList', + data: { type: type } + }, function (res) { + var backupList = [{ title: 'Local disk', value: 'localhost' }]; + for (var i = 0; i < res.orderOpt.length; i++) { + var item = res.orderOpt[i] + backupList.push({ title: item.name, value: item.value }) + } + backupListAll = backupList + var siteList = [{ title: 'ALL', value: 'ALL' }]; + for (var i = 0; i < res.data.length; i++) { + var item = res.data[i] + siteList.push({ title: item.name + ' [ ' + item.ps + ' ]', value: item.name }); + } + if (siteList.length === 1) siteList = [] + if (type === 'sites') { + siteListAll = siteList + } else { + databaseListAll = siteList + } + if (callback) callback(res) + }, 'Getting storage configuration'); + }, + /** + * @description 删除计划任务 + * @param {object} param 参数对象 + * @param {function} callback 回调函数 + */ + delCrontab: function (param, callback) { + bt_tools.send({ + url: '/crontab?action=DelCrontab', + data: { id: param.id } + }, function (res) { + bt.msg(res) + if (res.status && callback) callback(res) + }, 'Delete cron task'); + }, + /** + * @description 执行计划任务 + * @param {object} param 参数对象 + * @param {function} callback 回调函数 + */ + startCrontabTask: function (param, callback) { + bt_tools.send({ + url: '/crontab?action=StartTask', + data: { id: param.id } + }, function (res) { + bt.msg(res) + if (res.status && callback) callback(res) + }, 'Execute cron task'); + }, + /** + * @description 获取计划任务执行日志 + * @param {object} param 参数对象 + * @param {function} callback 回调函数 + */ + getCrontabLogs: function (param, callback) { + bt_tools.send({ + url: '/crontab?action=GetLogs', + data: { id: param.id } + }, function (res) { + if (res.status) { + if (callback) callback(res) + } else { + bt.msg(res) + } + }, 'Getting execute log'); + }, + /** + * @description 获取计划任务执行日志 + * @param {object} param 参数对象 + * @param {function} callback 回调函数 + */ + clearCrontabLogs: function (param, callback) { + bt_tools.send({ + url: '/crontab?action=DelLogs', + data: { id: param.id } + }, function (res) { + bt.msg(res) + if (res.status && callback) callback(res) + }, 'clear execute log'); + }, + /** + * @description 获取计划任务执行状态 + * @param {object} param 参数对象 + * @param {function} callback 回调函数 + */ + setCrontabStatus: function (param, callback) { + bt_tools.send({ + url: '/crontab?action=set_cron_status', + data: { id: param.id } + }, function (res) { + bt.msg(res) + if (res.status && callback) callback(res) + }, 'Set task status'); + }, + /** + * @description 计划任务表格 + */ + crontabTabel: function () { + var _that = this + return bt_tools.table({ + el: '#crontabTabel', + url: '/crontab?action=GetCrontab', + minWidth: '1000px', + autoHeight: true, + 'default': "Cron task list is empty", //数据为空时的默认提示 + height: 300, + dataFilter: function (res) { + return { data: res }; }, - sTypeArray:[['toShell',lan.crontab.shell],['site',lan.crontab.site_bak],['database',lan.crontab.db_bak],['logs',lan.crontab.log_split],['path',lan.crontab.dir_bak],['rememory',lan.crontab.mem_release],['toUrl',lan.crontab.get_url]], - cycleArray:[['day',lan.crontab.daily],['day-n',lan.crontab.n_day],['hour',lan.crontab.hourly],['hour-n',lan.crontab.n_hour],['minute-n',lan.crontab.n_min],['week',lan.crontab.weekly],['month',lan.crontab.monthly]], - weekArray:[[1,lan.crontab.TZZ1],[2,lan.crontab.TZZ2],[3,lan.crontab.TZZ3],[4,lan.crontab.TZZ4],[5,lan.crontab.TZZ5],[6,lan.crontab.TZZ6],[0,lan.crontab.TZZ7]], - sNameArray:[], - backupsArray:[], - create:function(callback){ - for(var i = 0; i '+ obj['sTypeArray'][i][1] +''; - } - for(var i = 0; i '+ obj['cycleArray'][i][1] +''; - } - for(var i = 0; i '+ obj['weekArray'][i][1] +''; - } - if(obj.from.notice_channel == 'telegram') { - obj.sBody.title = 'Telegram' - }else if(obj.from.notice_channel == 'mail') { - obj.sBody.title = 'Email' - }else if(obj.from.notice_channel == 'telegram,mail') { - obj.sBody.title = 'All' - } else { - obj.sBody.title = 'No Data' - } - if(obj.from.sType == 'site' || obj.from.sType == 'database' || obj.from.sType == 'path' || obj.from.sType == 'logs'){ - $.post('/crontab?action=GetDataList',{type:obj.from.sType == 'database'?'databases':'sites'},function(rdata){ - obj.sNameArray = rdata.data; - obj.sNameArray.unshift({name:'ALL',ps:lan.crontab.all}); - obj.backupsArray = rdata.orderOpt; - obj.backupsArray.unshift({name:lan.crontab.server_disk,value:'localhost'}); - for(var i = 0; i '+ obj['sNameArray'][i]['ps'] +''; - } - for(var i = 0; i '+ obj['backupsArray'][i]['name'] +''; - } - if(obj.from.sType == 'webshell'){ - edit_message_channel(obj.from.urladdress) - } - if(obj.from.sType == 'site' || obj.from.sType == 'database' || obj.from.sType == 'path') { - $.post('/config?action=get_settings2',{type: 'sites'},function(rdata){ - if(rdata.user_mail.user_name && rdata.telegram.setup) { - obj.sBody.messageChannelBtnText = 'All' - obj.sBody.channelInitVal= 'user_name,telegram' - obj.sBody.messageChannelDom = '
  • All
  • Telegram
  • Email
  • ' - } else if(!rdata.user_mail.user_name && !rdata.telegram.setup){ - obj.sBody.messageChannelBtnText = 'No Data' - obj.sBody.channelInitVal= '' - obj.sBody.messageChannelDom += '
  • No Data
  • ' - } else if(rdata.telegram.setup) { - obj.sBody.messageChannelBtnText = 'Telegram' - obj.sBody.channelInitVal= 'telegram' - obj.sBody.messageChannelDom += '
  • Telegram
  • ' - } else if(rdata.user_mail.user_name) { - obj.sBody.messageChannelBtnText = 'Email' - obj.sBody.channelInitVal= 'mail' - obj.sBody.messageChannelDom += '
  • Email
  • ' - } - layer.close(load); - callback(); + column: [ + { type: 'checkbox', 'class': '', width: 20 }, + { + fid: 'name', + title: "Tasks Name" + }, + { + fid: 'status', + title: "Status", + width: 80, + config: { + icon: true, + list: [ + [1, 'Normal', 'bt_success', 'glyphicon-play'], + [0, 'Disable', 'bt_danger', 'glyphicon-pause'] + ] + }, + type: 'status', + event: function (row, index, ev, key, that) { + bt.confirm({ + title: 'Set task status', + msg: parseInt(row.status) ? 'The cron job will not continue to run after suspended. Are you sure to suspend this cron job?' : 'The cron job deactivated, are sure to enable this cron job?' + }, function () { + _that.setCrontabStatus(row, function () { + that.$refresh_table_list(true) }) + }) + } + }, + // { + // fid: 'type', + // title: "周期", + // width: 120 + // }, + { + fid: 'cycle', + title: "Time of Executing\t", + template: function (row, index) { + if (row.sType == "enterpriseBackup") { + return 'Execute every '+row.where1+' hours' + } + return ''+ row.cycle +'' + } + }, + //aapanel部分插件还没有更新导致上传到插件存储的无法查看保存数量先注释 + // { + // fid: 'save', + // title: "Save number", + // template: function (row) { + // if(typeof row.sBody == 'undefined' || row.sBody == null) return '' + (row.save > 0 ? +row.save + ' copies' : '-') + '' + // if(row.sType == 'enterpriseBackup' || row.sType == 'logs'|| row.sBody.indexOf('run_log_split.py') !=-1) return '' + (row.save > 0 ? +row.save + ' copies' : '-') + '' + // return '
    ' + (row.save > 0 ? +row.save + ' copies' : '-') + ' '+(row.save > 0 ? '[View]' : '')+'
    ' + // } + // }, + { + fid: 'backupTo', + title: "Backup to", + width: 170, + template: function (row, index) { + if (row.sType == "enterpriseBackup") { + var arry = [],arry1 = [] + arry = row.backupTo.split("|") + for (var i = 0; i < arry.length; i++) { + for (var j = 0; j < backuptolist.length; j++) { + if (arry[i] == backuptolist[j].value) { + arry1.push(backuptolist[j].title) + } + } + } + return '' + arry1 + '' } else { - layer.close(load); - callback(); + for (var i = 0; i < backupListAll.length; i++) { + var item = backupListAll[i] + if (item.value === row.backupTo) { + if (row.sType === 'toShell') return '--'; + return '' + item.title + '' + } + } + return '--' } - }); - } else { - layer.close(load); - callback(); - } - } - }; - obj.create(function(){ - layer.open({ - type: 1, - title: lan.crontab.crontab_edit + '-[' + rdata.name + ']', - area: '900px', - skin: 'layer-create-content', - shadeClose: false, - closeBtn: 2, - content: '\ -
    \ -
    \ - ' + lan.crontab.task_type + '\ - \ -
    \ -
    \ - '+lan.crontab.task_name+'\ -
    \ -
    \ -
    \ - '+lan.crontab.exec_cycle+'\ - \ -
    \ - \ -
    \ - \ - \ - \ - ' + lan.crontab.sun + '\ -
    \ -
    \ - \ - \ - \ - ' + lan.crontab.hour1 + '\ -
    \ -
    \ - \ - \ - \ - ' + lan.crontab.minute1 + '\ -
    \ -
    \ -
    \ -
    \ - ' + sTypeName + '\ -
    \ - \ -
    \ -
    \ - \ -
    \ -
    \ -
    ' + lan.crontab.bakup_to + '
    \ - \ -
    ' + lan.crontab.keep_update + '
    \ -
    \ - \ - \ - \ - ' + lan.crontab.copies + '\ -
    \ -
    \ - \ - \ - Keep local backup\ -
    \ -
    \ -
    \ -
    \ - Backup reminder\ -
    \ - \ -
    notification
    \ - \ -
    \ -
    \ -
    \ - '+ (obj.from.sType == "toShell" ?'Script content':'Exclusion rule')+'\ -
    \ -
    \ -
    \ - '+lan.crontab.tips+'\ -
    '+lan.crontab.tips_content+'
    \ -
    \ -
    \ - '+lan.crontab.url_address+'\ -
    \ -
    \ -
    \ -
    '+lan.crontab.edit_save+'
    \ -
    \ -
    \ - Scan site\ - \ -

    \ -

    Message channel
    \ - \ -

    \ -
    \ -
    ' + lan.crontab.edit_save + '
    \ -
    \ -
    \ -
    \ - ', - success: function () { - getselectnoticename(); - if(obj.from.sType == 'toShell'){ - $('.site_list').hide(); - }else if(obj.from.sType == 'rememory'){ - $('.site_list').hide(); - }else if( obj.from.sType == 'toUrl'){ - $('.site_list').hide(); - }else if( obj.from.sType == 'webshell'){ - $('.site_list').hide(); - }else{ - $('.site_list').show(); } - - $('.sName_create').blur(function () { - obj.from.name = $(this).val(); - }); - $('.where1_create').blur(function () { - obj.from.where1 = $(this).val(); - }); - - $('.hour_create').blur(function () { - obj.from.hour = $(this).val(); - }); - - $('.minute_create').blur(function () { - obj.from.minute = $(this).val(); - }); - - $('.save_create').blur(function () { - obj.from.save = $(this).val(); - }); - - $('.sBody_create').blur(function () { - obj.from.sBody = $(this).val(); - }); - $('.url_create').blur(function () { - obj.from.urladdress = $(this).val(); - }); - - $('[aria-labelledby="cycle"] a').unbind().click(function () { - $('.cycle_btn').find('b').attr('val',$(this).attr('value')).html($(this).html()); - var type = $(this).attr('value'); - switch(type){ - case 'day': - $('.week_btn').hide(); - $('.where1_input').hide(); - $('.hour_input').show().find('input').val('1'); - $('.minute_input').show().find('input').val('30'); - obj.from.week = ''; - obj.from.type = ''; - obj.from.hour = 1; - obj.from.minute = 30; - break; - case 'day-n': - $('.week_btn').hide(); - $('.where1_input').show().find('input').val('1'); - $('.hour_input').show().find('input').val('1'); - $('.minute_input').show().find('input').val('30'); - obj.from.week = ''; - obj.from.where1 = 1; - obj.from.hour = 1; - obj.from.minute = 30; - break; - case 'hour': - $('.week_btn').hide(); - $('.where1_input').hide(); - $('.hour_input').hide(); - $('.minute_input').show().find('input').val('30'); - obj.from.week = ''; - obj.from.where1 = ''; - obj.from.hour = ''; - obj.from.minute = 30; - break; - case 'hour-n': - $('.week_btn').hide(); - $('.where1_input').hide(); - $('.hour_input').show().find('input').val('1'); - $('.minute_input').show().find('input').val('30'); - obj.from.week = ''; - obj.from.where1 = ''; - obj.from.hour = 1; - obj.from.minute = 30; - break; - case 'minute-n': - $('.week_btn').hide(); - $('.where1_input').hide(); - $('.hour_input').hide(); - $('.minute_input').show(); - obj.from.week = ''; - obj.from.where1 = ''; - obj.from.hour = ''; - obj.from.minute = 30; - break; - case 'week': - $('.week_btn').show(); - $('.where1_input').hide(); - $('.hour_input').show(); - $('.minute_input').show(); - obj.from.week = 1; - obj.from.where1 = ''; - obj.from.hour = 1; - obj.from.minute = 30; - break; - case 'month': - $('.week_btn').hide(); - $('.where1_input').show(); - $('.hour_input').show(); - $('.minute_input').show(); - obj.from.week = ''; - obj.from.where1 = 1; - obj.from.hour = 1; - obj.from.minute = 30; - break; + }, { + fid: 'addtime', + title: 'Last execution time', + }, + { + title: "Operation", + + type: 'group', + align: 'right', + group: [{ + title: 'Execute', + event: function (row, index, ev, key, that) { + _that.startCrontabTask(row, function (res) { + that.$refresh_table_list(true); + if(res.status) { + setTimeout(function () { + layer.closeAll() + $('#crontabTabel .table tbody tr:eq('+ index +')').find('[title="Log"]').click() + }, 1000) + } + }) } - obj.from.type = $(this).attr('value'); - }); - - $('[aria-labelledby="week"] a').unbind().click(function () { - $('.week_btn').find('b').attr('val',$(this).attr('value')).html($(this).html()); - obj.from.week = $(this).attr('value'); - }); - - $('[aria-labelledby="backupTo"] a').unbind().click(function () { - $('.backup_btn').find('b').attr('val',$(this).attr('value')).html($(this).html()); - obj.from.backupTo = $(this).attr('value'); - }); - $('.plan-submits').unbind().click(function(){ - if(obj.from.type == 'hour-n'){ - obj.from.where1 = obj.from.hour; - obj.from.hour = ''; - }else if(obj.from.type == 'minute-n'){ - obj.from.where1 = obj.from.minute; - obj.from.minute = ''; - }else if(obj.from.sType == 'webshell'){ - obj.from.urladdress = $(".message_start input:checked").val() + }, { + title: 'Edit', + event: function (row, index, ev, key, that) { + var arry = [],db_result,t_result + arry = row.urladdress.split("|") + if(row.sType === 'enterpriseBackup'){ + crontab.getAllDatabases(function (rdata) { + crontab.getAllTables(arry[0],function(res) { + db_result = rdata.some(function(item){ + if (item.name === arry[0]) { + return true + } + }) + if(arry[1] !== ''){ + t_result = res.some(function(item){ + if (item.value === arry[1]) { + return true + } + }) + } + edit(res) + }) + }) + }else{ + edit() + } + function edit(table_list) { + layer.open({ + type: 1, + title: 'Edit Cron task -[' + row.name + ']', + area: row.sType != "enterpriseBackup" ? '990px':'1140px', + skin: 'layer-create-content', + shadeClose: false, + closeBtn: 2, + content: '
    ', + success: function (layers, indexs) { + bt_tools.send({ + url: '/crontab?action=get_crond_find', + data: { id: row.id } + }, function (rdata) { + var formConfig = arryCopy(crontab.crontabFormConfig), + form = $.extend(true, {}, _that.crontabForm), + cycle = {}; + for (var keys in form) { + if (form.hasOwnProperty.call(form, keys)) { + form[keys] = typeof rdata[keys] === "undefined" ? '' : rdata[keys] + } + } + crontab.crontabType(formConfig, form) + crontab.crontabsType(formConfig, form) + switch (rdata.type) { + case 'day': + cycle = { where1: '', hour: rdata.where_hour, minute: rdata.where_minute } + break; + case 'day-n': + cycle = { where1: rdata.where1, hour: rdata.where_hour, minute: rdata.where_minute } + break; + case 'hour': + cycle = { where1: rdata.where1, hour: rdata.where_hour, minute: rdata.where_minute } + break; + case 'hour-n': + cycle = { where1: rdata.where1, hour: rdata.where1, minute: rdata.where_minute } + break; + case 'minute-n': + cycle = { where1: rdata.where1, hour: '', minute: rdata.where1 } + break; + case 'week': + formConfig[2].group[1].value = rdata.where1 + cycle = { where1: '', week: rdata.where1, hour: rdata.where_hour, minute: rdata.where_minute } + break; + case 'month': + cycle = { where1: rdata.where1, where: '', hour: rdata.where_hour, minute: rdata.where_minute } + break; + } + + if (rdata.sType !== 'enterpriseBackup') { + formConfig[3].group[4].value = rdata.backupTo; + formConfig[3].group[6].display = (rdata.backupTo != "" && rdata.backupTo != 'localhost'); + formConfig[3].group[6].value = rdata.save_local; + } + formConfig[4].group[0].value = rdata.notice; + formConfig[4].group[1].display = rdata.sType == 'webshell' ? true : !!rdata.notice; //单独判断是否为木马查杀 + if (formConfig[4].group[1].display) { + formConfig[4].group[1].display = true; + formConfig[4].group[1].value = (rdata.sType == 'webshell' ? rdata.urladdress : (rdata.notice_channel === '' ? first : rdata.notice_channel)) + } + $.extend(form, cycle, { id: rdata.id }) + + + + switch (rdata.sType) { + case 'logs': + case 'path': + form.path = rdata.sName + formConfig[3].group[1].disabled = true + break + case 'enterpriseBackup': + formConfig[3].group[2].value = arry[0] + formConfig[3].group[2].disabled = true + if(arry[1] !== ''){ + // formConfig[3].group[3].list = [{title:arry[1],value:arry[1]}] + formConfig[3].group[3].list = table_list + formConfig[3].group[3].value = arry[1] + formConfig[3].group[3].disabled = true + formConfig[3].group[3].display = true + } + if (!t_result) { + formConfig[3].group[3].placeholder = 'Table does not exist' + var none_db = formConfig[3].group[3].list.some(function(item){ + if (item.value === '') { + return true + } + }) + if (none_db) formConfig[3].group[3].list = [] + } + if (!db_result) { + formConfig[3].group[2].placeholder = 'Database does not exist' + formConfig[3].group[3].placeholder = 'Table does not exist' + formConfig[3].group[3].list = [] + } + formConfig[3].group[1].disabled = true + formConfig[6].display = false + var backT = rdata.backupTo.split('|'), backupTolist = [] + for (var i = 0; i < backT.length; i++) { + if (backT[i] != '') { + backupTolist.push(backT[i]) + } + } + formConfig[3].group[4].value = backupTolist + break; + case 'toShell': + if(rdata.save){ + formConfig[2].group[0].disabled = true + if(rdata.type === 'minute-n'){ + formConfig[2].group[4].disabled = true + } + formConfig[3].group[5].value = rdata.save + for (var i = 0; i < formConfig[3].group.length; i++) { + if(i === 5) { + delete formConfig[3].group[i]['label'] + formConfig[3].group[i].display = true + }else{ + formConfig[3].group[i].display = false + } + } + formConfig[3].label = 'Keep last' + formConfig[3].display = true + } + break; + } + formConfig[0].group.disabled = true + formConfig[1].group.disabled = true + formConfig[3].group[0].disabled = true + formConfig[8].group.title = 'Save' + var screen = ['site','database','logs','path','webshell'] + if(screen.indexOf(form.sType) > -1){ + if (form.sName === 'ALL') { + form.name = form.name.replace(/\[(.*)]/, '[ ALL ]'); + } else { + form.name = form.name.replace(/\[(.*)]/, '[ ' + form.sName + ' ]'); + } + } + + delete formConfig[0].group.unit + + bt_tools.form({ + el: '#editCrontabForm', + 'class': 'crontab_form', + form: formConfig, + data: form, + submit: function (formData) { + var submitForm = $.extend(true, {}, _that.crontabForm, formData, { + id: rdata.id, + sType: rdata.sType + }) + if (submitForm.name === '') { + bt.msg({ status: false, msg: 'Task name cannot be empty!' }) + return false + } + switch (submitForm.sType) { + case 'syncTime': + if (submitForm.sType === 'syncTime') submitForm.sType = 'toShell' + case 'toShell': + if (submitForm.sBody === '') { + bt.msg({ status: false, msg: 'Script content cannot be empty!' }) + return false + } + if(rdata.save !== ''){ + submitForm.type = rdata.type + } + break; + case 'path': + submitForm.sName = submitForm.path + delete submitForm.path + if (submitForm.sName === '') { + bt.msg({ status: false, msg: 'Backup directory cannot be empty!' }) + return false + } + break; + case 'toUrl': + if (!bt.check_url(submitForm.urladdress)) { + layer.msg(lan.crontab.input_url_err, { icon: 2 }); + $('#editCrontabForm input[name=urladdress]').focus(); + return false; + } + break; + case 'enterpriseBackup': + if (submitForm.hour == '') return bt.msg({ status: false, msg: 'Backup cycle cannot be empty!' }) + if (submitForm.hour < 0) return + break; + } + + var hour = parseInt(submitForm.hour), minute = parseInt(submitForm.minute), where1 = parseInt(submitForm.where1) + + switch (submitForm.type) { + case 'hour': + case 'minute-n': + if (minute < 0 || minute > 59 || isNaN(minute)) return bt.msg({ status: false, msg: 'Please enter the correct minute range 0-59 minutes' }) + if (submitForm.type === 'minute-n') { + submitForm.where1 = submitForm.minute + submitForm.minute = '' + if(submitForm.where1 < 1) return bt.msg({ status: false, msg: 'Minute cannot be less than 1!' }) + } + break; + case 'day-n': + case 'month': + if (where1 < 1 || where1 > 31 || isNaN(where1)) return bt.msg({ status: false, msg: 'Please enter the correct number of days 1-31 days' }) + case 'week': + case 'day': + case 'hour-n': + if (hour < 0 || hour > 23 || isNaN(hour)) return bt.msg({ status: false, msg: 'Please enter the hour range 0-23 hours' }) + if (minute < 0 || minute > 59 || isNaN(minute)) return bt.msg({ status: false, msg: 'Please enter the correct minute range 0-59 minutes' }) + if (submitForm.type === 'hour-n') { + submitForm.where1 = submitForm.hour + submitForm.hour = '' + if(submitForm.minute <= 0 && submitForm.where1 <= 0) return bt.msg({ status: false, msg: 'Hour and minute cannot be less than 1 at the same time!' }) + } + break; + } + if (submitForm.sType == "site" || submitForm.sType == "database" || submitForm.sType == "path" || submitForm.sType == "logs") { + if (Number(submitForm.save) < 1 || submitForm.save == '') { + return bt.msg({ status: false, msg: 'Keep latest cannot be less than 1 !'}); + } + } + + var url = '/crontab?action=modify_crond', params = submitForm + if (submitForm.sType == 'enterpriseBackup') { + var multipleValues = $('select[name=backupTo]').val() + if(multipleValues == null) return layer.msg('Please select at least one backup type') + url = 'project/binlog/modify_mysqlbinlog_backup_setting' + params = { + datab_name : arry[0], + cron_type : 'hour-n', + backup_cycle : submitForm.hour, + upload_localhost : multipleValues.indexOf('localhost') > -1 ? 'localhost' : '', + upload_alioss : multipleValues.indexOf('alioss') > -1 ? 'alioss' : '', + upload_txcos : multipleValues.indexOf('txcos') > -1 ? 'txcos' : '', + upload_qiniu : multipleValues.indexOf('qiniu') > -1 ? 'qiniu' : '', + upload_obs : multipleValues.indexOf('obs') > -1 ? 'obs' : '', + upload_bos : multipleValues.indexOf('bos') > -1 ? 'bos' : '', + notice : submitForm.notice, + notice_channel : submitForm.notice_channel, + cron_id : row.id, + backup_id : arry[2] + } + if($('select[name=datab_name]').parent().find('.bt_select_content').text().indexOf('does not exist') > -1) return layer.msg('Database['+ arry[0] +']does not exist',{icon:2}) + if($('select[name=tables_name]').length) if($('select[name=tables_name').parent().find('.bt_select_content').text().indexOf('does not exist') > -1) return layer.msg('Table['+ arry[1] +']does not exist',{icon:2}) + }else{ + if($('select[name=sName]').length){ + params.name.match(/\[(.*)]/) + var sName_result = formConfig[3].group[0].list.some(function(item){ + if (item.value === (RegExp.$1.trim() === 'ALL'?'ALL':RegExp.$1.trim())) { + return true + } + }) + if(!sName_result) return layer.msg(formConfig[3].group[0].placeholder,{icon:2}) + } + } + bt_tools.send({ + url: url, + data: params + }, function (res) { + bt_tools.msg(res) + layer.close(indexs) + _that.crontabTabel.$refresh_table_list(true); + }, 'Edit Cron tasks') + } + }) + }, 'Gettin configuration information') + } + }) + } } - obj.from.save_local = $('input[name="mod_save_local"]').is(':checked') ? 1 : 0; - obj.from.notice = $("#modNotice").find("button b").attr("val") - obj.from.notice_channel = $("#modNotice_channelValue").attr("val") - layer.msg(lan.crontab.saving,{icon:16,time:0,shade: [0.3, '#000']}); - $.post('/crontab?action=modify_crond',obj.from,function(rdata){ - layer.closeAll(); - getCronData(); - layer.msg(rdata.msg,{icon:rdata.status?1:2}); + }, { + title: 'Log', + event: function (row, index, ev, key, that) { + var log_interval = null + _that.getCrontabLogs(row, function (rdata) { + layer.open({ + type: 1, + title: lan.crontab.task_log_title, + area: ['700px', '490px'], + shadeClose: false, + closeBtn: 2, + content: '
    \ +
    \
    +												
    \ + \ + \ +
    \ +
    ', + success: function () { + var nScrollHight = 0; //滚动距离总长(注意不是滚动条的长度) + var nScrollTop = 0; //滚动到的当前位置 + var nDivHight = $(".crontab-log").height(); + var isDb = true + $(".crontab-log").scroll(function(){ + nScrollHight = $(this)[0].scrollHeight; + nScrollTop = $(this)[0].scrollTop; + var paddingBottom = parseInt( $(this).css('padding-bottom') ),paddingTop = parseInt( $(this).css('padding-top') ); + isDb = false + //判断是否滚动到底部 + if(nScrollTop + paddingBottom + paddingTop + nDivHight >= nScrollHight){ + isDb = true + } + }); + var data_text = '' + log_interval = setInterval(function () { + bt_tools.send({ + url: '/crontab?action=GetLogs', + data: { id: row.id } + }, function (res) { + if (res.status) { + var arr = res.msg.split('\n') + if(data_text === res.msg && arr[arr.length - 1].indexOf('-------') > -1) { + clearInterval(log_interval) + return + } + if(isDb) render_content(res) + } + }) + }, 2000) + render_content(rdata) + function render_content(data) { + data_text = data.msg + var log_body = data.msg === '' ? 'Current log is empty' : data.msg,setchmod = $(".setchmod pre"),crontab_log = $('.crontab-log')[0] + setchmod.text(log_body); + crontab_log.scrollTop = crontab_log.scrollHeight; + } + $('#clearLogs').on('click', function () { + clearInterval(log_interval) + _that.clearCrontabLogs(row, function () { + $(".setchmod pre").text('') + }) + }) + $('#closeLogs').on('click', function () { + clearInterval(log_interval) + layer.closeAll() + }) + }, + cancel: function(indexs){ + clearInterval(log_interval) + layer.close(indexs) + } + }) + }) + } + }, { + title: 'Del', + event: function (row, index, ev, key, that) { + bt.confirm({ + title: 'Delete tasks', + msg: 'Are you sure you want to delete the task [' + row.name + '], continue?' + }, function () { + if (row.sType == 'enterpriseBackup') { + var arry = [] + arry = row.urladdress.split("|") + bt_tools.send({url: 'project/binlog/delete_mysql_binlog_setting',data: {cron_id:row.id,backup_id:arry[2],type:'cron'} },function (res) { + layer.msg(res.msg, {icon: res.status ? 1:2}) + that.$refresh_table_list(true); + }) + }else{ + _that.delCrontab(row, function () { + that.$refresh_table_list(true); + }) + } + }) + } + }] + } + ], + success:function(){ + $('.crontab_show_backup').click(function(){ + var backup_id = Number($(this).data('id')),backup_name = $(this).data('name') + var content_html = '
    ' + layer.open({ + type: 1, + closeBtn:2, + title:backup_name+'-backup files', + content: content_html, + area: ['700px', '530px'], + success:function(){ + var backup_table = bt_tools.table({ + el: '#backup_table_show', + url: '/crontab?action=get_backup_list', + param: {cron_id: backup_id}, + autoHeight: true, + default: "List is empty", + pageName: 'backup', + column: [ + {fid: 'name', title: 'File name',width:180,fixed:true}, + {fid: 'addtime', title: 'Backup time'}, + {fid: 'filename', title: 'Backup to',width:220,fixed:true}, + {fid: 'size', title: 'Size',template:function(row){ + return bt.format_size(row.size) + }}, + { + title:'OPT', + type: 'group', + align: 'right', + group: [{ + title: 'Save', + event: function (row, index, ev, key, that) { + window.open('/download?filename=' + encodeURIComponent(row.filename)); + } + }], + }, + ], + tootls: [ { + type: 'page', + positon: ['right', 'bottom'], // 默认在右下角 + pageParam: 'p', //分页请求字段,默认为 : p + page: 1, //当前分页 默认:1 + numberParam: 'rows', + //分页数量请求字段默认为 : limit + defaultNumber: 10 + //分页数量默认 : 20条 + }] + }) + } + }) + }) + }, + // 渲染完成 + tootls: [{ // 批量操作 + type: 'batch', //batch_btn + positon: ['left', 'bottom'], + placeholder: 'Please choose', + buttonValue: 'Execute', + disabledSelectValue: 'Please select cron task that requires batch operation!', + selectList: [{ + title: "Execute tasks", + url: '/crontab?action=StartTask', + load: true, + param: function (row) { + return { id: row.id } + }, + callback: function (that) { // 手动执行,data参数包含所有选中的站点 + bt.confirm({ + title: 'Batch', + msg: 'Are you sure you want to execute the selected cron tasks in batches? Continue?' + }, function () { + var param = {}; + that.start_batch(param, function (list) { + var html = ''; + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '' + item.name + '
    ' + item.request.msg + '
    '; + } + _that.crontabTabel.$batch_success_table({ + title: 'batch execute', + th: 'Tasks name', + html: html + }); + _that.crontabTabel.$refresh_table_list(true); + }); + }) + } + }, { + title: "Delete task", + url: function (row) { + if (row.sType == 'enterpriseBackup') { + var arry = [] + arry = row.urladdress.split("|") + return 'project/binlog/delete_mysql_binlog_setting?cron_id='+row.id+'&backup_id='+arry[2]+'&type=cron' + } else { + return '/crontab?action=DelCrontab&id='+ row.id + } + }, + load: true, + // param: function (row) { + // return { id: row.id } + // }, + callback: function (that) { // 手动执行,data参数包含所有选中的站点 + bt.show_confirm("Batch delete cron tasks", "Delete the selected cron tasks at the same time, continue?", function () { + var param = {}; + that.start_batch(param, function (list) { + var html = ''; + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '' + item.name + '
    ' + item.request.msg + '
    '; + } + _that.crontabTabel.$batch_success_table({ + title: 'Batch delete', + th: 'Tasks name', + html: html + }); + _that.crontabTabel.$refresh_table_list(true); + }); }); - }); - } - }); - }); - }); - -} -// 修改木马查杀 消息通道 -function edit_message_channel(type){ - $.post('/config?action=get_settings2',function(res){ - var tMess = ""; - if(res.user_mail.user_name && !res.dingding.dingding){ - tMess = '
    \ - \ - \ -
    ' - }else if(!res.user_mail.user_name && res.dingding.dingding){ - tMess = '
    \ - \ - \ -
    ' - }else{ - tMess ='
    \ - \ - \ -
    \ -
    \ - \ - \ -
    ' - } - $(".message_start").html(tMess); - }) - -} - -// 设置计划任务状态 -function set_task_status(id,status){ - var confirm = layer.confirm(status == '0'?lan.crontab.crontab_stop_will:lan.crontab.disable_change_crontab_start, {title:lan.crontab.tips,icon:3,closeBtn:2},function(index) { - if (index > 0) { - $.post('/crontab?action=set_cron_status',{id:id},function(rdata){ - layer.closeAll(); - layer.close(confirm); - layer.msg(rdata.data,{icon:rdata.status?1:2}); - if(rdata.status) getCronData(); - }); - } - }); -} - -//执行任务脚本 -function StartTask(id){ - layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']}); - var data='id='+id; - $.post('/crontab?action=StartTask',data,function(rdata){ - layer.closeAll(); - layer.msg(rdata.msg,{icon:rdata.status?1:2}); - }); -} - - -//清空日志 -function CloseLogs(id){ - layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']}); - var data='id='+id; - $.post('/crontab?action=DelLogs',data,function(rdata){ - layer.closeAll(); - layer.msg(rdata.msg,{icon:rdata.status?1:2}); - }); -} - - -//删除 -function planDel(id,name){ - SafeMessage(lan.get('del',[name]),lan.crontab.del_task,function(){ - layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']}); - var data='id='+id; - $.post('/crontab?action=DelCrontab',data,function(rdata){ - layer.closeAll(); - getCronData(); - setTimeout(function () { layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });},1000) - }); - }); -} - - -//批量删除 -function allDeleteCron(){ - var checkList = $("input[name=id]"); - var dataList = new Array(); - for(var i=0;i"+lan.get('del_all_task',[dataList.length])+"",function(){ - layer.closeAll(); - syncDeleteCron(dataList,0,''); - }); -} -//批量执行和批量清除日志 -function allCron(type){ - var message = type=='log' ? 'Confirm to delete the logs of the selected task?' : 'Confirm to execute the selected task?', - tit = type=='log' ? 'Confirm Delete' : 'Confirm Execute', - url = type=='log' ? '/crontab?action=DelLogs' : '/crontab?action=StartTask', - confirm = layer.confirm(message, {title:tit,icon:3,closeBtn:2},function() { - var checkList = $("input[name=id]"); - for(var i=0;i'; } - errorMsg += '
  • '+dataList[0].name+' -> '+frdata.msg+'
  • ' + }], + }] + }) + }, + /** + * @descripttion 消息推送下拉 + */ + pushChannelMessage:{ + //获取通道状态 + getChannelSwitch:function(data,type) { + var arry = [{title: 'All', value: ''}], info = []; + for (var resKey in data) { + if (data.hasOwnProperty(resKey)) { + var value = resKey, item = data[resKey] + if (!item['setup'] || $.isEmptyObject(item['data'])) continue + info.push(value) + arry.push({title: item.title, value: value}) } - - dataList.splice(0,1); - syncDeleteCron(dataList,successCount,errorMsg); } - }); -} - - -function IsURL(str_url){ - var strRegex = '^(https|http|ftp|rtsp|mms)?://.+'; - var re=new RegExp(strRegex); - if (re.test(str_url)){ - return (true); - }else{ - return (false); - } -} - - -//提交 -function planAdd(){ - var name = $(".planname input[name='name']").val(); - if(name == ''){ - $(".planname input[name='name']").focus(); - layer.msg(lan.crontab.add_task_empty,{icon:2}); - return; - } - $("#set-Config input[name='name']").val(name); - - var type = $(".plancycle").find("b").attr("val"); - $("#set-Config input[name='type']").val(type); - - var where1 = $("#ptime input[name='where1']").val(); - var is1; - var is2 = 1; - switch(type){ - case 'day-n': - is1=31; - break; - case 'hour-n': - is1=23; - break; - case 'minute-n': - is1=59; - break; - case 'month': - is1=31; - break; - } - - if(where1 > is1 || where1 < is2){ - $("#ptime input[name='where1']").focus(); - layer.msg(lan.public.input_err,{icon:2}); - return; - } - - $("#set-Config input[name='where1']").val(where1); - - var hour = $("#ptime input[name='hour']").val(); - if(hour > 23 || hour < 0){ - $("#ptime input[name='hour']").focus(); - layer.msg(lan.crontab.input_hour_err,{icon:2}); - return; - } - $("#set-Config input[name='hour']").val(hour); - var minute = $("#ptime input[name='minute']").val(); - if(minute > 59 || minute < 0){ - $("#ptime input[name='minute']").focus(); - layer.msg(lan.crontab.input_minute_err,{icon:2}); - return; - } - $("#set-Config input[name='minute']").val(minute); - - var save = $("#save").val(); - - if(save < 0){ - layer.msg(lan.crontab.input_number_err,{icon:2}); - return; - } - - $("#set-Config input[name='save']").val(save); - - - $("#set-Config input[name='week']").val($(".planweek").find("b").attr("val")); - var sType = $(".planjs").find("b").attr("val"); - var sBody = encodeURIComponent($("#implement textarea[name='sBody']").val()); - - if(sType == 'toFile'){ - if($("#viewfile").val() == ''){ - layer.msg(lan.crontab.input_file_err,{icon:2}); - return; + arry[0].value = info.join(','); + if (type === 'webshell') arry.shift(); + if (arry.length === (type === 'webshell' ? 0 : 1)) return [] + return arry } - }else{ - if(sBody == '' && sType=='toShell'){ - $("#implement textarea[name='sBody']").focus(); - layer.msg(lan.crontab.input_script_err,{icon:2}); - return; + }, + /** + * @description 初始化 + */ + init: function () { + var that = this; + this.getAllDatabases() + this.getDataList(function () { + that.addCrontabForm = that.addCrontabForm() + $('[title="Database incremental backup"]').html('Database incremental backup') + that.crontabTabel = that.crontabTabel() + that.getDataList('databases'); + }) + function resizeTable () { + var height = window.innerHeight - 795, table = $('#crontabTabel .divtable'); + table.css({ maxHeight: height < 400 ? '400px' : (height + 'px') }) } + $(window).on('resize', resizeTable) + setTimeout(function () { + resizeTable() + }, 500) } - var urladdress_1 = $("#urladdress_1").val(); - if(sType == 'toUrl'){ - if(!IsURL(urladdress_1)){ - layer.msg(lan.crontab.input_url_err,{icon:2}); - $("implement textarea[name='urladdress_1']").focus(); - return; - } - } - urladdress_1 = encodeURIComponent(urladdress_1); - $("#set-Config input[name='sType']").val(sType); - $("#set-Config textarea[name='sBody']").val(decodeURIComponent(sBody)); - - if(sType == 'site' || sType == 'database' || sType == 'path'){ - var backupTo = $(".planBackupTo").find("b").attr("val"); - $("#backupTo").val(backupTo); - } - - - var sName = $("#sName").attr("val"); - - /*if(sName == 'backupAll'){ - var alist = $("ul[aria-labelledby='backdata'] li a"); - var dataList = new Array(); - for(var i=1;i -1){ - data = data.replace('&sName=&','&sName='+ encodeURIComponent($('#inputPath').val()) +'&') - }else if(data.indexOf('sType=webshell') > -1){ - data = $("#set-Config").serialize() + '&urladdress=' + _radiox; - data = data.replace('&sName=&','&sName='+ encodeURIComponent($('#filePath').val()) +'&') - } - if(data.indexOf('&save_local=') == -1) { - var save_local = $('input[name="save_local"]').is(':checked') ? 1 : 0; - data = data + '&save_local=' + save_local + '¬ice=' + $("#notice").find("b").attr("val") + '¬ice_channel=' + $("#notice_channel").find("b").attr("val") + '' - } - $.post('/crontab?action=AddCrontab',data,function(rdata){ - layer.closeAll(); - getCronData(); - setTimeout(function () { - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); - }, 1000) - }); } - -//批量添加任务 -function allAddCrontab(dataList,successCount,errorMsg){ - if(dataList.length < 1) { - layer.msg(lan.get('add_all_task_ok',[successCount]),{icon:1}); - return; - } - var loadT = layer.msg(lan.get('add',[dataList[0]]),{icon:16,time:0,shade: [0.3, '#000']}); - var sType = $(".planjs").find("b").attr("val"); - var minute = parseInt($("#set-Config input[name='minute']").val()); - var hour = parseInt($("#set-Config input[name='hour']").val()); - var sTitle = (sType == 'site')?lan.crontab.backup_site:lan.crontab.backup_database; - if(sType == 'logs') sTitle = lan.crontab.backup_log; - minute += 5; - if(hour !== '' && minute > 59){ - if(hour >= 23) hour = 0; - $("#set-Config input[name='hour']").val(hour+1); - minute = 5; - } - $("#set-Config input[name='minute']").val(minute); - $("#set-Config input[name='name']").val(sTitle + '['+dataList[0]+']'); - $("#set-Config input[name='sName']").val(dataList[0]); - var pdata = $("#set-Config").serialize() + '&sBody=&urladdress_1='; - $.ajax({ - type:'POST', - url:'/crontab?action=AddCrontab', - data:pdata, - async: true, - success:function(frdata){ - layer.close(loadT); - if(frdata.status){ - successCount++; - getCronData(); - }else{ - if(!errorMsg){ - errorMsg = '

    '+lan.crontab.backup_all_err+'

    '; - } - errorMsg += '
  • '+dataList[0]+' -> '+frdata.msg+'
  • ' - } - - dataList.splice(0,1); - allAddCrontab(dataList,successCount,errorMsg); - } - }); -} - -$(".dropdown ul li a").click(function(){ - var txt = $(this).text(); - var type = $(this).attr("value"); - $(this).parents(".dropdown").find("button b").text(txt).attr("val",type); - switch(type){ - case 'day': - closeOpt(); - toHour(); - toMinute(); - break; - case 'day-n': - closeOpt(); - toWhere1(lan.crontab.day); - toHour(); - toMinute(); - break; - case 'hour': - closeOpt(); - toMinute(); - break; - case 'hour-n': - closeOpt(); - toWhere1(lan.crontab.hour); - toMinute(); - break; - case 'minute-n': - closeOpt(); - toWhere1(lan.crontab.minute); - break; - case 'week': - closeOpt(); - toWeek(); - toHour(); - toMinute(); - break; - case 'month': - closeOpt(); - toWhere1(lan.crontab.sun); - toHour(); - toMinute(); - break; - case 'toFile': - toFile(); - break; - case 'toShell': - toShell(); - $(".controls").html(lan.crontab.sbody); - break; - case 'path': - toBackup('path'); - $(".controls").html(lan.crontab.dir_bak); - break; - case 'rememory': - rememory(); - $(".controls").html(lan.public.msg); - break; - case 'site': - toBackup('sites'); - $(".controls").html(lan.crontab.backup_site); - break; - case 'database': - toBackup('databases'); - $(".controls").html(lan.crontab.backup_database); - break; - case 'logs': - toBackup('logs'); - $(".controls").html(lan.crontab.log_site); - break; - case 'toUrl': - toUrl(); - $(".controls").html(lan.crontab.url_address); - break; - case 'webshell': - webShell(); - break; - } - -}) - - - -//备份 -function toBackup(type) { - var sMsg = ''; - switch (type) { - case 'sites': - sMsg = lan.crontab.backup_site; - sType = "sites"; - break; - case 'databases': - sMsg = lan.crontab.backup_database; - sType = "databases"; - break; - case 'logs': - sMsg = lan.crontab.backup_log; - sType = "sites"; - break; - case 'path': - sMsg = lan.crontab.dir_bak; - sType = "sites"; - break; - } - var data = 'type=' + sType; - $.post('/crontab?action=GetDataList', data, function (rdata) { - $(".planname input[name='name']").attr('readonly', 'true').css({"background-color": "#f6f6f6", "color": "#666"}); - if (type != 'path') { - var sOpt = ''; - var sOptBody = ''; - if (rdata.data.length == 0) { - layer.msg(lan.public.list_empty, {icon: 2}); - return - } - for (var i = 0; i < rdata.data.length; i++) { - if (type === 'logs') { - $(".planname input[name='name']").val(sMsg + '[ALL]'); - } else { - if (i == 0) { - $(".planname input[name='name']").val(sMsg + '[' + rdata.data[i].name + ']'); - } - } - sOpt += '
  • ' + rdata.data[i].name + '[' + rdata.data[i].ps + ']
  • '; - } - sOptBody = '\ - \ - '; - } else { - $(".planname input[name='name']").val(sMsg + '[/www/wwwroot/]'); - sOptBody = '\ -
    \ - \ - \ -
    \ - '; - setCookie('default_dir_path', '/www/wwwroot/'); - setCookie('path_dir_change', '/www/wwwroot/'); - setInterval(function () { - if (getCookie('path_dir_change') != getCookie('default_dir_path')) { - var path_dir_change = getCookie('path_dir_change') - $(".planname input").val(lan.crontab.dir_bak + '[' + getCookie('path_dir_change') + ']'); - setCookie('default_dir_path', path_dir_change); - } - }, 500); - } - var orderOpt = '' - for (var i = 0; i < rdata.orderOpt.length; i++) { - orderOpt += '\ -
  • \ - ' + rdata.orderOpt[i].name + '\ -
  • \ - '; - } - var save_num = 3; - if (type === 'logs') { - $('#cycle b').attr('val', 'day').text(lan.crontab.daily); - $('.planweek').hide(); - $('[name="hour"]').val(0); - $('[name="minute"]').val(1); - // $('#implement').parent().after('
    提示
    根据网络安全法第二十一条规定,网络日志应留存不少于六个月。
    ') - save_num = 180; - } else { - $('#logs_tips').remove(); - } - var sBody = sOptBody + '\ -
    ' + lan.crontab.backup_to + '
    \ - \ -
    ' + lan.crontab.save_new + '
    \ -
    \ - \ - \ - \ -
    \ - \ - '; - if (type == 'sites' || type == 'path' || type == 'databases') { - $.post('/config?action=get_settings2', data, function (rdata) { - var messageChannelDom = ''; - var messageChannelBtnText = ''; - var channelInitVal = ''; - if (rdata.user_mail.user_name && rdata.telegram.setup) { - messageChannelBtnText = 'ALL'; - channelInitVal = 'user_name,telegram'; - messageChannelDom = '\ -
  • ALL
  • \ -
  • Telegram
  • \ -
  • Email
  • \ - '; - } else if (!rdata.user_mail.user_name && !rdata.telegram.setup) { - messageChannelBtnText = 'No Data' - channelInitVal = '' - messageChannelDom += '
  • No Data
  • '; - } else if (rdata.telegram.setup) { - messageChannelBtnText = 'Telegram' - channelInitVal = 'telegram' - messageChannelDom += '
  • Telegram
  • '; - } else if (rdata.user_mail.user_name) { - messageChannelBtnText = 'Email' - channelInitVal = 'mail' - messageChannelDom += '
  • Email
  • '; - } - sBody += '\ -

    \ -

    Backup reminder
    \ - \ - \ - \ - Set notifications\ -

    \ - '; - if (type == 'sites' || type == "path") { - sBody += '\ -

    \ -

    ' + lan.crontab.exclusion_rule + '
    \ - \ -

    \ - '; - } - $("#implement").html(sBody); - getselectnoticename(); - }); - } else { - $("#implement").html('
    '); - sBody += '\ -

    \ -

    ' + lan.crontab.exclusion_rule + '
    \ - \ -

    \ - '; - $("#implement").html(sBody); - getselectname(); - } - $("#implement").on('click', '.dropdown ul li a', function (ev) { - var sName = $("#sName").attr("val"); - if (!sName) return; - $(".planname input[name='name']").val(sMsg + '[' + sName + ']'); - }); - if (type == "path") { - $('.planname input').attr('readonly', false).removeAttr('style'); - } - }); -} - -//下拉菜单名称 -function getselectname(){ - $(".dropdown ul li a").click(function(){ - var txt = $(this).text(); - var type = $(this).attr("value"); - $(this).parents(".dropdown").find("button b").text(txt).attr("val",type); - }); -} -//清理 -function closeOpt(){ - $("#ptime").html(''); -} -//星期 -function toWeek(){ - var mBody = ''; - $("#ptime").html(mBody); - getselectname() -} -//指定1 -function toWhere1(ix){ - var mBody ='
    \ - \ - '+ix+'\ -
    '; - $("#ptime").append(mBody); -} -//小时 -function toHour(){ - var mBody = '
    \ - \ - '+lan.crontab.hour+'\ -
    '; - $("#ptime").append(mBody); -} - -//分钟 -function toMinute(){ - var mBody = '
    \ - \ - '+lan.crontab.minute+'\ -
    '; - $("#ptime").append(mBody); - -} - -//从文件 -function toFile(){ - var tBody = '\ - '; - $("#implement").html(tBody); - $(".planname input[name='name']").removeAttr('readonly style').val(""); -} - -//从脚本 -function toShell(){ - var shell_body = ''; - var shell_name = ''; - if($("b[val='toShell']").text() === 'synchronised time'){ - shell_name = 'Periodically synchronize server time'; - shell_body = 'echo "|-Trying to synchronize time from 0.pool.bt.cn..";\n\ -ntpdate -u 0.pool.bt.cn\n\ -if [ $? = 1 ];then\n\ - echo "|-Trying to synchronize time from 1.pool.bt.cn..";\n\ - ntpdate -u 1.pool.bt.cn\n\ -fi\n\ -if [ $? = 1 ];then\n\ - echo "|-Trying to sync time from 0.asia.pool.ntp.org..";\n\ - ntpdate -u 0.asia.pool.ntp.org\n\ -fi\n\ -if [ $? = 1 ];then\n\ - echo "|-Trying to sync time from www.bt.cn..";\n\ - getBtTime=$(curl -sS --connect-timeout 3 -m 60 http://www.bt.cn/api/index/get_time)\n\ - if [ "${getBtTime}" ];then \n\ - date -s "$(date -d @$getBtTime +"%Y-%m-%d %H:%M:%S")"\n\ - fi\n\ -fi\n\ -echo "|-Trying to write current system time to hardware..";\n\ -hwclock -w\n\ -date\n\ -echo "|-Time synchronization completed!";' - } - var tBody = ""; - $("#implement").html(tBody); - $(".planname input[name='name']").removeAttr('readonly style').val(shell_name); -} - -function toPath() { - -} -//木马查杀 -function webShell(){ - var sOpt = "",sOptBody = ''; - $.post('/crontab?action=GetDataList&type=sites',function(rdata){ - $(".planname input[name='name']").attr('readonly','true').css({"background-color":"#f6f6f6","color":"#666"}); - if(rdata.data.length == 0){ - layer.msg(lan.public.list_empty,{icon:2}) - return - } - for(var i=0;i'+rdata.data[i].name+'['+rdata.data[i].ps+']'; - } - sOptBody ='' - setCookie('default_dir_path','/www/wwwroot/'); - setCookie('path_dir_change','/www/wwwroot/'); - setInterval(function(){ - if(getCookie('path_dir_change') != getCookie('default_dir_path')){ - var path_dir_change = getCookie('path_dir_change') - $(".planname input").val('Trojan kill ['+getCookie('path_dir_change')+']'); - setCookie('default_dir_path',path_dir_change); - } - $(".check_alert").click(function(){ - _radiox = $(this).find("input[name=alert]").val(); - }) - },500); - sOptBody += '

    \ -

    Message channel
    \ - \ -

    '; - $("#implement").html(sOptBody); - message_channel_start(); - $("#implement").siblings(".controls").html("Scan site"); - getselectname(); - $(".dropdown ul li a").click(function(){ - var sName = $("#sName").attr("val"); - if(!sName) return; - $(".planname input[name='name']").val("Trojan kill "+'['+sName+']'); - }); - }) -} -function message_channel_start(){ - $.post('/config?action=get_settings2',function(res){ - var wBody = ""; - if(!res.user_mail.user_name && !res.telegram.setup){ - wBody = 'No message channel is set, please go to panel settings to add a message channel configuration?'; - $(".plan-submit").css({"pointer-events":"none","background-color":"#e6e6e6","color":"#333"}); - }else if(res.user_mail.user_name && !res.telegram.setup){ - wBody = '
    \ - \ - \ -
    ' - }else if(!res.user_mail.user_name && res.telegram.setup){ - wBody = '
    \ - \ - \ -
    ' - }else{ - wBody ='
    \ - \ - \ -
    \ -
    \ - \ - \ -
    ' - } - $(".message_start").html(wBody); - }) -} -//从url -function toUrl(){ - var tBody = ""; - $("#implement").html(tBody); - $(".planname input[name='name']").removeAttr('readonly style').val(""); -} - -//释放内存 -function rememory(){ - $(".planname input[name='name']").removeAttr('readonly style').val(""); - $(".planname input[name='name']").val(lan.crontab.mem); - $("#implement").html(lan.crontab.mem_ps); - return; -} -//上传 -function fileupload(){ - $("#sFile").change(function(){ - $("#viewfile").val($("#sFile").val()); - }); - $("#sFile").click(); -} - - -function selSave_local() { - if($('#save_local').val() == '0') { - $('#save_local').val(1) - $('#save_local').prop('checked', true) - } else { - $('#save_local').val(0) - $('#save_local').removeAttr('checked') - } -} -function modSelSave_local() { - if($('#modSave_local').val() == '0') { - $('#modSave_local').val(1) - $('#modSave_local').prop('checked', true) - } else { - $('#modSave_local').val(0) - $('#modSave_local').removeAttr('checked') - } -} - -// 下拉菜单名称 -function getselectnoticename(){ - $(".dropdown ul li a").click(function(){ - var txt = $(this).text(); - var type = $(this).attr("value"); - $(this).parents(".dropdown").find("button b").text(txt).attr("val",type); - if($("#modNotice").find("button b").attr("val") == '0') { - $('#modNotice').nextAll().hide() - $('#selmodnoticeBox').show() - } else { - $('#modNotice').nextAll().show() - } - if ($("#notice").find("button b").attr("val") == '0') { - $('#messageChannelBox').hide() - $('#notice_channel').hide() - } else { - $('#messageChannelBox').show() - $('#notice_channel').show() - } - }); -} - -// 备份到 -$('body').on('click', '.serverDiskToLocal .dropdown-menu a', function () { - var value = $(this).attr('value'); - var $line = $(this).parents('.clearfix.plan').find('.local-backup-line'); - if (value == 'localhost') { - $line.find('input').prop('checked', false); - $line.find('.form-checkbox').removeClass('active'); - $line.hide(); - } else { - $line.find('input').prop('checked', true); - $line.find('.form-checkbox').addClass('active'); - $line.show(); - } -}); - -// 单选框 -$('body').on('click', '.form-checkbox', function () { - $(this).toggleClass('active'); - $(this).next().prop('checked', $(this).hasClass('active')); -}); - -$('body').on('click', '.form-checkbox-label', function () { - $(this).siblings('.form-checkbox').click(); -}); diff --git a/BTPanel/static/js/database.js b/BTPanel/static/js/database.js index 2a9635e8..24098f18 100644 --- a/BTPanel/static/js/database.js +++ b/BTPanel/static/js/database.js @@ -1,1137 +1,3350 @@ -var database_table = {} var database = { - dbCloudServerTable: null, //远程服务器视图 - cloudDatabaseList: [], //远程服务器列表 - init: function () { - this.database_table_view(); - var _this = this; - $('#SearchValue').keydown(function (e) { - if (e.keyCode == 13) { - var val = $(this).val(); - _this.database_table_view(val); - } - }); - }, - database_table_view: function (search) { - var that = this; - this.get_cloud_server_list(function () { - $('#bt_database_table').empty(); - var param = { table: 'databases', search: search || '' }; - database_table = bt_tools.table({ - el: '#bt_database_table', - url: '/data?action=getData', - param: param, //参数 - minWidth: '1000px', - autoHeight: true, - default: "Database list is empty", // 数据为空时的默认提示 - beforeRequest: function () { - var db_type_val = $('.database_type_select_filter').val(); - switch (db_type_val) { - case 'all': - delete param['db_type']; - delete param['sid']; - break; - case 0: - param['db_type'] = 0; - break; - default: - delete param['db_type']; - param['sid'] = db_type_val; - } - return param; - }, - column:[ - { fid: 'id', type: 'checkbox', width: 20 }, - { - fid: 'name', - width: 120, - title: lan.database.add_name, - template: function (item) { - return '' + item.name + ''; - } - }, - { - fid: 'username', - width: 120, - title: lan.database.user, - sort: function () { - database_table.$refresh_table_list(true); - }, - template: function (item) { - return '' + item.username + ''; - } - }, - { - fid:'password', - width: 220, - title: lan.database.add_pass, - type: 'password', - copy: true, - eye_open: true, - template: function (row) { - var id = row.id; - var username = row.username; - var password = row.password; - if (row.password === '') return '' + lan.database.not_found_pwd_1 + '' + lan.database.not_found_pwd_2 + '' + lan.database.not_found_pwd_3 + '!'; - return true; - } - }, - bt.public.get_quota_config('database'), - { - fid: 'backup', - title: lan.database.backup, - width: 130, - template: function (item) { - var backup = lan.database.backup_empty, - _class = "bt_warning"; - if (item.backup_count > 0) backup = lan.database.backup_ok, _class = "bt_success"; - return '' + backup + (item.backup_count > 0 ? ('(' + item.backup_count + ')') : '') + ' | ' + - ''+lan.database.input+''; - } - }, - { - fid: 'position', - title: lan.database.position, - type: 'text', - template: function (row) { - var type_column = '-'; - var host = row.conn_config.db_host; - var port = row.conn_config.db_port; - switch(row.db_type){ - case 0: - type_column = lan.database.add_auth_local; - break; - case 1: - type_column = (lan.database.cloud_database + '(' + host + ':' + port + ')').toString(); - break; - case 2: - var list = that.cloudDatabaseList; - $.each(list, function(index, item) { - var db_host = item.db_host; - var db_port = item.db_port; - if (row.sid == item.id) { - // 默认显示备注 - if (item.ps !== '') { - type_column = item.ps - } else { - type_column = (lan.database.cloud_database + '(' + db_host + ':' + db_port + ')').toString(); - } - } - }); - break; - } - return '' + type_column + ''; - } - }, - { - fid: 'ps', - title: lan.database.add_ps, - type: 'input', - blur: function (row, index, ev) { - bt.pub.set_data_ps({ - id: row.id, - table: 'databases', - ps: ev.target.value - }, function (res) { - layer.msg(res.msg, (res.status ? {} : { - icon: 2 - })); - }); - }, - keyup: function (row, index, ev) { - if (ev.keyCode === 13) { - $(this).blur(); - } - } - }, - { - type: 'group', - title: lan.database.operation, - width: 280, - align: 'right', - group: [ - { - title: lan.database.admin, - tips: lan.database.admin_title, - hide: function (row) { - return row.db_type != 0 - }, - event: function(row) { - bt.database.open_phpmyadmin(row.name,row.username,row.password); - } - }, - { - title: lan.database.auth, - tips:lan.database.set_db_auth, - hide: function (row) { - return row.db_type == 1 - }, - event: function(row) { - bt.database.set_data_access(row.username); - } - }, - { - title:lan.database.tools, - tips:lan.database.mysql_tools, - event: function(row){ - database.rep_tools(row.name); - } - }, - { - title: lan.database.edit_pass, - tips: lan.database.edit_pass_title, - hide: function (row) { - return row.db_type == 1 - }, - event: function(row){ - database.set_data_pass(row.id,row.username,row.password); - } - }, - { - title: lan.database.del, - tips: lan.database.del_title, - event: function(row){ - database.del_database(row.id, row.name, row); - } - } - ] - } - ], - sortParam: function (data) { - return { - 'order': data.name + ' ' + data.sort - }; - }, - tootls: [ - { // 按钮组 - type: 'group', - positon: ['left', 'top'], - list: [ - { - title: lan.database.add_title, - active: true, - event: function () { - that.generate_cloud_server_list(function (list) { - bt.database.add_database(list, function (res){ - if (res.status) database_table.$refresh_table_list(true); - }); - }); - } - }, - { - title: lan.database.edit_root, - event: function () { - bt.database.set_root('root') - } - }, - { - title: 'phpMyAdmin', - event: function () { - bt.database.open_phpmyadmin('','root', bt.config.mysql_root) - } - }, - { - title: lan.database.cloud_server, - event: function() { - database.open_cloud_server(); - } - },{ - title: 'Sync all', - style: { 'margin-left': '30px' }, - event: function () { - database.sync_to_database(0) - } - }, { - title: 'Get DB from server', - event: function () { - that.generate_cloud_server_list(function (list) { - bt_tools.open({ - title: lan.database.select_position, - area: '450px', - skin: 'databaseCloudServer', - btn: [lan.public.confirm, lan.public.cancel], - content: { - 'class':'pd20', - form:[ - { - label: lan.database.position, - group:{ - type: 'select', - name: 'sid', - width: '260px', - list: list - } - } - ] - }, - success: function ($layer) { - $layer.find('.layui-layer-content').css('overflow','inherit'); - }, - yes: function (form, index) { - bt.database.sync_database(form.sid, function (rdata) { - if (rdata.status) { - database_table.$refresh_table_list(true); - layer.close(index); - } - }); - } - }); - }); - } - } - // { - // title: 'Recycle bin', - // style: { - // 'position': 'absolute', - // 'right': '-5px' - // }, - // icon: 'trash', - // event: function () { - // bt.recycle_bin.open_recycle_bin(6) - // } - // } - ] - }, - { - type: 'batch', // batch_btn - positon: ['left', 'bottom'], - placeholder: 'Select batch operation', - buttonValue: 'Execute', - disabledSelectValue: 'Select the DB to execute!!', - selectList: [ - { - title: 'Sync to Server', - url: '/database?action=SyncToDatabases&type=1', - paramName: 'ids', //列表参数名,可以为空 - paramId: 'id', // 需要传入批量的id - th: 'Database Name', - refresh: true, - beforeRequest: function (list) { - var arry = []; - $.each(list, function (index, item) { - arry.push(item.id); - }); - return JSON.stringify(arry) - }, - success: function (res, list, that) { - layer.closeAll(); - var html = ''; - $.each(list, function (index, item) { - html += '' + item.name + '
    ' + res.msg + '
    '; - }); - that.$batch_success_table({ - title: 'Batch sync selected', - th: 'Database Name', - html: html - }); - } - }, { - title: "Delete database", - url: '/database?action=DeleteDatabase', - load: true, - refresh: true, - param: function (row) { - return { - id: row.id, - name: row.name - } - }, - callback: function (that) { - // 手动执行, data参数包含所有选中的站点 - var ids = []; - for (var i = 0; i < that.check_list.length; i++) { - ids.push(that.check_list[i].id); - } - database.del_database(ids, function(param){ - that.start_batch(param, function (list) { - layer.closeAll() - var html = ''; - for (var i = 0; i < list.length; i++) { - var item = list[i]; - html += '' + item.name + '
    ' + item.request.msg + '
    '; - } - database_table.$batch_success_table({ - title: 'Batch deletion', - th: 'Database Name', - html: html - }); - database_table.$refresh_table_list(true); - }); - }) - } - } - ] - }, - { - type: 'search', - positon: ['right', 'top'], - placeholder: lan.database.database_search, - searchParam: 'search', //搜索请求字段,默认为 search - value: '',// 当前内容,默认为空 - }, - { //分页显示 - type: 'page', - positon: ['right', 'bottom'], // 默认在右下角 - pageParam: 'p', //分页请求字段,默认为 : p - page: 1, //当前分页 默认:1 - numberParam: 'limit', //分页数量请求字段默认为 : limit - number: 20, //分页数量默认 : 20条 - numberList: [10, 20, 50, 100, 200], // 分页显示数量列表 - numberStatus: true, // 是否支持分页数量选择,默认禁用 - jump: true, //是否支持跳转分页,默认禁用 - } - ] - }); - // 未安装数据库 - if (!isSetup) { - $("button[title='phpMyAdmin']").hide(); - $("button[title='Root password']").hide(); + // 远程服务器列表 + cloudDatabaseList: [], + // 远程服务器表格实例 + dbCloudServerTable: null, + // 初始化 + init: function () { + this.event(); + var type = this.getType(); + $('.database-pos .tabs-item[data-type="' + type + '"]').trigger('click'); + }, + // 事件 + event: function () { + var that = this; + // 切换分类 + $('.database-pos .tabs-item').click(function () { + var index = $(this).index(); + var type = $(this).data('type'); + bt.set_cookie('db_page_model', type); + $(this).addClass('active').siblings().removeClass('active'); + $('.db_table_view .tab-con .tab-con-block').eq(index).removeClass('hide').siblings().addClass('hide'); + // 获取远程数据库 + that.getCloudDatabase(function () { + that.getDatabaseList(); + }); + }); + + // 安装数据库插件 + $('.prompt_description').on('click', '.btn-install-mysql', function () { + var db_type = that.getType(); + if (db_type == 'pgsql') { + // 判断是否安装插件 + bt.soft.get_soft_find('pgsql_manager', function (rdata) { + for (var i = 0; i < rdata.versions.length; i++) { + // 判断是否安装版本 + if (rdata.versions[i].setup == true) { + bt.soft.set_lib_config('pgsql_manager', 'PostgreSQL管理器') + break; + }else{ + bt.soft.install('pgsql_manager') + break; } - that.render_cloud_server_list(); - }); - }, - // 渲染远程数据库选择框 - render_cloud_server_list: function () { - if ($('.database_type_select_filter').length == 0) { - $('#bt_database_table .bt_search').before(''); - $('.database_type_select_filter').change(function () { - database_table.$refresh_table_list(true); - }); - } - var option = ''; - $.each(this.cloudDatabaseList, function (index, item) { - var tips = item.ps != '' ? item.ps : item.db_host; - option += ''; - }); - $('.database_type_select_filter').html(option); - }, - // 获取远程服务器列表 - get_cloud_server_list: function (callback) { - var that = this; - var loadT = bt.load(lan.database.get_cloud_list_tips); - bt.send('GetCloudServer', 'database/GetCloudServer', {}, function (cloudData) { - loadT.close(); - that.cloudDatabaseList = cloudData; - callback && callback(); - }); - }, - // 生成远程服务器列表 - generate_cloud_server_list: function (callback) { - var list = this.cloudDatabaseList; - if (list.length == 0) { - return layer.msg(lan.database.add_server_tips, { - time: 0, icon: 2, closeBtn: 2, shade: .3 - }); - } - var cloudList = []; - $.each(list, function (index, item) { - var ps = item.ps; - var host = item.db_host; - if (!ps || !host) return; - var tips = ps != '' ? (ps + ' (' + host + ')') : host; - cloudList.push({ title: tips, value: item.id }); - }); - callback && callback(cloudList); - }, - rep_tools: function (db_name, res) { - var loadT = layer.msg(lan.database.get_data, { icon: 16, time: 0 }); - bt.send('GetInfo', 'database/GetInfo', { db_name: db_name }, function (rdata) { - layer.close(loadT) - if (rdata.status === false) { - layer.msg(rdata.msg, { icon: 2 }); - return; - } - var types = { InnoDB: "InnoDB", MyISAM: "MyISAM" }; - var tbody = ''; - for (var i = 0; i < rdata.tables.length; i++) { - if (!types[rdata.tables[i].type]) continue; - var setType = rdata.tables[i].type == 'InnoDB' ? types.MyISAM : types.InnoDB - tbody += '\ - \ - ' + rdata.tables[i].table_name + '\ - ' + rdata.tables[i].type + '\ - ' + rdata.tables[i].collation + '\ - ' + rdata.tables[i].rows_count + '\ - ' + rdata.tables[i].data_size + '\ - \ - '+lan.database.backup_re+' |\ - '+lan.database.optimization+' |\ - '+ lan.database.change + setType + '\ - \ - ' - } + } + }); + } else { + bt.soft.install(db_type); + } + }); - if (res) { - $(".gztr").html(tbody); - $("#db_tools").html(''); - $("input[type='checkbox']").attr("checked", false); - $(".tools_size").html(lan.database.size+':' + rdata.data_size); - return; - } + // 添加远程数据库 + $('.prompt_description').on('click', '.btn-add-cloud-server', function () { + that.render_db_cloud_server_view(); + }); - layer.open({ - type: 1, - title: lan.database.mysql_tools_box+" [ " + db_name + " ]", - area: ['850px', '580px'], - closeBtn: 2, - shadeClose: false, - content: '
    \ - \ -
    \ -
    \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - ' + tbody + '\ -
    '+lan.database.tb_name+''+lan.database.engine+''+lan.database.character+''+lan.database.row_num+''+lan.database.size+''+lan.database.operation+'
    \ -
    \ -
    \ -
      \ -
    • '+lan.database.tb_repair+'
    • \ -
    • '+lan.database.tb_optimization+'
    • \ -
    • '+lan.database.tb_change_engine+'
    • \ -
    ' - }); - tableFixed('database_fix'); - //表格头固定 - function tableFixed(name) { - var tableName = document.querySelector('#' + name); - tableName.addEventListener('scroll', scrollHandle); - } - function scrollHandle(e) { - var scrollTop = this.scrollTop; - //this.querySelector('thead').style.transform = 'translateY(' + scrollTop + 'px)'; - $(this).find("thead").css({ "transform": "translateY(" + scrollTop + "px)", "position": "relative", "z-index": "1" }); - } - }); - }, - selected_tools: function (my_obj, db_name) { - var is_checked = false + redis.event(); + }, + // 获取当前分类 + getType: function () { + return bt.get_cookie('db_page_model') || 'mysql'; + }, + // 通过分类获取当前数据库 + getDatabaseList: function (config) { + var type = this.getType(); + switch (type) { + case 'mysql': + mysql.getDatabaseList(config); + break; + case 'sqlserver': + sqlserver.getDatabaseList(config); + break; + case 'mongodb': + bt_tools.send({ + url: 'database/' + type + '/get_root_pwd' + }, function (_status) { + mongodb.mongoDBAccessStatus = _status.authorization == 'enabled' ? true : false; + mongodb.getDatabaseList(config); + }); + break; + case 'redis': + redis.getDatabaseList(config); + break; + case 'pgsql': + pgsql.getDatabaseList(config); + break; + } + }, + // 获取远程数据库 + getCloudDatabase: function (callback) { + var that = this; + var type = this.getType(); + var params = { + url: 'database?action=GetCloudServer', + data: { type: type }, + }; + if (type != 'mysql') { + params.url = 'database/' + type + '/GetCloudServer'; + params.data = { data: JSON.stringify({ type: type }) }; + } + bt_tools.send( + params, + function (cloudData) { + that.cloudDatabaseList = cloudData; + // 是否安装本地或远程服务器 + if (cloudData.length <= 0) { + var tips = lan.database.cloud_not_config1 + ', Click install | ' + lan.database.add_cloud_btn + ''; + if (type == 'sqlserver') tips = lan.database.cloud_not_config2 + ', ' + lan.database.add_cloud_btn + ''; + $('.mask_layer').removeClass('hide'); + $('.prompt_description').html(tips); + } else { + $('.mask_layer').addClass('hide'); + } + // 渲染远程数据库列表 + that.renderCloudServerSelect(); + // 渲染远程数据库表格 + that.renderCloudServerTable(); + callback && callback(cloudData); + }, + lan.database.get_cloud_list_tips + ); + }, + // 获取程服务器列表 + getCloudServerList: function (callback) { + var list = this.cloudDatabaseList; + var cloudList = []; + $.each(list, function (index, item) { + var ps = item.ps; + var host = item.db_host; + if (!ps || !host) return; + var tips = ps != '' ? ps + ' (' + host + ')' : host; + cloudList.push({ title: tips, value: item.id }); + }); + callback && callback(cloudList); + }, + // 渲染远程数据库选择框 + renderCloudServerSelect: function () { + var that = this; + var type = this.getType(); + var idMap = { + mysql: '#bt_database_table', + sqlserver: '#bt_sqldatabase_table', + mongodb: '#bt_mongodb_table', + pgsql: '#bt_pgsql_table', + } + var id = idMap[type]; + if ($(id + ' .database_type_select_filter').length == 0) { + $(id + ' .bt_search').before(''); + $(id + ' .database_type_select_filter').change(function () { + that.getDatabaseList({ isInit: true }); + }); + } + var option = ''; + $.each(this.cloudDatabaseList, function (index, item) { + var tips = item.ps != '' ? item.ps : item.db_host; + option += ''; + }); + $(id + ' .database_type_select_filter').html(option); + }, + // 打开远程服务器列表弹框 + open_cloud_server: function () { + var that = this; + var $layer = null; + bt_tools.open({ + title: lan.database.cloud_server_list, + area: '860px', + btn: false, + skin: 'databaseCloudServer', + content: '
    ', + success: function (layero) { + $layer = layero; + this.getServerTable(); + that.getCloudDatabase(); + }, + getServerTable: function () { + var _that = this; + that.dbCloudServerTable = bt_tools.table({ + el: '#db_cloud_server_table', + data: [], + default: lan.database.cloud_server_empty, + height: 300, + column: [ + { + fid: 'db_host', + title: lan.database.server_address, + width: 100, + template: function (item) { + return '' + item.db_host + ''; + }, + }, + { + fid: 'db_port', + width: 80, + title: lan.database.port, + }, + { + fid: 'db_type', + width: 110, + title: lan.database.type, + }, + { + fid: 'db_user', + width: 90, + title: lan.database.user, + }, + { + fid: 'db_password', + width: 190, + type: 'password', + title: lan.database.add_pass, + copy: true, + eye_open: true, + }, + { + fid: 'ps', + title: lan.database.add_ps, + template: function (item) { + var ps = item.ps; + return '' + ps + ''; + }, + }, + { + type: 'group', + width: 130, + title: lan.database.operation, + align: 'right', + group: [ + { + title: 'Get DB', + event: function (row) { + bt.database.sync_database(row.id, function (rdata) { + if (rdata.status) { + that.getDatabaseList(); + } + }); + }, + }, + { + title: lan.public.edit, + event: function (row) { + that.render_db_cloud_server_view(row, true); + }, + }, + { + title: lan.public.del, + event: function (row) { + that.del_db_cloud_server(row); + }, + }, + ], + }, + ], + tootls: [ + { + type: 'group', + positon: ['left', 'top'], + list: [ + { + title: lan.public.add + ' ' + lan.database.cloud_server, + active: true, + event: function () { + that.render_db_cloud_server_view(); + }, + }, + ], + }, + ], + success: function (config) { + that.cloudDatabaseList = config.data; + _that.setLayerCenter(); + }, + }); + }, + // 设置弹窗居中 + setLayerCenter: function () { + if (!$layer) return; + var height = $(window).height(); + var layerHeight = $layer.height(); + var top = (height - layerHeight) / 2; + $layer.css('top', top); + }, + }); + }, + // 渲染远程数据库表格 + renderCloudServerTable: function () { + if (this.dbCloudServerTable) { + var list = this.cloudDatabaseList; + var data = []; + for (var i = 0; i < list.length; i++) { + var element = list[i]; + if(element.id == 0) continue + data.push(element) + } + this.dbCloudServerTable.$reader_content(data); + } + }, + // 添加/编辑远程服务器视图 + render_db_cloud_server_view: function (config, is_edit) { + var that = this; + if (!config) { + var type = this.getType(); + var dataMap = { + mysql: { user: 'root', port: '3306' }, + sqlserver: { user: 'sa', port: '1433' }, + redis: { user: 'root', port: '6379' }, + mongodb: { user: 'root', port: '27017' }, + pgsql: { user: 'postgres', port: '5432' }, + } + config = { + db_host: '', + db_port: dataMap[type].port, + db_user: '', + db_password: '', + db_user: dataMap[type].user, + ps: '', + }; + } + var title = is_edit ? lan.public.edit : lan.public.add; + bt_tools.open({ + title: title + ' ' + lan.database.cloud_server, + area: '460px', + btn: [lan.public.save, lan.public.cancel], + skin: 'addCloudServerProject', + content: { + class: 'pd20', + form: [ + { + label: lan.database.server_address, + group: { + type: 'text', + name: 'db_host', + width: '260px', + value: config.db_host, + placeholder: lan.database.input_server_address, + event: function () { + $('[name=db_host]').on('input', function () { + $('[name=db_ps]').val($(this).val()); + }); + }, + }, + }, + { + label: lan.database.port, + group: { + type: 'number', + name: 'db_port', + width: '260px', + value: config.db_port, + placeholder: lan.database.input_port, + }, + }, + { + label: lan.database.user, + group: { + type: 'text', + name: 'db_user', + width: '260px', + value: config.db_user, + placeholder: lan.database.input_username, + }, + }, + { + label: lan.database.add_pass, + group: { + type: 'text', + name: 'db_password', + width: '260px', + value: config.db_password, + placeholder: lan.database.input_password, + }, + }, + { + label: lan.database.add_ps, + group: { + type: 'text', + name: 'db_ps', + width: '260px', + value: config.ps, + placeholder: lan.database.server_note, + }, + }, + { + group: { + type: 'help', + style: { 'margin-top': '0' }, + list: [lan.database.remote_help_1, lan.database.remote_help_2, lan.database.remote_help_3, lan.database.remote_help_4], + }, + }, + ], + }, + yes: function (form, indexs) { + if (form.db_host == '') return layer.msg(lan.database.input_server_address, { icon: 2 }); + if (form.db_port == '') return layer.msg(lan.database.input_port, { icon: 2 }); + if (form.db_user == '') return layer.msg(lan.database.input_username, { icon: 2 }); + if (form.db_password == '') return layer.msg(lan.database.input_password, { icon: 2 }); - if (my_obj) is_checked = my_obj.checked; - var db_tools = $("input[value^='dbtools_']"); - var n = 0; - for (var i = 0; i < db_tools.length; i++) { - if (my_obj) db_tools[i].checked = is_checked; - if (db_tools[i].checked) n++; - } - if (n > 0) { - var my_btns = '' - $("#db_tools").html(my_btns); - } else { - $("#db_tools").html(''); - } - }, - rep_database: function (db_name, tables) { - dbs = database.rep_checkeds(tables) - var loadT = layer.msg(lan.database.send_repair_command, { icon: 16, time: 0 }); - bt.send('ReTable', 'database/ReTable', { db_name: db_name, tables: JSON.stringify(dbs) }, function (rdata) { - layer.close(loadT) - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); - database.rep_tools(db_name, true); - }); - }, - op_database: function (db_name, tables) { - dbs = database.rep_checkeds(tables) - var loadT = layer.msg(lan.database.send_opt_command, { icon: 16, time: 0 }); - bt.send('OpTable', 'database/OpTable', { db_name: db_name, tables: JSON.stringify(dbs) }, function (rdata) { - layer.close(loadT) - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); - database.rep_tools(db_name, true); - }); - }, - to_database_type: function (db_name, tables, type) { - dbs = database.rep_checkeds(tables) - var loadT = layer.msg(lan.database.send_change_command, { icon: 16, time: 0, shade: [0.3, "#000"] }); - bt.send('AlTable', 'database/AlTable', { db_name: db_name, tables: JSON.stringify(dbs), table_type: type }, function (rdata) { - layer.close(loadT); - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); - database.rep_tools(db_name, true); - }); - }, - rep_checkeds: function (tables) { - var dbs = [] - if (tables) { - dbs.push(tables) - } else { - var db_tools = $("input[value^='dbtools_']"); - for (var i = 0; i < db_tools.length; i++) { - if (db_tools[i].checked) dbs.push(db_tools[i].value.replace('dbtools_', '')); - } - } + if (is_edit) form['id'] = config['id']; + + var type = that.getType(); + var tips = is_edit ? lan.database.edit_cloud_server_tips : lan.database.add_cloud_server_tips; - if (dbs.length < 1) { - layer.msg(lan.database.choose_at_least_one_tb, { icon: 2 }); - return false; + form['type'] = type; + + var layerT = bt.load(tips); + var interface = is_edit ? 'ModifyCloudServer' : 'AddCloudServer'; + var url = type === 'mysql' ? '/database?action=' + interface : '/database/' + type + '/' + interface; + bt_tools.send({ + url: url, + data: type === 'mysql' ? form : { data: JSON.stringify(form) }, + }, function (rdata) { + layerT.close(); + if (rdata.status) { + that.reset_server_config(); + layer.close(indexs); + layer.msg(rdata.msg, { icon: 1 }); + } else { + layer.msg(rdata.msg, { + time: 0, + icon: 2, + closeBtn: 2, + shade: 0.3, + area: '650px', + }); + } + }); + }, + }); + }, + // 删除远程服务器管理关系 + del_db_cloud_server: function (row) { + var that = this; + bt.confirm( + { + title: lan.public.del + ' [' + row.db_host + '] ' + lan.database.cloud_server, + msg: lan.database.del_cloud_server_tips + '!', + }, + function () { + var type = that.getType(); + var params = { url: 'database?action=RemoveCloudServer', data: { id: row.id } } + if (type != 'mysql') { + params.url = 'database/' + type + '/RemoveCloudServer'; + params.data = { data: JSON.stringify({ id: row.id }) }; + } + bt_tools.send(params, function (rdata) { + if (rdata.status) { + + that.reset_server_config(); + } + bt.msg(rdata); + }); + } + ); + }, + // 重新加载服务 + reset_server_config: function () { + var type = this.getType(); + $('.database-pos .tabs-item[data-type="' + type + '"]').trigger('click'); + }, + // 删除数据库 + del_database: function (wid, dbname, obj, callback) { + var that = this; + var rendom = bt.get_random_code(); + var num1 = rendom['num1']; + var num2 = rendom['num2']; + var title = ''; + var tips = 'The deletion may affect the business!'; + title = typeof dbname === 'function' ? 'Batch delete databases' : 'Delete database [ ' + dbname + ' ]'; + if (obj && obj.db_type > 0) { + tips = lan.database.del_cloud_database_tips; + } + layer.open({ + type: 1, + title: title, + icon: 0, + skin: 'delete_site_layer', + area: '530px', + closeBtn: 2, + shadeClose: true, + content: + "
    " + + "" + + "
    " + tips + '
    ' + + "
    Note: The data is priceless, please operate with caution! ! !" + + (!recycle_bin_db_open ? '

    Risk: The DB recycle bin is not enabled, deleting will disappear forever!' : '') + + '
    ' + + "
    " + lan.bt.cal_msg + + "" + num1 + ' + ' + num2 + "=
    " + + '
    ', + btn: [lan.public.ok, lan.public.cancel], + yes: function (indexs) { + var vcodeResult = $('#vcodeResult'), + data = { id: wid, name: dbname }; + if (vcodeResult.val() === '') { + layer.tips('Calculation result cannot be empty', vcodeResult, { tips: [1, 'red'], time: 3000 }); + vcodeResult.focus(); + return false; + } else if (parseInt(vcodeResult.val()) !== num1 + num2) { + layer.tips('Incorrect calculation result', vcodeResult, { tips: [1, 'red'], time: 3000 }); + vcodeResult.focus(); + return false; + } + if (typeof dbname === 'function') { + delete data.id; + delete data.name; + } + layer.close(indexs); + var arrs = wid instanceof Array ? wid : [wid]; + var ids = JSON.stringify(arrs), + countDown = 9; + if (arrs.length == 1) countDown = 4; + title = typeof dbname === 'function' ? 'Confirm the information again, delete the database in batches' : 'Confirm the information again, Delete Database [ ' + dbname + ' ]'; + var loadT = bt.load('Checking database data information, please wait...'); + var type = that.getType(); + var params = { url: 'database?action=check_del_data', data: { ids: ids } } + if (type != 'mysql') { + params.url = 'database/' + type + '/check_del_data'; + params.data = { data: JSON.stringify({ ids: ids }) }; + } + bt_tools.send(params, function (res) { + loadT.close(); + layer.open({ + type: 1, + title: title, + closeBtn: 2, + skin: 'verify_site_layer_info active', + area: '740px', + content: + '
    ' + + '' + + '
    aaPanel kindly reminds you, please calm down for a few seconds, and then confirm whether you want to delete the data.
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    Risk: The database recycle bin is not enabled. After the database is deleted, the database will disappear forever!
    ' + + '
    Please read the above information to be deleted carefully to prevent the database from being deleted by mistake. Confirm the deletion and there is still ' + + countDown + + ' seconds to operate.
    ' + + '
    ', + btn: ['Delete (Can be operated after ' + countDown + ' seconds)', 'Cancel'], + success: function (layers) { + var html = '', + rdata = res.data; + var filterData = rdata.filter(function (el) { + return ids.indexOf(el.id) != -1; + }); + for (var i = 0; i < filterData.length; i++) { + var item = filterData[i], + newTime = parseInt(new Date().getTime() / 1000), + t_icon = ''; + + database_html = (function (item) { + var is_time_rule = newTime - item.st_time > 86400 * 30 && item.total > 1024 * 10, + is_database_rule = res.db_size <= item.total, + database_time = bt.format_data(item.st_time, 'yyyy-MM-dd'), + database_size = bt.format_size(item.total); + + var f_size = ' ' + database_size + ' ' + (is_database_rule ? t_icon : ''); + var t_size = 'Note: This database is large and may be important data. Please operate with caution.\nDatabase: ' + database_size; + + return ( + '
    ' + + 'Database: ' + + item.name + + '' + + ' 0 ? 'title="' + t_size + '"' : '') + + '>Size: ' + + f_size + + '' + + 'Ctime:' + + database_time + + '' + + '
    ' + ); + })(item); + if (database_html !== '') html += '
    ' + database_html + '
    '; + } + if (html === '') html = '
    No data
    '; + $('.check_layer_content').html(html); + var interVal = setInterval(function () { + countDown--; + $(layers) + .find('.layui-layer-btn0') + .text('Delete (Can be operated after ' + countDown + ' seconds)'); + $(layers).find('.check_layer_message span').text(countDown); + }, 1000); + setTimeout(function () { + $(layers).find('.layui-layer-btn0').text('Delete'); + $(layers).find('.check_layer_message').html('Note: Please read carefully the above information to be deleted to prevent the database from being deleted by mistake'); + $(layers).removeClass('active'); + clearInterval(interVal); + }, countDown * 1000); + }, + yes: function (indes, layers) { + if ($(layers).hasClass('active')) { + layer.tips('Please confirm the message, there are ' + countDown + ' seconds left', $(layers).find('.layui-layer-btn0'), { tips: [1, 'red'], time: 3000 }); + return; + } + if (typeof dbname === 'function') { + dbname(data); + } else { + bt.database.del_database(data, function (rdata) { + layer.closeAll(); + if (rdata.status) that.getDatabaseList(); + if (callback) callback(rdata); + bt.msg(rdata); + }); + } + }, + }); + }); + }, + }); + }, + // 同步数据库 + sync_to_database: function (type) { + var that = this; + var data = []; + $('input[type="checkbox"].check:checked').each(function () { + if (!isNaN($(this).val())) data.push($(this).val()); + }); + console.log(type); + bt.database.sync_to_database({ type: type, ids: JSON.stringify(data) }, function (rdata) { + if (rdata.status) that.getDatabaseList(); + }); + }, + // 设置数据库密码 + set_data_pass: function (id, username, password) { + var that = this; + var bs = bt.database.set_data_pass(function (rdata) { + if (rdata.status) that.getDatabaseList(); + bt.msg(rdata); + }); + $('.name' + bs).val(username); + $('.id' + bs).val(id); + $('.password' + bs).val(password); + }, + // 显示备份列表 + showBackupList: function (id, dbname) { + var that = this; + bt.open({ + type: 1, + skin: 'demo-class', + area: '700px', + title: lan.database.backup_title + ' - [' + dbname + ']', + closeBtn: 2, + shift: 5, + shadeClose: false, + content: '\ +
    \ +
    \ +
    ', + success: function ($layer) { + var _that = this; + _that.$layer = $layer; + + this.renderBackupList(); + }, + // 备份列表 + renderBackupList: function () { + if (this.backupTable == null) { + var _that = this; + this.backupTable = bt_tools.table({ + el: '#dataBackupList', + url: '/data?action=getData', + param: { table: 'backup', search: id, type: '1', limit: 8 }, + autoHeight: true, + load: true, + default: '[' + dbname + '] The database backup list is empty', + column: [ + { + fid: 'name', + title: lan.database.backup_name, + width: 220, + fixed: true, + }, + { + fid: 'size', + title: lan.database.backup_size, + width: 80, + type: 'text', + template: function (row) { + return bt.format_size(row.size); + }, + }, + { + fid: 'addtime', + width: 150, + title: lan.database.backup_time, + }, + { + fid: 'opt', + title: lan.database.operation, + type: 'group', + width: 150, + align: 'right', + group: [ + { + title: lan.database.backup_re, + event: function (row) { + bt.database.input_sql(row.filename, dbname); + }, + }, + { + title: lan.database.download, + template: function (row) { + return '' + lan.database.download + ''; + }, + }, + { + title: lan.database.del, + event: function (row) { + bt.database.del_backup(row.id, function () { + _that.renderBackupList(); + that.getDatabaseList(); + }); + }, + }, + ], + }, + ], + tootls: [ + { + type: 'group', // 按钮组 + positon: ['left', 'top'], + list: [ + { + title: lan.database.backup, + active: true, + event: function (ev) { + // 备份数据库 + bt.database.backup_data(id, function (rdata) { + bt.msg(rdata); + if (rdata.status) { + _that.renderBackupList(); + that.getDatabaseList(); + } + }); + }, + }, + ], + }, + { + type: 'page', // 分页类型 + positon: ['right', 'bottom'], // 默认在右下角 + pageParam: 'p', // 分页请求字段,默认为 : p + page: 1, // 当前分页 默认:1 + numberParam: 'limit', // 分页数量请求字段默认为 : limit + defaultNumber: 8, // 分页数量默认 : 20条 + }, + ], + success: function () { + _that.setLayerCenter(); + }, + }); + } else { + this.backupTable.$refresh_table_list(); + } + }, + // 设置弹窗居中 + setLayerCenter: function () { + var $layer = this.$layer; + if (!$layer) return; + var height = $(window).height(); + var layerHeight = $layer.height(); + var top = (height - layerHeight) / 2; + $layer.css('top', top); + }, + }); + }, + // 显示导入 + showImport: function (dbname) { + var that = this; + var type = this.getType(); + var path = bt.get_cookie('backup_path') + '/database'; + var tips = bt.render_help([lan.database.input_ps1, lan.database.input_ps2, bt.os != 'Linux' ? lan.database.input_ps3.replace(/\/www.*\/database/, path) : lan.database.input_ps3]); + if (type == 'pgsql') { + tips = bt.render_help(['Only support sql', bt.os != 'Linux' ? lan.database.input_ps3.replace(/\/www.*\/database/, path) : lan.database.input_ps3]); + } + bt.open({ + type: 1, + shift: 5, + closeBtn: 2, + shadeClose: false, + title: lan.database.input_title_file + '[' + dbname + ']', + area: ['600px', '500px'], + content: '
    ' + tips + '
    ', + success: function () { + this.renderImportList(); + }, + renderImportList: function () { + var _that = this; + if (this.importTable) { + this.importTable.$refresh_table_list(); + } else { + var param = { p: 1, reverse: 'True', sort: 'mtime', tojs: 'GetFiles', showRow: 100, path: path }; + this.importTable = bt_tools.table({ + el: '#dataInputList', + url: '/files?action=GetDir', + load: true, + param: param, + height: 276, + default: 'No data', + dataFilter: function (rdata) { + var data = []; + for (var i = 0; i < rdata.FILES.length; i++) { + if (rdata.FILES[i] == null) continue; + var fmp = rdata.FILES[i].split(';'); + var ext = bt.get_file_ext(fmp[0]); + if (ext != 'sql' && ext != 'zip' && ext != 'gz' && ext != 'tgz') continue; + data.push({ name: fmp[0], size: fmp[1], etime: fmp[2] }); + } + return { data: data }; + }, + column: [ + { + fid: 'name', + title: lan.files.file_name, + width: 190, + template: function (item) { + return '' + item.name + ''; + } + }, + { + fid: 'etime', + title: lan.files.file_etime, + width: 130, + type: 'text', + template: function (item) { + var time = bt.format_data(item.etime); + return '' + time + ''; + }, + }, + { + fid: 'size', + title: lan.files.file_size, + width: 70, + type: 'text', + template: function (item) { + return bt.format_size(item.size); + }, + }, + { + type: 'group', + title: 'Operating', + align: 'right', + width: 90, + group: [ + { + title: lan.database.input, + event: function (row) { + var filePath = path + '/' + row.name; + bt.database.input_sql(filePath, dbname); + }, + }, + { + title: 'Del', + event: function (row) { + var fileName = path + '/' + row.name; + layer.confirm(lan.get('recycle_bin_confirm', [fileName]), { title: lan.files.del_file, closeBtn: 2, icon: 3 }, function (index) { + layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); + $.post('/files?action=DeleteFile', 'path=' + encodeURIComponent(fileName), function (rdata) { + layer.close(index); + bt.msg(rdata); + if (rdata.status) { + _that.renderImportList(); + } + }); + }); + }, + }, + ], + }, + ], + tootls: [ + { + type: 'group', // 按钮组 + positon: ['left', 'top'], + list: [ + { + title: lan.database.input_local_up, + event: function (ev) { + // 上传数据库 + var type = that.getType(); + var suffix = type == 'pgsql' ? '.sql' : '.sql,.gz,.tar.gz,.zip'; + bt_upload_file.open(path, suffix, lan.database.input_up_type, function () { + _that.renderImportList(); + }); + }, + }, + ], + }, + ], + }); + } + }, + }); + }, +}; + +var mysql = { + // 数据库表格实例 + databaseTable: null, + // 获取数据库列表 + getDatabaseList: function (config) { + if (this.databaseTable) { + config = config || {}; + if (config.isInit) this.databaseTable.config.page.page = 1; + this.databaseTable.$refresh_table_list(true); + return; + } + + var _that = this; + var type = database.getType(); + var param = { table: 'databases', search: '' }; + + $('#bt_database_table').empty(); + this.databaseTable = bt_tools.table({ + el: '#bt_database_table', + url: '/data?action=getData', + param: param, // 参数 + minWidth: '1000px', + autoHeight: true, + pageName: 'mysql', + default: 'The database list is empty', // 数据为空时的默认提示 + beforeRequest: function () { + var db_type_val = $('.database_type_select_filter').val(); + switch (db_type_val) { + case 'all': + delete param['db_type']; + delete param['sid']; + break; + case 0: + param['db_type'] = 0; + break; + default: + delete param['db_type']; + param['sid'] = db_type_val; + } + return param; + }, + // 排序 + sortParam: function (data) { + return { + order: data.name + ' ' + data.sort, + }; + }, + column: [ + { fid: 'id', type: 'checkbox', width: 20 }, + { + fid: 'name', + width: 120, + title: lan.database.add_name, + template: function (item) { + return '' + item.name + ''; + }, + }, + { + fid: 'username', + width: 120, + title: lan.database.user, + sort: function () { + database_table.$refresh_table_list(true); + }, + template: function (item) { + return '' + item.username + ''; + }, + }, + { + fid: 'password', + width: 220, + title: lan.database.add_pass, + type: 'password', + copy: true, + eye_open: true, + template: function (row) { + var id = row.id; + var username = row.username; + var password = row.password; + if (row.password === '') + return '' + lan.database.not_found_pwd_1 + '' + lan.database.not_found_pwd_2 + '' + lan.database.not_found_pwd_3 + '!'; + return true; + }, + }, + bt.public.get_quota_config('database'), + { + fid: 'backup', + title: lan.database.backup, + width: 130, + template: function (item) { + var backup = lan.database.backup_empty; + var _class = 'bt_warning'; + if (item.backup_count > 0) { + backup = lan.database.backup_ok; + _class = 'bt_success'; + } + var num = item.backup_count > 0 ? '(' + item.backup_count + ')' : ''; + // 备份链接 + var backupLink = '' + backup + num + ''; + // 导入链接 + var importLink = '' + lan.database.input + ''; + return '' + backupLink + ' | ' + importLink + ''; + }, + }, + { + fid: 'position', + title: lan.database.position, + type: 'text', + template: function (row) { + var type_column = '-'; + var host = row.conn_config.db_host; + var port = row.conn_config.db_port; + switch (row.db_type) { + case 0: + type_column = lan.database.add_auth_local; + break; + case 1: + type_column = (lan.database.cloud_database + '(' + host + ':' + port + ')').toString(); + break; + case 2: + var list = database.cloudDatabaseList; + $.each(list, function (index, item) { + var db_host = item.db_host; + var db_port = item.db_port; + if (row.sid == item.id) { + // 默认显示备注 + if (item.ps !== '') { + type_column = item.ps; + } else { + type_column = (lan.database.cloud_database + '(' + db_host + ':' + db_port + ')').toString(); + } + } + }); + break; + } + return '' + type_column + ''; + }, + }, + { + fid: 'ps', + title: lan.database.add_ps, + type: 'input', + blur: function (row, index, ev) { + bt.pub.set_data_ps( + { + id: row.id, + table: 'databases', + ps: ev.target.value, + }, + function (res) { + layer.msg(res.msg, res.status ? {} : { icon: 2 }); + } + ); + }, + keyup: function (row, index, ev) { + if (ev.keyCode === 13) { + $(this).blur(); + } + }, + }, + { + type: 'group', + title: lan.database.operation, + width: 280, + align: 'right', + group: [ + { + title: lan.database.admin, + tips: lan.database.admin_title, + hide: function (row) { + return row.db_type != 0; + }, + event: function (row) { + bt.database.open_phpmyadmin(row.name, row.username, row.password); + }, + }, + { + title: lan.database.auth, + tips: lan.database.set_db_auth, + hide: function (row) { + return row.db_type == 1; + }, + event: function (row) { + bt.database.set_data_access(row.username); + }, + }, + { + title: lan.database.tools, + tips: lan.database.mysql_tools, + event: function (row) { + _that.rep_tools(row.name); + }, + }, + { + title: lan.database.edit_pass, + tips: lan.database.edit_pass_title, + hide: function (row) { + return row.db_type == 1; + }, + event: function (row) { + database.set_data_pass(row.id, row.username, row.password); + }, + }, + { + title: lan.database.del, + tips: lan.database.del_title, + event: function (row) { + database.del_database(row.id, row.name, row); + }, + }, + ], + }, + ], + tootls: [ + { + // 按钮组 + type: 'group', + positon: ['left', 'top'], + list: [ + { + title: lan.database.add_title, + active: true, + event: function () { + database.getCloudServerList(function (list) { + bt.database.add_database(list, function (res) { + if (res.status) _that.getDatabaseList(); + }); + }); + }, + }, + { + title: lan.database.edit_root, + event: function () { + bt.database.set_root('root'); + }, + }, + { + title: 'phpMyAdmin', + event: function () { + bt.database.open_phpmyadmin('', 'root', bt.config.mysql_root); + }, + }, + { + title: lan.database.cloud_server, + event: function () { + database.open_cloud_server(); + }, + }, + { + title: 'Sync all', + style: { 'margin-left': '30px' }, + event: function () { + database.sync_to_database(0); + }, + }, + { + title: 'Get DB from server', + event: function () { + database.getCloudServerList(function (list) { + bt_tools.open({ + title: lan.database.select_position, + area: '450px', + skin: 'databaseCloudServer', + btn: [lan.public.confirm, lan.public.cancel], + content: { + class: 'pd20', + form: [ + { + label: lan.database.position, + group: { + type: 'select', + name: 'sid', + width: '260px', + list: list, + }, + }, + ], + }, + success: function ($layer) { + $layer.find('.layui-layer-content').css('overflow', 'inherit'); + }, + yes: function (form, index) { + bt.database.sync_database(form.sid, function (rdata) { + if (rdata.status) { + _that.getDatabaseList(); + layer.close(index); + } + }); + }, + }); + }); + }, + }, + // { + // title: 'Recycle bin', + // style: { + // 'position': 'absolute', + // 'right': '-5px' + // }, + // icon: 'trash', + // event: function () { + // bt.recycle_bin.open_recycle_bin(6) + // } + // } + ], + }, + { + type: 'batch', // batch_btn + positon: ['left', 'bottom'], + placeholder: 'Select batch operation', + buttonValue: 'Execute', + disabledSelectValue: 'Select the DB to execute!!', + selectList: [ + { + title: 'Sync to Server', + url: '/database?action=SyncToDatabases&type=1', + paramName: 'ids', //列表参数名,可以为空 + paramId: 'id', // 需要传入批量的id + th: 'Database Name', + refresh: true, + beforeRequest: function (list) { + var arry = []; + $.each(list, function (index, item) { + arry.push(item.id); + }); + return JSON.stringify(arry); + }, + success: function (res, list, that) { + layer.closeAll(); + var html = ''; + $.each(list, function (index, item) { + html += '\ + \ + ' + item.name + '\ + ' + res.msg + '\ + '; + }); + that.$batch_success_table({ + title: 'Batch sync selected', + th: 'Database Name', + area: '450px', + html: html, + }); + }, + }, + { + title: 'Database Backup', + url: type == 'mysql' ? 'database?action=ToBackup' : '/database/' + type + '/ToBackup', + load: true, + param: function (row) { + return type == 'mysql' ? { id: row.id } : {data:JSON.stringify({id: row.id})} + }, + // 手动执行,data参数包含所有选中的站点 + callback: function (that) { + that.start_batch({}, function (list) { + var html = ''; + for(var i=0;i
    '+ item.request.msg +'
    '; + } + _that.databaseTable.$batch_success_table({ + title: 'Batch backup database', + th: 'Database Name', + html: html, + area: '480px', + }); + _that.getDatabaseList(); + }); + } + }, + { + title: 'Delete database', + url: '/database?action=DeleteDatabase', + load: true, + refresh: true, + param: function (row) { + return { + id: row.id, + name: row.name, + }; + }, + callback: function (that) { + // 手动执行, data参数包含所有选中的站点 + var ids = []; + for (var i = 0; i < that.check_list.length; i++) { + ids.push(that.check_list[i].id); + } + database.del_database(ids, function (param) { + that.start_batch(param, function (list) { + layer.closeAll(); + var html = ''; + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '\ + \ + ' + item.name + '\ + \ + ' + item.request.msg + '\ + \ + '; + } + _that.databaseTable.$batch_success_table({ + title: 'Batch deletion', + th: 'Database Name', + html: html, + }); + _that.getDatabaseList(); + }); + }); + }, + }, + ], + }, + { + type: 'search', + positon: ['right', 'top'], + placeholder: lan.database.database_search, + searchParam: 'search', // 搜索请求字段,默认为 search + value: '', // 当前内容,默认为空 + }, + { + type: 'page', // 分页显示 + positon: ['right', 'bottom'], // 默认在右下角 + pageParam: 'p', //分页请求字段,默认为 : p + page: 1, //当前分页 默认:1 + numberParam: 'limit', //分页数量请求字段默认为 : limit + number: 20, //分页数量默认 : 20条 + numberList: [10, 20, 50, 100, 200], // 分页显示数量列表 + numberStatus: true, // 是否支持分页数量选择,默认禁用 + jump: true, //是否支持跳转分页,默认禁用 + }, + ], +success: function () { + $('.feedback-btn').remove(); + $('.tootls_group.tootls_top .pull-left').append(''); + + } + }); + database.renderCloudServerSelect(); + }, + // 数据库工具 + rep_tools: function (db_name) { + var that = this; + layer.open({ + type: 1, + title: lan.database.mysql_tools_box + ' [ ' + db_name + ' ]', + area: ['870px', '590px'], + closeBtn: 2, + shadeClose: false, + content: + '\ +
    \ +
    \ +
    \ +
    ' + lan.database.db_name + ': --
    \ +
    ' + lan.database.size + ': 0 B
    \ +
    \ +
    \ +
    \ +
    \ +
    ', + success: function (layero, index) { + var _that = this; + var tips = '
      \ +
    • ' + lan.database.tb_repair + '
    • \ +
    • ' + lan.database.tb_optimization + '
    • \ +
    • ' + lan.database.tb_change_engine + '
    • \ +
    '; + $('#databaseToolsTable').after(tips); + var repair = ''; + var optimization = ''; + var innoDB = ''; + var myisam = ''; + $('#db_tools').html(repair + optimization + innoDB + myisam); + + // 修复 + $('#db_tools').on('click', '.btn-tools-repair', function () { + _that.rep_database(db_name); + }); + + // 优化 + $('#db_tools').on('click', '.btn-tools-opt', function () { + _that.op_database(db_name); + }); + + // 转成innoDb + $('#db_tools').on('click', '.btn-tools-innodb', function () { + _that.to_database_type(db_name, null, 'InnoDB'); + }); + + // 转成MyISAM + $('#db_tools').on('click', '.btn-tools-myisam', function () { + _that.to_database_type(db_name, null, 'MyISAM'); + }); + + this.getTable(); + }, + getTable: function () { + $('#db_tools').addClass('hide'); + if (this.table) { + this.table.$refresh_table_list(); + return; + } + var _that = this; + var types = { InnoDB: 'InnoDB', MyISAM: 'MyISAM' }; + this.table = bt_tools.table({ + el: '#databaseToolsTable', + url: '/database?action=GetInfo', + param: { db_name: db_name }, + height: '355px', + autoHeight: true, + dataFilter: function (res) { + $('.db_tools_info .name span').text(res.database); + $('.db_tools_info .name span').attr('title', res.database); + $('.db_tools_info .size span').text(res.data_size); + return { data: res.tables }; + }, + handleSelectionChange: function (row, list, ev) { + if (list.length) { + $('#db_tools').removeClass('hide'); + } else { + $('#db_tools').addClass('hide'); + } + }, + column: [ + { + type: 'checkbox', + width: 20, + }, + { + fid: 'table_name', + title: lan.database.tb_name, + type: 'text', + width: 170, + template: function (row) { + return '' + row.table_name + ''; + }, + }, + { + fid: 'type', + title: lan.database.engine, + }, + { + fid: 'collation', + title: lan.database.character, + type: 'text', + width: 130, + template: function (item) { + return '' + item.collation + ''; + }, + }, + { + fid: 'rows_count', + title: lan.database.row_num, + width: 100, + }, + { + fid: 'data_size', + title: lan.database.size, + }, + { + type: 'group', + align: 'right', + title: lan.database.operation, + width: 250, + group: [ + { + title: lan.database.backup_re, + event: function (row) { + _that.rep_database(db_name, row.table_name); + }, + }, + { + title: lan.database.optimization, + event: function (row) { + _that.op_database(db_name, row.table_name); + }, + }, + { + template: function (row) { + var setType = row.type == 'InnoDB' ? types.MyISAM : types.InnoDB; + return lan.database.change + setType; + }, + event: function (row) { + var setType = row.type == 'InnoDB' ? types.MyISAM : types.InnoDB; + _that.to_database_type(db_name, row.table_name, setType); + }, + }, + ], + }, + ], + }); + + $('#databaseToolsTable').on('change', '.cust—checkbox-input', function () { + var isChecked = false; + var elems = $('#databaseToolsTable tbody .cust—checkbox'); + for (var i = 0; i < elems.length; i++) { + if ($(elems[i]).hasClass('active')) { + isChecked = true; + break; + } + } + if (isChecked) { + $('#db_tools').removeClass('hide'); + } else { + $('#db_tools').addClass('hide'); + } + }); + }, + // 修复表 + rep_database: function (db_name, tables) { + var _that = this; + var dbs = this.rep_checkeds(tables); + var loadT = layer.msg(lan.database.send_repair_command, { icon: 16, time: 0 }); + bt.send('ReTable', 'database/ReTable', { db_name: db_name, tables: JSON.stringify(dbs) }, function (rdata) { + layer.close(loadT); + bt.msg(rdata); + if (rdata.status) _that.getTable(); + }); + }, + // 优化表 + op_database: function (db_name, tables) { + var _that = this; + var dbs = this.rep_checkeds(tables); + var loadT = layer.msg(lan.database.send_opt_command, { icon: 16, time: 0 }); + bt.send('OpTable', 'database/OpTable', { db_name: db_name, tables: JSON.stringify(dbs) }, function (rdata) { + layer.close(loadT); + bt.msg(rdata); + if (rdata.status) _that.getTable(); + }); + }, + // 转换表类型 + to_database_type: function (db_name, tables, type) { + var _that = this; + var dbs = this.rep_checkeds(tables); + var loadT = layer.msg(lan.database.send_change_command, { icon: 16, time: 0, shade: [0.3, '#000'] }); + bt.send('AlTable', 'database/AlTable', { db_name: db_name, tables: JSON.stringify(dbs), table_type: type }, function (rdata) { + layer.close(loadT); + bt.msg(rdata); + if (rdata.status) _that.getTable(); + }); + }, + rep_checkeds: function (tables) { + var dbs = []; + if (tables) { + dbs.push(tables); + } else { + var table = this.table; + if (table) { + $.each(table.checkbox_list, function (index, item) { + var row = table.data[item]; + dbs.push(row.table_name); + }); + } + } + if (dbs.length < 1) { + layer.msg(lan.database.choose_at_least_one_tb, { icon: 2 }); + return false; + } + return dbs; + }, + }); + }, +} + +var sqlserver = { + // 服务器列表 + databaseTable: null, + // 渲染数据库列表 + getDatabaseList: function (config) { + if (this.databaseTable) { + config = config || {}; + if (config.isInit) this.databaseTable.config.page.page = 1; + this.databaseTable.$refresh_table_list(true); + return + } + var _that = this; + var type = database.getType(); + var param = { table: 'databases', search: '' } + this.databaseTable = bt_tools.table({ + el: '#bt_sqldatabase_table', + url: 'database/sqlserver/get_list', + param: param, //参数 + minWidth: '1000px', + load: true, + autoHeight: true, + default: "The database list is empty", // 数据为空时的默认提示 + pageName: 'database', + beforeRequest:function(beforeData){ + var db_type_val = $('.sqlserver_type_select_filter').val() + switch(db_type_val){ + case 'all': + delete param['db_type'] + delete param['sid'] + break; + case 0: + param['db_type'] = 0; + break; + default: + delete param['db_type']; + param['sid'] = db_type_val + } + if (beforeData.hasOwnProperty('data') && typeof beforeData.data === 'string') { + delete beforeData['data'] + return { data: JSON.stringify($.extend(param,beforeData)) } + } + return {data:JSON.stringify(param)} + }, + column:[ + {type: 'checkbox',width: 20}, + {fid: 'name', title: lan.database.add_name,type:'text'}, + {fid: 'username',title: lan.database.user,type:'text',sort:true}, + {fid:'password',title: lan.database.add_pass,type:'password',copy:true,eye_open:true}, + { + title: lan.database.position, + type: 'text', + width: 116, + template: function (row) { + var type_column = '-' + switch(row.db_type){ + case 0: + type_column = lan.database.add_auth_local + break; + case 1: + type_column = (lan.database.cloud_database + '('+row.conn_config.db_host+':'+row.conn_config.db_port+')').toString() + break; + case 2: + var list = database.cloudDatabaseList; + $.each(list,function(index,item){ + if(row.sid == item.id){ + if(item.ps !== ''){ // 默认显示备注 + type_column = item.ps + }else{ + type_column = (lan.database.cloud_database + '('+item.db_host+':'+item.db_port+')').toString() + } + } + }) + break; + } + return ''+type_column+'' + } + }, + { + fid: 'ps', + title: lan.database.add_ps, + type: 'input', + blur: function (row, index, ev) { + bt.pub.set_data_ps({ + id: row.id, + table: 'databases', + ps: ev.target.value + }, function (res) { + layer.msg(res.msg, (res.status ? {} : { + icon: 2 + })); + }); + }, + keyup: function (row, index, ev) { + if (ev.keyCode === 13) { + $(this).blur(); + } + } + }, + { + type: 'group', + title: lan.database.operation, + width: 220, + align: 'right', + group: [ + { + title: lan.database.edit_pass, + tips: lan.database.edit_pass_title, + hide: function (rows) { + return rows.db_type == 1 + }, + event: function (row) { + database.set_data_pass(row.id, row.username, row.password); + } + }, + { + title: lan.database.del, + tips: lan.database.del_title, + event: function (row) { + database.del_database(row.id, row.name, row); + } + } + ] + } + ], + sortParam: function (data) { + return { + 'order': data.name + ' ' + data.sort + }; + }, + tootls: [{ // 按钮组 + type: 'group', + positon: ['left', 'top'], + list: [{ + title: lan.database.add_title, + active: true, + event: function () { + database.getCloudServerList(function (list) { + bt.database.add_database(list, function (res) { + if (res.status) _that.getDatabaseList(); + }) + }); + } + },{ + title: lan.database.cloud_server, + event:function(){ + database.open_cloud_server(); + } + },{ + title: 'Sync all', + style:{'margin-left':'30px'}, + event: function () { + bt.database.sync_to_database({ type:0, ids: [] }, function (res) { + if (res.status) _that.getDatabaseList(); + }) + } + },{ + title: 'Get DB from server', + event: function () { + database.getCloudServerList(function (list) { + bt_tools.open({ + title: lan.database.select_position, + area: '450px', + btn: [lan.public.confirm, lan.public.cancel], + skin: 'databaseCloudServer', + content: { + 'class':'pd20', + form:[{ + label: lan.database.position, + group:{ + type: 'select', + name: 'sid', + width: '260px', + list: list + } + }] + }, + success: function (layers) { + $(layers).find('.layui-layer-content').css('overflow','inherit'); + }, + yes:function (form, layers, index){ + bt.database.sync_database(form.sid, function (rdata) { + if (rdata.status){ + _that.getDatabaseList(); + layer.close(layers) + } + }); + } + }); + }); + } + }] + },{ + type: 'batch', // batch_btn + positon: ['left', 'bottom'], + placeholder: 'Select batch operation', + buttonValue: 'Execute', + disabledSelectValue: 'Select the DB to execute!!', + selectList: [{ + title: 'Sync to Server', + url: '/database/' + type + '/SyncToDatabases', + paramName: 'data', //列表参数名,可以为空 + th: 'Database Name', + beforeRequest: function(list) { + var arry = []; + $.each(list, function (index, item) { + arry.push(item.id); + }); + return JSON.stringify({ids:JSON.stringify(arry),type:1}) + }, + success: function (res, list, that) { + layer.closeAll(); + var html = ''; + $.each(list, function (index, item) { + html += '\ + \ + ' + item.name + '\ + ' + res.msg + '\ + '; + }); + that.$batch_success_table({ + title: 'Batch sync selected', + th: 'Database Name', + area: '450px', + html: html + }); + } + },{ + title: 'Delete database', + url: '/database/' + type + '/DeleteDatabase', + load: true, + param: function (row) { + return { + data: JSON.stringify({ id: row.id, name: row.name }) + } + }, + callback: function (that) { // 手动执行,data参数包含所有选中的站点 + var ids = []; + for (var i = 0; i < that.check_list.length; i++) { + ids.push(that.check_list[i].id); + } + database.del_database(ids,function(param){ + that.start_batch(param, function (list) { + layer.closeAll() + var html = ''; + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '\ + \ + ' + item.name + '\ + \ + ' + item.request.msg + '\ + \ + '; + } + _that.databaseTable.$batch_success_table({ + title: 'Batch deletion', + th: 'Database Name', + html: html + }); + _that.getDatabaseList(); + }); + }) + } + }] + }, { + type: 'search', + positon: ['right', 'top'], + placeholder: lan.database.database_search, + searchParam: 'search', //搜索请求字段,默认为 search + value: '',// 当前内容,默认为空 + }, { //分页显示 + type: 'page', + positon: ['right', 'bottom'], // 默认在右下角 + pageParam: 'p', //分页请求字段,默认为 : p + page: 1, //当前分页 默认:1 + numberParam: 'limit', //分页数量请求字段默认为 : limit + number: 20, //分页数量默认 : 20条 + numberList: [10, 20, 50, 100, 200], // 分页显示数量列表 + numberStatus: true, // 是否支持分页数量选择,默认禁用 + jump: true, //是否支持跳转分页,默认禁用 + }], + }); + database.renderCloudServerSelect(); + } +} + +var mongodb = { + // 数据库表格实例 + databaseTable: null, + // 是否开启安全认证 + mongoDBAccessStatus: false, + // 获取数据库列表 + getDatabaseList :function() { + if (this.databaseTable) { + this.databaseTable.$refresh_table_list(true); + return; + } + + var _that = this; + var type = database.getType(); + var param = { table: 'databases', search: '' } + + $('#bt_mongodb_table').empty(); + this.databaseTable = bt_tools.table({ + el: '#bt_mongodb_table', + url: 'database/' + type + '/get_list', + param: param, //参数 + minWidth: '1000px', + load: true, + autoHeight: true, + default: 'The database list is empty', // 数据为空时的默认提示 + pageName: 'database', + beforeRequest:function(beforeData){ + var db_type_val = $('input[name="db_type_filter_' + type + '"]').val(); + switch(db_type_val){ + case 'all': + delete param['db_type'] + delete param['sid'] + break; + case 0: + param['db_type'] = 0; + break; + default: + delete param['db_type']; + param['sid'] = db_type_val } - return dbs; - }, - sync_to_database: function (type) { - var data = []; - $('input[type="checkbox"].check:checked').each(function () { - if (!isNaN($(this).val())) data.push($(this).val()); - }); - bt.database.sync_to_database({ type: type, ids: JSON.stringify(data) }, function (rdata) { - if (rdata.status) database_table.$refresh_table_list(true); - }); - }, - add_database: function () { - bt.database.add_database(function (rdata) { - if (rdata.status) database_table.$refresh_table_list(true); - }) - }, - batch_database: function (type, arr, result) { - if (arr == undefined) { - arr = []; - result = { count: 0, error_list: [] }; - $('input[type="checkbox"].check:checked').each(function () { - var _val = $(this).val(); - if (!isNaN(_val)) arr.push($(this).parents('tr').data('item')); - }) - bt.show_confirm(lan.database.del_all_title, "" + lan.get('del_all_database', [arr.length]) + "", function () { - bt.closeAll(); - database.batch_database(type, arr, result); - }); - return; + if (beforeData.hasOwnProperty('data') && typeof beforeData.data === 'string') { + delete beforeData['data'] + return { data: JSON.stringify($.extend(param,beforeData)) } } - var item = arr[0]; - switch (type) { - case 'del': - if (arr.length < 1) { - database_table.$refresh_table_list(true); - bt.msg({ msg: lan.get('del_all_database_ok', [result.count]), icon: 1, time: 5000 }); - return; - } - bt.database.del_database({ id: item.id, name: item.name }, function (rdata) { - if (rdata.status) { - result.count += 1; + return {data:JSON.stringify(param)} + }, + sortParam: function (data) { + return { + 'order': data.name + ' ' + data.sort + }; + }, + column:[ + { + type: 'checkbox', + width: 20 + }, + { + fid: 'name', + title: lan.database.add_name, + type:'text' + }, + { + fid: 'username', + title: lan.database.user, + type:'text', + sort: true + }, + { + fid: 'password', + title: lan.database.add_pass, + type:'password', + copy:true, + eye_open:true + }, + { + fid:'backup', + title: lan.database.backup, + width: 130, + template: function (item) { + var backup = lan.database.backup_empty; + var _class = "bt_warning"; + if (item.backup_count > 0) { + backup = lan.database.backup_ok; + _class = 'bt_success'; + } + var num = item.backup_count > 0 ? '(' + item.backup_count + ')' : ''; + // 备份链接 + var backupLink = '' + backup + num + ''; + // 导入链接 + var importLink = '' + lan.database.input + ''; + return '' + backupLink + ' | ' + importLink + ''; + } + }, + { + fid: 'position', + title: lan.database.position, + type: 'text', + width: 120, + template: function (row) { + var type_column = '-'; + var host = row.conn_config.db_host; + var port = row.conn_config.db_port; + switch(row.db_type){ + case 0: + type_column = lan.database.add_auth_local; + break; + case 1: + type_column = (lan.database.cloud_database + '(' + host + ':' + port + ')').toString(); + break; + case 2: + var list = database.cloudDatabaseList; + $.each(list, function(index, item) { + var db_host = item.db_host; + var db_port = item.db_port; + if (row.sid == item.id) { + // 默认显示备注 + if (item.ps !== '') { + type_column = item.ps } else { - result.error_list.push({ name: item.item, err_msg: rdata.msg }); + type_column = (lan.database.cloud_database + '(' + db_host + ':' + db_port + ')').toString(); } - arr.splice(0, 1) - database.batch_database(type, arr, result); + } }) break; - } - }, - del_database: function (wid, dbname, obj, callback) { - var rendom = bt.get_random_code(); - var num1 = rendom['num1']; - var num2 = rendom['num2']; - var title = ''; - var tips = 'The deletion may affect the business!'; - title = typeof dbname === "function" ?'Batch delete databases':'Delete database [ '+ dbname +' ]'; - if (obj && obj.db_type > 0) { - tips = lan.database.del_cloud_database_tips; - } - layer.open({ - type:1, - title:title, - icon:0, - skin:'delete_site_layer', - area: "530px", - closeBtn: 2, - shadeClose: true, - content:"
    " + - "" + - "
    " + tips + "
    " + - "
    Note: The data is priceless, please operate with caution! ! !"+(!recycle_bin_db_open?'

    Risk: The DB recycle bin is not enabled, deleting will disappear forever!':'')+"
    " + - "
    " + lan.bt.cal_msg + ""+ num1 +" + "+ num2 +"=
    " + - "
    ", - btn:[lan.public.ok,lan.public.cancel], - yes:function(indexs){ - var vcodeResult = $('#vcodeResult'),data = {id: wid,name: dbname}; - if(vcodeResult.val() === ''){ - layer.tips('Calculation result cannot be empty', vcodeResult, {tips: [1, 'red'],time:3000}) - vcodeResult.focus() - return false; - }else if(parseInt(vcodeResult.val()) !== (num1 + num2)){ - layer.tips('Incorrect calculation result', vcodeResult, {tips: [1, 'red'],time:3000}) - vcodeResult.focus() - return false; - } - if(typeof dbname === "function"){ - delete data.id; - delete data.name; - } - layer.close(indexs) - var arrs = wid instanceof Array ? wid : [wid] - var ids = JSON.stringify(arrs), countDown = 9; - if (arrs.length == 1) countDown = 4 - title = typeof dbname === "function" ?'Confirm the information again, delete the database in batches':'Confirm the information again, Delete Database [ ' + dbname + ' ]'; - var loadT = bt.load('Checking database data information, please wait...') - bt.send('check_del_data', 'database/check_del_data', {ids: ids}, function (res) { - loadT.close() - layer.open({ - type:1, - title:title, - closeBtn: 2, - skin: 'verify_site_layer_info active', - area: '740px', - content: '
    ' + - '' + - '
    aaPanel kindly reminds you, please calm down for a few seconds, and then confirm whether you want to delete the data.
    ' + - '
    ' + - '
    ' + - '
    ' + - '
    ' + - '
    ' + - '
    ' + - '
    Risk: The database recycle bin is not enabled. After the database is deleted, the database will disappear forever!
    ' + - '
    Please read the above information to be deleted carefully to prevent the database from being deleted by mistake. Confirm the deletion and there is still ' + countDown + ' seconds to operate.
    ' + - '
    ', - btn: ['Delete (Can be operated after ' + countDown + ' seconds)', 'Cancel'], - success: function (layers) { - var html = '', rdata = res.data; - var filterData = rdata.filter(function(el){ - return ids.indexOf(el.id) != -1 - }) - for (var i = 0; i < filterData.length; i++) { - var item = filterData[i], newTime = parseInt(new Date().getTime() / 1000), - t_icon = ''; - - database_html = (function(item){ - var is_time_rule = (newTime - item.st_time) > (86400 * 30) && (item.total > 1024 * 10), - is_database_rule = res.db_size <= item.total, - database_time = bt.format_data(item.st_time, 'yyyy-MM-dd'), - database_size = bt.format_size(item.total); - - var f_size = ' ' + database_size + ' ' + (is_database_rule ? t_icon : ''); - var t_size = 'Note: This database is large and may be important data. Please operate with caution.\nDatabase: ' + database_size; - - return '
    ' + - 'Database: ' + item.name + '' + - ' 0 ? 'title="' + t_size+'"' : '')+'>Size: ' + f_size +'' + - 'Ctime:' + database_time + '' + - '
    ' - }(item)) - if(database_html !== '') html += '
    ' + database_html +'
    '; - } - if(html === '') html = '
    No data
    ' - $('.check_layer_content').html(html) - var interVal = setInterval(function () { - countDown--; - $(layers).find('.layui-layer-btn0').text('Delete (Can be operated after ' + countDown + ' seconds)') - $(layers).find('.check_layer_message span').text(countDown) - }, 1000); - setTimeout(function () { - $(layers).find('.layui-layer-btn0').text('Delete'); - $(layers).find('.check_layer_message').html('Note: Please read carefully the above information to be deleted to prevent the database from being deleted by mistake') - $(layers).removeClass('active'); - clearInterval(interVal) - }, countDown * 1000) - }, - yes:function(indes,layers){ - if($(layers).hasClass('active')){ - layer.tips('Please confirm the message, there are '+ countDown +' seconds left', $(layers).find('.layui-layer-btn0') , {tips: [1, 'red'],time:3000}) - return; - } - if(typeof dbname === "function"){ - dbname(data) - }else{ - bt.database.del_database(data, function (rdata) { - layer.closeAll() - if(rdata.status) database_table.$refresh_table_list(true); - if (callback) callback(rdata); - bt.msg(rdata); - }) - } - } - }) - }) } - }) - }, - set_data_pass: function (id, username, password) { - var bs = bt.database.set_data_pass(function (rdata) { - if(rdata.status) database_table.$refresh_table_list(true); - bt.msg(rdata); - }) - $('.name' + bs).val(username); - $('.id' + bs).val(id); - $('.password' + bs).val(password); - }, - database_detail: function (id, dataname, page) { - if (page == undefined) page = '1'; - var loadT = bt.load(lan.public.the_get); - bt.pub.get_data('table=backup&search=' + id + '&limit=5&type=1&tojs=database.database_detail&p=' + page, function (frdata) { - loadT.close(); - var ftpdown = ''; - var body = ''; - var port; - frdata.page = frdata.page.replace(/'/g, '"').replace(/database.database_detail\(/g, "database.database_detail(" + id + ",'" + dataname + "',"); - if ($('#DataBackupList').length <= 0) { - bt.open({ - type: 1, - skin: 'demo-class', - area: ['700px', '400px'], - title: lan.database.backup_title, - closeBtn: 2, - shift: 5, - shadeClose: false, - content: "
    " - }); - } - setTimeout(function () { - $('.databackup_page').html(frdata.page); - var _tab = bt.render({ - table: '#DataBackupList', - columns: [ - { field: 'name', title: lan.database.backup_name, templet: function (item) { - var _opt = ''+item.name+'' - return _opt; - } - }, - { - field: 'size', title: lan.database.backup_size, templet: function (item) { - return bt.format_size(item.size); - } - }, - { field: 'addtime', title: lan.database.backup_time }, - { - field: 'opt', title: lan.database.operation, align: 'right', templet: function (item) { - var _opt = ''+lan.database.backup_re+' | '; - _opt += ''+lan.database.download+' | '; - _opt += ''+lan.database.del+'' - return _opt; - } - }, - ], - data: frdata.data - }); - $('#btn_data_backup').unbind('click').click(function () { - bt.database.backup_data(id, dataname, function (rdata) { - if (rdata.status) database.database_detail(id, dataname); - if(rdata.status) database_table.$refresh_table_list(true); - if (!rdata.status) layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); - }) - }) - }, 100) - }); - }, - upload_files: function (name) { - var path = bt.get_cookie('backup_path') + "/database/"; - bt_upload_file.open(path, '.sql,.gz,.tar.gz,.zip', lan.database.input_up_type, function () { - database.input_database(name); - }); - }, - // 打开远程服务器列表弹框 - open_cloud_server: function () { - var that = this; - bt_tools.open({ - title: lan.database.cloud_server_list, - area: ['860px', '400px'], - btn: false, - skin: 'databaseCloudServer', - content: '
    ', - success: function () { - that.dbCloudServerTable = bt_tools.table({ - el: '#db_cloud_server_table', - url: '/database?action=GetCloudServer', - default: lan.database.cloud_server_empty, - height: 300, - column: [ - { - fid: 'db_host', - title: lan.database.server_address, - width: 150, - template: function (item) { - return '' + item.db_host + ''; - } - }, - { - fid: 'db_port', - width: 100, - title: lan.database.port - }, - { - fid: 'db_user', - width: 120, - title: lan.database.user - }, - { - fid: 'db_password', - width: 190, - type: 'password', - title: lan.database.add_pass, - copy: true, - eye_open: true - }, - { - fid: 'ps', - title: lan.database.add_ps, - template: function (item) { - var ps = item.ps; - return '' + ps + ''; - } - }, - { - type: 'group', - width: 130, - title: lan.database.operation, - align: 'right', - group: [ - { - title: 'Get DB', - event: function (row) { - bt.database.sync_database(row.id, function (rdata) { - if (rdata.status) { - database_table.$refresh_table_list(true); - } - }); - } - }, - { - title: lan.public.edit, - event: function (row) { - that.render_db_cloud_server_view(row, true); - } - }, - { - title: lan.public.del, - event: function (row) { - that.del_db_cloud_server(row); - } - } - ] - } - ], - tootls:[ - { - type: 'group', - positon: ['left', 'top'], - list:[{ - title: lan.public.add + ' ' + lan.database.cloud_server, - active: true, - event: function() { - that.render_db_cloud_server_view(); - } - }] - } - ], - success: function (config) { - that.cloudDatabaseList = config.data; - } - }); - } - }); - }, - // 添加/编辑远程服务器视图 - render_db_cloud_server_view: function(config, is_edit) { - var that = this; - if (!config) { - config = { - db_host: '', - db_port: '3306', - db_user: '', - db_password: '', - db_user: 'root', - ps: '' - }; - } - var title = is_edit ? lan.public.edit : lan.public.add; - bt_tools.open({ - title: title + ' ' + lan.database.cloud_server, - area: '450px', - btn: [lan.public.save, lan.public.cancel], - skin: 'addCloudServerProject', - content:{ - 'class':'pd20', - form:[ - { - label: lan.database.server_address, - group:{ - type: 'text', - name: 'db_host', - width: '260px', - value: config.db_host, - placeholder: lan.database.input_server_address, - event: function () { - $('[name=db_host]').on('input', function () { - $('[name=db_ps]').val($(this).val()); - }); - } - } - }, - { - label: lan.database.port, - group: { - type: 'number', - name: 'db_port', - width: '260px', - value: config.db_port, - placeholder: lan.database.input_port - } - }, - { - label: lan.database.user, - group: { - type: 'text', - name: 'db_user', - width: '260px', - value: config.db_user, - placeholder: lan.database.input_username - } - }, - { - label: lan.database.add_pass, - group:{ - type: 'text', - name: 'db_password', - width: '260px', - value: config.db_password, - placeholder: lan.database.input_password - } - }, - { - label: lan.database.add_ps, - group:{ - type: 'text', - name: 'db_ps', - width: '260px', - value: config.ps, - placeholder: lan.database.server_note - } - }, - { - group: { - type: 'help', - style: {'margin-top':'0'}, - list: [ - lan.database.remote_help_1, - lan.database.remote_help_2, - lan.database.remote_help_3, - lan.database.remote_help_4 - ] - } - } - ] - }, - yes: function (form, indexs) { - var interface = is_edit ? 'ModifyCloudServer' : 'AddCloudServer'; - if (form.db_host == '') return layer.msg(lan.database.input_server_address, { icon: 2 }); - if (form.db_port == '') return layer.msg(lan.database.input_port, { icon: 2 }); - if (form.db_user == '') return layer.msg(lan.database.input_username, { icon: 2 }); - if (form.db_password == '') return layer.msg(lan.database.input_password, { icon: 2 }); - - if (is_edit) form['id'] = config['id']; - - var tips = is_edit ? lan.database.edit_cloud_server_tips : lan.database.add_cloud_server_tips; - var layerT = bt.load(tips); - bt.send(interface, 'database/' + interface, form, function (rdata) { - layerT.close(); - if (rdata.status) { - that.dbCloudServerTable.$refresh_table_list(); - layer.close(indexs); - layer.msg(rdata.msg, { icon: 1 }); - } else { - layer.msg(rdata.msg, { - time:0,icon:2,closeBtn: 2, shade: .3, area: '650px' - }); - } - }); - } - }); - }, - // 删除远程服务器管理关系 - del_db_cloud_server: function (row) { - var that = this; - bt.confirm({ - title: lan.public.del + ' [' + row.db_host + '] ' + lan.database.cloud_server, - msg: lan.database.del_cloud_server_tips + '!' - }, function () { - bt.send('RemoveCloudServer', 'database/RemoveCloudServer', { - id: row.id - }, function (rdata) { - if (rdata.status) { - database_table.$refresh_table_list(true); - that.dbCloudServerTable.$refresh_table_list(true); - } - bt.msg(rdata); + return '' + type_column + ''; + } + }, + { + fid: 'ps', + title: lan.database.add_ps, + type: 'input', + blur: function (row, index, ev) { + bt.pub.set_data_ps({ + id: row.id, + table: 'databases', + ps: ev.target.value + }, function (res) { + layer.msg(res.msg, (res.status ? {} : { + icon: 2 + })); }); - }) - }, - input_database: function (name) { - var path = bt.get_cookie('backup_path') + "/database"; - bt.send('get_files', 'files/GetDir', 'reverse=True&sort=mtime&tojs=GetFiles&p=1&showRow=100&path=' + path, function (rdata) { - var data = []; - for (var i = 0; i < rdata.FILES.length; i++) { - if (rdata.FILES[i] == null) continue; - var fmp = rdata.FILES[i].split(";"); - var ext = bt.get_file_ext(fmp[0]); - if (ext != 'sql' && ext != 'zip' && ext != 'gz' && ext != 'tgz') continue; - data.push({ name: fmp[0], size: fmp[1], etime: fmp[2], }) + }, + keyup: function (row, index, ev) { + if (ev.keyCode === 13) { + $(this).blur(); } - if ($('#DataInputList').length <= 0) { - bt.open({ - type: 1, - skin: 'demo-class', - area: ["600px", "530px"], - title: lan.database.input_title_file+'['+name+']', - closeBtn: 2, - shift: 5, - shadeClose: false, - content: '
    ' - + '
    ' - + '
    ' - + bt.render_help([lan.database.input_ps1, lan.database.input_ps2, (bt.os != 'Linux' ? lan.database.input_ps3.replace(/\/www.*\/database/, path) : lan.database.input_ps3)]) - + '
    ' - }); + } + }, + { + type: 'group', + title: lan.database.operation, + width: 220, + align: 'right', + group: [{ + title: lan.database.edit_pass, + tips: lan.database.edit_pass_title, + hide:function(rows){return rows.db_type == 1}, + event: function (row) { + database.set_data_pass(row.id, row.username, row.password); } - setTimeout(function () { - var _tab = bt.render({ - table: '#DataInputList', - columns: [ - { field: 'name', title: lan.files.file_name, width:190 }, - { - field: 'etime', title: lan.files.file_etime, width:130, templet: function (item) { - return bt.format_data(item.etime); - } - }, - { - field: 'size', title: lan.files.file_size, width:70, templet: function (item) { - return bt.format_size(item.size) - } - }, - { - field: 'opt', title: 'Operating', align: 'right', width:90, templet: function (item) { - return ''+lan.database.input+' | Del'; - } - }, - ], - data: data - }); - }, 100) - }) - }, - remove_input_file: function (fileName,name) { - layer.confirm(lan.get('recycle_bin_confirm', [fileName]), { title: lan.files.del_file, closeBtn: 2, icon: 3 }, function (index) { - layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] }); - $.post('/files?action=DeleteFile', 'path=' + encodeURIComponent(fileName), function (rdata) { - layer.close(index); - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); - database.input_database(name); - }); - }); - }, - //浏览器窗口大小变化时调整内容宽度 - forSize:function(){ - var ticket_with = $('#DataBody').parent().width(), - td_width = ticket_with*0.8-30-$('#DataBody th:eq(2)').width()-$('#DataBody th:eq(3)').width()-$('#DataBody th:eq(4)').width()-$('#DataBody th:eq(6)').width(); - $('#DataBody .webNote').css('max-width',td_width); - } + }, { + title: lan.database.del, + tips: lan.database.del_title, + event: function (row) { + database.del_database(row.id, row.name, row); + } + }] + } + ], + tootls: [{ // 按钮组 + type: 'group', + positon: ['left', 'top'], + list: [ + { + title: lan.database.add_title, + active: true, + event: function () { + database.getCloudServerList(function (list) { + bt.database.add_database(list, function (res) { + if (res.status) _that.getDatabaseList(); + }); + }); + } + }, + { + title: lan.database.edit_root, + event: function (ev) { + if (_that.mongoDBAccessStatus) { + bt.database.set_root('mongo'); + } else { + $(ev.currentTarget).next().click(); + layer.msg(lan.database.safety_auth_warn1, { icon: 0 }); + } + } + }, + { + title: lan.database.safety_auth, + event: function () { + layer.open({ + type: 1, + closeBtn: 2, + shift: 5, + shadeClose: false, + title: lan.database.safety_auth, + area: '400px', + btn: false, + content:'\ +
    \ +
    \ + ' + lan.database.safety_auth + '\ +
    \ +
    \ + \ + \ +
    \ +
    \ +
    \ +
      \ +
    • ' + lan.database.safety_auth_tips1 + '
    • \ +
    \ +
    ', + success:function(){ + var status = _that.mongoDBAccessStatus + $('#mongodb_access').attr('checked', status) + + $('#mongodb_access').click(function(){ + var _status = $(this).prop('checked') + bt_tools.send({ + url: 'database/' + type + '/set_auth_status', + data:{ data: JSON.stringify({ status: _status ? 1 : 0 })}, + verify: true + }, function (rdata) { + if (rdata.status) { + _that.mongoDBAccessStatus = _status + layer.msg(rdata.msg, { icon: 1 }); + } + }, lan.database.safety_auth_req1) + }) + } + }) + } + }, + { + title: lan.database.cloud_server, + event:function(){ + database.open_cloud_server(); + } + }, + { + title: 'Sync all', + style:{'margin-left':'30px'}, + event: function () { + bt.database.sync_to_database({type:0,data:[]},function(res){ + if(res.status) _that.getDatabaseList(); + }) + } + }, + { + title: 'Get DB from server', + event: function () { + database.getCloudServerList(function (list) { + bt_tools.open({ + title: lan.database.select_position, + area: '450px', + btn: [lan.public.confirm, lan.public.cancel], + skin: 'databaseCloudServer', + content: { + 'class':'pd20', + form:[{ + label: lan.database.position, + group:{ + type: 'select', + name: 'sid', + width: '260px', + list: list + } + }] + }, + success: function (layers) { + $(layers).find('.layui-layer-content').css('overflow','inherit'); + }, + yes:function (form, layers, index){ + bt.database.sync_database(form.sid, function (rdata) { + if (rdata.status){ + _that.getDatabaseList(); + layer.close(layers) + } + }); + } + }); + }); + } + } + ] + }, + { + type: 'batch', //batch_btn + positon: ['left', 'bottom'], + placeholder: 'Select batch operation', + buttonValue: 'Execute', + disabledSelectValue: 'Select the DB to execute!!', + selectList: [ + { + title: 'Sync to Server', + url: '/database/' + type + '/SyncToDatabases', + paramName: 'data', //列表参数名,可以为空 + th: 'Database Name', + beforeRequest: function(list) { + var arry = []; + $.each(list, function (index, item) { + arry.push(item.id); + }); + return JSON.stringify({ids:JSON.stringify(arry),type:1}) + }, + success: function (res, list, that) { + layer.closeAll(); + var html = ''; + $.each(list, function (index, item) { + html += '\ + \ + ' + item.name + '\ + ' + res.msg + '\ + '; + }); + that.$batch_success_table({ + title: 'Batch sync selected', + th: 'Database Name', + area: '450px', + html: html + }); + } + }, + { + title: 'Database Backup', + url: type == 'mysql' ? 'database?action=ToBackup' : '/database/' + type + '/ToBackup', + load: true, + param: function (row) { + return type == 'mysql' ? { id: row.id } : {data:JSON.stringify({id: row.id})} + }, + // 手动执行,data参数包含所有选中的站点 + callback: function (that) { + that.start_batch({}, function (list) { + var html = ''; + for(var i=0;i
    '+ item.request.msg +'
    '; + } + _that.databaseTable.$batch_success_table({ + title: 'Batch backup database', + th: 'Database Name', + html: html, + area: '480px', + }); + _that.getDatabaseList(); + }); + } + }, + { + title: 'Delete database', + url: '/database/' + type + '/DeleteDatabase', + load: true, + param: function (row) { + return { + data: JSON.stringify({ id: row.id, name: row.name }) + } + }, + callback: function (that) { // 手动执行,data参数包含所有选中的站点 + var ids = []; + for (var i = 0; i < that.check_list.length; i++) { + ids.push(that.check_list[i].id); + } + database.del_database(ids,function(param){ + that.start_batch(param, function (list) { + layer.closeAll() + var html = ''; + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '\ + \ + ' + item.name + '\ + \ + ' + item.request.msg + '\ + \ + '; + } + _that.databaseTable.$batch_success_table({ + title: 'Batch deletion', + th: 'Database Name', + html: html + }); + _that.getDatabaseList(); + }); + }) + } + }] + }, + { + type: 'search', + positon: ['right', 'top'], + placeholder: lan.database.database_search, + searchParam: 'search', //搜索请求字段,默认为 search + value: '',// 当前内容,默认为空 + }, + { + type: 'page', // 分页显示 + positon: ['right', 'bottom'], // 默认在右下角 + pageParam: 'p', //分页请求字段,默认为 : p + page: 1, //当前分页 默认:1 + numberParam: 'limit', //分页数量请求字段默认为 : limit + number: 20, //分页数量默认 : 20条 + numberList: [10, 20, 50, 100, 200], // 分页显示数量列表 + numberStatus: true, // 是否支持分页数量选择,默认禁用 + jump: true, //是否支持跳转分页,默认禁用 + } + ] + }); + + database.renderCloudServerSelect(); + } } -database.init(); \ No newline at end of file + +var redis = { + // 数据库表格实例 + databaseTable: null, + redisDBList: [], + // 当前远程信息 + cloudInfo: { + sid: 0, + title: 'local server' + }, + event: function () { + var that = this; + // 添加Key + $('.addRedisDB').click(function () { + that.set_redis_library(); + }); + // 远程服务器 + $('.RedisCloudDB').click(function () { + database.open_cloud_server(); + }); + // 备份 + $('.backupRedis').click(function () { + that.backup_redis_list() + }); + // 清空所有 + $('.emptyRedisDB').click(function () { + that.choose_redis_list(); + }); + // 远程服务器列表点击事件 + $('#bt_redis_view').on('change', '.redis_type_select_filter', function(){ + that.cloudInfo.sid = $(this).val(); + that.cloudInfo.title = $(this).find('option:selected').text(); + that.render_redis_content(); + }); + }, + getDatabaseList: function () { + var that = this; + this.cloudInfo.sid = database.cloudDatabaseList.length == 0 ? 0 : database.cloudDatabaseList[0].id + this.cloudInfo.title = database.cloudDatabaseList.length == 0 ? 'local server' : database.cloudDatabaseList[0].ps + + // 远程服务器列表 + that.renderServerSelect(); + + // 渲染redis列表 + this.render_redis_content() + }, + // 渲染redis选择器 + renderServerSelect: function () { + var _option = ''; + $.each(database.cloudDatabaseList, function (index, item) { + var _tips = item.ps != '' ? item.ps : item.db_host; + _option += ''; + }); + if ($('#bt_redis_view .tool_list_right .redis_type_select_filter').length === 0) { + $('#bt_redis_view .tool_list_right').append(''); + } else { + $('#bt_redis_view .tool_list_right .redis_type_select_filter').html(_option); + } + }, + // 渲染redis列表 + render_redis_content: function (id) { + var that = this; + $('#redis_content_tab').remove(); + $('#bt_redis_view').append('\ +
    \ +
    \ +
    \ +
    '); + var tabHTML = ''; + + bt_tools.send({ url: 'database/redis/get_list', data: { data: JSON.stringify({ sid: that.cloudInfo.sid }) } }, function (rdata) { + that.redisDBList = rdata; + $.each(rdata, function (index, item) { + tabHTML += '' + item.name + '(' + item.keynum + ')'; + }); + $('#redis_content_tab .tab-nav').html(tabHTML); + + setTimeout(function () { + if (id) { + $('#redis_content_tab .tab-nav span:contains(DB' + id + ')').click(); + } else { + if (rdata.length == 0) { + $('#redis_content_tab .tab-nav').remove(); + that.render_redis_table(0); + } else { + $('#redis_content_tab .tab-nav span:eq(0)').click(); + } + } + }, 50); + + // redis数据库点击事件 + $('#redis_content_tab .tab-nav span').click(function () { + var _id = $(this).data('id'); + $(this).addClass('on').siblings().removeClass('on'); + that.render_redis_table(_id); + }); + }); + }, + render_redis_table: function (id) { + if (this.databaseTable && id == undefined) { + this.databaseTable.$refresh_table_list(true); + return; + } + + var that = this; + $('.redis_table_content').empty(); + this.databaseTable = bt_tools.table({ + el: '.redis_table_content', + url: 'database/redis/get_db_keylist', + param: { db_idx: id }, //参数 + minWidth: '1000px', + autoHeight: true, + load: true, + default: 'The database list is empty', // 数据为空时的默认提示 + pageName: 'database', + beforeRequest:function(beforeData){ + var db_type_val = that.cloudInfo.sid; + var param = {}; + switch (db_type_val) { + case 0: + param['db_type'] = 0; + break; + default: + delete param['db_type']; + param['sid'] = db_type_val; + } + if (beforeData.hasOwnProperty('data') && typeof beforeData.data === 'string') { + delete beforeData['data']; + return { data: JSON.stringify($.extend(param, { db_idx: id }, beforeData)) }; + } + return { data: JSON.stringify($.extend(param, { db_idx: id, limit: beforeData.limit })) }; + }, + column:[ + { type: 'checkbox', width: 20 }, + { fid: 'name', title: lan.public_backup.key }, + { + fid: 'val', + title: lan.public_backup.value, + type:'text', + template: function (row) { + var _val = $('
    ').text(row.val) + return '
    '+_val.text()+'
    '; + }, + event: function(row,index,ev,key){ + if($(ev.target).hasClass('btcopy')){ + bt.pub.copy_pass(row.val.replaceAll(""", "\"")); + } + } + }, + { fid: 'type', title: lan.database.data_type }, + { fid: 'len', title: lan.database.data_len }, + { + fid: 'endtime', + title: lan.database.term_of_validity, + type: 'text', + template: function (row) { + return that.reset_time_format(row.endtime); + }, + }, + { + type: 'group', + title: lan.database.operation, + width: 220, + align: 'right', + group: [ + { + title: lan.public.edit, + tips: lan.database.edit_data, + hide: function (rows) { + return rows.type == 'string' || rows.type == 'int' ? false : true; + }, + event: function (row) { + row.db_idx = id; + that.set_redis_library(row); + }, + }, + { + title: lan.public.del, + tips: lan.database.del_data, + event: function (row) { + layer.confirm( + lan.database.del_key_value_tips + ' [' + row.name + ']?', + { + title: lan.database.del_key_value, + closeBtn: 2, + icon: 0, + }, + function (index) { + bt_tools.send({ url: 'database/redis/del_redis_val', data: { data: JSON.stringify({ db_idx: id, key: row.name, sid: that.cloudInfo.sid }) } }, function (rdata) { + if (rdata.status) { + that.render_redis_table(); + that.change_tabs_num(); + } + bt_tools.msg(rdata); + layer.close(index); + }); + } + ); + }, + }, + ], + }, + ], + tootls: [ + { + type: 'search', + positon: ['right', 'top'], + placeholder: lan.database.search_key, + searchParam: 'search', //搜索请求字段,默认为 search + value: '', // 当前内容,默认为空 + }, + { + type: 'batch', + positon: ['left', 'bottom'], + config: { + title: ' delete', + url: 'database/redis/del_redis_val', + param: function (row) { + return { data:JSON.stringify({db_idx:id,key:row.name,sid:that.cloudInfo.sid}) } + }, + load: true, + callback: function (that) { + bt.confirm({ title: 'Batch delete Key', msg: 'Delete selected keys in batches. Do you want to continue?', icon: 0 }, function (index) { + layer.close(index); + that.start_batch({}, function (list) { + var html = ''; + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '\ + \ + ' + item.name + '\ + \ + \ +
    ' + item.request.msg + '
    \ + \ + '; + } + database_table.$batch_success_table({ title: 'Batch delete Key', th: 'Key', html: html }); + database_table.$refresh_table_list(true); + }); + }); + } + } + }, + { + //分页显示 + type: 'page', + positon: ['right', 'bottom'], // 默认在右下角 + pageParam: 'p', //分页请求字段,默认为 : p + page: 1, //当前分页 默认:1 + numberParam: 'limit', //分页数量请求字段默认为 : limit + number: 20, //分页数量默认 : 20条 + numberList: [10, 20, 50, 100, 200], // 分页显示数量列表 + numberStatus: true, // 是否支持分页数量选择,默认禁用 + jump: true, //是否支持跳转分页,默认禁用 + }, + ], + success: function () { + var arry = []; + var maxWidth = ''; + for (var i = 0; i < $('.size_ellipsis').length; i++) { + arry.push($('.size_ellipsis').eq(i).width()); + } + maxWidth = Math.max.apply(null, arry); + $('.size_ellipsis').width(maxWidth + 5); + } + }); + }, + // 设置tabs的数量 + change_tabs_num: function () { + var text = $('#redis_content_tab .tab-nav .on').text(); + var reg = new RegExp('(?<=\()(.+?)(?=\))'); + var num = text.match(reg)[0]; + if (!isNaN(num)) { + num--; + $('#redis_content_tab .tab-nav .on').text(text.replace(/\([0-9]\)/ig, '(' + num + ')')); + } + }, + // redis备份列表 + backup_redis_list: function () { + var that = this; + var redisBackupTable = null; + bt_tools.open({ + title: 'Redis ' + lan.database.backup_list, + area: '927px', + btn: false, + skin: 'redisBackupList', + content: '
    ', + success: function ($layer) { + redisBackupTable = bt_tools.table({ + el: '#redisBackupTable', + default: lan.database.backup_list_empty, + height: 478, + url: 'database/redis/get_backup_list', + column:[ + { + fid: 'name', + title: lan.database.backup_name, + width: 170, + template: function (item) { + return '' + item.name + ''; + }, + }, + { + fid: 'filepath', + title: lan.database.backup_path, + template: function (item) { + return '' + item.filepath + ''; + }, + }, + { + fid: 'mtime', + width: 140, + title: lan.database.backup_time, + type: 'text', + template: function (row) { + return '' + bt.format_data(row.mtime) + ''; + }, + }, + { + fid: 'size', + title: lan.database.backup_size, + type: 'text', + width: 120, + template: function (row) { + return '' + bt.format_size(row.size) + ''; + }, + }, + { + fid: 'sid', + width: 120, + title: lan.database.backup_location, + template: function (row) { + var type_column = '-'; + var host = row.conn_config.db_host; + var port = row.conn_config.db_port; + switch (row.sid) { + case '0': + type_column = lan.database.add_auth_local; + break; + case '1': + type_column = (lan.database.cloud_database + '(' + host + ':' + port + ')').toString(); + break; + case '2': + var list = database.cloudDatabaseList; + $.each(list, function (index, item) { + var db_host = item.db_host; + var db_port = item.db_port; + if (row.sid == item.id) { + // 默认显示备注 + if (item.ps !== '') { + type_column = item.ps + } else { + type_column = (lan.database.cloud_database + '(' + db_host + ':' + db_port + ')').toString(); + } + } + }); + break; + } + return '' + type_column + ''; + }, + }, + { + type: 'group', + title: lan.database.operation, + align: 'right', + width: 100, + group: [ + { + title: lan.database.backup_re, + event: function (row) { + bt.prompt_confirm(lan.database.backup_re_confirm_tit, lan.database.backup_re_confirm_cont1 + row.name + lan.database.backup_re_confirm_cont2, function () { + bt_tools.send( + { url: 'database/redis/InputSql', data: { data: JSON.stringify({ file: row.filepath, sid: 0 }) } }, + function (rdata) { + if (rdata.status) that.render_redis_content(); + bt_tools.msg(rdata); + }, + lan.database.restore_data + ); + }); + }, + }, + { + title: lan.database.del, + event: function (row) { + layer.confirm( + lan.database.del_backup_cont1 + row.name + lan.database.del_backup_cont2, + { + title: lan.database.del_backup, + closeBtn: 2, + icon: 0, + }, + function (index) { + bt_tools.send( + { url: 'database/redis/DelBackup', data: { data: JSON.stringify({ file: row.filepath }) } }, + function (rdata) { + if (rdata.status) redisBackupTable.$refresh_table_list(true); + bt_tools.msg(rdata); + layer.close(index); + }, + lan.database.del_backup_load + ); + } + ); + }, + }, + ], + }, + ], + tootls: [ + { + type: 'group', + positon: ['left', 'top'], + list: [ + { + title: lan.database.backup_btn1, + active: true, + event: function () { + bt_tools.send({ url: 'database/redis/ToBackup' }, function (rdata) { + if (rdata.status) redisBackupTable.$refresh_table_list(true); + bt_tools.msg(rdata); + }); + }, + }, + ], + }, + ], + success: function () { + if (!$layer) return; + var height = $(window).height(); + var layerHeight = $layer.height(); + var top = (height - layerHeight) / 2; + $layer.css('top', top); + } + }) + } + }) + }, + // 添加/编辑redis库 + set_redis_library: function (row) { + var that = this; + var redis_form = null; + bt_tools.open({ + title: (row ? lan.public.edit + ' [' + row.name + ']' : lan.public.add) + ' Key' + (!row ? ' to [' + that.cloudInfo.title + ']' : ''), + area: '420px', + btn: [row ? lan.public.save : lan.public.add, lan.public.cancel], + content: '
    ', + success: function (layers) { + redis_form = bt_tools.form({ + el:'#redis_library_form', + form: [ + { + label: lan.public_backup.db, + group: { + type: 'select', + name: 'db_idx', + width: '260px', + list: [ + { title: 'DB0', value: 0 }, + { title: 'DB1', value: 1 }, + { title: 'DB2', value: 2 }, + { title: 'DB3', value: 3 }, + { title: 'DB4', value: 4 }, + { title: 'DB5', value: 5 }, + { title: 'DB6', value: 6 }, + { title: 'DB7', value: 7 }, + { title: 'DB8', value: 8 }, + { title: 'DB9', value: 9 }, + { title: 'DB10', value: 10 }, + { title: 'DB11', value: 11 }, + { title: 'DB12', value: 12 }, + { title: 'DB13', value: 13 }, + { title: 'DB14', value: 14 }, + { title: 'DB15', value: 15 }, + ], + disabled: row ? true : false, + }, + }, + { + label: lan.public_backup.key, + group: { + type: 'text', + name: 'name', + width: '260px', + placeholder: lan.database.key_input, + disabled: row ? true : false, + }, + }, + { + label: lan.public_backup.value, + group: { + type: 'textarea', + name: 'val', + width: '260px', + style: { + 'min-height': '100px', + 'line-height': '22px', + 'padding-top': '5px', + resize: 'both', + }, + placeholder: lan.database.value_input, + }, + }, + { + label: lan.database.term_of_validity, + group: { + type: 'number', + name: 'endtime', + width: '235px', + placeholder: lan.database.term_of_validity_input, + unit: lan.bt.s, + }, + }, + { + group: { + type: 'help', + style: { 'margin-left': '30px' }, + list: ['A validity period of 0 means permanent'], + }, + }, + ], + data: row ? row : { db_idx: $('#redis_content_tab .tab-nav span.on').data('id') || undefined }, + }); + this.setLayerCenter(layers); + }, + yes: function (indexs) { + var formValue = redis_form.$get_form_value(); + if (formValue.name == '') return layer.msg(lan.database.key_input_tips); + if (formValue.val == '') return layer.msg(lan.database.value_input_tips); + if (formValue.endtime <= 0) delete formValue.endtime; + if (row) { + formValue['db_idx'] = $('#redis_content_tab .tab-nav span.on').data('id'); + } + formValue['sid'] = that.cloudInfo.sid; + bt_tools.send( + { url: 'database/redis/set_redis_val', data: { data: JSON.stringify(formValue) } }, + function (res) { + if (res.status) { + layer.close(indexs); + that.render_redis_content(formValue.db_idx); + } + bt_tools.msg(res); + }, + (row ? lan.database.redis_form_req1 : lan.database.redis_form_req2) + ); + }, + setLayerCenter: function ($layer) { + var height = $(window).height(); + var layerHeight = $layer.height(); + var top = (height - layerHeight) / 2; + $layer.css('top', top); + }, + }); + }, + // 选择需要清空的redis库 + choose_redis_list:function(){ + var that = this; + layer.open({ + type: 1, + area: '430px', + title: lan.database.clear_redis_tit1 + '[' + this.cloudInfo.title + ']' + lan.database.clear_redis_tit2, + btn: [lan.public.confirm, lan.public.cancel], + shift: 5, + closeBtn: 2, + shadeClose: false, + content:'\ +
    \ +
    \ + ' + lan.database.select_database + '\ +
    \ +
    \ +
    \ +
    \ + ' + lan.database.all_select + '
    \ +
      \ +
      \ +
      \ +
      \ +
      ', + success: function(layers, index) { + var rule_site_list = ''; + $.each(that.redisDBList,function(index,item){ + rule_site_list += '\ +
    • \ +
      \ + \ + \ +
      \ + '+ item.name +'\ +
      \ +
    • '; + $('.rule_checkbox_list').html(rule_site_list); + that.event_bind(); + }); + }, + yes: function (index, layers) { + var redisIDList = []; + $('#choose_redis_from .rule_checkbox_list input').each(function (index, el) { + if ($(this).prop('checked')) { + redisIDList.push($(this).data('id')); + } + }); + if (redisIDList.length == 0) return layer.msg(lan.database.clear_redis_tips1, { icon: 2 }); + layer.confirm( + lan.database.clear_redis_confirm_cont, + { + title: lan.database.clear_redis_confirm_tit, + closeBtn: 2, + icon: 0, + }, + function (index) { + bt_tools.send({ url: 'database/redis/clear_flushdb', data: { data: JSON.stringify({ ids: JSON.stringify(redisIDList), sid: that.cloudInfo.sid }) } }, function (rdata) { + if (rdata.status) { + that.render_redis_content(); + layer.closeAll(); + } + bt_tools.msg(rdata); + }); + } + ); + }, + }) + }, + event_bind:function(){ + $('.rule_checkbox_group') + .unbind('click') + .click(function (ev) { + var _type = $(this).attr('bt-event-type'), + _checkbox = '.bt_checkbox_groups'; + switch (_type) { + case 'active_all': // 选中全部 + var thatActive = $(this).find(_checkbox), + thatList = $(this).next(); + if (thatActive.hasClass('active')) { + thatActive.removeClass('active').prev().prop('checked', false); + thatList.find(_checkbox).removeClass('active').prev().prop('checked', false); + } else { + thatActive.addClass('active').prev().prop('checked', true); + thatList.find(_checkbox).addClass('active').prev().prop('checked', true); + } + break; + case 'active': // 激活选中和取消 + var thatActive = $(this).find(_checkbox), + thatList = $(this).next(); + if (thatActive.hasClass('active')) { + thatActive.removeClass('active').prev().prop('checked', false); + $('.mysql_content_list>.mysql_checkbox_group input').prop('checked', false).next().removeClass('active'); + if (thatList.length == 1) { + thatList.find(_checkbox).removeClass('active').prev().prop('checked', false); + } else { + var nodeLength = $(this).parent().siblings().length + 1, + nodeList = $(this).parent().parent(); + if (nodeList.find('.bt_checkbox_groups.active').length != nodeLength) { + nodeList.prev().find(_checkbox).removeClass('active').prev().prop('checked', false); + } + } + } else { + thatActive.addClass('active').prev().prop('checked', true); + if (thatList.length == 1) { + thatList.find(_checkbox).addClass('active').prev().prop('checked', true); + } else { + var nodeLength = $(this).parent().siblings().length + 1, + nodeList = $(this).parent().parent(); + if (nodeList.find('.bt_checkbox_groups.active').length == nodeLength) { + nodeList.prev().find(_checkbox).addClass('active').prev().prop('checked', true); + } + } + } + break; + case 'fold': //折叠数据库列表 + if ($(this).hasClass('glyphicon-menu-down')) { + $(this).removeClass('glyphicon-menu-down').addClass('glyphicon-menu-right').parent().next().hide(); + } else { + $(this).removeClass('glyphicon-menu-rigth').addClass('glyphicon-menu-down').parent().next().show(); + } + break; + } + $('.rule_content_list').removeAttr('style'); + ev.stopPropagation(); + }); + }, + // 重置时间格式 + reset_time_format: function (time) { + if (time == 0) return lan.public_backup.permanent; + var theTime = parseInt(time); // 秒 + var middle = 0; // 分 + var hour = 0; // 小时 + + if (theTime > 60) { + middle = parseInt(theTime / 60); + theTime = parseInt(theTime % 60); + if (middle > 60) { + hour = parseInt(middle / 60); + middle = parseInt(middle % 60); + } + } + var result = '' + parseInt(theTime) + ' ' + lan.site.second + (theTime > 1 ? 's' : ''); + if (middle > 0) { + result = '' + parseInt(middle) + ' ' + lan.crontab.minute + (middle > 1 ? 's' : '') + ' ' + result; + } + if (hour > 0) { + result = '' + parseInt(hour) + ' ' + lan.crontab.hour + (hour > 1 ? 's' : '') + ' ' + result; + } + return result; + }, +} + +var pgsql ={ + // 数据库表格实例 + databaseTable: null, + // 获取数据库列表 + getDatabaseList: function (config) { + if (this.databaseTable) { + config = config || {}; + if (config.isInit) this.databaseTable.config.page.page = 1; + this.databaseTable.$refresh_table_list(true); + return; + } + + var _that = this; + var type = database.getType(); + var param = { table: 'databases', search: '' }; + + $('#bt_pgsql_table').empty(); + this.databaseTable = bt_tools.table({ + el: '#bt_pgsql_table', + url: 'database/' + type + '/get_list', + param: param, // 参数 + minWidth: '1000px', + load: true, + autoHeight: true, + default: 'The database list is empty', // 数据为空时的默认提示 + pageName: 'database', + beforeRequest:function(beforeData){ + var db_type_val = $('input[name="db_type_filter_' + type + '"]').val(); + switch(db_type_val){ + case 'all': + delete param['db_type'] + delete param['sid'] + break; + case 0: + param['db_type'] = 0; + break; + default: + delete param['db_type']; + param['sid'] = db_type_val + } + if (beforeData.hasOwnProperty('data') && typeof beforeData.data === 'string') { + delete beforeData['data'] + return { data: JSON.stringify($.extend(param,beforeData)) } + } + return {data:JSON.stringify(param)} + }, + sortParam: function (data) { + return { 'order': data.name + ' ' + data.sort }; + }, + column:[ + { type: 'checkbox', width: 20 }, + { fid: 'name', title: lan.database.add_name }, + { fid: 'username', title: lan.database.user, sort: true }, + { + fid: 'password', + title: lan.database.add_pass, + type: 'password', + copy: true, + eye_open: true + }, + { + fid:'backup', + title: lan.database.backup, + width: 130, + template: function (item) { + var backup = lan.database.backup_empty; + var _class = "bt_warning"; + if (item.backup_count > 0) { + backup = lan.database.backup_ok; + _class = 'bt_success'; + } + var num = item.backup_count > 0 ? '(' + item.backup_count + ')' : ''; + // 备份链接 + var backupLink = '' + backup + num + ''; + // 导入链接 + var importLink = '' + lan.database.input + ''; + return '' + backupLink + ' | ' + importLink + ''; + } + }, + { + fid: 'position', + title: lan.database.position, + type: 'text', + width: 116, + template: function (row) { + var type_column = '-'; + var host = row.conn_config.db_host; + var port = row.conn_config.db_port; + switch(row.db_type){ + case 0: + type_column = lan.database.add_auth_local; + break; + case 1: + type_column = (lan.database.cloud_database + '(' + host + ':' + port + ')').toString(); + break; + case 2: + var list = database.cloudDatabaseList; + $.each(list, function(index, item) { + var db_host = item.db_host; + var db_port = item.db_port; + if (row.sid == item.id) { + // 默认显示备注 + if (item.ps !== '') { + type_column = item.ps + } else { + type_column = (lan.database.cloud_database + '(' + db_host + ':' + db_port + ')').toString(); + } + } + }) + break; + } + return '' + type_column + ''; + } + }, + { + fid: 'ps', + title: lan.database.add_ps, + type: 'input', + blur: function (row, index, ev) { + bt.pub.set_data_ps({ + id: row.id, + table: 'databases', + ps: ev.target.value + }, function (res) { + layer.msg(res.msg, (res.status ? {} : { + icon: 2 + })); + }); + }, + keyup: function (row, index, ev) { + if (ev.keyCode === 13) { + $(this).blur(); + } + } + }, + { + type: 'group', + title: lan.database.operation, + width: 150, + align: 'right', + group: [{ + title: lan.database.edit_pass, + tips: lan.database.edit_pass_title, + hide: function (rows) { return rows.db_type == 1 }, + event: function (row) { + database.set_data_pass(row.id, row.username, row.password); + } + }, { + title: lan.database.del, + tips: lan.database.del_title, + event: function (row) { + database.del_database(row.id, row.name, row); + } + }] + } + ], + // 按钮组 + tootls: [ + { + type: 'group', + positon: ['left', 'top'], + list: [ + { + title: lan.database.add_title, + active: true, + event: function () { + database.getCloudServerList(function (list) { + bt.database.add_database(list,function (res) { + if (res.status) _that.getDatabaseList(); + }); + }); + } + }, + { + title: lan.database.edit_root, + event: function () { + bt.database.set_root('pgsql') + } + }, + { + title: lan.database.cloud_server, + event: function () { + database.open_cloud_server(); + } + }, + { + title: 'Sync all', + style:{'margin-left':'30px'}, + event: function () { + bt.database.sync_to_database({type:0,data:[]},function(res){ + if(res.status) _that.getDatabaseList(); + }) + } + }, + { + title: 'Get DB from server', + event: function () { + database.getCloudServerList(function (list) { + bt_tools.open({ + title: lan.database.select_position, + area: '450px', + btn: [lan.public.confirm, lan.public.cancel], + skin: 'databaseCloudServer', + content: { + 'class':'pd20', + form:[{ + label: lan.database.position, + group:{ + type: 'select', + name: 'sid', + width: '260px', + list: list + } + }] + }, + success: function (layers) { + $(layers).find('.layui-layer-content').css('overflow','inherit'); + }, + yes:function (form, layers, index){ + bt.database.sync_database(form.sid, function (rdata) { + if (rdata.status){ + _that.getDatabaseList(); + layer.close(layers) + } + }); + } + }); + }); + } + } + ] + }, + { + type: 'batch', // batch_btn + positon: ['left', 'bottom'], + placeholder: 'Select batch operation', + buttonValue: 'Execute', + disabledSelectValue: 'Select the DB to execute!!', + selectList: [ + { + title: 'Sync to Server', + url: '/database/' + type + '/SyncToDatabases', + paramName: 'data', // 列表参数名,可以为空 + th: 'Database Name', + beforeRequest: function(list) { + var arry = []; + $.each(list, function (index, item) { + arry.push(item.id); + }); + return JSON.stringify({ids:JSON.stringify(arry),type:1}) + }, + success: function (res, list, that) { + layer.closeAll(); + var html = ''; + $.each(list, function (index, item) { + html += '\ + \ + ' + item.name + '\ + ' + res.msg + '\ + '; + }); + that.$batch_success_table({ + title: 'Batch sync selected', + th: 'Database Name', + area: '450px', + html: html + }); + } + }, + { + title: 'Database Backup', + url: type == 'mysql' ? 'database?action=ToBackup' : '/database/' + type + '/ToBackup', + load: true, + param: function (row) { + return type == 'mysql' ? { id: row.id } : {data:JSON.stringify({id: row.id})} + }, + // 手动执行,data参数包含所有选中的站点 + callback: function (that) { + that.start_batch({}, function (list) { + var html = ''; + for(var i=0;i
      '+ item.request.msg +'
      '; + } + _that.databaseTable.$batch_success_table({ + title: 'Batch backup database', + th: 'Database Name', + html: html, + area: '480px', + }); + _that.getDatabaseList(); + }); + } + }, + { + title: 'Delete database', + url: '/database/' + type + '/DeleteDatabase', + load: true, + param: function (row) { + return { + data: JSON.stringify({ id: row.id, name: row.name }) + } + }, + callback: function (that) { // 手动执行,data参数包含所有选中的站点 + var ids = []; + for (var i = 0; i < that.check_list.length; i++) { + ids.push(that.check_list[i].id); + } + database.del_database(ids,function(param){ + that.start_batch(param, function (list) { + layer.closeAll() + var html = ''; + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '\ + \ + ' + item.name + '\ + \ + ' + item.request.msg + '\ + \ + '; + } + database_table.$batch_success_table({ + title: 'Batch deletion', + th: 'Database Name', + html: html + }); + _that.getDatabaseList(); + }); + }) + } + } + ] + }, + { + type: 'search', + positon: ['right', 'top'], + placeholder: lan.database.database_search, + searchParam: 'search', //搜索请求字段,默认为 search + value: '',// 当前内容,默认为空 + }, + { + type: 'page', // 分页显示 + positon: ['right', 'bottom'], // 默认在右下角 + pageParam: 'p', // 分页请求字段,默认为 : p + page: 1, // 当前分页 默认:1 + numberParam: 'limit', // 分页数量请求字段默认为 : limit + number: 20, // 分页数量默认 : 20条 + numberList: [10, 20, 50, 100, 200], // 分页显示数量列表 + numberStatus: true, //是否支持分页数量选择,默认禁用 + jump: true, // 是否支持跳转分页,默认禁用 + } + ] + }); + database.renderCloudServerSelect(); + } +} + +database.init(); diff --git a/BTPanel/static/js/docker.js b/BTPanel/static/js/docker.js new file mode 100644 index 00000000..e4d5c474 --- /dev/null +++ b/BTPanel/static/js/docker.js @@ -0,0 +1,3452 @@ +/* + * @Author: 立夫 + * @Date: 2022-04-02 14:50:32 + * @LastEditTime: 2022-04-20 15:14:58 + * @Description: + * @FilePath: \198\BTPanel\static\js\docker.js + * 可以输入预定的版权声明、个性签名、空行等 + */ + +$('#cutMode .tabs-item').on('click', function () { + var type = $(this).data('type'), + index = $(this).index(); + $(this).addClass('active').siblings().removeClass('active'); + $('.tab-con').find('.tab-con-block').eq(index).removeClass('hide').siblings().addClass('hide'); + + docker.initTabConfig(type)//初始化tab,获取内容 + bt.set_cookie('docker_model',type) //Cookie保存当前tab位置 +}); + +var docker = { + tabName:'container',//当前所处tab位置 + global_api:'/project/docker/model', + global:{ + url:'unix:///var/run/docker.sock', + dk_model_name:'', + dk_def_name:'', + }, + dk_images:[], //镜像列表》容器页面专用 + dk_volumes:[], //卷列表 》容器页面专用 + dk_template:[], //模板列表》容器编排页面专用 + dk_registry:[], //仓库列表》镜像页面专用 + cont_chart:{ //容器图表数据 + cpu_list:[], + mem_list:{ + usage:[], + cache:[] + }, + disk_list:{ + read:[], + write:[] + }, + network_list:{ + tx:[], + rx:[] + }, + time_list:[] + }, + cont_chart_id:{ //容器图表dom + cpu:null, + mem:null, + disk:null, + network:null + }, + cont_setInterval:null, //图表定时器 + log_file_setInterval:null, //日志定时器 + log_layer_open:null, //日志弹窗 + /** + * @description 获取容器列表 + */ + get_container:function(){ + var that = this; + var _config = $.extend({},this.global,{dk_def_name:'get_list'}) + var dk_container_table = bt_tools.table({ + el:'#dk_container_table', + load: true, + url:this.global_api, + minWidth: '1050px', + height:750, + param: {data:JSON.stringify(_config)}, + dataFilter: function (res) { + if(!res.msg.installed || !res.msg.service_status) that.stop_user_operation(res.msg.installed,res.msg.service_status) + that.dk_images = res['msg']['images'] + that.dk_volumes = res['msg']['volumes'] + that.dk_template = res['msg']['template'] + return { data: res['msg']['container_list'] }; + }, + default: lan.docker.public.no_data(lan.docker.public.container), + column:[{ + type: 'checkbox', + class: '', + width: 20 + },{ + fid: 'name', + title: lan.docker.container.name, + width:146, + template:function(row){ + return ''+row.name+'' + }, + event: function (row) { + that.open_container_config(row) + } + },{ + title: lan.docker.container.status, + width: 100, + template:function(row){ + var _class = '',_icon = '',text = '' + switch(row.status){ + case 'running': + _class = 'bt_success' + _icon = 'glyphicon-play' + text = lan.docker.public.activated + break; + case 'paused': + _class = 'bt_warning' + _icon = 'glyphicon-pause' + text = lan.docker.public.paused + break; + default: + _class = 'bt_danger' + _icon = 'glyphicon-pause' + text = lan.docker.public.stopped + break; + } + return ''+text+'' + }, + event:function(row){ + if($('.dk_status_select_list').length == 0){ + $('.dk_status_select').append('\ +
        \ +
      • ' + lan.docker.container.start + '
      • \ +
      • ' + lan.docker.container.stop + '
      • \ +
      • ' + lan.docker.container.pause + '
      • \ +
      • ' + lan.docker.container.unpause + '
      • \ +
      • ' + lan.docker.container.restart + '
      • \ +
      • ' + lan.docker.container.reload + '
      • \ +
      '); + + // 事件 + $('.dk_status_select_list li').click(function(){ + var _type = $(this).data('key') + that.container_status_setting(_type,row.detail.Id,dk_container_table) + }) + + // 下拉定位 + var thLeft = $('#dk_container_table .divtable').scrollLeft(), //当前滚动条位置 + thTop = $('#dk_container_table .divtable').scrollTop(), //当前滚动条位置 + domScrollTop = $(document).scrollTop(), + _thSpan = $('.dk_status_select')[0] + + $('.dk_status_select_list').css({'left':_thSpan.offsetLeft+210-thLeft,'top':(_thSpan.offsetTop+153-domScrollTop-thTop)}) + } + } + },{ + fid: 'image', + width:160, + title: lan.docker.container.mirror_image, + template:function(row){ + return ''+row.image+'' + } + },{ + fid:'ip', + title:'IP', + },{ + fid:'cpu_usage', + width: 120, + title: lan.docker.container.cpu_usage, + template:function(row){ + return ''+(row.cpu_usage !== ''?row.cpu_usage+'%':'')+'' + } + },{ + fid: 'port', + title: lan.docker.container.port, + template:function(row){ + var _port = [] + $.each(row.ports,function(index,item){ + if(item != null){ + _port.push(item[0]['HostPort']+'-->'+index) + } + }) + return ''+_port.join()+'' + } + },{ + width: 150, + title: lan.docker.container.time, + template:function(row){ + return ''+that.utc2beijing(row.time)+'' + } + },{ + title: lan.public.operate, + type: 'group', + width: 300, + align: 'right', + group: [{ + title: lan.docker.container.monitoring, + event: function(row){ + bt_tools.open({ + type: 1, + title: '[' + row.name + '] ' + lan.docker.container.online_monitoring, + area: '1100px', + btn: false, + content: '
      \ +
      ' + lan.docker.container.basic_information + '
      \ +
      \ +
      ' + lan.pythonmamager.mem + ': -
      \ +
      ' + lan.docker.container.flow_situation + ': - / -
      \ +
      \ +
      \ +
      CPU
      \ +
      ' + lan.pythonmamager.mem + '
      \ +
      ' + lan.docker.container.disk + '
      \ +
      ' + lan.docker.container.network + '
      \ +
      ', + success:function(){ + // 先初始化数据 + that.remove_cont_chart_data() + //加载图表文件 + jQuery.ajax({ + url: "/static/js/echarts.min.js", + dataType: "script", + cache: true + }).done(function() { + that.render_cont_chart(row); //默认渲染 + that.cont_setInterval = setInterval(function(){ + that.transform_cont_chart_data(row); + },3000)//默认三秒获取一次数据 + }); + }, + cancel: function () { + that.remove_cont_chart_data() + } + }) + } + },{ + title: lan.public.terminal, + event:function(row){ + that.open_container_shell_view(row); + } + },{ + title: lan.docker.container.path, + event:function(row){ + if(row.merged == '') return layer.msg(lan.docker.container.path_not, { icon: 0 }) + openPath(row.merged); + } + },{ + title: lan.public.log, + event:function(row){ + that.ajax_task_method('get_logs',{data:{id:row.detail.Id},tips: lan.docker.container.get_logs_tips },function(res){ + layer.open({ + title:'['+row.name+'] ' + lan.docker.container.log, + type:1, + area: '700px', + shadeClose: false, + closeBtn: 2, + btn:false, + content: '\ +
      \ +
      ' + (res.msg == '' ? lan.docker.container.log_none : res.msg) + '
      \ +
      ', + success:function(){ + $('.dk-container-log').scrollTop($('.dk-container-log').prop('scrollHeight')) + } + }); + }); + } + },{ + title: lan.public.del, + event:function(row){ + bt.confirm({ + title: lan.docker.container.del_container + ' [' + row.name + ']', + msg: lan.docker.container.del_container_msg + }, function () { + that.ajax_task_method('del_container',{data:{id:row.detail.Id},tips: lan.docker.container.del_container_tips},function(res){ + if(res.status) that.initTabConfig('container') //刷新列表 + bt_tools.msg(res) + }) + }); + } + }] + }], + tootls:[{ + type: 'group', + positon: ['left', 'top'], + list: [{ + title: lan.docker.container.add_container, + active: true, + event: function () { + that.add_container(); + } + }] + },{ // 批量操作 + type: 'batch', //batch_btn + positon: ['left', 'bottom'], + placeholder: lan.public.please_choose, + buttonValue: lan.public.exec, + disabledSelectValue: lan.docker.container.batch_select_tips, + selectList: [{ + title: lan.docker.container.start_container, + url: that.global_api, + load: true, + param:function(crow){ + return {data:that.batch_param_convert('start',{id:crow.id})} + }, + refresh: true, + callback: function (thatc) { + thatc.start_batch({}, function (list) { + var html = '' + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '' + item.name + '
      ' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '
      '; + } + dk_container_table.$batch_success_table({ + title: lan.site.batch_text + lan.docker.container.start_container, + th: lan.docker.container.start_container, + html: html + }); + dk_container_table.$refresh_table_list(true); + }); + } + },{ + title: lan.docker.container.stop_container, + url: that.global_api, + load: true, + param:function(crow){ + return {data:that.batch_param_convert('stop',{id:crow.id})} + }, + refresh: true, + callback: function (thatc) { + thatc.start_batch({}, function (list) { + var html = '' + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '' + item.name + '
      ' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '
      '; + } + dk_container_table.$batch_success_table({ + title: lan.site.batch_text + lan.docker.container.stop_container, + th: lan.docker.container.stop_container, + html: html + }); + dk_container_table.$refresh_table_list(true); + }); + } + },{ + title: lan.docker.container.pause_container, + url: that.global_api, + load: true, + param:function(crow){ + return {data:that.batch_param_convert('pause',{id:crow.id})} + }, + refresh: true, + callback: function (thatc) { + thatc.start_batch({}, function (list) { + var html = '' + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '' + item.name + '
      ' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '
      '; + } + dk_container_table.$batch_success_table({ + title: lan.site.batch_text + lan.docker.container.pause_container, + th: lan.docker.container.pause_container, + html: html + }); + dk_container_table.$refresh_table_list(true); + }); + } + },{ + title: lan.docker.container.unpause_container, + url: that.global_api, + load: true, + param:function(crow){ + return {data:that.batch_param_convert('unpause',{id:crow.id})} + }, + refresh: true, + callback: function (thatc) { + thatc.start_batch({}, function (list) { + var html = '' + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '' + item.name + '
      ' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '
      '; + } + dk_container_table.$batch_success_table({ + title: lan.site.batch_text + lan.docker.container.unpause_container, + th: lan.docker.container.unpause_container, + html: html + }); + dk_container_table.$refresh_table_list(true); + }); + } + },{ + title: lan.docker.container.restart_container, + url: that.global_api, + load: true, + param:function(crow){ + return {data:that.batch_param_convert('restart',{id:crow.id})} + }, + refresh: true, + callback: function (thatc) { + thatc.start_batch({}, function (list) { + var html = '' + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '' + item.name + '
      ' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '
      '; + } + dk_container_table.$batch_success_table({ + title: lan.site.batch_text + lan.docker.container.restart_container, + th: lan.docker.container.restart_container, + html: html + }); + dk_container_table.$refresh_table_list(true); + }); + } + },{ + title: lan.docker.container.reload_container, + url: that.global_api, + load: true, + param:function(crow){ + return {data:that.batch_param_convert('reload',{id:crow.id})} + }, + refresh: true, + callback: function (thatc) { + thatc.start_batch({}, function (list) { + var html = '' + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '' + item.name + '
      ' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '
      '; + } + dk_container_table.$batch_success_table({ + title: lan.site.batch_text + lan.docker.container.reload_container, + th: lan.docker.container.reload_container, + html: html + }); + dk_container_table.$refresh_table_list(true); + }); + } + },{ + title: lan.docker.container.del_container, + url: that.global_api, + load: true, + param:function(crow){ + return {data:that.batch_param_convert('del_container',{id:crow.id})} + }, + refresh: true, + callback: function (thatc) { + bt.show_confirm(lan.site.batch_text + lan.docker.container.del_container, "" + lan.docker.container.batch_del_container_tips + "", function () { + thatc.start_batch({}, function (list) { + var html = '' + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '' + item.name + '
      ' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '
      '; + } + dk_container_table.$batch_success_table({ + title: lan.site.batch_text + lan.docker.container.del_container, + th: lan.docker.container.del_container, + html: html + }); + dk_container_table.$refresh_table_list(true); + }); + }); + } + }] + }], + success:function(){ + $('#dk_container_table tbody td').unbind('mouseenter').mouseenter(function(e){ + var _tdSPAN = $(this).find('span:first-child').not('.glyphicon') + if(e.target.cellIndex == 2){ + _tdSPAN.addClass('dk_status_select') + }else{ + _tdSPAN.removeClass('dk_status_select') + $('.dk_status_select_list').remove() + } + }) + $('#dk_container_table tbody td').unbind('mouseleave').mouseleave(function(e){ + var _tdSPAN = $(this).find('span:first-child').not('.glyphicon') + _tdSPAN.removeClass('dk_status_select') + $('.dk_status_select_list').remove() + }) + } + }) + }, + /** + * @description 获取容器编排列表 + */ + get_compose: function () { + var that = this; + var _config = $.extend({},this.global,{dk_def_name:'compose_project_list'}) + var dk_compose_table = bt_tools.table({ + el:'#dk_compose_table', + load: true, + url:this.global_api, + minWidth: '820px', + height:750, + param: {data:JSON.stringify(_config)}, + dataFilter: function (res) { + if(!res.msg.installed || !res.msg.service_status) that.stop_user_operation(res.msg.installed,res.msg.service_status) + that.dk_template = res['msg']['template'] + return { data: res['msg']['project_list'] }; + }, + default: lan.docker.public.no_data(lan.docker.public.compose), + column:[{ + type: 'checkbox', + class: '', + width: 20 + },{ + width:266, + title: lan.docker.compose.project_name, + template:function(row){ + return ''+row.name+'' + } + },{ + title: lan.docker.compose.container_number, + template:function(row){ + return ''+row.container.length+'' + }, + + },{ + title: lan.docker.compose.startup_time, + template:function(row){ + return ''+bt.format_data(row.time)+'' + } + }, + { + fid: 'remark', + title: lan.one_click.description, + type: 'input', + blur: function (row, index, ev, key, thatc) { + if (row.remark == ev.target.value) return false; + that.ajax_task_method('edit_project_remark',{data:{project_id:row.id,remark:ev.target.value}}) + }, + keyup: function (row, index, ev) { + if (ev.keyCode === 13) { + $(this).blur(); + } + } + },{ + title: lan.public.operate, + type: 'group', + width: 150, + align: 'right', + group: [{ + title: lan.docker.compose.container_list, + event:function(dk_cont,index){ + if(dk_cont.container.length == 0) return layer.msg(lan.docker.compose.no_container,{icon:0}); + bt_tools.open({ + title: '['+dk_cont.name+'] ' + lan.docker.compose.container_list, + area:'1000px', + content:'
      ', + success:function($layer){ + var project_compose_table = bt_tools.table({ + el:'#project_compose_table', + url:that.global_api, + param: {data:JSON.stringify(_config)}, + dataFilter: function (res) { + var top = ($(window).height() - $layer.height()) / 2; + $layer.css({ 'top': top + 'px' }); + return { data: res['msg']['project_list'][index]['container'] }; + }, + column:[ + { + fid: 'name', + title: lan.docker.container.name, + template:function(row){ + return ''+row.name+'' + } + },{ + title: lan.docker.container.status, + width: 100, + template:function(row){ + var _class = '',_icon = '',text = '' + switch(row.status){ + case 'running': + _class = 'bt_success' + _icon = 'glyphicon-play' + text = lan.docker.public.activated + break; + case 'paused': + _class = 'bt_warning' + _icon = 'glyphicon-pause' + text = lan.docker.public.paused + break; + default: + _class = 'bt_danger' + _icon = 'glyphicon-pause' + text = lan.docker.public.stopped + break; + } + return ''+text+'' + }, + event:function(row){ + if($('.dk_status_select_list').length == 0){ + $('.dk_status_select').append('
      • ' + lan.docker.container.start + '
      • ' + lan.docker.container.stop + '
      • ' + lan.docker.container.pause + '
      • ' + lan.docker.container.unpause + '
      • ' + lan.docker.container.restart + '
      • ' + lan.docker.container.reload + '
      ') + + //事件 + $('.dk_status_select_list li').click(function(){ + var _type = $(this).data('key') + that.container_status_setting(_type,row.detail.Id,project_compose_table,'project') + }) + + //下拉定位 + var thLeft = $('#project_compose_table .divtable').scrollLeft(), //当前滚动条位置 + _thSpan = $('.dk_status_select')[0] + $('.dk_status_select_list').css({'left':_thSpan.offsetLeft+20-thLeft,'top':_thSpan.offsetTop+120}) + } + } + },{ + fid: 'image', + width:110, + title: lan.docker.container.mirror_image, + template:function(row){ + return ''+row.image+'' + } + },{ + width:150, + title: lan.docker.container.time, + template:function(row){ + return ''+that.utc2beijing(row.time)+'' + } + },{ + fid:'ip', + width:116, + title:'IP', + template:function(row){ + return ''+row.ip+'' + } + },{ + fid:'port', + width: 180, + title: lan.docker.container.port, + template:function(row){ + var _port = [] + $.each(row.ports,function(index,item){ + if(item != null){ + _port.push(item[0]['HostPort']+'-->'+index) + } + }) + return ''+_port.join()+'' + } + },{ + title: lan.public.operate, + type: 'group', + width: 180, + align: 'right', + group: [{ + title: lan.public.terminal, + event:function(row){ + that.open_container_shell_view(row); + } + },{ + title: lan.public.log, + event:function(row){ + that.ajax_task_method('get_logs', { + data:{id:row.detail.Id}, + tips: lan.docker.container.get_logs_tips, + model_name: {dk_model_name:'container'} + },function(res){ + layer.open({ + type:1, + title:'['+row.name+'] ' + lan.docker.container.log, + area: '700px', + shadeClose: false, + closeBtn: 2, + btn:false, + content: '
      ' + + '
      ' + (res.msg == '' ? lan.docker.container.log_none : res.msg) + '
      ' + +'
      ', + success:function(){ + $('.dk-container-log').scrollTop(100000000000) + } + }) + }) + } + },{ + title: lan.docker.container.path, + event:function(row){ + if(row.merged == '') return layer.msg(lan.docker.container.path_not,{icon:0}) + openPath(row.merged); + } + },{ + title: lan.public.del, + event:function(row){ + bt.confirm({ + title: lan.docker.container.del_container + ' [' + row.name + ']', + msg: lan.docker.container.del_container_msg + }, function () { + that.ajax_task_method('del_container',{data:{id:row.detail.Id},tips:lan.docker.container.del_container_tips,model_name:{dk_model_name:'container'}},function(res){ + if(res.status) project_compose_table.$refresh_table_list(true) //刷新列表 + bt_tools.msg(res) + }) + }); + } + }] + }], + tootls:false, + success:function(){ + $('#project_compose_table tbody td').unbind('mouseenter').mouseenter(function(e){ + var _tdSPAN = $(this).find('span:first-child').not('.glyphicon') + if(e.target.cellIndex == 1){ + _tdSPAN.addClass('dk_status_select') + }else{ + _tdSPAN.removeClass('dk_status_select') + $('.dk_status_select_list').remove() + } + }) + $('#project_compose_table tbody td').unbind('mouseleave').mouseleave(function(e){ + var _tdSPAN = $(this).find('span:first-child').not('.glyphicon') + _tdSPAN.removeClass('dk_status_select') + $('.dk_status_select_list').remove() + }) + if($('#project_compose_table .tootls_group.tootls_top').length == 0){ + $('#project_compose_table').prepend('
      Compose ' + lan.public.operate + ':
      ') + + $('[name=set_project_status]').change(function(){ + that.ajax_task_method($(this).val(),{data:{project_id:dk_cont.id},tips:$('[name=set_project_status]').find('option:selected').text()},function(res){ + if(res.status) project_compose_table.$refresh_table_list(true) + bt_tools.msg(res) + }) + }) + } + } + }); + } + }) + } + },{ + title: lan.public.del, + event:function(row){ + bt.confirm({ + title: lan.docker.compose.del_compose + ' [' + row.name + ']', + msg: lan.docker.compose.del_compose_tips + }, function () { + that.ajax_task_method('remove', { + data: { project_id: row.id }, + tips: lan.docker.compose.deleting_compose + }, function(res){ + if (res.status) that.initTabConfig('compose') // 刷新列表 + bt_tools.msg(res); + }) + }); + } + }] + }], + tootls:[{ + type: 'group', + positon: ['left', 'top'], + list: [{ + title: lan.docker.compose.add_btn, + active: true, + event: function () { + that.add_project(); + } + }] + },{ // 批量操作 + type: 'batch', //batch_btn + positon: ['left', 'bottom'], + placeholder: lan.public.please_choose, + buttonValue: lan.public.exec, + disabledSelectValue: lan.docker.compose.batch_select_tips, + selectList: [{ + title: lan.public.del + " compose", + url: that.global_api, + load: true, + param:function(crow){ + return {data:that.batch_param_convert('remove',{project_id:crow.id})} + }, + refresh: true, + callback: function (thatc) { + bt.show_confirm(lan.docker.compose.batch_del_compose, "" + lan.docker.compose.batch_del_tips + "", function () { + thatc.start_batch({}, function (list) { + var html = '' + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '' + item.name + '
      ' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '
      '; + } + dk_compose_table.$batch_success_table({ + title: lan.docker.compose.batch_del_compose, + th: 'compose', + html: html + }); + dk_compose_table.$refresh_table_list(true); + }); + }); + } + }] + }] + }) + }, + /** + * @description 获取compose模板列表 + */ + get_model:function(){ + var that = this; + var _config = $.extend({},this.global,{dk_def_name:'template_list'}) + var dk_model_table = bt_tools.table({ + el:'#dk_model_table', + load: true, + url:this.global_api, + minWidth: '980px', + height:750, + param: {data:JSON.stringify(_config)}, + dataFilter: function (res) { + if(!res.msg.installed || !res.msg.service_status) that.stop_user_operation(res.msg.installed,res.msg.service_status) + return { data: res['msg']['template'] }; + }, + default: lan.docker.public.no_data(lan.docker.public.compose_template), + column:[{ + type: 'checkbox', + class: '', + width: 20 + }, + { + fid: 'name', + width: 266, + title: lan.docker.compose_template.template_name, + template:function(row){ + return ''+row.name+'' + } + }, + { + width: 266, + title: lan.site.path, + template:function(row){ + return ''+row.path+'' + }, + event: function (row) { + openEditorView(0,row.path) + } + }, + { + fid: 'remark', + title: lan.one_click.description, + type: 'input', + blur: function (row, index, ev, key, thatc) { + if (row.remark == ev.target.value) return false; + that.ajax_task_method('edit_template_remark',{data:{templates_id:row.id,remark:ev.target.value}}) + }, + keyup: function (row, index, ev) { + if (ev.keyCode === 13) { + $(this).blur(); + } + } + }, + { + title: lan.public.operate, + type: 'group', + width: 200, + align: 'right', + group: [{ + title: lan.public.edit, + event:function(row){ + that.ajax_task_method('get_template', { + data: { id: row.id }, + tips: lan.docker.compose_template.getting_template + }, function (res) { + if (res.status) { + that.edit_model_view($.extend({content:res['msg']},row)) + } + }); + } + },{ + title: lan.docker.compose_template.pull_mirror_image, + event:function(row){ + that.get_log_situation() + that.ajax_task_method('pull',{data:{template_id:row.id},tips:false},function(res){ + that.remove_log_clearinterval(); + bt_tools.msg(res); + }) + } + },{ + title: lan.public.del, + event:function(row){ + bt.confirm({ + title: lan.docker.compose_template.del_template + ' [' + row.name + ']', + msg: lan.docker.compose_template.del_template_tips + }, function () { + that.ajax_task_method('remove_template',{ + data: { template_id: row.id }, + tips: lan.docker.compose_template.del_template + },function(res){ + bt_tools.msg(res); + that.initTabConfig('model') //刷新列表 + }) + }); + } + }] + }], + tootls:[{ + type: 'group', + positon: ['left', 'top'], + list: [{ + title: lan.public.add, + active: true, + event: function (ev) { + that.add_model_view(); + } + }] + },{ // 批量操作 + type: 'batch', //batch_btn + positon: ['left', 'bottom'], + placeholder: lan.public.please_choose, + buttonValue: lan.public.exec, + disabledSelectValue: lan.docker.compose_template.batch_select_tips, + selectList: [ + { + title: lan.docker.compose_template.del_template, + url: that.global_api, + load: true, + param:function(crow){ + return {data:that.batch_param_convert('remove_template',{template_id:crow.id})} + }, + refresh: true, + callback: function (thatc) { + bt.show_confirm(lan.docker.compose_template.batch_del_template, "" + lan.docker.compose_template.batch_del_tips + "", function () { + thatc.start_batch({}, function (list) { + var html = '' + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '' + item.name + '
      ' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '
      '; + } + dk_model_table.$batch_success_table({ + title: lan.docker.compose_template.batch_del_template, + th: lan.docker.compose_template.template_name, + html: html + }); + dk_model_table.$refresh_table_list(true); + }); + }); + } + } + ] + }] + }) + }, + /** + * @description 获取网络列表 + */ + get_network:function(){ + var that = this; + var _config = $.extend({},this.global,{dk_def_name:'get_host_network'}) + var dk_network_table = bt_tools.table({ + el:'#dk_network_table', + load: true, + url:this.global_api, + param: {data:JSON.stringify(_config)}, + height:750, + dataFilter: function (res) { + if(!res.msg.installed || !res.msg.service_status) that.stop_user_operation(res.msg.installed,res.msg.service_status) + return { data: res['msg']['network'] }; + }, + default: lan.docker.public.no_data(lan.docker.public.network), + column:[{ + type: 'checkbox', + class: '', + width: 20 + }, + { + width:266, + title: lan.docker.network.name, + template:function(row){ + return ''+row.name+'' + } + }, + {fid:'driver',title: lan.docker.network.show}, + {fid:'subnet',title: lan.docker.network.num}, + {fid:'gateway',title: lan.docker.network.gateway}, + { + width:226, + title: lan.docker.container.tag, + template:function(row){ + var _label = [] + if(!$.isEmptyObject(row.labels)){ + $.each(row.labels,function(index,item){ + _label.push(index+'-'+item) + }) + } + return ''+_label.join() +'' + } + }, + { + width:150, + title: lan.docker.image.creation_time, + template:function(row){ + return ''+that.utc2beijing(row.time)+'' + } + }, + { + title: lan.public.operate, + type: 'group', + width: 60, + align: 'right', + group: [{ + title: lan.public.del, + event:function(row){ + bt.confirm({ + title: lan.docker.network.del(row.name), + msg: lan.docker.network.del_tips + }, function () { + that.ajax_task_method('del_network', { + data: { id: row.id }, + tips: lan.docker.network.deleting + },function(res){ + if(res.status) that.initTabConfig('network') //刷新列表 + bt_tools.msg(res); + }) + }); + } + }] + }], + tootls:[{ + type: 'group', + positon: ['left', 'top'], + list: [{ + title: lan.docker.network.add, + active: true, + event: function (ev) { + that.add_network(); + } + }] + },{ // 批量操作 + type: 'batch', //batch_btn + positon: ['left', 'bottom'], + placeholder: lan.public.please_choose, + buttonValue: lan.public.exec, + disabledSelectValue: lan.docker.public.batch_select_tips(lan.docker.public.network), + selectList: [{ + title: lan.docker.network.del(), + url: that.global_api, + load: true, + param:function(crow){ + return {data:that.batch_param_convert('del_network',{id:crow.id})} + }, + refresh: true, + callback: function (thatc) { + bt.show_confirm(lan.docker.public.batch_del(lan.docker.public.network), "" + lan.docker.public.batch_del_tips(lan.docker.public.network) + "", function () { + thatc.start_batch({}, function (list) { + var html = '' + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '' + item.name + '
      ' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '
      '; + } + dk_network_table.$batch_success_table({ + title: lan.docker.public.batch_del(lan.docker.public.network), + th: lan.docker.network.name, + html: html + }); + dk_network_table.$refresh_table_list(true); + }); + }); + } + }] + }] + }) + }, + /** + * @description 获取存储卷列表 + */ + get_volume:function(){ + var that = this; + var _config = $.extend({},this.global,{dk_def_name:'get_volume_list'}) + var dk_volume_table = bt_tools.table({ + el:'#dk_volume_table', + load: true, + url:this.global_api, + minWidth: '1020px', + height:750, + param: {data:JSON.stringify(_config)}, + dataFilter: function (res) { + if(!res.msg.installed || !res.msg.service_status) that.stop_user_operation(res.msg.installed,res.msg.service_status) + return { data: res['msg']['volume'] }; + }, + default: lan.docker.public.no_data(lan.docker.public.volume), + column:[{ + type: 'checkbox', + class: '', + width: 20 + }, + {fid:'Name',width:216,title: lan.docker.public.volume,template:function(row){ + return ''+row.Name+'' + }}, + { + type: 'link', + title: lan.docker.volume.mount, + template:function(row){ + return ''+row.Mountpoint+'' + }, + event: function (row) { + openPath(row.Mountpoint); + } + }, + { + fid:'container', + title: lan.docker.public.container + }, + {fid: 'Driver',title: lan.docker.volume.driver}, + { + fid:'CreatedAt', + width:150, + title: lan.docker.public.creation_time, + template:function(row){ + return ''+that.utc2beijing(row.CreatedAt)+'' + } + }, + { + width:206, + title: lan.docker.public.tag, + template:function(row){ + var _label = [] + if(!$.isEmptyObject(row.Labels)){ + $.each(row.Labels,function(index,item){ + _label.push(index+'-'+item) + }) + } + return ''+_label.join() +'' + } + }, + { + title: lan.public.operate, + type: 'group', + width: 60, + align: 'right', + group: [{ + title: lan.public.del, + event:function(row){ + bt.confirm({ + title: lan.docker.volume.del(row.Name), + msg: lan.docker.public.del_tips(lan.docker.public.volume) + }, function () { + that.ajax_task_method('remove',{data:{name:row.Name},tips:lan.docker.volume.deleting},function(res){ + if(res.status)that.initTabConfig('volume') //刷新列表 + bt_tools.msg(res); + + }) + }); + } + }] + }], + tootls:[{ + type: 'group', + positon: ['left', 'top'], + list: [{ + title: lan.docker.volume.add, + active: true, + event: function (ev) { + that.add_volume(); + } + }] + },{ // 批量操作 + type: 'batch', //batch_btn + positon: ['left', 'bottom'], + placeholder: lan.public.please_choose, + buttonValue: lan.public.exec, + disabledSelectValue: lan.docker.public.batch_select_tips(lan.docker.public.volume), + selectList: [{ + title: lan.docker.volume.del(), + url: that.global_api, + load: true, + param:function(crow){ + return {data:that.batch_param_convert('remove',{name:crow.Name})} + }, + refresh: true, + callback: function (thatc) { + bt.show_confirm(lan.docker.public.batch_del(lan.docker.public.volume), "" + lan.docker.public.batch_del_tips(lan.docker.public.volume) + "", function () { + thatc.start_batch({}, function (list) { + var html = '' + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '' + item.name + '
      ' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '
      '; + } + dk_volume_table.$batch_success_table({ + title: lan.docker.public.batch_del(lan.docker.public.volume), + th: lan.docker.volume.name, + html: html + }); + dk_volume_table.$refresh_table_list(true); + }); + }); + } + }] + }] + }) + }, + /** + * @description 获取仓库列表 + */ + get_registry:function(){ + var that = this; + var _config = $.extend({},this.global,{dk_def_name:'registry_list'}) + var dk_registry_table = bt_tools.table({ + el:'#dk_registry_table', + load: true, + url:this.global_api, + height:750, + param: {data:JSON.stringify(_config)}, + dataFilter: function (res) { + if(!res.msg.installed || !res.msg.service_status) that.stop_user_operation(res.msg.installed,res.msg.service_status) + return { data: res['msg']['registry'] }; + }, + default: lan.docker.public.no_data(lan.docker.public.repository), + column:[{ + type: 'checkbox', + class: '', + width: 20 + }, + {width:266,title: 'URL',template:function(row){ + return ''+row.url+'' + }}, + {fid: 'username',title: lan.docker.repository.username }, + {fid: 'name',title: lan.docker.repository.name }, + { + fid: 'remark', + title: lan.one_click.description, + type: 'input', + blur: function (row, index, ev, key, thatc) { + if (row.remark == ev.target.value) return false; + row['remark'] = ev.target.value + row['registry'] = row.url + that.ajax_task_method('edit',{data:row}) + }, + keyup: function (row, index, ev) { + if (ev.keyCode === 13) { + $(this).blur(); + } + } + }, + { + title: lan.public.operate, + type: 'group', + width: 100, + align: 'right', + group: [{ + title: lan.public.edit, + event:function(row){ + that.render_registry_view(row); + } + },{ + title: lan.public.del, + event:function(row){ + bt.confirm({ + title: lan.docker.repository.del(row.name), + msg: lan.docker.public.del_tips(lan.docker.public.repository) + }, function () { + that.ajax_task_method('remove',{data:{id:row.id},tips: lan.docker.repository.deleting},function(res){ + bt_tools.msg(res); + that.initTabConfig('registry') //刷新列表 + }) + }); + } + }] + }], + tootls:[{ + type: 'group', + positon: ['left', 'top'], + list: [{ + title: lan.docker.repository.add, + active: true, + event: function (ev) { + that.render_registry_view(); + } + }] + },{ // 批量操作 + type: 'batch', //batch_btn + positon: ['left', 'bottom'], + placeholder: lan.public.please_choose, + buttonValue: lan.public.exec, + disabledSelectValue: lan.docker.public.batch_select_tips(lan.docker.public.repository), + selectList: [{ + title: lan.docker.repository.del(), + url: that.global_api, + load: true, + param:function(crow){ + return {data:that.batch_param_convert('remove',{id:crow.id})} + }, + refresh: true, + callback: function (thatc) { + bt.show_confirm(lan.docker.public.batch_del(lan.docker.public.repository), "" + lan.docker.public.batch_del_tips(lan.docker.public.repository) + "", function () { + thatc.start_batch({}, function (list) { + var html = '' + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '' + item.name + '
      ' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '
      '; + } + dk_registry_table.$batch_success_table({ + title: lan.docker.public.batch_del(lan.docker.public.repository), + th: lan.docker.repository.name, + html: html + }); + dk_registry_table.$refresh_table_list(true); + }); + }); + } + }] + }] + }) + }, + /** + * @description 获取镜像列表 + */ + get_image:function(){ + var that = this; + var _config = $.extend({},this.global,{dk_def_name:'image_list'}) + var dk_image_table = bt_tools.table({ + el:'#dk_image_table', + load: true, + url:this.global_api, + minWidth: '1020px', + height:750, + param: {data:JSON.stringify(_config)}, + dataFilter: function (res) { + if(!res.msg.installed || !res.msg.service_status) that.stop_user_operation(res.msg.installed,res.msg.service_status) + that.dk_registry = res['msg']['registry_list'] + return { data: res['msg']['images_list'] }; + }, + default: lan.docker.public.no_data(lan.docker.public.mirror_image), + column:[{ + type: 'checkbox', + class: '', + width: 20 + }, + { + width:200, + title: 'ID', + template:function(row){ + return ''+row.id+'' + } + }, + { + fid: 'name', + title: lan.docker.image.name + }, + { + width:86, + title: lan.database.size, + template: function (row) { + return ''+bt.format_size(row.size)+'' + } + }, + { + width:150, + title: lan.docker.image.creation_time, + template:function(row){ + return ''+that.utc2beijing(row.time)+'' + } + }, + { + title: lan.public.operate, + type: 'group', + width: 140, + align: 'right', + group: [{ + title: lan.docker.image.push, + event:function(row){ + var _registry = [] + if(that.dk_registry.length > 0){ + $.each(that.dk_registry,function(index,item){ + _registry.push({title:item.name+'['+item.url+'/'+item.namespace+']',value:item.name}) + }) + }else{ + _registry = [{title: lan.docker.image.push_tips1,value:'dk_registry_false'}] + } + bt_tools.open({ + type: 1, + title: lan.docker.image.push_title1 + ' [' + row.name + '] ' + lan.docker.image.push_title2, + area: '580px', + btn: [lan.public.submit, lan.site.no], + content: { + 'class': "pd20", + form: [{ + label: lan.docker.image.warehouse_name, + group: { + name:'name', + type:'select', + width: "400px", + list:_registry + } + },{ + label: lan.docker.container.tag, + group: { + name: "tag", + type: "text", + value: '', + width: "400px", + placeholder: lan.docker.image.tag_input + } + }] + }, + yes: function (formD,indexs) { + if (formD.name === 'dk_registry_false') return bt_tools.msg(lan.docker.image.push_tips2, 2) + if (formD.tag === '') return bt_tools.msg(lan.docker.image.push_tips3, 2) + formD['id'] = row.id + that.get_log_situation() + that.ajax_task_method('push',{data:formD,tips:false},function(res){ + that.remove_log_clearinterval(); + if(res.status){ + layer.closeAll(); + that.initTabConfig('image') //刷新列表 + } + bt_tools.msg(res) + }) + } + }) + } + },{ + title: lan.docker.image.export, + event:function(row){ + bt_tools.open({ + type: 1, + title: lan.docker.image.export_title(row.name), + area: '480px', + btn: [lan.docker.image.export, lan.site.no], + content: { + 'class': "pd20", + form: [{ + label: lan.site.path, + group: { + name: "path", + type: "text", + value: '', + width: "240px", + placeholder: lan.docker.image.path_input, + icon: { + type: 'glyphicon-folder-open', + event:function(){} + } + } + },{ + label: lan.files.file_name, + group: { + name: "name", + type: "text", + value: '', + width: "240px", + placeholder: lan.docker.image.file_input, + unit:'.tar' + } + }] + }, + yes: function (formD,indexs) { + if (formD.path === '') return bt_tools.msg(lan.docker.image.export_tips1, 2) + if (formD.name === '') return bt_tools.msg(lan.docker.image.export_tips, 2) + formD['id'] = row.id + + that.ajax_task_method('save', { + data: formD, + tips: lan.docker.image.exporting + }, function(res){ + if(res.status){ + layer.close(indexs); + that.initTabConfig('image') //刷新列表 + } + bt_tools.msg(res) + }) + } + }) + } + },{ + title: lan.public.del, + event:function(row){ + bt.confirm({ + title: lan.docker.image.del(row.name), + msg: lan.docker.image.del_tips + }, function () { + that.ajax_task_method('remove', { + data: { + id: row.id, force: 0, name: row.name + }, + tips: lan.docker.image.deleting + }, function (res) { + if (res.status) that.initTabConfig('image') //刷新列表 + bt_tools.msg(res); + }) + }); + } + }] + }], + tootls:[{ + type: 'group', + positon: ['left', 'top'], + list: [{ + title: lan.docker.image.btn1, + active: true, + event:function(ev){ + var _registry = [] + if(that.dk_registry.length > 0){ + $.each(that.dk_registry,function(index,item){ + _registry.push({title:item.name+'['+item.url+'/'+item.namespace+']',value:item.name}) + }) + }else{ + _registry = [{title:lan.docker.image.warehouse_select,value:'dk_registry_false'}] + } + bt_tools.open({ + type: 1, + title: lan.docker.image.pull_title, + area: '580px', + btn: [lan.public.submit, lan.site.no], + content: { + 'class': "pd20", + form: [{ + label: lan.docker.image.warehouse_name, + group: { + name:'name', + type:'select', + width: "400px", + list:_registry + } + },{ + label: lan.docker.image.mirror_name, + group: { + name: "image", + type: "text", + value: '', + width: "400px", + placeholder: lan.docker.image.mirror_input + } + }] + }, + yes: function (formD, indexs) { + if (formD.name === 'dk_registry_false') return bt_tools.msg(lan.docker.image.pull_tips1, 2) + if (formD.image === '') return bt_tools.msg(lan.docker.image.pull_tips2, 2) + that.get_log_situation() + that.ajax_task_method('pull_from_some_registry',{data:formD,tips:false},function(res){ + that.remove_log_clearinterval() + if(res.status){ + layer.close(indexs); + that.initTabConfig('image') //刷新列表 + } + bt_tools.msg(res) + }) + } + }) + } + },{ + title: lan.docker.image.btn2, + event:function(ev){ + bt_tools.open({ + type: 1, + title: lan.docker.image.btn2, + area: '460px', + btn: [lan.docker.image.import, lan.site.no], + content: { + 'class': "pd20", + form: [{ + label: lan.site.path, + group: { + name: "path", + type: "text", + value: '', + width: "240px", + placeholder: lan.docker.image.path_input, + icon: { + type: 'glyphicon-folder-open', + select:'file', + event:function(){} + } + } + }] + }, + yes: function (formD, indexs) { + if (formD.path === '') return bt_tools.msg(lan.docker.image.export_tips1, 2); + that.ajax_task_method('load',{data:formD,tips: lan.docker.image.importing},function(res){ + if(res.status){ + layer.close(indexs); + that.initTabConfig('image') //刷新列表 + } + bt_tools.msg(res) + }) + } + }) + } + },{ + title: lan.docker.image.btn3, + event: function () { + that.construction_image(); + } + }] + },{ // 批量操作 + type: 'batch', //batch_btn + positon: ['left', 'bottom'], + placeholder: lan.public.please_choose, + buttonValue: lan.public.exec, + disabledSelectValue: lan.docker.image.batch_tips, + selectList: [{ + title: lan.docker.image.del(), + url: that.global_api, + load: true, + param:function(crow){ + return {data:that.batch_param_convert('remove',{id:crow.id,force:0,name:crow.name})} + }, + refresh: true, + callback: function (thatc) { + bt.show_confirm(lan.docker.image.batch_del, "" + lan.docker.image.batch_del_tips + "", function () { + thatc.start_batch({}, function (list) { + var html = '' + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += '' + item.name + '
      ' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '
      '; + } + dk_image_table.$batch_success_table({ + title: lan.docker.image.batch_del, + th: lan.docker.image.name, + html: html + }); + dk_image_table.$refresh_table_list(true); + }); + }); + } + }] + }] + }) + }, + /** + * @description 获取设置页面 + */ + get_setup:function(){ + var _html = '',that = this; + this.ajax_task_method('get_config',{},function(res){ + var info = res.msg; + var status_info = info.service_status ? ['Enable', '#20a53a', 'play'] : ['Stopped', 'red', 'pause']; + + _html = '
      \ +
      \ + Docker server: \ +
      Current status: ' + status_info[0] + '
      \ + \ + \ +
      \ +
      \ +
      \ + Container monitor: \ +
      \ +
      \ + \ + \ +
      \ + * Set the container page monitoring switch. After this switch is turned off, the CPU usage will not be monitored.\ +
      \ +
      \ +
      \ + Save days: \ +
      \ + \ + \ + * Set the container page monitoring savory days\ +
      \ +
      \ +
      \ + Registry mirrors: \ +
      \ + \ + \ +
      \ +
      \ +
      ' + $('#dk_setup_form').html(_html) + $('#monitor_status').prop('checked',info.monitor_status) //监控状态 + //服务按钮 + $('.serveSetup').click(function(){ + var _set = $(this).data('setup'); + that.ajax_task_method('docker_service',{data:{act:_set},tips:'Set the docker service status'},function(ress){ + if(ress.status) that.initTabConfig('setup') + bt_tools.msg(ress) + }) + }) + //容器监控开关 + $("#monitor_status").change(function(){ + var _status = $(this).prop('checked'); + that.ajax_task_method('set_docker_monitor',{data:{act:_status?'start':'stop'},tips:'Set container monitoring configuration'},function(res){ + if(res.status) that.initTabConfig('setup') + bt_tools.msg(res) + }) + }) + //容器监控天数 + $('.monitorSubmit').click(function(){ + var save_num = $('[name=monitor_save_day]').val(); + if(save_num <= 0)return layer.msg('The number of monitoring and preservation cannot be less than 0',{icon:2}) + + that.ajax_task_method('set_monitor_save_date',{data:{save_date:save_num},tips:'Set container monitoring configuration'},function(res){ + if(res.status) that.initTabConfig('setup') + bt_tools.msg(res) + }) + }) + //设置加速url + $('.editSpeed').click(function(){ + bt_tools.open({ + title:'Set the acceleration URL', + type:1, + shadeClose: false, + closeBtn: 2, + area:'520px', + content:{ + 'class':'pd20', + form:[{ + label:'Accelerate URL', + group:{ + type:'text', + name:'registry_mirrors_address', + value:info.registry_mirrors, + width:'360px', + placeholder:'Please enter the acceleration URL' + } + },{ + label:'', + group:{ + type:'help', + style:{'margin-top':'0'}, + list:[ + 'Priority use the acceleration URL to perform operations, and the request timeout will skip the use of the default acceleration method', + 'After setting acceleration, you need to restart the docker manually', + 'Turn off acceleration, please set it to empty' + ] + } + }] + },yes:function(formD,index){ + that.ajax_task_method('set_registry_mirrors',{data:formD,tips:false},function(uRes){ + if(uRes.status){ + layer.close(index) + that.initTabConfig('setup') + } + bt_tools.msg(uRes) + }) + } + }) + }) + }) + + + }, + /** + * @description 添加容器 + */ + add_container:function(){ + var that = this, _imageList = '', _volumesList = '', add_pro = null; + if (this.dk_images.length > 0) { + $.each(this.dk_images, function (index, item) { + _imageList += '' + }) + } + if (this.dk_volumes.length > 0) { + $.each(this.dk_volumes, function (index, item) { + _volumesList +='
    • ' + item.Name + '
    • ' + }) + } + + layer.open({ + type: 1, + closeBtn: 2, + title: lan.docker.container.add_container, + area: ['720px','630px'], + skin: 'add_container', + btn: [lan.public.submit, lan.site.no], + shadeClose: false, + content: '\ +
      \ +
      \ + ' + lan.docker.container.create_container + '\ + ' + lan.docker.container.container_arr + '\ +
      \ +
      \ +
      \ +
      \ +
      ' + lan.docker.public.container + '\ +
      \ + \ + ' + lan.docker.container.mirror_image + '\ + \ +
      \ +
      \ +
      \ + ' + lan.public.port + '\ +
      \ + \ +
      \ + \ + -\ + \ + +\ +
      \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
      ' + lan.docker.container.container_port + '' + lan.docker.container.server_port + '' + lan.public.operate + '
      ' + lan.site.data_empty + '
      \ +
      \ +
      \ +
      \ +
      \ +
      \ + ' + lan.docker.container.boot_command + '\ +
      \ + \ +
      \ +
      \ +
      \ + \ +
      \ + \ + \ + ' + lan.docker.container.shop_container_del + '\ + \ + \ +
      \ +
      \ +
      \ + ' + lan.docker.container.limit_cpu + '\ +
      \ + \ + ' + lan.index.process_mem + '\ + \ + \ +
      \ +
      \ +
      \ + ' + lan.docker.container.mount_volume + '\ +
      \ +
      \ +
      \ + \ +
        ' + _volumesList + '
      \ + \ + \ + +\ +
      \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
      ' + lan.docker.container.server_directory + '' + lan.public.permission + '' + lan.docker.container.container_directory + '' + lan.public.operate + '
      ' + lan.site.data_empty + '
      \ +
      \ +
      \ +
      \ +
      \ +
      \ +
      \ + ' + lan.docker.container.tag + '\ +
      \ + \ +
      \ +
      \ +
      \ + ' + lan.docker.container.env_variable + '
      ' + lan.docker.container.one_line + '
      \ +
      \ + \ +
      \ +
      \ +
      \ + ' + lan.docker.container.restart_rule + '\ +
      \ + \ + *' + lan.docker.container.restart_rule_select_tips + '\ +
      \ +
      \ +
      \ +
      \ + \ +
      \ +
      ', + success:function(){ + $(".add_container").on('click', '.tab-nav span', function () { + var index = $(this).index(); + $(this).addClass('on').siblings().removeClass('on'); + $('.tabs_content .tabpanel').eq(index).removeAttr('style').siblings().attr('style','display:none') + }); + // <----------容器-----------> + //服务器目录事件 + $('[name=dk_server_path]').click(function(e){ + var _ul = $(this).siblings('ul') + if (_ul.hasClass('show')) { + _ul.removeClass('show') + } else { + _ul.addClass('show') + } + $(document).one('click',function(){ + _ul.removeClass('show'); + }) + e.stopPropagation(); + }) + // 服务器目录ul + $('.dk_volumes li').click(function(){ + $('[name=dk_server_path]').val($(this).data('key')) + }) + // 端口类型触发 + $('[name=dk_port]').change(function(){ + $(this).val() == 1 ? $('.dk_port_setting').hide() : $('.dk_port_setting').show(); + }) + //添加端口、目录tbody + $('.plus').click(function(){ + var _Arrinput = $(this).siblings('input'), + _val_one = $(_Arrinput[0]).val(), + _val_two = $(_Arrinput[1]).val(), + THbody = $(this).siblings('.divtable').find('tbody'), + _td = ''; + + if (_val_one == '') return layer.msg(lan.docker.public.please_enter + $(_Arrinput[0]).attr('placeholder'),{icon:2}) + if (_val_two == '') return layer.msg(lan.docker.public.please_enter + $(_Arrinput[1]).attr('placeholder'),{icon:2}) + + switch($(this).data('type')){ + case 'port': + _td = '\ + \ + ' + _val_one + '\ + ' + _val_two + '\ + ' + lan.public.del + '\ + ' + break; + case 'path': + var pess_type = $('[name=volumes_type]').val(); + _td = '\ + \ + \ + \ + ' + _val_one + '\ + \ + \ + ' + pess_type + '\ + \ + \ + '+_val_two+'\ + \ + \ + ' + lan.public.del + '\ + ' + break; + } + + if (THbody.find('td').length === 1) { + $(THbody).html(_td) + } else { + $(THbody).append(_td) + } + + //清空输入框内容 + $(_Arrinput[0]).val('') + $(_Arrinput[1]).val('') + }) + // 端口、目录删除 + $('.add_container').on('click','.del-change-td',function(){ + var tbody = $(this).parents('tbody') + $(this).parents('tr').remove() + if (tbody.find('tr').length == 0) { + tbody.append('' + lan.site.data_empty + ''); + } + }) + // 停止后自动删除容器事件 + $('.add_container .shop_container_del').click(function(){ + if ($(this).find('i').hasClass('active')) { + $(this).find('i').removeClass('active').siblings('input').prop('checked',false) + } else { + $(this).find('i').addClass('active').siblings('input').prop('checked',true) + } + }); + + // <-----------------容器编排-------------------> + var modelList = [] + render_model_list() + add_pro = bt_tools.form({ + el:'#add_project_form', + form: [ + { + label: lan.docker.public.compose_template, + group:[ + { + type: 'select', + name: 'template_id', + width: '440px', + list: modelList + }, + { + type: 'link', + title: lan.public_backup.create, + event: function () { + that.add_model_view(function(resolve){ + if(resolve){ + that.ajax_task_method('template_list', { + tips: lan.docker.compose_template.getting_template, + model_name: { dk_model_name: 'compose' } + }, function (model_list) { + that.dk_template = model_list['msg']['template'] + render_model_list() + add_pro['config']['form'][0]['group'][0]['list'] = modelList; // 模板列表 + add_pro.$local_refresh("template_id", add_pro['config']['form'][0]['group'][0]) // 刷新局部数据 + }) + } + }) + } + } + ] + }, + { + label: lan.public.name, + group: { + type: 'text', + name: 'project_name', + width: '440px', + placeholder: lan.docker.compose.name_input_tips + } + }, + { + label: lan.one_click.description, + group: { + type: 'textarea', + name: 'remark', + style: { + 'width': '440px', + 'min-width': '380px', + 'min-height': '130px', + 'line-height': '22px', + 'padding-top': '5px', + 'resize': 'both' + }, + placeholder: lan.docker.compose.description_input_tips + } + } + ] + }) + function render_model_list () { + if (that.dk_template.length > 0) { + $.each(that.dk_template,function(index,item){ + modelList.push({title:item.name,value:item.id}) + }) + } else { + modelList = [ + { value:'dk_project_false', title: lan.docker.compose.compose_template_select_tips } + ] + } + } + }, + yes: function (indexs) { + // 创建容器 + if ($('.add_container .tab-nav span.on').index() == 0) { + var _name = $('[name=dk_container_name]').val(), + _image = $('[name=dk_image]').val(), + _port = $('[name=dk_port]').val(), + _start_cmd = $('[name=dk_start_cmd]').val(), + auto_remove = $('.form-checkbox').siblings('input').prop('checked')?1:0, + _cpus = $('[name=dk_cpu_num]').val(), + _size = $('[name=dk_cpu_size]').val(), + _unit = $('[name=dk_cpu_unit]').val(), + _tag = $('[name=dk_tag]').val(), + _config = $('[name=dk_config]').val(), + _reset = $('[name=dk_reset]').val(); + + // 验证 + if (_name == '') return layer.msg(lan.docker.container.add_container_tips1, { icon: 2 }); + if (_image == '') return layer.msg(lan.docker.container.add_container_tips2, { icon: 2 }); + if (_cpus != '' && _cpus <= 0)return layer.msg(lan.docker.container.add_container_tips3, { icon: 2 }) + if (_size != '' && _size <= 0)return layer.msg(lan.docker.container.add_container_tips4, { icon: 2 }) + + var _form = { + name: _name, + image:_image, + publish_all_ports:_port, + command:_start_cmd, + auto_remove:auto_remove, + environment:_config, + cpuset_cpus:_cpus, + mem_limit:_size+_unit, + labels:_tag, + restart_policy:{Name:_reset,MaximumRetryCount:5} + } + var port_array = {},path_array = {} + // 端口 + if ($('.dk_port_table tbody tr').length > 0) { + $.each($('.dk_port_table tbody tr'), function(index, item) { + if ($(item).find('td').length == 3) { + port_array[$(item).find('td').eq(0).text()+'/tcp'] = $(item).find('td').eq(1).text(); + } + }); + _form['ports'] = port_array; + } + // 路径 + if ($('.dk_path_table tbody tr').length > 0) { + $.each($('.dk_path_table tbody tr'),function(index,item){ + if ($(item).find('td').length == 4) { + path_array[$(item).find('td').eq(0).find('.size_ellipsis').text()] = { + bind: $(item).find('td').eq(2).find('.size_ellipsis').text(), + mode: $(item).find('td').eq(1).text() + } + } + }) + _form['volumes'] = path_array + } + //接口参数 + that.ajax_task_method('run', { + data: $.extend(_form,that.global), + tips: lan.docker.container.add_container_api_tips + }, function (res) { + if (res.status) { + layer.close(indexs); + that.initTabConfig('container'); // 刷新列表 + } + bt_tools.msg(res); + }) + } else { + var formValue = add_pro.$get_form_value() + if (formValue.template_id === 'dk_project_false') return bt_tools.msg(lan.docker.compose.add_compose_tips1, 2) + if (formValue.project_name == '') return layer.msg(lan.docker.compose.add_compose_tips2, { icon: 2 }) + + that.get_log_situation(); + that.ajax_task_method('create', { + data: formValue, + tips: false, + model_name: { dk_model_name: 'compose' } + }, function (res) { + that.remove_log_clearinterval(); + if (res.status) { + layer.closeAll(); + $('#cutMode .tabs-item').eq(2).click() // 跳转到容器编排 + } + bt_tools.msg(res) + }); + } + } + }) + }, + /** + * @description 添加Compose + */ + add_project:function(){ + var that = this,add_pro = null + bt_tools.open({ + title: lan.docker.compose.add_btn, + btn: [lan.public.submit, lan.site.no], + area: ['560px', '380px'], + content: '
      ', + success: function () { + var modelList = [] + render_model_list() + add_pro = bt_tools.form({ + el:'#add_project_form', + form: [{ + label: lan.docker.public.compose_template, + group:[ + { + type: 'select', + name:'template_id', + width:'300px', + list:modelList + }, + { + type:'link', + title: lan.public_backup.create, + event:function(){ + that.add_model_view(function(resolve){ + if (resolve) { + that.ajax_task_method('template_list', { + tips: lan.docker.compose_template.getting_template, + model_name: { + dk_model_name: 'compose' + } + }, function (model_list) { + that.dk_template = model_list['msg']['template'] + render_model_list() + add_pro['config']['form'][0]['group'][0]['list'] = modelList; // 模板列表 + add_pro.$local_refresh("template_id", add_pro['config']['form'][0]['group'][0]) // 刷新局部数据 + }) + } + }) + } + } + ] + },{ + label: lan.public.name, + group: { + type: 'text', + name: 'project_name', + width: '300px', + placeholder: lan.docker.compose.name_input_tips + } + },{ + label: lan.one_click.description, + group: { + type: 'textarea', + name: 'remark', + style: { + 'width': '300px', + 'min-width': '300px', + 'min-height': '130px', + 'line-height': '22px', + 'padding-top': '5px', + 'resize': 'both' + }, + placeholder: lan.docker.compose.description_input_tips + } + }] + }) + function render_model_list () { + if (that.dk_template.length > 0) { + $.each(that.dk_template, function(index, item) { + modelList.push({ title: item.name, value: item.id }); + }); + }else{ + modelList = [ + { value:'dk_project_false', title: lan.docker.compose.compose_template_select_tips } + ] + } + } + }, + yes:function(indexs){ + var formValue = add_pro.$get_form_value() + if (formValue.template_id === 'dk_project_false') return bt_tools.msg(lan.docker.compose.add_compose_tips1, 2) + if(formValue.project_name == '')return layer.msg(lan.docker.compose.add_compose_tips2,{icon:2}) + that.get_log_situation() + that.ajax_task_method('create',{data:formValue,tips:false},function(res){ + that.remove_log_clearinterval(); + if(res.status){ + layer.closeAll(); + that.initTabConfig('compose') //刷新列表 + } + bt_tools.msg(res) + }) + } + }) + }, + /** + * @description 添加Compose模板 + */ + add_model_view:function(callback){ + var that = this,loca_compose = null,search_list = [] + var model_tabl = bt_tools.tab({ + class:'pd20', + type:0, + active:1, + theme: { nav: 'yaml' }, + list:[{ + title: lan.docker.compose_template.add_title, + name:"addCompose", + content: '
      \ +
      \ + ' + lan.docker.compose_template.create_template + '\ +
      \ + \ +
      \ +
      \ +
      \ + ' + lan.one_click.remark + '\ +
      \ + \ +
      \ +
      \ +
      \ + ' + lan.docker.compose_template.content + '\ +
      \ +
      \ +
      \ +
      \ +
      ', + success:function(){ + _aceEditor = bt.aceEditor({ el: 'dkContntBody', content: '' }); + } + },{ + title: lan.docker.compose_template.search_local_template, + name:'searchCompose', + content:'\ +
      \ +
      \ + \ +
      \ + \ + \ +
      \ + \ + \ +
      \ +
      \ +
      ', + success:function(){ + var one = 0; + loca_compose = bt_tools.table({ + el:'#model_sc_table', + data:search_list, + height: '330px', + column:[{ + type: 'checkbox', + class: '', + width: 20 + },{ + width:180, + title: lan.docker.compose_template.compose_template_name, + template:function(row){ + return ''+row.project_name+'' + } + },{ + width:180, + title: lan.docker.container.path, + template:function(row){ + return ''+row.conf_file+'' + } + },{ + fid: 'remark', + title: lan.one_click.description, + type: 'input', + blur: function (row, index, ev, key, thatc) { + row.remark = ev.target.value + }, + keyup: function (row, index, ev) { + if (ev.keyCode === 13) { + $(this).blur(); + } + } + }], + success:function(){ + if(one == 0){ + one++ + $('#model_sc_table').on('click', '.cust—checkbox', function (e) { + var len = loca_compose.checkbox_list + $('.lc_select').html(len.length+'个') + }) + $('.loca_compose_box').append('\ +
        \ +
      • ' + lan.docker.compose_template.add_search_tips1 + ' [' + lan.docker.compose_template.selected + ': 0]
      • \ +
      '); + } + } + }) + //停止后自动删除容器事件 + $('.model_sc_child').click(function(){ + if($(this).find('i').hasClass('active')){ + $(this).find('i').removeClass('active').siblings('input').prop('checked',false) + }else{ + $(this).find('i').addClass('active').siblings('input').prop('checked',true) + } + }) + // 模板搜索按钮 + $('.model_search_btn').click(function(){ + var _val = $('#model_sc_path').val(), + _child = $('.form-checkbox').siblings('input').prop('checked')?1:0 + if(_val == '') return bt_tools.msg(lan.docker.compose_template.search_folder_tips1, 2) + that.ajax_task_method('get_compose_project',{ + data: { path: _val, sub_dir: _child }, + tips: lan.docker.compose.getting_compose, + model_name:{ dk_model_name: 'compose' } + }, function (mlist) { + if(mlist.status == false)return bt_tools.msg(mlist.msg,2) + if(mlist.length == 0)return bt_tools.msg(lan.docker.compose_template.search_folder_tips2, 0) + loca_compose.$reader_content(mlist) + }) + }) + } + }] + }) + + bt_tools.open({ + title: lan.docker.compose_template.add_yaml_template, + btn: [lan.public.submit, lan.site.no], + skin:'model_sc_view', + area: ['680px', '640px'], + content:model_tabl.$reader_content(), + success:function(){ + model_tabl.$init(); + }, + yes:function(layers){ + if (model_tabl.active == 0) { + var _mName = $('[name=model_name]').val(), + _mDesc = $('[name=model_desc]').val(), + _Con = _aceEditor.ACE.getValue(); + + if (_mName == '') return layer.msg(lan.docker.compose_template.add_template_tips1,{icon:2}) + if (_Con == '') return layer.msg(lan.docker.compose_template.add_template_tips2,{icon:2}) + + var _param = {name:_mName,remark:_mDesc,data:_Con} + that.ajax_task_method('add_template', { + data: _param, + tips: lan.docker.compose_template.adding_template, + model_name: { dk_model_name: 'compose' } + }, function (res) { + if (res.status) { + layer.close(layers) + if (callback) { + callback(res.status) + } else { + that.initTabConfig('model') //刷新列表 + } + } + var entry = { "'": "'", '"': '"', '<': '<', '>': '>' }; + res.msg = res.msg.replace(/(['")-><&\\\/\.])/g, function ($0) { return entry[$0] || $0; }); + bt_tools.msg(res) + }) + } else { + var check_len = loca_compose.checkbox_list.length, + array = [] + $.each(loca_compose.data,function(index,item){ + if ($.inArray(index,loca_compose.checkbox_list) != -1) { + array.push(item); + } + }) + if(check_len == 0) return layer.msg(lan.docker.compose_template.add_path_tips1,{icon:2}) + + layer.confirm(lan.docker.compose_template.add_path_tips2 + check_len + lan.docker.compose_template.add_path_tips3, { + title: lan.docker.compose_template.add_template, + icon: 3, + closeBtn: 2 + }, function () { + that.ajax_task_method('add_template_in_path',{ + data: { template_list: array }, + tips: lan.docker.compose_template.adding_template, + model_name: { dk_model_name: 'compose' } + }, function (res) { + if(res.status){ + layer.close(layers) + if (callback) { + callback(res.status) + }else{ + that.initTabConfig('model') // 刷新列表 + } + } + bt_tools.msg(res) + }) + }); + } + } + }) + }, + /** + * @description 模板添加、编辑界面 + * @param {Object} edit 编辑数据 + * @param callback 成功后回调 + */ + edit_model_view:function(edit){ + var that = this,_aceEditor = null; + layer.open({ + type: 1, + title: 'Edit template', + btn: [lan.public.save, lan.site.no], + area:'650px', + shadeClose: false, + closeBtn: 2, + content: '
      \ +
      ' + lan.docker.compose_template.template_name + '\ +
      \ + \ +
      \ +
      \ +
      ' + lan.one_click.description + '\ +
      \ + \ +
      \ +
      \ +
      ' + lan.docker.compose_template.content + '\ +
      \ +
      \ +
      \ +
      \ +
      ', + success:function(){ + _aceEditor = bt.aceEditor({ el: 'dkContntBody', content: edit.content }); + }, + yes:function(layers){ + var _mName = $('[name=model_name]').val(), + _mDesc = $('[name=model_desc]').val(), + _Con = _aceEditor.ACE.getValue(); + + if(_mName == '') return layer.msg(lan.docker.compose_template.add_template_tips1,{icon:2}) + if(_mDesc == '') return layer.msg(lan.docker.compose.description_input_tips,{icon:2}) + if(_Con == '') return layer.msg(lan.docker.compose_template.add_template_tips2,{icon:2}) + + var _param = {name:_mName,remark:_mDesc,data:_Con} + if(edit) _param['id'] = edit.id + that.ajax_task_method('edit_template',{data:_param,tips: lan.docker.compose_template.saving,model_name:{dk_model_name:'compose'}},function(res){ + if(res.status){ + layer.close(layers) + that.initTabConfig('model') //刷新列表 + } + bt_tools.msg(res) + }) + } + }) + }, + /** + * @description 添加网络 + */ + add_network:function(){ + var that = this,add_network = null + bt_tools.open({ + title: lan.docker.network.add, + btn: [lan.public.submit, lan.site.no], + area: ['540px','510px'], + content: '
      ', + success: function (layers) { + add_network = bt_tools.form({ + el:'#add_network_form', + form: [{ + label: lan.docker.network.name, + group: { + type: 'text', + name: 'name', + width: '384px', + placeholder: lan.docker.network.name_input + } + },{ + label: lan.docker.network.device, + group:{ + type: 'select', + name:'driver', + width:'160px', + list:[ + {title:'bridge',value:'bridge'}, + {title:'ipvlan',value:'ipvlan'}, + {title:'macvlan',value:'macvlan'}, + {title:'overlay',value:'overlay'} + ] + } + },{ + label: lan.docker.network.parameter, + group: { + type: 'textarea', + name: 'options', + style: { + 'width': '384px', + 'min-width': '384px', + 'min-height': '70px', + 'line-height': '22px', + 'padding-top': '5px', + 'resize': 'both' + }, + placeholder: lan.docker.network.parameter_textarea + } + },{ + label: lan.docker.network.sub_network, + group:[{ + type: 'text', + name: 'subnet', + width: '160px', + placeholder: lan.docker.network.sub_network_input + },{ + label: lan.docker.network.gateway, + type: 'text', + name: 'gateway', + width: '160px', + placeholder: lan.docker.network.gateway_input + }] + },{ + label: lan.docker.network.ip_range, + group: { + type: 'text', + name: 'iprange', + width: '384px', + placeholder: lan.docker.network.ip_range_input + } + },{ + label: lan.docker.container.tag, + group: { + type: 'textarea', + name: 'labels', + style: { + 'width': '384px', + 'min-width': '384px', + 'min-height': '70px', + 'line-height': '22px', + 'padding-top': '5px', + 'resize': 'both' + }, + placeholder: lan.docker.network.tag_textarea + } + }] + }) + }, + yes:function(layers){ + var formValue = add_network.$get_form_value() + if(formValue.name == '')return layer.msg(lan.docker.network.add_tips1,{icon:2}) + if(formValue.options == '')return layer.msg(lan.docker.network.add_tips2,{icon:2}) + if(formValue.subnet == '')return layer.msg(lan.docker.network.add_tips3,{icon:2}) + if(formValue.gateway == '')return layer.msg(lan.docker.network.add_tips4,{icon:2}) + if(formValue.iprange == '')return layer.msg(lan.docker.network.add_tips5,{icon:2}) + + that.ajax_task_method('add',{data:formValue,tips:lan.docker.network.adding},function(res){ + if(res.status){ + layer.close(layers) + that.initTabConfig('network') //刷新列表 + } + bt_tools.msg(res) + }) + } + }) + }, + /** + * @description 添加存储卷 + */ + add_volume:function(){ + var that = this,add_volume = null + bt_tools.open({ + title: lan.docker.volume.add, + btn: [lan.public.submit, lan.site.no], + area:['540px','420px'], + content: '
      ', + success: function (layers) { + add_volume = bt_tools.form({ + el:'#add_volume_form', + form: [{ + label: lan.docker.public.volume, + group: { + type: 'text', + name: 'name', + width: '358px', + placeholder: lan.docker.volume.name_input + } + },{ + label: lan.docker.volume.driver, + group:{ + type: 'select', + name:'driver', + width:'160px', + list:[ + {title:'local',value:'local'} + ] + } + },{ + label: lan.docker.volume.option, + group: { + type: 'textarea', + name: 'driver_opts', + style: { + 'width': '358px', + 'min-width': '358px', + 'min-height': '70px', + 'line-height': '22px', + 'padding-top': '5px', + 'resize': 'both' + }, + placeholder: lan.docker.volume.option + } + },{ + label: lan.docker.public.tag, + group: { + type: 'textarea', + name: 'labels', + style: { + 'width': '358px', + 'min-width': '358px', + 'min-height': '70px', + 'line-height': '22px', + 'padding-top': '5px', + 'resize': 'both' + }, + placeholder: lan.docker.volume.tag_textarea + } + }] + }) + }, + yes:function(indexs){ + var formValue = add_volume.$get_form_value() + if(formValue.name == '')return layer.msg(lan.docker.volume.add_tips1,{icon:2}) + + that.ajax_task_method('add',{data:formValue,tips:lan.docker.volume.adding},function(res){ + if(res.status){ + layer.close(indexs); + that.initTabConfig('volume') //刷新列表 + } + bt_tools.msg(res) + }) + } + }) + }, + /** + * @description 仓库添加、编辑界面 + * @param {Object} edit 编辑数据 + */ + render_registry_view:function(edit){ + var that = this,add_registry = null,is_edit = false + if(edit){ + edit['registry'] = edit['url'] + is_edit = true + } + bt_tools.open({ + title: (is_edit ? lan.public.edit : lan.public.add) + ' ' + lan.docker.public.repository.toLowerCase(), + btn: [is_edit ? lan.site.save: lan.public.submit, lan.site.no], + area:['580px','420px'], + content: '
      ', + success: function (layers) { + add_registry = bt_tools.form({ + el:'#add_registry_form', + form: [{ + label: lan.docker.repository.address, + group: { + type: 'text', + name: 'registry', + width: '340px', + placeholder: lan.docker.repository.address_input + } + },{ + label: lan.docker.repository.name, + group: { + type: 'text', + name: 'name', + width: '340px', + placeholder: lan.docker.repository.name_input + } + },{ + label: lan.docker.repository.username, + group:[{ + type: 'text', + name: 'username', + width: '340px', + placeholder: lan.docker.repository.user_input + }] + }, + { + label: lan.docker.repository.pwd, + group: [ + { + type: 'text', + name: 'password', + width: '340px', + placeholder: lan.docker.repository.pwd_input + } + ] + }, + { + label: lan.docker.repository.namespaces, + group: [{ + type: 'text', + name: 'namespace', + width: '340px', + placeholder: lan.docker.repository.namespaces_input + },{ + type:'link', + title: '?', + class:'bt-ico-ask', + event:function(){ + window.open('https://www.bt.cn/bbs/thread-80965-1-1.html') + } + }] + },{ + label: lan.one_click.description, + group: { + type: 'text', + name: 'remark', + width: '340px', + placeholder: lan.docker.compose.description_input_tips + } + }], + data:edit?edit:{} + }) + }, + yes:function(indexs){ + var formValue = add_registry.$get_form_value() + if(formValue.registry == '')return layer.msg(lan.docker.repository.form_tips1,{icon:2}) + if(formValue.name == '')return layer.msg(lan.docker.repository.form_tips2,{icon:2}) + if(formValue.username == '')return layer.msg(lan.docker.repository.form_tips3,{icon:2}) + if(formValue.password == '')return layer.msg(lan.docker.repository.form_tips4,{icon:2}) + if(formValue.namespace == '')return layer.msg(lan.docker.repository.form_tips5,{icon:2}) + + if(edit) formValue['id'] = edit['id'] + that.ajax_task_method(is_edit?'edit':'add',{data:formValue,tips:(edit? lan.public.save : lan.public.add) + ' ' + lan.docker.public.repository.toLowerCase()},function(res){ + if(res.status){ + layer.close(indexs); + that.initTabConfig('registry') //刷新列表 + } + bt_tools.msg(res) + }) + } + }) + }, + /** + * @description 构建镜像 + */ + construction_image:function(){ + var that = this,_aceEditor = null; + layer.open({ + type: 1, + title: lan.docker.image.build_title, + btn: [lan.public.submit, lan.site.no], + area:'580px', + content: '
      \ +
      Dockerfile\ +
      \ + \ +
      \ + \ + \ +
      \ + \ +
      \ +
      \ +
      ' + lan.docker.container.tag + '\ +
      \ + \ +
      \ +
      \ +
      ', + success:function(){ + _aceEditor = bt.aceEditor({ el: 'dkFileBody', content:'' }); + $('[name=dockerfile_type]').change(function(){ + switch($(this).val()){ + case '0': + $('.constr_image .df_type:eq(0)').show(); + $('.constr_image .df_type:eq(1)').hide(); + $('[name=df_path]').val(''); + break; + case '1': + $('.constr_image .df_type:eq(1)').show(); + $('.constr_image .df_type:eq(0)').hide(); + _aceEditor.ACE.setValue('') + break; + } + }) + }, + yes:function(layers){ + var _mType = $('[name=dockerfile_type]').val(), + _mDesc = $('[name=dk_tag]').val(), + _Con = _aceEditor.ACE.getValue(), + param = {tag:_mDesc} + if(_mType == '0'){ + param['path'] = $('[name=df_path]').val() + }else{ + param['data'] = _Con + } + that.get_log_situation() + that.ajax_task_method('build',{data:param,tips:false},function(res){ + that.remove_log_clearinterval(); + if(res.status){ + layer.closeAll() + that.initTabConfig('model') //刷新列表 + } + bt_tools.msg(res) + }) + } + }) + }, + /** + * @description 容器监控【获取并整理实时数据,刷新图表】 + * @param {Object} row 容器信息 + */ + transform_cont_chart_data:function(row){ + var that = this,_time = new Date().getTime(); + this.ajax_task_method('stats',{data:{id:row.id},tips:false,model_name:{dk_model_name:'status'}},function(res){ + var _data = res.msg; + if(!res.status){ + that.remove_cont_chart_data(); + bt_tools.msg(res); + return false + } + //基础信息 + $('.cont_chart_basis').eq(0).find('span').html(bt.format_size(_data.limit)) + $('.cont_chart_basis').eq(1).find('span').html(lan.index.net_up + ': ' + bt.format_size(_data.tx_total)+' - '+ lan.index.net_down + ': '+bt.format_size(_data.rx_total)) + that.cont_chart.time_list.push(_time) + that.cont_chart.mem_list['usage'].push([_time, bt.format_size(_data.usage,false,null,'MB')]) + that.cont_chart.mem_list['cache'].push([_time,bt.format_size(_data.cache,false,null,'MB')]) + that.cont_chart.cpu_list.push([_time,_data.cpu_usage]) + that.cont_chart.disk_list['read'].push([_time, bt.format_size(_data.read_total,false,null,'MB')]) + that.cont_chart.disk_list['write'].push([_time, bt.format_size(_data.write_total,false,null,'MB')]) + that.cont_chart.network_list['tx'].push([_time, bt.format_size(_data.tx,false,null,'KB')]) + that.cont_chart.network_list['rx'].push([_time, bt.format_size(_data.rx,false,null,'KB')]) + // console.log(that.cont_chart_id.cpu.getOption()); + //实时更新图表数据 + that.cont_chart_id.cpu.setOption({ + series:[ + { + name: 'CPU', + data: that.cont_chart.cpu_list + } + ], + xAxis:that.cont_chart.time_list + }) + that.cont_chart_id.mem.setOption({ + series: [ + { + name: lan.pythonmamager.mem, + data: that.cont_chart.mem_list['usage'] + }, + { + name: lan.site.cache, + data: that.cont_chart.mem_list['cache'] + } + ] + }) + that.cont_chart_id.disk.setOption({ + series: [ + { + name: lan.files.file_read, + data: that.cont_chart.disk_list['read'] + }, + { + name: lan.files.file_write, + data: that.cont_chart.disk_list['write'] + } + ] + }) + that.cont_chart_id.network.setOption({ + series: [ + { + name: lan.index.net_up, + data: that.cont_chart.network_list['tx'] + }, + { + name: lan.index.net_down, + data: that.cont_chart.network_list['rx'] + } + ] + }) + }) + }, + /** + * @description 容器监控【图表配置处理】 + * @param {String} type 图表类型【CPU/内存/磁盘/网络】 + * @return 返回处理好的图表配置 + */ + transform_cont_chart_option:function(type){ + var _unit = '/MB' + var _option = this.get_default_option(); + switch(type){ + case 'cpu': + _option.tooltip.formatter = function (config) { + var data = config[0]; + return bt.format_data(data.data[0]) + '
      ' + data.seriesName + ': ' + data.data[1] + '%'; + }; + _option.yAxis.min = 0; + _option.series = [ + { + name: 'CPU', + type: 'line', + symbol: 'none', + smooth: true, + itemStyle: { + normal: { + color: 'rgb(0, 153, 238)' + } + } + } + ] + break; + case 'network': + _unit = '/KB' + case 'mem': + case 'disk': + var third = { + mem:[lan.pythonmamager.mem, lan.site.cache], + disk:[lan.files.file_read, lan.files.file_write], + network:[lan.index.net_up, lan.index.net_down], + color:[ + { + mem:['rgb(185, 220, 253)','rgb(185, 220, 253,0.6)','rgb(185, 220, 253,0.3)','rgba(229,147,187)','rgba(229,147,187,0.6)','rgba(229,147,187,0.3)'], + disk:['rgb(255, 70, 131)','rgb(255, 70, 131,0.6)','rgb(255, 70, 131,0.3)','rgba(46, 165, 186)','rgba(46, 165, 186,0.6)','rgba(46, 165, 186,0.3)'], + network:['rgb(255, 140, 0)','rgb(255, 140, 0,0.6)','rgb(255, 140, 0,0.3)','rgb(30, 144, 255)','rgb(30, 144, 255,0.6)','rgb(30, 144, 255,0.3)'] + } + ] + } + _option.tooltip.formatter = function (config) { + var data = config[0]; + var time = data.data[0]; + var date = bt.format_data(time / 1000); + var _tips = ''; + var _style = ' ' + config[i].seriesName + ':' + _tips += config[i].data[1] + _unit + (config.length - 1 !== i ? '
      ' : ''); + } + return "时间:" + date + "
      " + _tips; + }; + _option.legend = { + top: '18px', + data: third[type] + }; + _option.series = [ + { + name: third[type][0], + type: 'line', + symbol: 'none', + itemStyle: { + normal: { + color: third['color'][0][type][0], + areaStyle: { + color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{ + offset: 0, + color: third['color'][0][type][1] + }, { + offset: 1, + color: third['color'][0][type][2] + }]) + } + } + } + }, + { + name: third[type][1], + type: 'line', + symbol: 'none', + itemStyle: { + normal: { + color: third['color'][0][type][4], + areaStyle: { + color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{ + offset: 0, + color: third['color'][0][type][4] + }, { + offset: 1, + color: third['color'][0][type][5] + }]) + } + } + } + } + ]; + break; + } + return _option + }, + /** + * @description 渲染容器监控图表 + * @param {Object} row 容器信息 + */ + render_cont_chart:function(row){ + var that = this; + this.cont_chart_id.cpu = echarts.init(document.getElementById('cont_cpu')) + this.cont_chart_id.mem = echarts.init(document.getElementById('cont_mem')) + this.cont_chart_id.disk = echarts.init(document.getElementById('cont_disk')) + this.cont_chart_id.network = echarts.init(document.getElementById('cont_network')) + + $.each(['cpu','mem','disk','network'],function(index,item){ + that.cont_chart_id[item].setOption(that.transform_cont_chart_option(item)) + }) + this.transform_cont_chart_data(row) //默认加载数据 + }, + /** + * @description 获取默认图表配置 + * @return 返回默认图表配置 + */ + get_default_option:function(){ + return { + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'cross' + } + }, + grid: { + x: 50, //左 + y: 50, //上 + x2: 30,//右 + y2: 30 //下 + }, + xAxis: { + type: 'time', + scale:true, + splitNumber:4, + boundaryGap: true, + axisLine: { + lineStyle: { + color: "#666" + } + }, + axisLabel: { + // interval:0, + formatter: function (value) { + return bt.format_data(value / 1000, 'hh:mm:ss'); + } + }, + }, + yAxis: { + type: 'value', + boundaryGap: [0, '100%'], + splitLine: { + lineStyle: { + color: "#ddd" + } + }, + axisLine: { + lineStyle: { + color: "#666" + } + } + } + } + }, + /** + * @description 容器详情配置 + * @param {Object} row 容器信息 + */ + open_container_config:function(obj){ + var that = this; + layer.open({ + type:1, + title:'Container ['+obj.name+']', + area:['780px','720px'], + shadeClose: false, + closeBtn: 2, + btn:false, + content:'
      \ +
      \ +

      Container configuration

      \ +

      Generate mirror image

      \ +
      \ +
      \ +
      ', + success:function(){ + that.set_cont_config(obj); + // 菜单事件 + $('.cn_menu p').click(function () { + $('#container_box').html('').removeAttr('style'); + $(this).addClass('bgw').siblings().removeClass('bgw'); + that['set_cont_'+$(this).data('type')](obj); + }) + } + }) + }, + /** + * @description 容器终端 + * @param {Object} row 容器信息 + */ + open_container_shell_view:function(row){ + var that = this; + web_shell(); + var shell = setInterval(function(){ + if($('.term-box').length == 0){ + pdata_socket['data'] = 'exit\n' + socket.emit('webssh',pdata_socket); + setTimeout(function(){socket.emit('webssh',pdata_socket['data']);},1000); + clearInterval(shell); + } + },500); + setTimeout(function(){ + that.ajax_task_method('docker_shell', { + data: { container_id: row.id }, + tips: lan.docker.container.execute_container_command, + model_name: { dk_model_name: 'container' } + }, function (res) { + if (res.status) { + pdata_socket['data'] = 'clear && ' + res.msg +'\n' + socket.emit('webssh',pdata_socket); + setTimeout(function(){ + socket.emit('webssh',pdata_socket['data']); + }, 1000); + }else{ + bt_tools.msg(res) + } + }) + }); + }, + /** + * @description 容器配置 + * @param {Object} row 容器信息 + */ + set_cont_config:function(row){ + $('#container_box').css({'padding-right':'25px','overflow':'overlay'}); + var wrapper = document.getElementById("container_box") + jsonTree.create(row.detail,wrapper) + }, + /** + * @description 容器生成镜像 【可导出文件】 + * @param {Object} row 容器信息 + */ + set_cont_create_image:function(row){ + var that = this; + bt_tools.form({ + el:'#container_box', + form:[{ + label:'Mirror name', + group:{ + name:'repository', + type: 'text', + placeholder: 'Please enter the mirror name', + width:'350px' + } + },{ + label:'Tag', + group:{ + name:'tag', + type: 'text', + placeholder: 'Please enter the tag', + width:'350px' + } + },{ + label:'Submit description', + group:{ + name:'message', + type: 'text', + placeholder: 'Description before submission', + width:'350px' + } + },{ + label:'Author', + group:{ + name:'author', + type: 'text', + placeholder: 'Please enter the author', + width:'350px' + } + },{ + label: '', + group: [{ + type: 'button', + size: '', + name: 'cont_caimage_btn', + title: 'Generate mirror image', + event: function (formData) { + if( + formData.repository == '' || + formData.tag == '' || + formData.message == '' || + formData.author == '' + ){ + return layer.msg('Please fill in the generated mirror information first',{icon:2}) + } + formData['id'] = row.id + submitImage(formData) + } + },{ + type: 'button', + size: '', + name: 'cont_caimage_export_btn', + style: { 'display': 'block', 'margin-top': '15px' }, + title: 'Export the compressed package after the image is generated', + event: function (formData) { + if( + formData.repository == '' || + formData.tag == '' || + formData.message == '' || + formData.author == '' + ){ + return layer.msg('Please fill in the generated mirror information first',{icon:2}) + } + bt_tools.open({ + type: 1, + title: 'Export ['+row.name+'] mirror image', + area: '430px', + btn: ['Export', lan.site.no], + content: { + 'class': "pd20", + form: [{ + label: "Path", + group: { + name: "path", + type: "text", + value: '', + width: "240px", + placeholder:'Please enter the mirror path', + icon: { + type: 'glyphicon-folder-open', + event:function(){} + } + } + },{ + label: "File name", + group: { + name: "name", + type: "text", + value: formData.repository, + width: "240px", + disabled:true, + placeholder:'Please enter the exposed file name', + unit:'.tar' + } + }] + }, + yes: function (formD,indexs) { + if (formD.path === '') return bt_tools.msg('The path cannot be empty!', 2) + if (formD.name === '') return bt_tools.msg('Export file name cannot be empty!', 2) + + formData['id'] = row.id + formData['path'] = formD.path + formData['name'] = formD.name + submitImage(formData,indexs) + } + }) + } + }] + }] + }) + // 生成镜像 --导出文件 + function submitImage(form,closeView){ + that.ajax_task_method('commit',{data:form,tips:'Generate mirror image'},function(res){ + if(res.status){ + if(closeView) layer.close(closeView) + } + bt_tools.msg(res) + }) + } + }, + /** + * @description 容器状态设置 + * @param {String} type 设置状态 + * @param {String} id 容器id + * @param {Object} table 需要重新渲染的表格 + */ + container_status_setting:function(type,id,table,is_compose){ + var config = {id:id}, + tips = {start:'Start up',stop:'Stop',pause:'Pause',unpause:'Unpause',restart:'Restart',reload:'Reload'}, + param = {tips:tips[type]+' container'} + if(is_compose){ + param['model_name'] = {dk_model_name:'container'} + } + param['data'] = config; + + this.ajax_task_method(type,param,function(res){ + if(res.status){ + table.$refresh_table_list(true) //刷新列表 + } + layer.msg(res.msg,{icon:res.status?1:2}) + }) + }, + /** + * @description 获取日志窗口状态 + */ + get_log_situation:function(){ + var that = this; + that.log_layer_open = layer.open({ + title: lan.docker.public.execution, + type: 1, + closeBtn: false, + maxmin: true, + skin: 'dockertmp', + area: ["730px", '450px'], + content:"
      ",
      +            success:function(){
      +                that.log_file_setInterval = setInterval(function(){that.get_log_speed()},1500)
      +            }
      +        })
      +    },
      +    /**
      +    * @description 获取日志进度
      +    */
      +    get_log_speed:function(){
      +        this.ajax_task_method('get_logs',{data:{logs_file:'/tmp/dockertmp.log'},tips:false,model_name:{dk_model_name:"image"}},function(ires){
      +            $("#dockertmp_pre").text(ires.msg);
      +            $('#dockertmp_pre').animate({
      +                scrollTop: $('#dockertmp_pre').prop("scrollHeight")
      +            }, 400);
      +        })
      +    },
      +    /**
      +    * @description 删除容器监控数据和图表dom
      +    */
      +    remove_cont_chart_data:function(){
      +        clearInterval(this.cont_setInterval)
      +        this.cont_chart = {    
      +            cpu_list:[],
      +            mem_list:{
      +                usage:[],
      +                cache:[]
      +            },
      +            disk_list:{
      +                read:[],
      +                write:[]
      +            },
      +            network_list:{
      +                tx:[],
      +                rx:[]
      +            },
      +            time_list:[]
      +        }
      +        this.cont_chart_id = {
      +            cpu:null,
      +            mem:null,
      +            disk:null,
      +            network:null
      +        }
      +    },
      +    //删除日志定时器
      +    remove_log_clearinterval:function(){
      +        layer.close(layer.index)   //最新的弹层
      +        clearInterval(this.log_file_setInterval)
      +    },
      +    /**
      +    * @description 停止用户操作
      +    * @param {Boolean} is_install 是否docker安装
      +    * @param {Boolean} is_service 是否启动docker
      +    */
      +    stop_user_operation:function(is_install,is_service){
      +        var that = this;
      +        var tips = 'Docker service is not currently started. Please enable it in Docker Settings';
      +        if(!is_install) tips = 'Currently not installed docker or docker-compose, click install'
      +        $('.mask_layer').removeAttr('style');
      +        $('.prompt_description').html(tips)
      +        //安装docker
      +        $('.install_docker').click(function(){
      +            that.ajax_task_method('install_docker_program',{model_name:{dk_model_name:'setup'}},function(res){
      +                bt_tools.msg(res)
      +                messagebox()
      +            })
      +        });
      +				$('.setting_docker').click(function () {
      +					$('.tab-list .tabs-item[data-type="setup"]').click()
      +				})
      +    },
      +    /**
      +     * @description docker请求方式转换
      +     * @param {String} action 请求方法
      +     * @param {Object} param data填写请求所需参数,tips填写请求时展示文字
      +     * @param {any} callback 数据回调
      +     */
      +    ajax_task_method:function(action,param,callback){
      +        var _config = $.extend({},param['data'] || {},this.global,{dk_def_name:action},param['model_name'] || {})
      +        bt_tools.send({
      +            url:this.global_api+'?action='+_config.dk_model_name+'-'+_config.dk_def_name+'',
      +            data:{data:JSON.stringify(_config)}
      +        },function(res){
      +            if(callback)callback(res)
      +        },{load:param['tips'],verify: false})
      +    },
      +    /**
      +     * @description docker批量操作参数处理
      +     * @param {String} action 请求方法
      +     * @param {Object} param 请求所需参数
      +     * @return 返回JSON格式参数
      +     */
      +    batch_param_convert:function(action,param){
      +        return JSON.stringify($.extend({},this.global,{dk_def_name:action},param || {}))
      +    },
      +    /**
      +     * @description UTC时间转换
      +     * @param {Object} utc_datetime utc时间
      +     * @return 返回处理后的时间
      +     */
      +    utc2beijing:function(utc_datetime) {
      +        // 转为正常的时间格式 年-月-日 时:分:秒
      +        var T_pos = utc_datetime.indexOf('T');
      +        var Z_pos = utc_datetime.indexOf('Z');
      +        var year_month_day = utc_datetime.substr(0,T_pos);
      +        var hour_minute_second = utc_datetime.substr(T_pos+1,Z_pos-T_pos-1);
      +        var new_datetime = year_month_day+" "+hour_minute_second; 
      +    
      +        // 处理成为时间戳
      +        timestamp = new Date(Date.parse(new_datetime));
      +        timestamp = timestamp.getTime();
      +        timestamp = timestamp/1000;
      +    
      +        // 增加8个小时,北京时间比utc时间多八个时区
      +        var timestamp = timestamp+8*60*60;
      +        return bt.format_data(timestamp)
      +    },
      +    initTabConfig:function(type){
      +        this.tabName = type;
      +        this.global.dk_model_name = type
      +        if(type == 'model') this.global.dk_model_name = 'compose'
      +        $('.mask_layer').hide();          //隐藏未安装或未启动提醒
      +        $('#dk_'+type+'_table').empty();  //清除Table
      +        this['get_'+type]();
      +    }
      +}
      +//默认触发
      +$('#cutMode .tabs-item[data-type="' + (bt.get_cookie('docker_model') || 'container') + '"]').trigger('click');
      \ No newline at end of file
      diff --git a/BTPanel/static/js/files.js b/BTPanel/static/js/files.js
      index 1affdf68..48b0c9da 100644
      --- a/BTPanel/static/js/files.js
      +++ b/BTPanel/static/js/files.js
      @@ -2846,7 +2846,6 @@ var bt_file = {
            * @return void
           */
           open_property_view:function (data) {
      -      console.log(data)
             var _this = this;
             _this.$http('get_file_attribute',{filename:data.path},function (res) {
               layer.open({
      @@ -2873,9 +2872,12 @@ var bt_file = {
                         
      Type:
      \
      '+ ((res.is_dir || res.is_link)?res.st_type:_this.ext_type_tips(res.st_type)) +'
      \
      \ -
      \ +
      \
      Location:
      \ -
      '+ res.path +'
      \ +
      \ + '+ (res.path + '/' + data.filename).replace('//','/') +'\ + \ +
      \
      \
      \
      Size:
      \ @@ -2919,6 +2921,12 @@ var bt_file = {
      \
      ', success:function(layero,index){ + var copy_properyt_path = new ClipboardJS('.copyProperytPath'); + copy_properyt_path.on('success', function (e) { + layer.msg(lan.public.cp_success, { + icon: 1 + }); + }); $('.bt-property-setting .tab-nav span').click(function () { var index = $(this).index(); $(this).addClass('on').siblings().removeClass('on'); @@ -4334,7 +4342,7 @@ var bt_file = { get_disk_list:function(callback){ bt_tools.send('system/GetDiskInfo',function (res) { if (callback) callback(res); - },'Getting disk list, please wait...'); + },'Getting disk list'); }, // 新建文件(文件和文件夹) @@ -4466,7 +4474,7 @@ var bt_file = { * @return void */ get_file_size: function (data, callback){ - bt_tools.send('files/get_path_size',{path:data.path},callback,'Getting directory size, please wait...'); + bt_tools.send('files/get_path_size',{path:data.path},callback,'Getting directory size'); }, /** * @description 获取目录大小 diff --git a/BTPanel/static/js/firewall.js b/BTPanel/static/js/firewall.js new file mode 100644 index 00000000..c1c3979f --- /dev/null +++ b/BTPanel/static/js/firewall.js @@ -0,0 +1,3365 @@ +var firewall = { + init: function () { + this.event(); + + var name = bt.get_cookie('firewall_type'); + $('[data-name="'+ (name || 'safety') +'"]').trigger('click'); + }, + event: function () { + // 切换主菜单 + $('#cutTab .tabs-item').click(function () { + var index = $(this).index(); + var name = $(this).data('name'); + var $cont = $('.firewall-tab-view').children('.tab-con').eq(index); + bt.set_cookie('firewall_type',name) + + $(this).addClass('active').siblings().removeClass('active'); + $('.state-content').hide().children().hide(); + $cont.addClass('show w-full').removeClass('hide').siblings().removeClass('show w-full').addClass('hide'); + + switch (name) { + case 'safety': + safety.init(); + break; + case 'ssh': + ssh.init(); + break; + case 'intrusion': + intrusion.init(); + break; + case 'system': + system.init(); + break; + case 'logAudit': + logAudit.init(); + break; + case 'logs': + logs.init(); + break; + } + }); + + // 切换子菜单 + $('.tab-nav-border').on('click', 'span', function () { + var index = $(this).index(); + var $cont = $(this).parent().nextAll('.tab-nav-con').children('.tab-block').eq(index); + + $(this).addClass('on').siblings('.on').removeClass('on'); + $cont.addClass('on').siblings('.on').removeClass('on'); + }); + + safety.event(); + ssh.event(); + intrusion.event(); + system.event(); + logAudit.event(); + logs.event(); + }, + + /** + * @description 渲染日志分页 + * @param pages + * @param p + * @param num + * @returns {string} + */ + renderLogsPages:function(pages,p,num){ + return (num >= pages?'首页':'') + (p !== 1?'上一页':'') + (pages <= num?'下一页':'')+'Page '+ p +' '; + } +} + +// 系统防火墙 +var safety = { + init: function () { + $('.state-content').show(); + $('.state-content .safety-header').show(); + + this.getFirewallInfo(); + + bt.firewall.get_logs_size(function(rdata){ + $("#logSize").text(rdata); + }); + + $('#safety .tab-nav-border span').eq(0).trigger('click'); + }, + event: function () { + var that = this; + + // 切换系统防火墙菜单事件 + $('#safety').unbind('click').on('click', '.tab-nav-border span', function () { + var index = $(this).index(); + that.cutFirewallTab(index); + }); + + // 防火墙开关 + $('#isFirewall').unbind('click').click(function(){ + var _that = $(this) + var status = !_that.prop("checked") + bt.confirm({ + title: (status ? lan.security.firewall.switchTit3 : lan.security.firewall.switchTit2) + lan.security.firewall.switchTit1, + msg: (status ? lan.security.firewall.switchMsg1 : lan.security.firewall.switchMsg2), + cancel: function () { + _that.prop("checked", status); + } + },function () { + bt_tools.send({ + url:'/safe/firewall/firewall_admin', + data:{data: JSON.stringify({status:!status?'start':'stop'})}, + },function(rdata){ + bt_tools.msg(rdata); + setTimeout(function(){ + location.reload(); + },2000) + }, lan.security.firewall.switchMsg3) + },function () { + _that.prop("checked",status) + }) + }); + // 禁用ping + $('#ssh_ping').unbind('click').on('click',function (){ + var _that = $(this), status = _that.prop("checked")?0:1; + bt.firewall.ping(status,function(rdata){ + if(rdata === -1){ + _that.prop('checked',!!status); + }else{ + bt.msg(rdata); + } + }); + }); + // 清空日志 + $('#clearWebLogs').click(function () { + that.clear_logs_files(); + }); + }, + /** + * @description 切换系统防火墙菜单 + * @param {number} index 索引 + */ + cutFirewallTab: function (index) { + switch (index) { + case 0: + this.portRuleTable() + break; + case 1: + this.ipRuleTable() + break; + case 2: + this.portForwardTable() + break; + case 3: + this.countryRegionTable() + break; + } + }, + getFirewallInfo: function (load) { + bt_tools.send({ + url: '/safe/firewall/get_firewall_info', + }, function (rdata) { + $('#isFirewall').prop("checked", rdata.status); + $('#ssh_ping').prop('checked', !rdata.ping); + $('#safety .tab-nav-border span:eq(0) > i').html(rdata.port); + $('#safety .tab-nav-border span:eq(1) > i').html(rdata.ip); + $('#safety .tab-nav-border span:eq(2) > i').html(rdata.trans); + $('#safety .tab-nav-border span:eq(3) > i').html(rdata.country); + }, load ? lan.security.firewall.get_firewall_info : ''); + }, + /** + * @description 清空日志 + */ + clear_logs_files:function(){ + bt.show_confirm(lan.security.firewall.clearTit1, lan.security.firewall.clearMsg1, function () { + bt.firewall.clear_logs_files(function(rdata){ + $("#logSize").text(rdata); + bt.msg({msg:lan.firewall.empty,icon:1}); + }); + }); + }, + /** + * @description 渲染系统防火墙端口规则 + */ + portRuleTable: function () { + var that = this; + var portsPs = { + "80": lan.firewall.site_default_port, + "3306": lan.firewall.mysql_default_port, + "888": lan.firewall.phpmmyadmin_default_port, + "22": lan.firewall.ssh_default_port, + "20": lan.firewall.ftp1_default_port, + "21": lan.firewall.ftp_default_port, + "39000-40000": lan.firewall.ftp2_default_port, + "30000-40000": lan.firewall.ftp2_default_port, + "11211": lan.firewall.mem_default_port, + "873": lan.firewall.rsync_default_port, + "8888": lan.firewall.bt_default_port + } + var fireWallTable = bt_tools.table({ + el: '#portRules', + url: '/safe/firewall/get_rules_list', + load: lan.security.firewall.port.load, + default: lan.security.firewall.port.default, // 数据为空时的默认提示 + autoHeight: true, + beforeRequest: 'model', + tootls: [ + { // 按钮组 + type: 'group', + list: [{ + title: lan.security.firewall.add_btn, + active: true, + event: function (ev) { + that.editPortRule() + } + }, { + title: lan.security.firewall.import_btn, + event: function (ev) { + that.ruleImport('port_rule') + } + }, { + title: lan.security.firewall.export_btn, + event: function (ev) { + that.ruleExport('port_rule') + } + }] + }, + { // 搜索内容 + type: 'search', + placeholder: lan.security.firewall.port.search, + searchParam: 'query', //搜索请求字段,默认为 search + }, + { //分页显示 + type: 'page', + numberStatus: true, // 是否支持分页数量选择,默认禁用 + jump: true, //是否支持跳转分页,默认禁用 + }, + { + type: 'batch', // 批量操作 + disabledSelectValue: lan.firewall.batch_disabled_tips('port'), + placeholder: 'Select batch operation', + buttonValue: 'Execute', + selectList: [ + { + load: true, + title: lan.firewall.batch_del_btn('port'), + url: '/safe/firewall/remove_rules', + param: function (row) { + return { data: JSON.stringify(row) }; + }, + refresh: true, + callback: function (that) { + bt.confirm({ title: lan.firewall.batch_del_title('port'), msg: lan.firewall.batch_del_msg('port') }, function () { + var param = {}; + that.start_batch(param, function (list) { + var html = ''; + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += + 'Port: ' + + item.ports + + '
      ' + + item.request.msg + + '
      '; + } + fireWallTable.$batch_success_table({ title: lan.firewall.batch_del_title('port'), th: 'Port', html: html }); + fireWallTable.$refresh_table_list(true); + safety.getFirewallInfo(); + }); + }); + }, + }, + ], + } + ], + column: [ + {type: 'checkbox', class: '', width: 20}, + { title: lan.security.firewall.protocol, fid: 'protocol', width: 100 }, + { title: lan.security.firewall.ports, fid: 'ports', width: 200 }, + { + field: 'status', + title: lan.security.firewall.status + '?', + width: 150, + type: 'text', + template: function (item) { + var status = ''; + switch (item.status) { + case 0: + status = lan.firewall.status_not; + break; + case 1: + status = lan.firewall.status_net; + break; + default: + status = lan.firewall.status_ok; + break; + } + return '' + status + ((item.status !=0 && item.status !==1)? ' (Details)':''); + }, + event: function (item) { + var param = { + port: item.ports, + }; + if (item.status == 0) { + return false; + } + bt_tools.send({ + url: '/safe/firewall/get_listening_processes', + data: { data: JSON.stringify(param) }, + }, function (rdata) { + layer.open({ + content: + '\ +
      \ + \ + \ + \ +
      \ +
      \ + ', + title: '[' + item.ports + '] ' + lan.firewall.port_use_title, + closeBtn: 2, + type: 1, + area: ['450px', 'auto'], + shadeClose: true, + success: function (layero, index) { + layero.find('.layui-layer-content').css('height', 'auto') + + var html = ''; + function getName(name) { + if (name == 'process_name') { + return lan.firewall.process_name + ':'; + } else if (name == 'process_pid') { + return lan.firewall.process_pid + ':'; + } else if (name == 'process_cmd') { + return lan.firewall.start_command + ':'; + } + } + var keys = Object.keys(rdata); + for (var i = 0; i < keys.length; i++) { + html += + '\ + \ + ' + + getName(keys[i]) + + '\ + ' + + rdata[keys[i]] + + '\ + '; + } + $('.daily-table tbody').html(html); + }, + }); + }, lan.firewall.port_use_load); + }, + }, + { + title: lan.security.firewall.strategy, + fid: 'types', + width: 80, + event: function (row) { + var status = !(row.types === 'accept'); + bt.confirm( + { + title: lan.security.firewall.port.modify_strategy_tit + ' [' + row.ports + ']', + msg: status ? + lan.security.firewall.port.modify_strategy_msg1 : + lan.security.firewall.port.modify_strategy_msg2, + }, + function () { + var param = $.extend(row, { types: row.types === 'accept' ? 'drop' : 'accept', source: row.address }); + delete param.addtime; + delete param.address; + bt_tools.send( + { + url: '/safe/firewall/modify_rules', + data: { data: JSON.stringify(param) }, + }, + function (rdata) { + bt_tools.msg(rdata); + that.portRuleTable(); + }, + lan.security.firewall.port.modify_strategy_req + ); + } + ); + }, + template: function (row) { + return row.types === 'accept' + ? '' + lan.security.firewall.allow + '' + : '' + lan.security.firewall.deny + ''; + }, + }, + { + title: lan.security.firewall.source_ip, + fid: 'address', + width: 100, + template: function (row) { + return row.address === '' ? '' + lan.security.firewall.all + '' : '' + row.address + ''; + }, + }, + { + title: lan.security.firewall.remarks, + fid: 'brief', + type: 'text', + template: function (row) { + if (row.brief) return '' + row.brief + ''; + if (row.ports in portsPs) return '' + portsPs[row.ports] + ''; + return '' + row.brief + ''; + } + }, + { title: lan.security.firewall.add_time, fid: 'addtime', width: 150 }, + { + title: lan.public.operate, + type: 'group', + width: 150, + align: 'right', + group: [ + { + title: lan.public.edit, + event: function (row, index) { + that.editPortRule(row); + } + }, + { + title: lan.public.del, + event: function (row, index) { + that.removePortRule(row); + } + } + ] + } + ] + }) + }, + /** + * @description 添加/编辑端口规则 + * @param {object} row 数据 + */ + editPortRule: function (row) { + var isEdit = !!row, that = this; + row = row || { protocol:'tcp',ports:'',types:'accept',address:'',brief:''} + layer.open({ + type: 1, + area:"420px", + title: (!isEdit ? lan.public.add : lan.public.edit) + lan.security.firewall.port.form_title, + closeBtn: 2, + shift: 5, + shadeClose: false, + btn: ['Confirm', 'Cancel'], + content: '
      ', + yes:function(index,layers){ + bt_tools.verifyForm('#editPortRuleForm',[ + { + name: 'ports', + validator: function (value) { + if (!value) return lan.security.firewall.port.form_port_empty; + }, + }, + { + name: 'address', + validator: function (value, row) { + if (!value && row.choose !== 'all') return lan.security.firewall.port.form_address_empty; + }, + }, + ], function(verify,form){ + if(verify){ + if(isEdit) form.address = form.choose === 'all'?'':form.address; + form['source'] = form.address; + // 添加、修改 + bt_tools.send({ + url: '/safe/firewall/' + (isEdit ? 'modify_rules' : 'create_rules'), + data: {data: JSON.stringify($.extend({id: row.id}, form))} + }, function (rdata) { + bt.msg(rdata); + if (rdata.status) { + layer.close(index); + that.portRuleTable(); + that.getFirewallInfo(); + } + }, (isEdit ? lan.public.edit : lan.public.add) + lan.security.firewall.port.form_title); + } + }) + }, + success:function(layero, index){ + bt_tools.fromGroup('#editPortRuleForm', [ + { + label: lan.security.firewall.protocol, + width: '200px', + name: 'protocol', + type: 'select', + options: [ + { value: 'tcp', label: 'TCP' }, + { value: 'udp', label: 'UDP' }, + { value: 'tcp/udp', label: 'TCP/UDP' }, + ], + }, + { + label: lan.security.firewall.ports, + width: '200px', + name: 'ports', + readonly: isEdit, + type: 'text', + placeholder: lan.security.firewall.port.form_port, + }, + { + label: lan.security.firewall.source_ip, + width: '200px', + name: 'choose', + type: 'select', + options: [ + { value: 'all', label: lan.security.firewall.all }, + { value: 'point', label: lan.security.firewall.specify_ip }, + ], + on: { + change: function (ev, val, el) { + $(this).data('line').next().toggle(); + }, + }, + }, + { + label: '', + width: '200px', + name: 'address', + placeholder: lan.security.firewall.port.form_specify_ip, + labelStyle: row.address !== '' ? '' : 'display: none' + }, + { + label: lan.security.firewall.strategy, + width: '200px', + name: 'types', + type: 'select', + options: [ + { value: 'accept', label: lan.security.firewall.allow }, + { value: 'drop', label: lan.security.firewall.deny }, + ], + }, + { label: lan.security.firewall.remarks, width: '200px', name: 'brief', type: 'text' }, + { + type: 'tips', + style: 'padding-left: 30px; margin-top:5px;', + list: [ + lan.security.firewall.port.form_tips1, + lan.security.firewall.port.form_tips2 + ], + } + ], $.extend(row,{ choose: row.address ? 'point' : 'all' })) + if (isEdit) $('[name="ports"]').css({ 'background-color': '#eee', 'cursor': 'no-drop' }); + bt_tools.setLayerArea(layero); + } + }); + }, + /** + * @description 规则导入 + * @param + */ + ruleImport: function (name){ + var _this = this; + layer.open({ + type: 1, + area: '360px', + title: lan.security.firewall.import_tit, + closeBtn: 2, + shift: 5, + shadeClose: false, + btn: [lan.public.import, lan.public.cancel], + content:'\ +
      \ +
      \ +
      \ +
      \ + \ + \ + \ +
      \ +
      \ +
      \ +
      ', + yes: function (index, layers) { + if (!$("#fileInput")[0].files[0]) { + layer.msg(lan.security.firewall.import_file_tips, { icon: 2 }); + return false; + } + _this.upload({name:name, _fd:$("#fileInput")[0].files[0]}, 0, index); + }, + success: function () { + $("#fileInput").on('change', function () { + if (!$("#fileInput")[0].files[0]) { + $(".input_file").val(""); + } + var filename = $("#fileInput")[0].files[0].name; + $(".input_file").val(filename); + }); + }, + }); + }, + + /** + * @description 规则导出 + */ + ruleExport: function (type){ + bt_tools.send({ + url: '/safe/firewall/export_rules', + data: { data: JSON.stringify({ rule_name: type }) }, + }, function (rdata) { + if (rdata.status) { + window.open('/download?filename=' + rdata.msg); + } else { + bt_tools.msg(rdata); + } + }, lan.security.firewall.export_req); + }, + + /** + * @description 删除端口规则 + * @param {object} row 行数据 + */ + removePortRule: function (row){ + var that = this; + bt.confirm({ + title: lan.security.firewall.port.del_tit + '[' + row.ports + ']', + msg: lan.security.firewall.port.del_msg + }, function () { + bt_tools.send({ + url: '/safe/firewall/remove_rules', + data: { data: JSON.stringify(row) } + }, function (rdata) { + bt.msg(rdata); + if (rdata.status) { + that.portRuleTable(); + that.getFirewallInfo(); + } + }, lan.security.firewall.port.del_req); + }); + }, + /** + * @description 规则导入请求 + * @param s_data + * @param start + * @param index + */ + upload: function (s_data, start, index) { + var _this = this; + var fd = s_data._fd; + var end = Math.min(fd.size, start + 1024*1024*2); + var form = new FormData(); + form.append("f_path", "/www/server/panel/data/firewall"); + form.append("f_name", fd.name); + form.append("f_size", fd.size); + form.append("f_start", start); + form.append("blob", fd.slice(start, end)); + $.ajax({ + url: '/files?action=upload', + type: "POST", + data: form, + async: true, + processData: false, + contentType: false, + success: function (data) { + if (typeof (data) === "number") { + _this.upload(s_data, data, index) + } else { + if (data.status) { + bt_tools.send({ + url:'/safe/firewall/import_rules', + data:{data:JSON.stringify({rule_name:s_data.name, file_name:fd.name})} + },function(res){ + bt_tools.msg(res); + if(res.status){ + layer.close(index); + if(s_data.name === 'port_rule'){ _this.portRuleTable() } + else if(s_data.name === 'ip_rule'){ _this.ipRuleTable() } + else if(s_data.name === 'country_rule'){ _this.countryRegionTable() } + else{ _this.portForwardTable() } + } + }, lan.security.firewall.import_req) + } + } + }, + error: function (e) { + console.log("上传规则文件出问题喽!") + } + }) + }, + /** + * @description ip规则列表 + */ + ipRuleTable: function () { + var that = this; + var ruleTable = bt_tools.table({ + el: '#ipRule', + url: '/safe/firewall/get_ip_rules_list', + load: lan.security.firewall.ip.load, + default: lan.security.firewall.ip.default, // 数据为空时的默认提示 + autoHeight: true, + beforeRequest: 'model', + tootls: [ + { // 按钮组 + type: 'group', + list: [ + { + title: lan.security.firewall.add_btn, + active: true, + event: function (ev) { + that.editIpRule() + } + }, + { + title: lan.security.firewall.import_btn, + event: function (ev) { + that.ruleImport('ip_rule') + } + }, + { + title: lan.security.firewall.export_btn, + event: function (ev) { + that.ruleExport('ip_rule') + } + } + ] + }, + { // 搜索内容 + type: 'search', + placeholder: lan.security.firewall.ip.search, + searchParam: 'query', //搜索请求字段,默认为 search + }, + { + type: 'batch', // 批量操作 + disabledSelectValue: lan.firewall.batch_disabled_tips('IP'), + placeholder: 'Select batch operation', + buttonValue: 'Execute', + selectList: [ + { + title: lan.firewall.batch_del_btn('IP'), + url: '/safe/firewall/remove_ip_rules', + load: true, + param: function (row) { + return { + data: JSON.stringify(row), + }; + }, + refresh: true, + callback: function (that) { + bt.confirm({ title: lan.firewall.batch_del_title('IP'), msg: lan.firewall.batch_del_msg_ip }, function () { + var param = {}; + that.start_batch(param, function (list) { + var html = ''; + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += + '' + + item.address + + '
      ' + + item.request.msg + + '
      '; + } + ruleTable.$batch_success_table({ title: lan.firewall.batch_del_title('IP'), th: lan.firewall.batch_del_ip_name, html: html }); + ruleTable.$refresh_table_list(true); + safety.getFirewallInfo(); + }); + }); + }, + }, + ], + }, + { //分页显示 + type: 'page', + numberStatus: true, // 是否支持分页数量选择,默认禁用 + jump: true, //是否支持跳转分页,默认禁用 + } + ], + column: [ + {type: 'checkbox', class: '', width: 20}, + {fid: 'address', title: lan.security.firewall.source_ip, width: 150}, + {fid: 'area', title: lan.security.firewall.ip_home + ' ' + (parseInt(bt.get_cookie('pro_end')) < 0?'Pro':''), template: function(row){ + var area = row.area; + return ''+ (area.continent || '') + (area.info || '--') +'' + }}, + { + fid: 'types', + title: lan.security.firewall.strategy, + width: 100, + event:function (row){ + var status = !(row.types === 'accept') + bt.confirm({ + title: lan.security.firewall.ip.modify_strategy_tit + ' [' + row.address + ']', + msg: (status ? lan.security.firewall.ip.modify_strategy_msg1 : lan.security.firewall.ip.modify_strategy_msg2), + },function () { + var param = $.extend(row, { types:row.types === 'accept' ? 'drop' : 'accept' }); + bt_tools.send({ + url: '/safe/firewall/modify_ip_rules', + data: { data: JSON.stringify(param) } + }, function (rdata) { + bt_tools.msg(rdata); + that.ipRuleTable(); + }, lan.security.firewall.ip.modify_strategy_req); + }); + }, + template: function (row) { + return row.types === 'accept' ? + '' + lan.security.firewall.release + '' : + '' + lan.security.firewall.block + ''; + } + }, + {fid: 'brief', title: lan.security.firewall.remarks }, + {fid: 'addtime', title: lan.security.firewall.add_time, width: 150 }, + { + title: lan.public.operate, + type: 'group', + width: 150, + align: 'right', + group: [{ + title: lan.public.edit, + event: function (row, index) { + that.editIpRule(row) + } + }, { + title: lan.public.del, + event: function (row, index) { + that.removeIpRule(row) + } + }] + }] + }) + return ruleTable; + }, + /** + * @description 编辑ip规则 + * @param { object } row 行数据 + */ + editIpRule: function (row){ + var isEdit = !!row, that = this; + row = row || {types:'drop',address:'',brief:''} + layer.open({ + type: 1, + area: '430px', + title: (!isEdit ? lan.public.add : lan.public.edit) + lan.security.firewall.ip.form_title, + closeBtn: 2, + shift: 5, + shadeClose: false, + btn: [lan.public.confirm, lan.public.cancel], + content: '
      ', + yes:function(index,layers){ + bt_tools.verifyForm('#editIpRuleForm',[ + { + name: 'address', + validator: function (value, row) { + if (!value) return lan.security.firewall.ip.form_ip + } + }, + ], function (verify, form) { + if(verify){ + // 添加、修改 + bt_tools.send({ + url:'/safe/firewall/' + (isEdit?'modify_ip_rules':'create_ip_rules'), + data:{data:JSON.stringify($.extend({id:row.id},form))} + }, function (rdata) { + bt.msg(rdata) + if(rdata.status){ + layer.close(index) + that.ipRuleTable() + that.getFirewallInfo() + } + }, (isEdit ? lan.public.editing : lan.public.adding) + lan.security.firewall.ip.form_title); + } + }) + }, + success:function(layero,index){ + bt_tools.fromGroup('#editIpRuleForm',[ + { + label: lan.security.firewall.source_ip, + name: 'address', + type: 'textarea', + readonly: isEdit, + style: 'width: 220px; height: 80px; line-height: 22px;' + (isEdit ? 'background-color: rgb(238, 238, 238); cursor: not-allowed' : ''), + placeholder: 'Please enter IP e.g. 192.168.1.102', + }, + { + label: lan.security.firewall.strategy, + width: '220px', + name: 'types', + type: 'select', + options: [ + { value: 'accept', label: lan.security.firewall.release }, + { value: 'drop', label: lan.security.firewall.block }, + ], + }, + { label: lan.security.firewall.remarks, width: '220px', name: 'brief' }, + !isEdit + ? { + type: 'tips', + style: 'padding-left: 40px; margin-top:5px;', + list: [ + lan.security.firewall.ip.form_tips1, + lan.security.firewall.ip.form_tips2, + lan.security.firewall.ip.form_tips3 + ], + } + : { type: 'tips', list: [] }, + ], row) + bt_tools.setLayerArea(layero) + } + }) + }, + /** + * @description 删除端口规则 + */ + removeIpRule:function(row){ + var that = this; + bt.confirm({ + title: lan.security.firewall.ip.del_tit + ' ['+ row.address + ']', + msg: lan.security.firewall.ip.del_msg + }, function () { + bt_tools.send({ url:'/safe/firewall/remove_ip_rules', data:{data:JSON.stringify(row)}},function (rdata){ + bt.msg(rdata) + if(rdata.status) { + that.ipRuleTable() + that.getFirewallInfo() + } + }, lan.security.firewall.ip.del_req); + }); + }, + /** + * @description 端口转发列表 + */ + portForwardTable: function () { + var that = this; + var forwardTable = bt_tools.table({ + el: '#portForward', + url: '/safe/firewall/get_forward_list', + load: lan.security.firewall.forward.load, + default: lan.security.firewall.forward.default, // 数据为空时的默认提示 + autoHeight: true, + beforeRequest: 'model', + tootls: [ + { // 按钮组 + type: 'group', + list: [{ + title: lan.security.firewall.forward.add_btn, + active: true, + event: function (ev) { + that.editPortForward() + } + }, { + title: lan.security.firewall.import_btn, + event: function (ev) { + that.ruleImport('trans_rule') + } + }, { + title: lan.security.firewall.export_btn, + event: function (ev) { + that.ruleExport('trans_rule') + } + }] + }, + { // 搜索内容 + type: 'search', + placeholder: lan.security.firewall.forward.search, + searchParam: 'query', //搜索请求字段,默认为 search + }, + { + type: 'batch', // 批量操作 + disabledSelectValue: lan.firewall.batch_disabled_tips('port forward'), + placeholder: 'Select batch operation', + buttonValue: 'Execute', + selectList: [ + { + title: lan.firewall.batch_del_btn('port forward'), + url: '/safe/firewall/remove_forward', + load: true, + param: function (row) { + return { + data: JSON.stringify({ id: row.id, protocol: row.protocol, s_port: row.start_port, d_ip: row.ended_ip, d_port: row.ended_port }), + }; + }, + refresh: true, + callback: function (that) { + bt.confirm({ title: lan.firewall.batch_del_title('port forward'), msg: lan.firewall.batch_del_msg_port_forward }, function () { + var param = {}; + that.start_batch(param, function (list) { + var html = ''; + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += + 'Source port: ' + + item.start_port + + '
      ' + + item.request.msg + + '
      '; + } + forwardTable.$batch_success_table({ title: lan.firewall.batch_del_title('IP'), th: 'Source port', html: html }); + forwardTable.$refresh_table_list(true); + safety.getFirewallInfo(); + }); + }); + }, + }, + ], + }, + { //分页显示 + type: 'page', + numberStatus: true, // 是否支持分页数量选择,默认禁用 + jump: true, //是否支持跳转分页,默认禁用 + } + ], + column: [ + {type: 'checkbox', width: 20}, + { title: lan.security.firewall.protocol, fid: 'protocol', width: 100 }, + { title: lan.security.firewall.source_port, fid: 'start_port' }, + { + title: lan.security.firewall.target_ip, + fid: 'ended_ip', + template: function (row) { + return ''+ (row.ended_ip ? row.ended_ip : '127.0.0.1') +'' + } + }, + { title: lan.security.firewall.target_port, fid: 'ended_port' }, + { title: lan.security.firewall.add_time, fid: 'addtime', width: 150 }, + { + title: lan.public.operate, + type: 'group', + width: 150, + align: 'right', + group: [{ + title: lan.public.edit, + event: function (row, index) { + that.editPortForward(row) + } + }, { + title: lan.public.del, + event: function (row, index) { + that.removePortForward(row) + } + }] + }], + }); + return forwardTable; + }, + /** + * @description 添加/修改端口转发 + * @param row + */ + editPortForward: function (row) { + var isEdit = !!row, that = this; + row = row || { protocol:'tcp', s_ports:'',d_address:'',d_ports:'' } + layer.open({ + type: 1, + area: "420px", + title: (!isEdit ? lan.public.add : lan.public.edit) + lan.security.firewall.forward.form_title, + closeBtn: 2, + shift: 5, + shadeClose: false, + btn: [lan.public.import, lan.public.cancel], + content: '
      ', + yes:function(index,layers){ + bt_tools.verifyForm('#editIpRuleForm',[ + {name:'s_ports',validator:function (value,row){ + if(!value) return lan.security.firewall.source_port_val1 + if(!bt.check_port(value)) return lan.security.firewall.source_port_val2 + }}, + {name:'d_ports',validator:function (value,row){ + if(!value) return lan.security.firewall.target_port_val1 + if(!bt.check_port(value)) return lan.security.firewall.target_port_val2 + }}, + ],function(verify,form){ + if(verify){ + // 添加、修改 + if(form['d_address'] === '') form['d_address'] = '127.0.0.1' + bt_tools.send({ + url:'/safe/firewall/' + (isEdit?'modify_forward':'create_forward'), + data:{data:JSON.stringify($.extend({id:row.id},form))} + }, function (rdata) { + bt.msg(rdata) + if(rdata.status){ + layer.close(index) + that.portForwardTable() + that.getFirewallInfo() + } + },(isEdit ? lan.public.editing : lan.public.adding) + lan.security.firewall.forward.form_title); + } + }) + }, + success:function(layero,index){ + if(typeof row.id !== 'undefined') row = {s_ports:row.start_port,d_address:row.ended_ip,d_ports:row.ended_port,protocol:row.protocol,id:row.id} + bt_tools.fromGroup('#editIpRuleForm', [ + { + label: lan.security.firewall.protocol, + width: '200px', + name: 'protocol', + type: 'select', + options: [ + { value: 'tcp', label: 'TCP' }, + { value: 'udp', label: 'UDP' }, + { value: 'tcp/udp', label: 'TCP/UDP' }, + ], + }, + { label: lan.security.firewall.source_port, width: '200px', name: 's_ports', type: 'text', placeholder: lan.security.firewall.source_port_input }, + { label: lan.security.firewall.target_ip, width: '200px', name: 'd_address', placeholder: lan.security.firewall.target_ip_input }, + { label: lan.security.firewall.target_port, width: '200px', name: 'd_ports', type: 'text', placeholder: lan.security.firewall.target_port_input }, + { type: 'tips', style: 'padding-left: 30px; margin-top:5px;', list: [lan.security.firewall.forward.form_tips1, lan.security.firewall.forward.form_tips2] }, + ], row) + bt_tools.setLayerArea(layero) + } + }) + }, + /** + * @description 删除端口转发 + * @param {object} row 当前行数据 + */ + removePortForward: function (row) { + var that = this; + bt.confirm({ + msg: lan.security.firewall.forward.del_msg, + title: lan.security.firewall.forward.del_tit + ' [' + lan.security.firewall.source_port + ': ' + row.start_port + ' -> ' + lan.security.firewall.target_port + ': ' + row.ended_port +']', + area: '530px' + }, function () { + bt_tools.send({ + url:'/safe/firewall/remove_forward', + data:{data:JSON.stringify({id:row.id,protocol:row.protocol,s_port:row.start_port,d_ip:row.ended_ip,d_port:row.ended_port})} + }, function (rdata) { + bt.msg(rdata); + if(rdata.status) { + that.portForwardTable(); + that.getFirewallInfo(); + } + }, lan.security.firewall.forward.del_req); + }); + }, + /** + * @description 国家区域 + */ + countryRegionTable: function () { + var that = this; + var cRegionTable = bt_tools.table({ + el: '#countryRegion', + url: '/safe/firewall/get_country_list', + load: lan.security.firewall.area.load, + default: lan.security.firewall.area.default, // 数据为空时的默认提示 + autoHeight: true, + beforeRequest: 'model', + column: [ + {type: 'checkbox', class: '', width: 20}, + {fid: 'country', title: lan.security.firewall.areas, width: 180, + template:function (row){ + return ''+ row.country + '(' + row.brief + ')' + } + }, + { + fid: 'types', + title: lan.security.firewall.strategy, + width: 100, + template: function (row) { + return row.types === 'accept'?'' + lan.security.firewall.release + '':'' + lan.security.firewall.block + '' + } + }, + {fid: 'ports', title: lan.security.firewall.ports, template:function (row){ + return '' + (!row.ports ? lan.security.firewall.all : row.ports) + '' + }}, + {fid: 'addtime', title: lan.security.firewall.add_time, width:150}, + { + title: lan.public.operate, + type: 'group', + width: 150, + align: 'right', + group: [{ + title: lan.public.edit, + event: function (row, index) { + that.editCountryRegion(row); + } + }, { + title: lan.public.del, + event: function (row, index) { + that.removeCountryRegion(row); + } + }] + }], + tootls: [ + { // 按钮组 + type: 'group', + list: [{ + title: lan.security.firewall.area.add_btn, + active: true, + event: function (ev) { + that.editCountryRegion() + } + }, { + title: lan.security.firewall.import_btn, + event: function (ev) { + that.ruleImport('country_rule') + } + }, { + title: lan.security.firewall.export_btn, + event: function (ev) { + that.ruleExport('country_rule') + } + }] + }, + { // 搜索内容 + type: 'search', + placeholder: lan.security.firewall.area.search, + searchParam: 'query', //搜索请求字段,默认为 search + }, + { + type: 'batch', // 批量操作 + disabledSelectValue: lan.firewall.batch_disabled_tips('area rule'), + placeholder: 'Select batch operation', + buttonValue: 'Execute', + selectList: [ + { + title: lan.firewall.batch_del_btn('area rule'), + url: '/safe/firewall/remove_country', + param: function (row) { + return { + data: JSON.stringify(row), + }; + }, + refresh: true, + load: true, + callback: function (that) { + bt.confirm({ title: lan.firewall.batch_del_title('area rule'), msg: lan.firewall.batch_del_msg_area_rule }, function () { + var param = {}; + that.start_batch(param, function (list) { + var html = ''; + for (var i = 0; i < list.length; i++) { + var item = list[i]; + html += + '' + + item.country + + '
      ' + + item.request.msg + + '
      '; + } + cRegionTable.$batch_success_table({ title: lan.firewall.batch_del_title('area rule'), th: 'Area', html: html }); + cRegionTable.$refresh_table_list(true); + safety.getFirewallInfo(); + }); + }); + }, + }, + ], + }, + { //分页显示 + type: 'page', + numberStatus: true, // 是否支持分页数量选择,默认禁用 + jump: true, //是否支持跳转分页,默认禁用 + } + ] + }) + return cRegionTable; + }, + + /** + * @description 添加/修改端口转发 + * @param row + */ + editCountryRegion:function (row) { + var isEdit = !!row, that = this; + row = row || { country: 'USA', types:'drop',brief:'US',ports:'' } + bt_tools.send({ + url:'/safe/firewall/get_countrys', + }, function (rdata) { + layer.open({ + type: 1, + area:"420px", + title: (!isEdit ? lan.public.add : lan.public.edit) + lan.security.firewall.area.form_title, + closeBtn: 2, + shift: 5, + shadeClose: false, + btn: [lan.public.confirm, lan.public.cancel], + content: '
      ', + yes: function (index, layers) { + bt_tools.verifyForm('#editCountryRegionForm', [ + { + name: 'ports', + validator: function (value, row) { + if (!value && row.choose !== 'all') return lan.security.firewall.specify_port_val1; + } + }, + ], function (verify, form) { + if (verify) { + // 添加、修改 + form['brief'] = form.country; + form['country'] = $('[name="country"]').find(':selected').text(); + if (form.choose === 'all') form.ports = ''; + bt_tools.send({ + url: '/safe/firewall/' + (isEdit ? 'modify_country' : 'create_country'), + data: { data: JSON.stringify($.extend({ id: row.id }, form)) } + }, function (rdata) { + bt.msg(rdata) + if(rdata.status){ + layer.close(index) + that.countryRegionTable() + that.getFirewallInfo() + } + }, (isEdit ? lan.public.editing : lan.public.adding) + lan.security.firewall.area.form_title); + } + }) + }, + success: function (layero, index) { + var options = []; + for (var i = 0; i < rdata.length; i++) { + var item = rdata[i] + options.push({ + label: item.CH, + value: item.brief + }) + } + bt_tools.fromGroup('#editCountryRegionForm', [ + { label: lan.security.firewall.areas, width: '200px', name: 'country', type: 'select', options: options }, + { label: lan.security.firewall.strategy, width: '200px', name: 'types', type: 'select', options: [{ value:'drop', label: lan.security.firewall.block }] }, + { + label: lan.security.firewall.ports, + width: '200px', + name: 'choose', + type: 'select', + options:[ + { value: 'all', label: lan.security.firewall.all }, + // { value: 'point', label: lan.security.firewall.specify_port } + ], + on: { + change: function (ev, val) { + $(this).data('line').next().toggle() + } + } + }, + { label: '', width: '200px', name: 'ports', labelStyle: 'display:none', type: 'text', placeholder: lan.security.firewall.specify_port_input }, + { + type:'tips', + list:[ + lan.security.firewall.area.form_tips1, + lan.security.firewall.area.form_tips2, + lan.security.firewall.area.form_tips3 + ], + style: 'padding-left: 20px; margin-top:5px;' + } + ], { + country: row.brief, + types: 'drop', + choose: 'all' + }); + if (row.ports) { + $('select[name="choose"]').val('point'); + $('select[name="choose"]').change(); + $('input[name="ports"]').val(row.ports); + } + bt_tools.setLayerArea(layero); + } + }); + }, lan.security.firewall.area.get_area); + }, + + /** + * @description 删除地区规则 + * @param {object} row 当前行数据 + */ + removeCountryRegion: function (row) { + var that = this; + bt.confirm({ + msg: lan.security.firewall.area.del_msg, + title: lan.security.firewall.area.del_tit + }, function(){ + bt_tools.send({ + url:'/safe/firewall/remove_country', + data:{data:JSON.stringify(row)} + }, function (rdata) { + bt.msg(rdata) + if(rdata.status) { + that.countryRegionTable() + that.getFirewallInfo() + } + }, lan.security.firewall.area.del_req) + }); + }, +} + +// ssh管理 +var ssh = { + init: function () { + $('.state-content').show(); + $('.state-content .ssh-header').show(); + + $('#sshView .tab-nav-border span').eq(0).trigger('click'); + }, + event: function () { + var that = this; + // 切换系统防火墙菜单事件 + $('#sshView').unbind('click').on('click', '.tab-nav-border span', function () { + var index = $(this).index(); + $(this).addClass('on').siblings().removeClass('on'); + $(this).parent().next().find('.tab-block').eq(index).addClass('on').siblings().removeClass('on'); + $('.state-content').show().find('.ssh-header').show().siblings().hide(); + that.cutSshTab(index); + }); + + // SSH开关 + $('#isSsh').unbind('click').on('click',function(){ + var _that = $(this), status = _that.prop("checked") ? 0 : 1; + bt.firewall.set_mstsc_status(status, function (rdata) { + if(rdata === -1){ + _that.prop("checked",!!status); + }else{ + bt.msg(rdata); + that.getSshInfo(); + } + }); + }); + + // 保存SSH端口 + $('.save_ssh_port').unbind('click').on('click',function (){ + var port = $(this).prev().val(); + if(port === '') return bt.msg({ msg: lan.security.ssh.port_empty, icon: 2 }); + if(!bt.check_port(port)) return bt.msg({ + icon: 2, + time: 0, + closeBtn: 2, + area: '400px', + msg: lan.security.ssh.port_error1 + '
      ' + lan.security.ssh.port_error2 + '
      [80, 443, 8080, 8443, 8888]', + }); + bt.firewall.set_mstsc(port); + }); + + // root登录 + $('[name="root_login"]').unbind('change').on('change',function(){ + // var _that = $(this), status = _that.prop("checked"); + var root_type = $(this).val(); + bt_tools.send({ + url:'/ssh_security?action=set_root', + data:{p_type:root_type} + },function (rdata){ + bt_tools.msg(rdata); + }, lan.security.ssh.set_root_req); + }); + + // SSH密码登录 + $('[name="ssh_paw"]').unbind('click').on('click',function (){ + var _that = $(this), start = _that.prop("checked"); + bt_tools.send({ + url:'/ssh_security?action=' + (start?'set_password':'stop_password') + },function (rdata){ + bt_tools.msg(rdata); + }, lan.security.ssh.set_paw_req); + }); + + // SSH密钥登录 + $('[name="ssh_pubkey"]').unbind('click').on('click',function(){ + var _that = $(this); + var start = _that.prop("checked"); + if(start){ + that.setTemplateSshkey(); + }else{ + bt_tools.send({ + url:'/ssh_security?action=stop_key' + },function (rdata){ + that.getSeniorSshInfo(); + bt_tools.msg(rdata); + }, lan.security.ssh.set_pubkey_req); + } + }); + + // 登录告警 + $('[name="ssh_login_give"]').unbind('click').on('click',function(){ + var _that = $(this), status = _that.prop("checked"); + bt_tools.send({ + url:'/ssh_security?action=' + (status?'start_jian':'stop_jian') + },function (rdata){ + bt_tools.msg(rdata); + }, lan.security.ssh.set_alarm_req); + }); + + // 查看密钥 + $('.checkKey').unbind('click').on('click',function (){ + that.setSshKeyView() + }); + + // 设置登录告警 + $('.setSshLoginAlarm').unbind('click').on('click',function (){ + that.setSshLoginAlarmView(); + }); + + // 下载密钥 + $('.downloadKey').unbind('click').on('click',function (){ + bt_tools.send({ + url:'/ssh_security?action=get_key' + },function (rdata){ + if(!rdata.msg) return layer.msg(lan.security.ssh.download_key_tips); + window.open('/ssh_security?action=download_key') + }) + }); + + // 登录详情 + $('#sshDetailed').unbind('click').on('click','a',function (){ + var index = $(this).data('index'); + $('#sshView .tab-nav-border>span').eq(1).trigger('click'); + $('.cutLoginLogsType button').eq(index).trigger('click'); + }); + + // 切换系统防火墙菜单事件 + $('#sshView').unbind('click').on('click', '.tab-nav-border span', function () { + var index = $(this).index(); + that.cutSshTab(index); + }); + + // 切换登录日志类型 + $('#loginLogsContent').unbind('click').on('click','.cutLoginLogsType button',function(){ + var type = $(this).data('type'); + $(this).addClass('btn-success').removeClass('btn-default').siblings().addClass('btn-default').removeClass('btn-success'); + $('#loginLogsContent>div:eq('+ type +')').show().siblings().hide(); + that.loginLogsTable({p:1,type: Number(type)}); + }); + }, + cutSshTab: function (index) { + switch (index){ + case 0: + this.getSshInfo(); + this.getLoginAlarmInfo(); + this.getSeniorSshInfo(); + this.getSshLoginAlarmInfo(); + break; + case 1: + this.loginLogsTable(); + break; + } + }, + /** + * @description 获取SSH信息 + */ + getSshInfo:function (load){ + bt_tools.send({ + url: '/safe/ssh/GetSshInfo', + verify: false + },function (rdata){ + var error = rdata.error; + $('#sshDetailed .btlink').text(lan.security.ssh.success + ': '+ error.success); + $('#sshDetailed .bterror').text(lan.security.ssh.fail + ': '+ error.error); + $('#isSsh').prop("checked", rdata.status); + $('[name="ssh_port"]').val(rdata.port); + }, lan.security.ssh.get_ssh_info); + }, + /** + * @description 获取登录告警信息 + */ + getLoginAlarmInfo:function(load){ + bt_tools.send({ + url:'/ssh_security?action=get_jian' + },function (rdata){ + $('#ssh_login_give').prop('checked', rdata.status); + }, {load: load ? lan.security.ssh.get_jian : '',verify:false}) + }, + /** + * @description 获取高级SSH信息 + */ + getSeniorSshInfo:function (load){ + bt_tools.send({ + url: '/ssh_security?action=get_config', + verify: false + },function (rdata){ + $('[name="ssh_paw"]').prop("checked",rdata.password === 'yes'); + $('[name="ssh_pubkey"]').prop("checked",rdata.pubkey === 'yes'); + + var root_option = ''; + $.each(rdata.root_login_types,function(k,v){ + root_option += ''; + }) + $('[name="root_login"]').html(root_option); + // $('[name="root_login"]').prop("checked",rdata.root_is_login === 'yes') + }, load ? lan.security.ssh.get_config : ''); + }, + + /** + * @description 获取SSH登录告警 + */ + getSshLoginAlarmInfo: function (load) { + var that = this; + bt_tools.send({ + url: '/ssh_security?action=get_login_send', + verify: false + }, function (send) { + var data = that.msgPushData; + if (!data || $.isEmptyObject(data)) { + bt_tools.send({ + url: '/ssh_security?action=get_msg_push_list', + verify: false + }, function (msgData) { + that.msgPushData = msgData + that.renderLoginAlarmInfo(send); + }); + } else { + that.renderLoginAlarmInfo(send); + } + }, load ? lan.security.ssh.get_login_send : ''); + }, + /** + * @description 渲染SSH登录告警配置 + */ + renderLoginAlarmInfo: function (send) { + var data = this.msgPushData || {}; + var map = {} + $.each(data, function (key, item) { + if (key === 'sms') return + map[key] = item.title + }); + var key = send.msg; + var title = map[key]; + if (send.status && title) { + $('a.setSshLoginAlarm').removeClass('bt_warning').addClass('btlink'); + $('a.setSshLoginAlarm').text(title + ' ' + lan.security.ssh.configured); + } else { + $('a.setSshLoginAlarm').addClass('bt_warning').removeClass('btlink'); + $('a.setSshLoginAlarm').text(lan.security.ssh.not_configured); + } + }, + + /** + * @description 登录日志 + */ + loginLogsTable:function(param){ + if(!param) param = { p:1, type:0 }; + var logs = [ + ['All', lan.security.ssh.logs, 'get_ssh_list'], + ['Success', lan.security.ssh.s_logs, 'get_ssh_success'], + ['Error', lan.security.ssh.f_logs, 'get_ssh_error'] + ]; + var type = logs[param.type][0]; + var tips = logs[param.type][1]; + + $('#login'+ type +'Logs').empty(); + var arry = [lan.security.ssh.all, lan.security.ssh.success, lan.security.ssh.fail]; + var html = $('
      '); + $.each(arry,function (i,v){ + html.append('') + }); + return bt_tools.table({ + el: '#login'+ type +'Logs', + url: '/safe/syslog/' + logs[param.type][2], + default: lan.security.ssh.get_ssh_list1 + tips + lan.security.ssh.get_ssh_list2, // 数据为空时的默认提示 + autoHeight: true, + dataVerify:false, + tootls: [ + { // 按钮组 + type: 'group', + list: [{ + title: lan.security.ssh.refresh, + active: true, + event: function (ev,that) { + that.$refresh_table_list(true) + } + }] + }, + { // 搜索内容 + type: 'search', + placeholder: lan.security.ssh.login_search, + searchParam: 'search', //搜索请求字段,默认为 search + }, + { //分页显示 + type: 'page', + number: 20 + } + ], + dataFilter: function (data) { + if ((typeof data.status === "boolean" && !data.status)) { + $('#loginLogsContent').hide().next().show(); + return { data: [] } + } + return {data:data} + }, + beforeRequest: function (data) { + if(typeof data.data === "string"){ + delete data.data + return {data: JSON.stringify(data)} + } + return {data: JSON.stringify(data)} + }, + column: [ + {title: lan.security.ssh.ip_port,fid: 'address',width:'150px', template:function (row){ + return ''+ row.address +':' + row.port + ''; + }}, + // {title: '登录端口',fid: 'port'}, + {title: lan.security.ssh.place,template:function (row){ + return ''+ (row.area?'' + row.area.info + '':'-') +''; + }}, + {title: lan.security.ssh.user,fid: 'user'}, + {title: lan.security.ssh.status, template: function (item) { + var status = Boolean(item.status); + return ''+ (status ? lan.security.ssh.l_success : lan.security.ssh.l_fail) +''; + }}, + {title: lan.security.ssh.o_time, fid: 'time', width:150} + ], + success:function (config){ + $(config.config.el + ' .tootls_top .pull-right').prepend(html) + $('#login'+ type +'Page').html(firewall.renderLogsPages(20,param.p,config.data.length)) + } + }); + }, + /** + * @description 设置密钥登录 + */ + setTemplateSshkey:function(){ + var _this = this; + layer.open({ + title: lan.security.ssh.key_title, + area: '430px', + type: 1, + closeBtn: 2, + btn: [lan.public.confirm, lan.public.cancel], + content:'
      '+ + '
      ' + lan.security.ssh.key_login + '
      '+ + '
      ' + lan.security.ssh.key_mode + '
      '+ + '
      ', + yes:function(indexs){ + var ssh_select_login = $('.ssh_select_login').val(); + var ssh_select_encryption = $('.ssh_select_encryption').val(); + bt_tools.send({ + url:'/ssh_security?action=set_sshkey', + data:{ ssh:ssh_select_login, type:ssh_select_encryption } + },function (rdata){ + bt_tools.msg(rdata); + layer.close(indexs); + _this.getSeniorSshInfo(); + }, lan.security.ssh.set_sshkey); + }, + cancel:function(index){ + $('[name="ssh_pubkey"]').prop('checked',false); + }, + btn2:function(index){ + $('[name="ssh_pubkey"]').prop('checked',false); + } + }); + }, + /** + * @description 设置SSH密钥视图 + */ + setSshKeyView:function(){ + var _this = this + bt_tools.send({ + url:'/ssh_security?action=get_key' + },function (rdata){ + if (!rdata.msg) return layer.msg(lan.security.ssh.key_view_msg); + layer.open({ + title: lan.security.ssh.key_view_title, + area:'400px', + type:1, + closeBtn: 2, + content:'
      \ + \ +
      \ + \ + \ + \ +
      \ +
      ', + success:function (layers,indexs){ + $('.btn-copy-sshkey').on('click',function(){ + bt.pub.copy_pass($('#ssh_text_key').val()); + }) + $('.btn-download-sshkey').on('click',function(){ + window.open('/ssh_security?action=download_key') + }) + $('.btn-rebuild-sshkey').on('click',function(){ + bt_tools.send({ + url:'/ssh_security?action=set_sshkey', + data:{ ssh:'yes', type:'ed25519' } + },function (res){ + bt_tools.send({ + url:'/ssh_security?action=get_key' + },function (rdata){ + if(!rdata.msg) return layer.msg(lan.security.ssh.key_view_msg); + $('#ssh_text_key').val(rdata.msg); + if(res.status) bt_tools.msg({ msg: lan.security.ssh.get_key_msg, status: true }); + _this.getSeniorSshInfo(); + }) + }, lan.security.ssh.get_key); + }) + } + }) + }, lan.security.ssh.get_key_req); + }, + /** + * @description 设置SSH登录告警 + */ + setSshLoginAlarmView:function(){ + var that = this; + layer.open({ + title: lan.security.ssh.alarm_title, + area: '1010px', + type: 1, + closeBtn: 2, + content: '\ +
      \ +
      \ +

      ' + lan.security.ssh.alarm_set + '

      \ +

      ' + lan.security.ssh.ip_white + '

      \ +
      \ +
      \ +
      \ +
      \ +
      \ +
      \ +
      \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
      ' + lan.security.ssh.login_info + '' + lan.security.ssh.time + '
      ' + lan.site.data_empty + '
      \ +
      \ +
      \ +
      \ +
        \ +
      • \ +
      \ +
      \ +
      \ +
      \ +
      \ + \ + \ +
      \ +
      \ +
      \ +
        \ +
      • ' + lan.security.ssh.ip_white_tips + '
      • \ +
      \ +
      \ +
      \ +
      \ +
      ', + success: function ($layer, indexs) { + // layer + var _that = this; + + // 切换菜单 + $layer.find('.bt-w-menu p').click(function () { + var index = $(this).index(); + $(this).addClass('bgw').siblings('.bgw').removeClass('bgw'); + $layer.find('.content_box').addClass('hide'); + $layer.find('.content_box').eq(index).removeClass('hide'); + switch (index) { + // 登录日志 + case 0: + _that.renderAlarm(); + _that.renderLogsTable(1, false); + break; + // IP白名单 + case 1: + _that.renderWhiteIpTable() + break; + } + }); + + // 设置告警通知 + $('.news-channel .bt-form-new').on('change', 'input[type="checkbox"]', function () { + var $this = $(this); + var name = $this.attr('name'); + var checked = $this.is(':checked'); + var action = checked ? 'set_login_send' : 'clear_login_send' + bt_tools.send({ + url: '/ssh_security?action=' + action, + data:{ type: name } + }, function (rdata) { + bt_tools.msg(rdata); + if (rdata.status) { + if (checked) { + $('.news-channel .bt-form-new input[type="checkbox"]').prop('checked', false); + $this.prop('checked', true); + } + that.getSshLoginAlarmInfo(); + } else { + $this.prop('checked', !checked); + } + }, { + verify: false, + load: lan.security.ssh.login_send + }); + }); + + // 登录日志分页操作 + $('#login_logs_table .page').on('click', 'a', function (e) { + e.stopPropagation(); + e.preventDefault(); + var page = $(this) + .attr('href') + .match(/p=([0-9]*)/)[1]; + _that.renderLogsTable(page); + }); + + // 添加ip + $('.addAddressIp').click(function () { + var address = $('[name="ipAddress"]'); + var ip = address.val(); + address.val(''); + if (!ip) { + bt_tools.msg({ msg: lan.security.ssh.ip_white_input, status: false }); + return; + } + bt_tools.send({ + url:'/ssh_security?action=add_return_ip', + data:{ ip: ip } + }, function (rdata) { + bt_tools.msg(rdata); + _that.renderWhiteIpTable(); + }, lan.security.ssh.add_return_ip); + }); + + $layer.find('.bt-w-menu p').eq(0).click(); + }, + // 生成告警 + renderAlarm: function () { + // 获取告警列表 + bt_tools.send({ + url: '/ssh_security?action=get_msg_push_list', + }, function (alarms) { + // 获取选中告警 + bt_tools.send({ + url: '/ssh_security?action=get_login_send', + }, function (send) { + var html = ''; + var tits = []; + // 当前选中的告警key + var cKey = send.msg; + // 渲染生成告警列表 + $.each(alarms, function (key, item) { + if (item.name === 'sms') return; + var checked = cKey === item.name ? 'checked="checked"' : ''; + html += '\ +
      \ +
      Send to ' + item.title + '
      \ +
      \ + \ + \ +
      \ +
      '; + tits.push(item.title); + }); + $('.news-channel .bt-form-new').html(html); + $('.news-channel .help-info-text li').eq(0).text('Only one of the above options can be enabled simultaneously'); + }); + }, lan.security.ssh.get_msg_push_list); + }, + // 生成日志表格 + renderLogsTable: function (p, load) { + p = p || 1; + load = load !== undefined ? load : true; + if (load) var loadT = bt_tools.load(lan.security.ssh.get_logs); + bt_tools.send({ + url: '/ssh_security?action=get_logs', + data: { p: p, p_size: 8, } + }, function (rdata) { + if (load) loadT.close(); + var html = ''; + if (rdata.data) { + for (var i = 0; i < rdata.data.length; i++) { + var item = rdata.data[i]; + html += '' + item.log + '' + item.addtime + ''; + } + } + html = html || '' + lan.site.data_empty + ''; + $('#login_logs_table table tbody').html(html); + $('#login_logs_table .page').html(rdata.page || ''); + }); + }, + // 生成IP白名单表格 + renderWhiteIpTable: function () { + var _that = this; + if (this.ipTable) { + this.ipTable.$refresh_table_list(); + return; + } + this.ipTable = bt_tools.table({ + el: '#whiteIpTable', + url: '/ssh_security?action=return_ip', + autoHeight: true, + height: '425px', + default: lan.security.ssh.return_ip_default, + dataFilter: function (data) { + return { data: data.msg }; + }, + column: [ + { + title: 'IP', + template: function (item) { + return ''+ item + ''; + } + }, + { + title: lan.public.operate, + type: 'group', + width: 150, + align: 'right', + group: [ + { + title: lan.public.del, + event: function (row, index) { + bt_tools.send({ + url: '/ssh_security?action=del_return_ip', + data: { ip: row } + },function (rdata){ + bt_tools.msg(rdata) + _that.renderWhiteIpTable(); + }, lan.security.ssh.del_return_ip); + } + } + ] + } + ] + }); + } + }); + } +} + +// 入侵防御 +var intrusion = { + init: function () { + $('.state-content').hide(); + + bt.soft.get_soft_find('bt_security', function (rdata) { + // 判断插件未安装 && 插件是否过期 + if (!rdata.setup && rdata.endtime > -1) { + $('.buyIntrusion').hide(); + } + // 判断插件已安装 && 插件是否过期 + if ((rdata.setup && rdata.endtime > -1)) { + $('.state-content').show(); + $('.state-content .intrusion-header').show(); + $('#intrusion .installSoft').hide(); + $('#intrusion .tab-nav-border, #intrusion .tab-nav-con').show(); + $('#intrusion .tab-nav-border span').eq(0).trigger('click'); + } else { + $('.state-content').hide(); + $('#intrusion .installSoft').show(); + $('#intrusion .tab-nav-border,#intrusion .tab-nav-con').hide(); + + if (rdata.endtime > -1) { + $('.purchaseIntrusion').hide(); + }else{ + $('.installIntrusion').hide(); + } + } + }); + }, + event: function () { + var that = this; + + // 切换系统防火墙菜单事件 + $('#intrusion').on('click', '.tab-nav-border span', function () { + var index = $(this).index(); + that.cutSshTab(index); + }); + $('#isIntrusion').unbind('click').on('click', function () { + var status = $(this).prop('checked'); + that.setIntrusionSwitch(status); + }); + $('.installSoft .thumbnail-tab li').on('click',function(){ + var index = $(this).index(); + $(this).addClass('on').siblings().removeClass('on'); + $('.installSoft .thumbnail-item').eq(index).addClass('show').siblings().removeClass('show'); + }); + $('.installIntrusion').on('click', function (){ + bt.soft.install('bt_security', function (rdata) { + location.reload(); + }); + }); + $('.purchaseIntrusion').on('click', function () { + bt.soft.updata_ltd(true); + }); + }, + /** + * @description 切换SSH管理页面 + */ + cutSshTab:function (index){ + switch (index){ + case 0: + this.overviewList(); + break; + case 1: + this.processWhiteList(); + break; + case 2: + this.interceptLog(); + break; + case 3: + this.operationLog(); + break; + } + }, + + /** + * @description 设置防入侵开关 + */ + setIntrusionSwitch:function (status){ + bt_tools.send({ + url:'/plugin?action=a&name=bt_security&s='+ (status?'start_bt_security':'stop_bt_security'), + },function(rdata){ + bt_tools.msg(rdata); + }, lan.security.intrusion.switch_req); + }, + + /** + * @description 概览列表 + */ + overviewList:function () { + var _that = this; + return bt_tools.table({ + el: '#antiOverviewList', + url: '/plugin?action=a&name=bt_security&s=get_total_all', + load: lan.security.intrusion.overview_req, + default: lan.security.intrusion.overview_default, // 数据为空时的默认提示 + autoHeight: true, + height: '450px', + dataFilter: function (data) { + $('#isIntrusion').prop('checked', data.open); + $('.totlaDays').html(data.totla_times).css(data.totla_times ? { 'color': '#d9534f', 'font-weight': 'bold' } : {}); + $('.totlaTimes').html(data.totla_days).css(data.totla_days ? { 'color': '#d9534f', 'font-weight': 'bold' } : {}); + return { data: data.system_user }; + }, + column: [ + {title: lan.security.intrusion.user, fid: '0'}, + {title: lan.security.intrusion.total,align: 'center', template:function (row){ + var total = row[4].totla; + return ''+ total + ''; + }}, + {title: lan.security.intrusion.today, align: 'center', template:function (row){ + var today = row[4].day_totla; + return ''+ today + ''; + }}, + { + title: lan.security.intrusion.protection, + fid:'3', + type: 'switch', + event: function (row, index, ev, key, that) { + bt_tools.send({ + url:'/plugin?action=a&name=bt_security&s='+(row[3]?'stop_user_security':'start_user_security'), + data:{ user: row[0] } + },function (rdata){ + bt_tools.msg(rdata); + that.$refresh_table_list(); + }, function (rdata) { + bt_tools.msg(rdata); + $(ev.currentTarget).prop('checked', row[3]); + }, lan.security.intrusion.protection_req); + } + }, + { + title: lan.security.intrusion.log, + fid:'5', + type: 'switch', + event: function (row, index, ev, key, that) { + bt_tools.send({ + url:'/plugin?action=a&name=bt_security&s='+(row[5]?'stop_user_log':'start_user_log'), + data:{ uid:row[1] } + },function (rdata){ + bt_tools.msg(rdata); + that.$refresh_table_list(); + }, lan.security.intrusion.log_req); + } + }, + {title: lan.security.intrusion.remark, fid:'6'}, + { + title: lan.public.operate, + type: 'group', + width: 150, + align: 'right', + group: [{ + title: lan.security.intrusion.logs, + event: function (row, index) { + _that.getCmdLogs(row) + } + }] + } + ] + }) + }, + + /** + * @description 获取命令日志 + * @param {Object} row 当前行数据 + */ + getCmdLogs:function (row){ + var that = this; + bt_tools.send({ + url:'/plugin?action=a&name=bt_security&s=get_logs_list', + data:{ user:row[0] } + },function (rdata){ + if(rdata.length > 0){ + that.openLogsView(rdata,row[0]); + }else{ + layer.msg(lan.security.intrusion.no_logs, { icon: 6 }); + } + }) + }, + + /** + * @description 打开日志视图 + */ + openLogsView:function (arr,user){ + var that = this; + layer.open({ + type: 1, + title: "["+ user +"] - " + lan.security.intrusion.logs_title, + area: ['840px', '570px'], + closeBtn: 2, + shadeClose: false, + content: '
      \ +
      \ +
      ' + lan.security.intrusion.select_date + ':
      \ +
      \ +
      '+ arr[0] +'
      \ +
      \ +
      \ +
      \ +
      \ +
      \ +
      \ +
      \ +
      ', + success:function(layers,index){ + var _html = ''; + for(var i = 0;i'+ arr[i] +''; + } + $('.logs-list-box .logs-input-list').html(_html); + $('.logs-list-box .logs-inputs').on('click',function(e){ + if(!$(this).parent().hasClass('active')){ + $(this).parent().addClass('active'); + }else{ + $(this).parent().removeClass('active'); + } + $(document).unbind('click').click(function(e){ + $('.logs-unselect').removeClass('active'); + $(this).unbind('click'); + }); + e.stopPropagation(); + e.preventDefault(); + }); + + $('.logs-input-list dd').on('click',function(e){ + var _val = $(this).attr('logs-data'); + $(this).addClass('logs_checked').siblings().removeClass('logs_checked'); + $(this).parent().attr('data-val',_val); + $(this).parent().prev().find('.logs-inputs-tips').html(_val); + that.renderLogsTable({ page:1, day:_val, user:user}); + }); + + $('.logs-page').unbind().on('click','a.nextPage',function(e){ + var _page = parseInt($(this).attr('data-page')); + var _day = $('.logs-input-list dd').attr('logs-data'); + that.renderLogsTable({ page:_page, day:_day, user:user}); + }); + + $('.logs-input-list dd:eq(0)').click(); + + } + }) + }, + + /** + * @description 渲染日志视图 + * @param {object} data 日志数据 + */ + renderLogsTable:function (data){ + var _that = this, table = $('#logsTable'), dataTable = table.data('table'); + table.empty(); + return bt_tools.table({ + el: '#logsTable', + url: '/plugin?action=a&name=bt_security&s=get_user_log', + load: lan.security.intrusion.logs_req, + default: lan.security.intrusion.logs_default, // 数据为空时的默认提示 + autoHeight: true, + column: [ + {title: lan.security.intrusion.user, template:function (row) { return ''+ data.user +'' }}, + {title: lan.security.intrusion.user, fid: 'cwd'}, + {title: lan.security.intrusion.command_executed, fid: 'cmd'}, + {title: lan.security.intrusion.command_path, fid: 'filename'}, + {title: lan.security.intrusion.time,align:'right', template: function (row) { + return ''+ bt.format_data(row.timestamp) +''; + }} + ], + beforeRequest: function (param) { + return $.extend(param,{ p:data.page, day:data.day, user:data.user, num:11}); + }, + success: function (rdata) { + $('.logs-page').html(firewall.renderLogsPages(10,data.page,rdata.data.length)); + } + }); + }, + + /** + * @description 进程白名单 + */ + processWhiteList:function (){ + var _that = this; + return bt_tools.table({ + el: '#antiProcessWhiteList', + url: '/plugin?action=a&name=bt_security&s=porcess_set_up_log', + load: lan.security.intrusion.whitelist_req, + default: lan.security.intrusion.whitelist_default, // 数据为空时的默认提示 + autoHeight: true, + dataFilter: function (data) { + return {data:data}; + }, + tootls: [ + { // 按钮组 + type: 'group', + list: [{ + title: lan.security.intrusion.add_whitelist, + active: true, + event: function (ev) { + bt.open({ + title: lan.security.intrusion.add_whitelist, + area:'430px', + btn: [lan.public.confirm, lan.public.cancel], + content:'
      \ +
      \ + ' + lan.security.intrusion.process_name + '\ +
      \ +
      \ +
      \ +
      • ' + lan.security.intrusion.add_whitelist_tips + '
      ', + yes:function (){ + var cmd = $('[name="cmd"]').val(); + bt_tools.send({ + url: '/plugin?action=a&name=bt_security&s=add_porcess_log', + data: { cmd:cmd } + },function (rdata){ + bt_tools.msg(rdata); + _that.processWhiteList() + }) + } + }) + } + }] + }, + // { // 批量操作 + // type: 'batch', //batch_btn + // disabledSelectValue: '请选择需要批量操作的站点!', + // selectList: [{ + // title: "删除项目", + // url: '/project/nodejs/remove_project', + // param: function (row) { + // return { data: JSON.stringify({ project_name: row.name }) } + // }, + // refresh: true, + // callback: function (that) { + // + // } + // } + // ], + // }, + ], + column: [ + { + title: lan.security.intrusion.process_whitelist, + template: function (row) { + return ''+ row + ''; + } + }, + { + title: lan.public.operate, + type: 'group', + width: 150, + align: 'right', + group: [{ + title: lan.public.del, + event: function (row, index) { + console.log(arguments); + bt.confirm({ + title: lan.security.intrusion.del_whitelist_title + ' ['+ row +']', + msg: lan.security.intrusion.del_whitelist_msg + }, function () { + bt_tools.send({ + url:'/plugin?action=a&name=bt_security&s=del_porcess_log', + data:{ cmd: row } + },function (rdata){ + _that.processWhiteList() + bt_tools.msg(rdata) + }) + }) + } + }] + } + ] + }) + }, + + /** + * @description 拦截日志 + */ + interceptLog:function (){ + var _that = this; + return bt_tools.table({ + el: '#antiInterceptLog', + url: '/plugin?action=a&name=bt_security&s=get_log_send', + load: lan.security.intrusion.intercept_logs_req, + default: lan.security.intrusion.intercept_logs_default, // 数据为空时的默认提示 + autoHeight: true, + dataFilter: function (res) { + return { data: res.data }; + }, + column: [ + {title: lan.security.intrusion.intercept_content, template:function (row){ + return ''+ row.log + ''; + }}, + {title: lan.security.intrusion.trigger_time, width:'170px', align: 'right', template:function (row){ + return ''+ row.addtime + ''; + }} + ] + }) + }, + + /** + * @description 操作日志 + */ + operationLog:function (){ + var _that = this; + return bt_tools.table({ + el: '#antiOperationLog', + url: '/plugin?action=a&name=bt_security&s=get_log', + load: lan.security.intrusion.operation_logs_req, + default: lan.security.intrusion.operation_logs_default, // 数据为空时的默认提示 + autoHeight: true, + tootls:[{ //分页显示 + type: 'page', + jump: true, //是否支持跳转分页,默认禁用 + }], + column: [ + {title: lan.public.operate, template:function (row){ + return ''+ row.log + ''; + }}, + {title: lan.security.intrusion.date, fid:'addtime', width:'170px'}, + ] + }) + } +} + +// 系统加固 +var system = { + ipTable: null, + init: function () { + $('.state-content').show(); + $('.state-content .system-header').show(); + + bt.soft.get_soft_find('syssafe', function (rdata) { + // 判断插件未安装 && 插件是否过期 + if (!rdata.setup && rdata.endtime > -1) { + $('.buySystem').hide(); + } + // 判断插件已安装 && 插件是否过期 + if ((rdata.setup && rdata.endtime > -1)) { + $('#system .tab-nav-border, #system .tab-nav-con').show(); + $('#system .installSoft').hide(); + $('#system .tab-nav-border span').eq(0).trigger('click'); + } else { + $('#system .tab-nav-border, #system .tab-nav-con').hide(); + $('#system .installSoft').show(); + $('.state-content').hide(); + + if (rdata.endtime > - 1) { + $('.purchaseSystem').hide(); + } else { + $('.installSystem').hide(); + } + } + }); + }, + /** + * @description SSH管理列表 + */ + event: function () { + var that = this; + + // 切换系统防火墙菜单事件 + $('#system').on('click', '.tab-nav-border span', function () { + var index = $(this).index(); + that.cutSshTab(index); + }); + + // 系统加固开关 + $('#isReinforcement').unbind('change').change(function () { + var $this = $(this) + bt_tools.send({ + url: '/plugin?name=syssafe&action=a&s=set_open', + }, function (rdata) { + bt_tools.msg(rdata); + }, function (rdata) { + bt_tools.msg(rdata); + var checked = $this.prop('checked'); + $this.prop('checked', !checked); + }, lan.security.system.switch_req); + }); + + // 添加封锁ip地址 + $('.system_add_ip').click(function () { + var $ip = $('input[name="system_address"]') + var ip = $ip.val().trim(); + if (!ip) { + $ip.focus(); + return layer.msg(lan.security.system.add_ip_val1, { icon: 2 }); + } + if (!bt.check_ip(ip)) { + $ip.focus(); + return layer.msg(lan.security.system.add_ip_val2, { icon: 2 }); + } + bt_tools.send({ + url: '/plugin?name=syssafe&action=a&s=add_ssh_limit', + data: { ip: ip } + }, function (rdata) { + bt_tools.msg(rdata); + if (rdata.status) $ip.val(''); + that.getBlockIp(); + }, lan.security.system.add_ip_req); + }); + + $('#system .installSoft .thumbnail-tab li').unbind('click').on('click',function(){ + var index = $(this).index() + $(this).addClass('on').siblings().removeClass('on') + $('#system .installSoft .thumbnail-item').eq(index).addClass('show').siblings().removeClass('show') + }); + + $('.installSystem ').unbind('click').on('click',function (){ + bt.soft.install('syssafe',function (rdata) { + location.reload(); + }); + }); + + $('.purchaseSystem').unbind('click').on('click',function (){ + bt.soft.updata_ltd(true); + }); + }, + + /** + * @description 切换SSH管理页面 + */ + cutSshTab:function (index){ + switch (index){ + case 0: + this.reinforceSystem(); + break; + case 1: + this.reinforceBlockIp(); + break; + case 2: + this.reinforceLog(); + break; + } + }, + + /** + * @description 渲染系统加固配置 + */ + renderSafeConfig:function (){ + if (s_key === 'process') { + system_reinforcement.process_config() + return; + } + + if (s_key === 'ssh') { + system_reinforcement.ssh_config() + return; + } + bt_tools.send({ + url: '/plugin?name=syssafe&action=a&s=get_safe_config', + data: { s_key: s_key } + },function (rdata){ + var chattrs = { "a": "追加", "i": "只读" } + var states = { true: "已保护", false:"未保护" } + var tbody = ''; + for (var i = 0; i < rdata.paths.length; i++) { + tbody += '\ + ' + rdata.paths[i].path + '\ + ' + chattrs[rdata.paths[i].chattr] + '\ + ' + (rdata.paths[i].s_mode === rdata.paths[i].d_mode ? rdata.paths[i].s_mode:(rdata.paths[i].s_mode + ' >> ' + rdata.paths[i].d_mode)) + '\ + ' + states[rdata.paths[i].state] + '\ + 删除\ + ' + } + if (system_reinforcement.message_box_noe) { + layer.close(system_reinforcement.message_box_noe); + system_reinforcement.message_box_noe = null; + } + + system_reinforcement.message_box_noe = layer.open({ + type: 1, + title: "配置【" + rdata.name + "】", + area: ['700px', '550px'], + closeBtn: 2, + shadeClose: false, + content: '
      \ +
      \ + \ + \ + \ + \
      \ +
      \ +
      \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + '+ tbody+'\ +
      路径模式权限状态操作
      \ +
      \ +
      \ +
        \ +
      • 【只读】无法修改、创建、删除文件和目录
      • \ +
      • 【追加】只能追加内容,不能删除或修改原有内容
      • \ +
      • 【权限】设置文件或目录在受保护状态下的权限(非继承),关闭保护后权限自动还原
      • \ +
      • 【如何填写权限】请填写Linux权限代号,如:644、755、600、555等,如果不填写,则使用文件原来的权限
      • \ +
      \ +
      ', + success:function (){ + + } + }) + },'获取系统加固配置'); + }, + + /** + * @description 防护配置 + */ + reinforceSystem:function (){ + var _that = this; + return bt_tools.table({ + el: '#reinforceSystem', + url: '/plugin?name=syssafe&action=a&s=get_safe_status', + load: lan.security.system.protection_req, + default: lan.security.system.protection_default, // 数据为空时的默认提示 + autoHeight: true, + dataFilter: function (data) { + $('#isReinforcement').prop('checked', data.open); + return { data: data.list }; + }, + column: [ + {title: lan.security.system.name, fid:'name'}, + {title: lan.security.system.desc, fid:'ps'}, + { + title: lan.security.system.status, + fid:'open', + type: 'switch', + event: function (row, index, ev, key, that) { + bt_tools.send({ + url:'/plugin?action=a&name=syssafe&s=set_safe_status', + data:{ s_key: row.key } + },function (rdata){ + bt_tools.msg(rdata); + that.$refresh_table_list(); + }, function (rdata) { + bt_tools.msg(rdata); + $(ev.currentTarget).prop('checked', row[3]); + }, lan.security.system.change_status_req); + } + }, + { + title: lan.public.operate, + type: 'group', + width: 150, + align: 'right', + group: [{ + title: lan.public.set, + event: function (row, index) { + switch (row.key) { + case 'ssh': + _that.renderReinforceSSHView(row); + break; + case 'process': + _that.renderReinforceAbnormalProcess(row); + break; + default: + _that.renderReinforceSystemView(row); + break; + } + } + }] + } + ] + }) + }, + + /** + * @description 渲染防护配置 服务加固、环境变量加固、用户加固、关键目录加固、计划任务加固 + */ + renderReinforceSystemView:function (row){ + var that = this; + bt_tools.open({ + title: lan.security.system.config + " [" + row.name + "]", + area: ['700px', '600px'], + btn:false, + content:'
      \ +
      \ +
        \ +
      • ' + lan.security.system.config_tips1 + '
      • \ +
      • ' + lan.security.system.config_tips2 + '
      • \ +
      • ' + lan.security.system.config_tips3 + '
      • \ +
      • ' + lan.security.system.config_tips4 + '
      • \ +
      \ +
      ', + success:function (){ + that.reinforceSystemFind(row.key); + } + }) + }, + + + /** + * @description 渲染指定系统加固配置列表信息 + * @param {String} s_key 系统加固配置key + */ + reinforceSystemFind: function (s_key) { + var _that = this; + var chattrs = { "a": lan.security.system.append, "i": lan.security.system.read } + return bt_tools.table({ + el: '#ReinforceSystemTable', + url: '/plugin?name=syssafe&action=a&s=get_safe_config', + default: lan.security.system.config_defualt, // 数据为空时的默认提示 + height: 350, + beforeRequest: function (data) { + return $.extend(data, { s_key: s_key }); + }, + dataFilter: function (data) { + return { data: data.paths }; + }, + column: [ + {title: lan.security.system.path, fid:'path'}, + {title: lan.security.system.model, fid:'chattr', template: function (row) { + return ''+ chattrs[row.chattr] +''; + }}, + {title: lan.security.system.permissions, fid:'ps', template: function (row) { + return ''+ (row.s_mode === row.d_mode?row.s_mode:(row.s_mode + ' >> ' + row.d_mode)) +''; + }}, + {title: lan.security.system.status, fid:'state', template: function (row) { + return ''+ (row.state?lan.security.system.protected:lan.security.system.unprotected) +''; + }}, + { + title: lan.public.operate, + type: 'group', + width: 150, + align: 'right', + group: [{ + title: lan.public.del, + event: function (row, index, ev, id, that) { + bt_tools.send({ + url: '/plugin?name=syssafe&action=a&s=remove_safe_path', + data: { s_key: s_key, path: row.path } + }, function (rdata) { + bt_tools.msg(rdata); + that.$refresh_table_list(); + }, lan.security.system.del_config_req); + } + }] + } + ], + tootls:[{ // 按钮组 + type: 'group', + list: [{ + title: lan.security.system.add_config_btn, + active: true, + event: function (ev, that) { + _that.reinforceAddProtectFile(s_key, that); + } + }] + }] + }) + }, + + /** + * @description 渲染添加保护文件/目录 + * @param {String} s_key 系统加固配置key + */ + reinforceAddProtectFile: function (s_key, table) { + bt_tools.open({ + title: lan.security.system.add_config_btn, + area: '480px', + btn: [lan.public.confirm, lan.public.cancel], + skin:'addProtectFile', + content: { + class: 'pd20', + form: [ + { + label: lan.security.system.path, + group:{ + type: 'text', + name: 'path', + width: '250px', + icon: { type: 'glyphicon-folder-open', event: function (ev) { }, select: 'dir' }, + placeholder: lan.security.system.path_input, + } + }, + { + label: lan.security.system.model, + group:{ + type: 'select', + name: 'chattr', + width: '250px', + list: [ + { title: lan.security.system.read, value: 'i' }, + { title: lan.security.system.append, value: 'a' }, + ] + } + }, + { + label: lan.security.system.permissions, + group: { + type: 'text', + name: 'd_mode', + width: '250px', + placeholder: lan.security.system.permissions_input, + } + } + ] + }, + yes: function (form, indexs) { + if (form.path === '') return layer.msg(lan.security.system.path_val1, { icon: 2 }); + if (form.chattr === '') return layer.msg(lan.security.system.model_val1, { icon: 2 }); + if (form.d_mode === '') return layer.msg(lan.security.system.permissions_input, { icon: 2 }); + form.s_key = s_key; + bt_tools.send({ + url: '/plugin?name=syssafe&action=a&s=add_safe_path', + data: form + }, function (rdata) { + bt_tools.msg(rdata); + layer.close(indexs); + table.$refresh_table_list(); + }, lan.security.system.add_config_req); + } + }) + }, + + /** + * @description 渲染配置SSH加固策略 + * @param {object} row 表格单行数据 + */ + renderReinforceSSHView: function (row) { + bt_tools.open({ + title: lan.security.system.config + ' [' + row.name + ']', + area: ['700px'], + btn:false, + content:'
      \ +
      \ + ' + lan.security.system.ssh_view1 + '\ + ' + lan.security.system.ssh_view2 + '\ + ' + lan.security.system.ssh_view3 + '\ + ' + lan.security.system.ssh_view4 + '\ + \ +
      \ +
        \ +
      • ' + lan.security.system.config_tips5 + '
      • \ +
      • ' + lan.security.system.config_tips6 + '
      • \ +
      • ' + lan.security.system.config_tips7 + '
      • \ +
      \ +
      ', + success: function () { + bt_tools.send({ + url: '/plugin?name=syssafe&action=a&s=get_ssh_config', + }, function (rdata) { + $('input[name="s_cycle"]').val(rdata.cycle); + $('input[name="s_limit"]').val(rdata.limit); + $('input[name="s_limit_count"]').val(rdata.limit_count); + }); + + // 保存配置 + $('#saveSshConfig').click(function () { + var data = { + cycle: $("input[name='s_cycle']").val(), + limit: $("input[name='s_limit']").val(), + limit_count: $("input[name='s_limit_count']").val() + } + if (data.cycle === '') return layer.msg(lan.security.system.ssh_view5, { icon: 2 }); + if (data.limit === '') return layer.msg(lan.security.system.ssh_view6, { icon: 2 }); + if (data.limit_count === '') return layer.msg(lan.security.system.ssh_view7, { icon: 2 }); + + bt_tools.send({ + url: '/plugin?name=syssafe&action=a&s=save_ssh_config', + data: data + }, function (rdata) { + bt_tools.msg(rdata); + }, lan.security.system.ssh_view8); + }) + } + }) + }, + + /** + * @description 渲染异常进程监控配置 + * @param {object} row 表格单行数据 + */ + renderReinforceAbnormalProcess: function (row) { + var that = this; + bt_tools.open({ + title: lan.security.system.config + ' [' + row.name + ']', + area: ['700px', '600px'], + btn:false, + content:'
      \ +
      \ +
        \ +
      • ' + lan.security.system.config_tips8 + '
      • \ +
      • ' + lan.security.system.config_tips9 + '
      • \ +
      \ +
      ', + success: function () { + bt_tools.table({ + el: '#AbnormalProcessTable', + url: '/plugin?name=syssafe&action=a&s=get_process_white', + height: 343, + dataFilter: function (rdata) { + var data = [] + $.each(rdata, function (index, item) { + data.push({ name: item }) + }) + return { data: data } + }, + column: [ + { + title: lan.security.system.process_name, + fid: 'name' + }, + { + title: lan.public.operate, + type: 'group', + width: 150, + align: 'right', + group: [{ + title: lan.public.del, + event: function (row, index, ev, id, that) { + bt_tools.send({ + url: '/plugin?name=syssafe&action=a&s=remove_process_white', + data: { process_name: row.name } + }, function (rdata) { + bt_tools.msg(rdata); + that.$refresh_table_list(); + }, lan.security.system.del_process_req); + } + }] + } + ], + tootls:[{ // 按钮组 + type: 'group', + list: [{ + title: lan.security.system.add_process_btn, + active: true, + event: function (ev, that) { + bt_tools.open({ + title: lan.security.system.add_process_btn, + area: '450px', + btn: [lan.public.save, lan.public.cancel], + skin:'addProtectFile', + content: { + class: 'pd20', + form: [ + { + label: lan.security.system.process_name, + group:{ + type: 'text', + name: 'process_name', + width: '250px', + placeholder: lan.security.system.process_name_input, + } + } + ] + }, + yes: function (form, indexs) { + if (form.process_name === '') return layer.msg(lan.security.system.process_name_input, { icon: 2 }); + bt_tools.send({ + url: '/plugin?name=syssafe&action=a&s=add_process_white', + data: form + }, function (rdata) { + bt_tools.msg(rdata); + layer.close(indexs); + that.$refresh_table_list(); + }, lan.security.system.add_config_req) + } + }) + } + }] + }] + }) + } + }) + }, + + /** + * @description 封锁IP + */ + reinforceBlockIp: function () { + var _that = this; + var table = bt_tools.table({ + el: '#reinforceBlockIp', + url: '/plugin?name=syssafe&action=a&s=get_ssh_limit_info', + default: lan.security.system.ip_list_default, // 数据为空时的默认提示 + autoHeight: true, + dataFilter: function (data) { + return {data:data}; + }, + column: [ + {title: lan.security.system.ip, fid: 'address'}, + {title: lan.security.system.unblock_time, fid:'end', width: 300, template:function (row){ + return ''+ (row.end ? bt.format_data(row.end) : lan.security.system.manually_unblock) + ''; + }}, + { + title: lan.public.operate, + type: 'group', + width: 150, + align: 'right', + group: [{ + title: lan.security.system.unblock_now, + event: function (row, index) { + bt_tools.send({ + url: '/plugin?name=syssafe&action=a&s=remove_ssh_limit', + data: { ip: row.address } + }, function (rdata) { + bt_tools.msg(rdata); + _that.getBlockIp(); + }, lan.security.system.unblock_now_req); + } + }] + } + ] + }); + this.ipTable = table + return table + }, + + /** + * @description 表格重新生成封锁IP + */ + getBlockIp: function () { + if (this.ipTable) this.ipTable.$refresh_table_list() + }, + + /** + * @description 操作日志 + */ + reinforceLog:function (){ + var _that = this; + $('#reinforceLog').empty() + return bt_tools.table({ + el: '#reinforceLog', + url: '/data?action=getData', + default: lan.security.system.operate_logs_default, // 数据为空时的默认提示 + autoHeight: true, + beforeRequest: function (param) { + return $.extend(param,{ search: 'System hardening', table:'logs', order:'id desc'}); + }, + tootls: [ + { //分页显示 + type: 'page', + numberStatus: true, // 是否支持分页数量选择,默认禁用 + jump: true, //是否支持跳转分页,默认禁用 + } + ], + column: [ + { title: lan.security.system.date, fid: 'addtime' }, + { title: lan.security.system.detail, fid: 'log' }, + ], + }) + } +} + +// 日志审计 +var logAudit = { + data:{}, + init: function () { + this.getLogFiles(); + $('#logAudit .logAuditTab').empty(); + $('#logAudit').height($(window).height() - 180) + }, + /** + * @description SSH管理列表 + */ + event:function (){ + var that = this; + + $(window).unbind('resize').on('resize', function () { + if ($('.logAuditTabContent').is(':hidden')) return; + var height = $(window).height() - 180; + $('#logAudit').height(height); + $('#logAuditTable .divtable').css('max-height', height - 150); + }); + + $('.logAuditTab').unbind('click').on('click', '.logAuditItem',function (){ + var data = $(this).data(), list = []; + $.each(data.list, function (key, val){ + list.push(val.log_file) + }); + $(this).addClass('active').siblings().removeClass('active'); + that.getSysLogs({log_name: data.log_file, list: list, p:1}); + }); + + $('#logAuditPages').unbind('click').on('click', 'a', function (){ + var page = $(this).data('page'); + that.getSysLogs({log_name: that.data.log_name, list: that.data.list, p: page}); + return false; + }); + }, + + /** + * @description 获取日志审计类型 + */ + getLogFiles: function () { + var that = this; + bt_tools.send({ + url: '/safe/syslog/get_sys_logfiles' + }, function (rdata) { + if(rdata.hasOwnProperty('status') ){ + if(!rdata.status && rdata.msg === 'Sorry, this feature is only available for Pro users!') { + $('.logAuditTabContent').hide(); + $('#logAudit .daily-thumbnail').show(); + $('#logAudit').css('height', 'auto'); + return false; + } + } + var initData = rdata[0], list = [] + $.each(rdata, function (i, v) { + var logSize = 0; + $.each(v.list,function (key, val){ + logSize += val.size; + }) + $('#logAudit .logAuditTab').append($('
      ' + v.name + ' - '+ v.title +'('+ ToSize(v.size + logSize) +')
      ').data(v)) + }) + $('#logAudit .logAuditTab .logAuditItem:eq(0)').trigger('click') + }, { load: lan.security.logs.get_logfiles, verify: false }) + }, + + /** + * @description 获取日志审计类型列表 + */ + getSysLogs: function (param) { + var that = this; + var page = param.p || 1; + that.data = { log_name: param.log_name, list: param.list, limit: 20, p: page } + bt_tools.send({ + url: '/safe/syslog/get_sys_log', + data: {data:JSON.stringify(that.data)} + }, function (rdata) { + if(typeof rdata[0] === 'string'){ + $('#logAuditPre').show().siblings().hide() + that.renderLogsAuditCommand(rdata) + }else{ + $('#logAuditTable,#logAuditPages').show() + $('#logAuditPre').hide() + that.renderLogsAuditTable({ p:page }, rdata) + } + }, { + load: lan.security.logs.get_sys_logs, + verify: false + }) + }, + + /** + * @description 渲染日志审计命令 + * @param {Object} rdata 参数 + */ + renderLogsAuditCommand: function (rdata) { + var logAuditLogs = $('#logAuditPre'); + var str = rdata.join('\r').replace(//g,'>').replace(/"/g,'"'); + logAuditLogs.html('
      ' + str + '
      '); + logAuditLogs.find('pre').scrollTop(9999999999999).css({height: $(window).height() - 180}) + }, + + /** + * @description 渲染日志审计表格 + * @param {object} param 参数 + */ + renderLogsAuditTable: function (param, rdata){ + var that = this; + var column = [], data = rdata[0] ? rdata[0] : { 'Time': '--', 'Role': '--', 'Even': '--' }, i = 0; + $.each(data, function (key) { + // console.log(key === '时间',i) + column.push({ title: key, fid: key,width: (key === 'Time' && i === 0) ? '200px' : (key === 'Time'?'300px':'') }) + i++; + }) + $('#logAuditTable').empty() + return bt_tools.table({ + el: '#logAuditTable', + url:'/safe/syslog/get_sys_log', + default: lan.security.logs.logs_default, // 数据为空时的默认提示 + column: column, + dataFilter: function (data) { + if(typeof data.status === "boolean" && !data.status){ + $('.logAuditTabContent').hide().next().show(); + return { data: [] } + } + if(typeof data[0] === 'string'){ + $('#logAuditPre').show().siblings().hide() + that.renderLogsAuditCommand(rdata) + }else{ + $('#logAuditTable,#logAuditPages').show() + $('#logAuditPre').hide() + return {data:data} + } + }, + beforeRequest: function (param) { + delete param.data + return {data:JSON.stringify($.extend(that.data,param))} + }, + tootls: [{ // 按钮组 + type: 'group', + list: [{ + title: lan.security.logs.refresh, + active: true, + event: function (ev) { + that.getSysLogs(that.data) + } + }] + },{ // 搜索内容 + type: 'search', + width: '300px', + placeholder: lan.security.logs.search, + searchParam: 'search', //搜索请求字段,默认为 search + },{ + type:'page', + number:20 + }], + success:function (config){ + $('#logAuditTable .divtable').css('max-height', $(window).height() - 280) + } + }) + } +} + +// 面板日志 +var logs = { + init: function () { + $('#logsBody .tab-nav-border span').eq(0).trigger('click'); + }, + /** + * @description 事件绑定 + */ + event:function (){ + var that = this; + $('#logsBody').unbind('click').on('click','.tab-nav-border span',function(){ + var index = $(this).index(); + that.cutLogsTab(index); + }); + $(window).unbind('resize').resize(function (){ + $('#runningLog .crontab-log').height((window.innerHeight - 310) +'px') + }); + }, + + /** + * @description 切换日志菜单 + * @param {number} index 索引 + */ + cutLogsTab:function(index){ + switch (index) { + case 0: + this.operationLogTable() + break; + case 1: + this.runningLog() + break; + } + }, + + /** + * @description 日志表格 + */ + operationLogTable:function(){ + var that = this; + return bt_tools.table({ + el: '#operationLog', + url: '/data?action=getData', + default: lan.security.logs.operate_default, // 数据为空时的默认提示 + autoHeight: true, + beforeRequest: function (data) { + return $.extend(data, {table: 'logs',order: 'id desc'}) + }, + tootls: [ + { // 按钮组 + type: 'group', + list: [{ + title: lan.security.logs.refresh, + active:true, + event: function (ev, _that) { + _that.$refresh_table_list(true) + } + },{ + title: lan.security.logs.clear, + event: function (ev) { + bt.firewall.clear_logs(function(){ + that.operationLogTable() + }); + } + }] + }, + { // 搜索内容 + type: 'search', + placeholder: lan.security.logs.operate_search, + searchParam: 'search', //搜索请求字段,默认为 search + }, + { //分页显示 + type: 'page', + numberStatus: true, // 是否支持分页数量选择,默认禁用 + jump: true, //是否支持跳转分页,默认禁用 + }], + column: [ + {title: lan.security.logs.user, fid: 'username', width: 80}, + {title: lan.security.logs.type, fid: 'type', width: 150}, + {title: lan.security.logs.details,fid: 'log'}, + {title: lan.security.logs.time, fid: 'addtime', width:150} + ] + }) + }, + + /** + * @description 运行日志 + */ + runningLog:function (){ + var that = this; + bt_tools.send({ + url:'/config?action=get_panel_error_logs' + },function (rdata){ + $('#runningLog').html('
      \ + \ + \ +
      '+ (rdata.msg || lan.security.logs.no_logs) +'
      \ +
      '); + $('.refreshRunLogs').click(function (){ + that.runningLog(); + }) + $('.clearRunningLog').click(function (){ + that.clearRunningLog(); + }) + + $('#runningLog .crontab-log').height((window.innerHeight - 310) +'px') + var div = document.getElementsByClassName('crontab-log')[0] + div.scrollTop = div.scrollHeight; + }, lan.security.logs.get_logs_req); + }, + + /** + * @description 清除日志 + */ + clearRunningLog:function (){ + var that = this; + bt.confirm({ + title: lan.security.logs.clear_logs_title, + msg: lan.security.logs.clear_logs_msg, + },function (){ + bt_tools.send({ + url:'/config?action=clean_panel_error_logs' + },function (rdata){ + bt.msg(rdata) + that.runningLog() + }, lan.security.logs.clear_logs_req) + }) + } +} + +firewall.init(); diff --git a/BTPanel/static/js/index.js b/BTPanel/static/js/index.js index 7d369a1e..ead79c48 100644 --- a/BTPanel/static/js/index.js +++ b/BTPanel/static/js/index.js @@ -1,952 +1,2109 @@ // bt.pub.check_install(function (rdata) { // if (rdata === false) bt.index.rec_install(); // }) -$("select[name='network-io']").change(function(){ - var net_key = $(this).val(); - if(net_key == 'all') net_key = ''; - bt.set_cookie('network_io_key',net_key); +$("select[name='network-io']").change(function () { + var net_key = $(this).val(); + if (net_key == 'all') net_key = ''; + bt.set_cookie('network_io_key', net_key); }); -$("select[name='network-io'],select[name='disk-io']").change(function(){ - var key = $(this).val(),type = $(this).attr('name') - if(type == 'network-io'){ - if(key == 'all') key = ''; - bt.set_cookie('network_io_key',key); - }else{ - bt.set_cookie('disk_io_key',key); - } +$("select[name='network-io'],select[name='disk-io']").change(function () { + var key = $(this).val(), + type = $(this).attr('name'); + if (type == 'network-io') { + if (key == 'all') key = ''; + bt.set_cookie('network_io_key', key); + } else { + bt.set_cookie('disk_io_key', key); + } }); $('.tabs-nav span').click(function () { - var indexs = $(this).index(); - $(this).addClass('active').siblings().removeClass('active') - $('.tabs-content .tabs-item:eq('+ indexs +')').addClass('tabs-active').siblings().removeClass('tabs-active') - $('.tabs-down select:eq('+ indexs +')').removeClass('hide').siblings().addClass('hide') - switch(indexs){ - case 0: - index.net.table.resize(); - break; - case 1: - index.iostat.table.resize(); - break; - } -}) + var indexs = $(this).index(); + $(this).addClass('active').siblings().removeClass('active'); + $('.tabs-content .tabs-item:eq(' + indexs + ')') + .addClass('tabs-active') + .siblings() + .removeClass('tabs-active'); + $('.tabs-down select:eq(' + indexs + ')') + .removeClass('hide') + .siblings() + .addClass('hide'); + switch (indexs) { + case 0: + index.net.table.resize(); + break; + case 1: + index.iostat.table.resize(); + break; + } +}); var interval_stop = false; var index = { - warning_list:[], - warning_num:0, - warning_list:[], - warning_num:0, - series_option:{},// 配置项 - chart_json:{}, // 所有图表echarts对象 - chart_view:{}, // 磁盘echarts对象 - disk_view:[], // 释放内存标记 - chart_result:null, - release:false, - load_config:[{ - title: lan.index.run_block, - val: 90, - color: '#dd2f00' - },{ - title: lan.index.run_slow, - val: 80, - color: '#ff9900' - },{ - title: lan.index.run_normal, - val: 70, - color: '#20a53a' - },{ - title: lan.index.run_fluent, - val: 30, - color: '#20a53a' - }], - interval: { - limit: 10, - count: 0, - task_id: 0, - start: function () { - var _this = this; - _this.count = 0; - _this.task_id = setInterval(function () { - if (_this.count >= _this.limit) { - _this.reload(); - return; - } - _this.count++; - if (!interval_stop) index.reander_system_info(); - }, 3000) - }, - reload: function () { - var _this = this; - if (_this) clearInterval(_this.task_id); - _this.start(); - } - }, - net: { - table: null, - data: { - uData: [], - dData: [], - aData: [] - }, - init: function () { - //流量图表 - index.net.table = echarts.init(document.getElementById('NetImg')); - var obj = {}; - obj.dataZoom = []; - obj.unit = lan.index.unit + ':KB/s'; - obj.tData = index.net.data.aData; + warning_list: [], + warning_num: 0, + warning_list: [], + warning_num: 0, + series_option: {}, // 配置项 + chart_json: {}, // 所有图表echarts对象 + chart_view: {}, // 磁盘echarts对象 + disk_view: [], // 释放内存标记 + chart_result: null, + release: false, + load_config: [ + { + title: lan.index.run_block, + val: 90, + color: '#dd2f00', + }, + { + title: lan.index.run_slow, + val: 80, + color: '#ff9900', + }, + { + title: lan.index.run_normal, + val: 70, + color: '#20a53a', + }, + { + title: lan.index.run_fluent, + val: 30, + color: '#20a53a', + }, + ], + interval: { + limit: 10, + count: 0, + task_id: 0, + start: function () { + var _this = this; + _this.count = 0; + _this.task_id = setInterval(function () { + if (_this.count >= _this.limit) { + _this.reload(); + return; + } + _this.count++; + if (!interval_stop) index.reander_system_info(); + }, 3000); + }, + reload: function () { + var _this = this; + if (_this) clearInterval(_this.task_id); + _this.start(); + }, + }, + net: { + table: null, + data: { + uData: [], + dData: [], + aData: [], + }, + init: function () { + //流量图表 + index.net.table = echarts.init(document.getElementById('NetImg')); + var obj = {}; + obj.dataZoom = []; + obj.unit = lan.index.unit + ':KB/s'; + obj.tData = index.net.data.aData; - obj.list = []; - obj.list.push({ name: lan.index.net_up, data: index.net.data.uData, circle: 'circle', itemStyle: { normal: { color: '#f7b851' } }, areaStyle: { normal: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: 'rgba(255, 140, 0,1)' }, { offset: 1, color: 'rgba(255, 140, 0,.4)' }], false) } }, lineStyle: { normal: { width: 1, color: '#f7b851' } } }); - obj.list.push({ name: lan.index.net_down, data: index.net.data.dData, circle: 'circle', itemStyle: { normal: { color: '#52a9ff' } }, areaStyle: { normal: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: 'rgba(30, 144, 255,1)' }, { offset: 1, color: 'rgba(30, 144, 255,.4)' }], false) } }, lineStyle: { normal: { width: 1, color: '#52a9ff' } } }); - option = bt.control.format_option(obj) + obj.list = []; + obj.list.push({ + name: lan.index.net_up, + data: index.net.data.uData, + circle: 'circle', + itemStyle: { normal: { color: '#f7b851' } }, + areaStyle: { + normal: { + color: new echarts.graphic.LinearGradient( + 0, + 0, + 0, + 1, + [ + { offset: 0, color: 'rgba(255, 140, 0,1)' }, + { offset: 1, color: 'rgba(255, 140, 0,.4)' }, + ], + false + ), + }, + }, + lineStyle: { normal: { width: 1, color: '#f7b851' } }, + }); + obj.list.push({ + name: lan.index.net_down, + data: index.net.data.dData, + circle: 'circle', + itemStyle: { normal: { color: '#52a9ff' } }, + areaStyle: { + normal: { + color: new echarts.graphic.LinearGradient( + 0, + 0, + 0, + 1, + [ + { offset: 0, color: 'rgba(30, 144, 255,1)' }, + { offset: 1, color: 'rgba(30, 144, 255,.4)' }, + ], + false + ), + }, + }, + lineStyle: { normal: { width: 1, color: '#52a9ff' } }, + }); + option = bt.control.format_option(obj); - index.net.table.setOption(option); - window.addEventListener("resize", function () { - index.net.table.resize(); - }); - }, - add: function (up, down) { - var _net = this; - var limit = 8; - var d = new Date() + index.net.table.setOption(option); + window.addEventListener('resize', function () { + index.net.table.resize(); + }); + }, + add: function (up, down) { + var _net = this; + var limit = 8; + var d = new Date(); - if (_net.data.uData.length >= limit) _net.data.uData.splice(0, 1); - if (_net.data.dData.length >= limit) _net.data.dData.splice(0, 1); - if (_net.data.aData.length >= limit) _net.data.aData.splice(0, 1); + if (_net.data.uData.length >= limit) _net.data.uData.splice(0, 1); + if (_net.data.dData.length >= limit) _net.data.dData.splice(0, 1); + if (_net.data.aData.length >= limit) _net.data.aData.splice(0, 1); - _net.data.uData.push(up); - _net.data.dData.push(down); - _net.data.aData.push(d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds()); - } - }, - iostat: { - table: null, - data: { - uData: [], - dData: [], - aData: [], - tipsData:[] - }, - init: function () { - //流量图表 - index.iostat.table = echarts.init(document.getElementById('IoStat')); - var obj = {}; - obj.dataZoom = []; - obj.unit = lan.index.unit + ':MB/s'; - obj.tData = index.iostat.data.aData; - obj.formatter = function(config){ - var _config = config,_tips = "Time:"+ _config[0].axisValue +"
      ",options = { - read_bytes: 'Read Bytes', - read_count: 'Read Count ', - read_merged_count: 'Read Merged Count', - read_time: 'Read Wait', - write_bytes: 'Write Bytes', - write_count: 'Write Count', - write_merged_count: 'Write Merged Count', - write_time: 'Write Wait', - },data = index.iostat.data.tipsData[config[0].dataIndex],list = ['read_count','write_count','read_merged_count','write_merged_count','read_time','write_time',] - for(var i=0;i < config.length;i++){ - if(typeof config[i].data == "undefined") return false - _tips += '  '+ config[i].seriesName +':'+ (parseFloat(config[i].data)).toFixed(2) + ' MB/s' + '
      ' - } - $.each(list,function(index,item){ - _tips += '  '+ options[item] +':' + data[item] + (item.indexOf('time') > -1 ?' ms':' per sec') + '
      ' - }) - return _tips; - } - obj.list = []; - obj.list.push({ name: 'Read Bytes', data: index.iostat.data.uData, circle: 'circle', itemStyle: { normal: { color: '#FF4683' } }, areaStyle: { normal: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: 'rgba(255,70,131,1)' }, { offset: 1, color: 'rgba(255,70,131,.4' }], false) } }, lineStyle: { normal: { width: 1, color: '#FF4683' } } }); - obj.list.push({ name: 'Write Bytes', data: index.iostat.data.dData, circle: 'circle', itemStyle: { normal: { color: '#6CC0CF' } }, areaStyle: { normal: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: 'rgba(108,192,207,1)' }, { offset: 1, color: 'rgba(108,192,207,.4)' }], false) } }, lineStyle: { normal: { width: 1, color: '#6CC0CF' } } }); - option = bt.control.format_option(obj) - index.iostat.table.setOption(option); - window.addEventListener("resize", function () { - index.iostat.table.resize(); - }); - }, - add: function (read, write,data) { - var _disk = this; - var limit = 8; - var d = new Date() - if (_disk.data.uData.length >= limit) _disk.data.uData.splice(0, 1); - if (_disk.data.dData.length >= limit) _disk.data.dData.splice(0, 1); - if (_disk.data.aData.length >= limit) _disk.data.aData.splice(0, 1); - if (_disk.data.tipsData.length >= limit) _disk.data.tipsData.splice(0, 1); - _disk.data.uData.push(read); - _disk.data.dData.push(write); - _disk.data.tipsData.push(data); - _disk.data.aData.push(d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds()); - } - }, - mem: { - status: 1, - set_status: function (obj, status, val) { - var _this = this; - _this.status = status; - var _div = $('
      1
      ') - if (status == 2) { - obj.find(".mem-re-con").animate({ "top": "-400px", opacity: 0 }); //动画 - var btlen = parseInt(obj.find('.occupy span').html()); - for (var i = 0; i < btlen; i++) { - setTimeout(index.set_val(obj.parents('li'), { usage: btlen - i }), i * 30); - }; - obj.addClass("mem-action"); - obj.find('.occupy').html(_div.append(lan.index.memre_ok_0 + ' ').html()); - } - else if (status == 1) { //完成 - obj.removeClass('mem-action'); - obj.find('.occupy').removeClass('line').html("" + val + "%"); - } - else { - obj.find('.occupy').html(_div.append(status).html()); - if (bt.contains(status, '
      ')) obj.find('.occupy').addClass('line') - } - } - }, - get_init: function () { - var _this = this; - // setTimeout(function () { _this.get_disk_list(); }, 10); - setTimeout(function () { _this.get_warning_list(); }, 20); - // setTimeout(function () { _this.get_server_info(); }, 30); - _this.reander_system_info(function(rdata){ - // 负载悬浮事件 - $('#loadChart').hover(function () { - var arry = [ - [lan.index.avg_load_atlast_onemin,rdata.load.one], - [lan.index.avg_load_atlast_fivemin,rdata.load.five], - [lan.index.avg_load_atlast_fifteenmin,rdata.load.fifteen] - ],tips = ''; - $.each(arry || [],function (index,item){ - tips += item[0]+':'+ item[1] +'
      '; - }) - $.each(rdata.cpu_times || {},function (key,item){ - tips += key +':'+ item +'
      '; - }) - // '最近1分钟平均负载:' + rdata.load.one + '
      最近5分钟平均负载:' + rdata.load.five + '
      最近15分钟平均负载:' + rdata.load.fifteen + '' - layer.tips(tips, this, { time: 0, tips: [1, '#999'] }); - }, function(){ - layer.closeAll('tips'); - }) + _net.data.uData.push(up); + _net.data.dData.push(down); + _net.data.aData.push(d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds()); + }, + }, + iostat: { + table: null, + data: { + uData: [], + dData: [], + aData: [], + tipsData: [], + }, + init: function () { + //流量图表 + index.iostat.table = echarts.init(document.getElementById('IoStat')); + var obj = {}; + obj.dataZoom = []; + obj.unit = lan.index.unit + ':MB/s'; + obj.tData = index.iostat.data.aData; + obj.formatter = function (config) { + var _config = config, + _tips = 'Time:' + _config[0].axisValue + '
      ', + options = { + read_bytes: 'Read Bytes', + read_count: 'Read Count ', + read_merged_count: 'Read Merged Count', + read_time: 'Read Wait', + write_bytes: 'Write Bytes', + write_count: 'Write Count', + write_merged_count: 'Write Merged Count', + write_time: 'Write Wait', + }, + data = index.iostat.data.tipsData[config[0].dataIndex], + list = ['read_count', 'write_count', 'read_merged_count', 'write_merged_count', 'read_time', 'write_time']; + for (var i = 0; i < config.length; i++) { + if (typeof config[i].data == 'undefined') return false; + _tips += + '  ' + + config[i].seriesName + + ':' + + parseFloat(config[i].data).toFixed(2) + + ' MB/s' + + '
      '; + } + $.each(list, function (index, item) { + _tips += + '  ' + + options[item] + + ':' + + data[item] + + (item.indexOf('time') > -1 ? ' ms' : ' per sec') + + '
      '; + }); + return _tips; + }; + obj.list = []; + obj.list.push({ + name: 'Read Bytes', + data: index.iostat.data.uData, + circle: 'circle', + itemStyle: { normal: { color: '#FF4683' } }, + areaStyle: { + normal: { + color: new echarts.graphic.LinearGradient( + 0, + 0, + 0, + 1, + [ + { offset: 0, color: 'rgba(255,70,131,1)' }, + { offset: 1, color: 'rgba(255,70,131,.4' }, + ], + false + ), + }, + }, + lineStyle: { normal: { width: 1, color: '#FF4683' } }, + }); + obj.list.push({ + name: 'Write Bytes', + data: index.iostat.data.dData, + circle: 'circle', + itemStyle: { normal: { color: '#6CC0CF' } }, + areaStyle: { + normal: { + color: new echarts.graphic.LinearGradient( + 0, + 0, + 0, + 1, + [ + { offset: 0, color: 'rgba(108,192,207,1)' }, + { offset: 1, color: 'rgba(108,192,207,.4)' }, + ], + false + ), + }, + }, + lineStyle: { normal: { width: 1, color: '#6CC0CF' } }, + }); + option = bt.control.format_option(obj); + index.iostat.table.setOption(option); + window.addEventListener('resize', function () { + index.iostat.table.resize(); + }); + }, + add: function (read, write, data) { + var _disk = this; + var limit = 8; + var d = new Date(); + if (_disk.data.uData.length >= limit) _disk.data.uData.splice(0, 1); + if (_disk.data.dData.length >= limit) _disk.data.dData.splice(0, 1); + if (_disk.data.aData.length >= limit) _disk.data.aData.splice(0, 1); + if (_disk.data.tipsData.length >= limit) _disk.data.tipsData.splice(0, 1); + _disk.data.uData.push(read); + _disk.data.dData.push(write); + _disk.data.tipsData.push(data); + _disk.data.aData.push(d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds()); + }, + }, + mem: { + status: 1, + set_status: function (obj, status, val) { + var _this = this; + _this.status = status; + var _div = $('
      1
      '); + if (status == 2) { + obj.find('.mem-re-con').animate({ top: '-400px', opacity: 0 }); //动画 + var btlen = parseInt(obj.find('.occupy span').html()); + for (var i = 0; i < btlen; i++) { + setTimeout(index.set_val(obj.parents('li'), { usage: btlen - i }), i * 30); + } + obj.addClass('mem-action'); + obj.find('.occupy').html(_div.append(lan.index.memre_ok_0 + ' ').html()); + } else if (status == 1) { + //完成 + obj.removeClass('mem-action'); + obj + .find('.occupy') + .removeClass('line') + .html('' + val + '%'); + } else { + obj.find('.occupy').html(_div.append(status).html()); + if (bt.contains(status, '
      ')) obj.find('.occupy').addClass('line'); + } + }, + }, + get_init: function () { + var _this = this; + // setTimeout(function () { _this.get_disk_list(); }, 10); + setTimeout(function () { + _this.get_warning_list(); + }, 20); + // setTimeout(function () { _this.get_server_info(); }, 30); + _this.reander_system_info(function (rdata) { + // 负载悬浮事件 + $('#loadChart').hover( + function () { + var arry = [ + [lan.index.avg_load_atlast_onemin, rdata.load.one], + [lan.index.avg_load_atlast_fivemin, rdata.load.five], + [lan.index.avg_load_atlast_fifteenmin, rdata.load.fifteen], + ], + tips = ''; + $.each(arry || [], function (index, item) { + tips += item[0] + ':' + item[1] + '
      '; + }); + $.each(rdata.cpu_times || {}, function (key, item) { + tips += key + ':' + item + '
      '; + }); + // '最近1分钟平均负载:' + rdata.load.one + '
      最近5分钟平均负载:' + rdata.load.five + '
      最近15分钟平均负载:' + rdata.load.fifteen + '' + layer.tips(tips, this, { time: 0, tips: [1, '#999'] }); + }, + function () { + layer.closeAll('tips'); + } + ); - // cpu悬浮事件 - $('#cpuChart').hover(function () { - var cpuText = ''; - for (var i = 1; i < rdata.cpu[2].length + 1; i++) { - var cpuUse = parseFloat(rdata.cpu[2][i - 1] == 0 ? 0 : rdata.cpu[2][i - 1]).toFixed(1) - if (i % 2 != 0) { - cpuText += 'CPU-' + i + ':' + cpuUse + '% | ' - } else { - cpuText += 'CPU-' + i + ':' + cpuUse + '%' - cpuText += `\n` - } - } + // cpu悬浮事件 + $('#cpuChart').hover( + function () { + var cpuText = ''; + for (var i = 1; i < rdata.cpu[2].length + 1; i++) { + var cpuUse = parseFloat(rdata.cpu[2][i - 1] == 0 ? 0 : rdata.cpu[2][i - 1]).toFixed(1); + if (i % 2 != 0) { + cpuText += 'CPU-' + i + ':' + cpuUse + '% | '; + } else { + cpuText += 'CPU-' + i + ':' + cpuUse + '%'; + cpuText += `\n`; + } + } - layer.tips(rdata.cpu[3] + "
      " + rdata.cpu[5] + " CPU," + (rdata.cpu[4]) + " Physical core, " + rdata.cpu[1]+" Logical core
      "+ cpuText, this, { time: 0, tips: [1, '#999'] }); - }, function(){ - layer.closeAll('tips'); - }) + layer.tips(rdata.cpu[3] + '
      ' + rdata.cpu[5] + ' CPU,' + rdata.cpu[4] + ' Physical core, ' + rdata.cpu[1] + ' Logical core
      ' + cpuText, this, { time: 0, tips: [1, '#999'] }); + }, + function () { + layer.closeAll('tips'); + } + ); - $('#memChart').hover(function(){ - $(this).append('
      '); - $(this).find('.mem_mask .mem-re-con').animate({top:'5px'},400); - $(this).next().hide(); - },function(){ - $(this).find('.mem_mask').remove() - $(this).next().show(); - }).click(function(){ - var that = $(this); - var data = _this.chart_result.mem; - bt.show_confirm(lan.index.mem_release_sure, ''+lan.index.mem_release_warn+'', function () { - _this.release = true - var option = JSON.parse(JSON.stringify(_this.series_option)); - // 释放中... - var count = '' - var setInter = setInterval(function(){ - if(count == '...'){ - count = '.' - }else{ - count += '.' - } - option.series[0].detail.formatter = lan.index.memre_ok_0 + count - option.series[0].detail.fontSize = 15 - option.series[0].data[0].value = 0 - _this.chart_view.mem.setOption(option, true) - that.next().hide() - },400) - // 释放接口请求 - bt.system.re_memory(function (res) { - that.next().show() - clearInterval(setInter) - option.series[0].detail = $.extend(option.series[0].detail,{ - formatter:lan.index.memre_ok_1+"\n"+ bt.format_size(data.memRealUsed - res.memRealUsed), - lineHeight:18, - padding:[5,0] - }) - _this.chart_view.mem.setOption(option,true) - setTimeout(function() { - _this.release = false; - _this.chart_result.mem = res; - _this.chart_active('mem'); - }, 2000); - }) - }) - }) + $('#memChart') + .hover( + function () { + $(this).append('
      '); + $(this).find('.mem_mask .mem-re-con').animate({ top: '5px' }, 400); + $(this).next().hide(); + }, + function () { + $(this).find('.mem_mask').remove(); + $(this).next().show(); + } + ) + .click(function () { + var that = $(this); + var data = _this.chart_result.mem; + bt.show_confirm(lan.index.mem_release_sure, '' + lan.index.mem_release_warn + '', function () { + _this.release = true; + var option = JSON.parse(JSON.stringify(_this.series_option)); + // 释放中... + var count = ''; + var setInter = setInterval(function () { + if (count == '...') { + count = '.'; + } else { + count += '.'; + } + option.series[0].detail.formatter = lan.index.memre_ok_0 + count; + option.series[0].detail.fontSize = 15; + option.series[0].data[0].value = 0; + _this.chart_view.mem.setOption(option, true); + that.next().hide(); + }, 400); + // 释放接口请求 + bt.system.re_memory(function (res) { + that.next().show(); + clearInterval(setInter); + option.series[0].detail = $.extend(option.series[0].detail, { + formatter: lan.index.memre_ok_1 + '\n' + bt.format_size(data.memRealUsed - res.memRealUsed), + lineHeight: 18, + padding: [5, 0], + }); + _this.chart_view.mem.setOption(option, true); + setTimeout(function () { + _this.release = false; + _this.chart_result.mem = res; + _this.chart_active('mem'); + }, 2000); + }); + }); + }); - // 磁盘悬浮事件 - for(var i = 0; i < rdata.disk.length; i++){ - var disk = rdata.disk[i],texts = ""+lan.index.base_info+"
      " - texts += "Partition: " + disk.filesystem + "
      " - texts += "Type: " + disk.type + "
      " - texts += "Mount point: " + disk.path + "

      " - texts += ""+ lan.index.inode_info +":
      " - texts += lan.index.total+": " + disk.inodes[0] + "
      " - texts += lan.index.already_use+": " + disk.inodes[1] + "
      " - texts += lan.index.available+": " + disk.inodes[2] + "
      " - texts += lan.index.inode_percent+": " + disk.inodes[3] + "

      " - texts += ""+lan.index.capacity_info+"
      " - texts += lan.index.capacity+": " + disk.size[0] + "
      " - texts += lan.index.already_use+": " + disk.size[1] + "
      " - texts += lan.index.available+": " + disk.size[2] + "
      " - texts += lan.index.usage_rate+": " + disk.size[3] + "
      " - $("#diskChart" + i).data('title',texts).hover(function () { - layer.tips($(this).data('title'), this, { time: 0, tips: [1, '#999'] }); - }, function(){ - layer.closeAll('tips'); - }) - } - _this.get_server_info(rdata); - if(rdata.installed === false) bt.index.rec_install(); - if (rdata.user_info.status) { - var rdata_data = rdata.user_info.data; - bt.set_cookie('bt_user_info',JSON.stringify(rdata.user_info)); - $(".bind-user").html(rdata_data.username); - } - else { - $(".bind-weixin a").attr("href", "javascript:;"); - $(".bind-weixin a").click(function () { - bt.msg({ msg: '请先绑定宝塔账号!', icon: 2 }); - }) - } - }) - setTimeout(function () { _this.interval.start(); }, 40) - setTimeout(function () { index.get_index_list(); }, 50) - setTimeout(function () { - _this.net.init(); - }, 60); - setTimeout(function () { - _this.iostat.init() - }, 60); + // 磁盘悬浮事件 + // for(var i = 0; i < rdata.disk.length; i++){ + // var disk = rdata.disk[i],texts = ""+lan.index.base_info+"
      " + // texts += "Partition: " + disk.filesystem + "
      " + // texts += "Type: " + disk.type + "
      " + // texts += "Mount point: " + disk.path + "

      " + // texts += ""+ lan.index.inode_info +":
      " + // texts += lan.index.total+": " + disk.inodes[0] + "
      " + // texts += lan.index.already_use+": " + disk.inodes[1] + "
      " + // texts += lan.index.available+": " + disk.inodes[2] + "
      " + // texts += lan.index.inode_percent+": " + disk.inodes[3] + "

      " + // texts += ""+lan.index.capacity_info+"
      " + // texts += lan.index.capacity+": " + disk.size[0] + "
      " + // texts += lan.index.already_use+": " + disk.size[1] + "
      " + // texts += lan.index.available+": " + disk.size[2] + "
      " + // texts += lan.index.usage_rate+": " + disk.size[3] + "
      " + // $("#diskChart" + i).data('title',texts).hover(function () { + // layer.tips($(this).data('title'), this, { time: 0, tips: [1, '#999'] }); + // }, function(){ + // layer.closeAll('tips'); + // }) + // } + var is_remove_disk = [], + idx = 0, + taskStatus = []; //扫描状态 + for (var i = 0; i < rdata.disk.length; i++) { + is_remove_disk.push(true); + taskStatus.push(false); + var mouseX = 0, + mouseY = 0; + $(document).mousemove(function (e) { + mouseY = e.pageY; + mouseX = e.pageX; + }); + var diskInterval = null; + $('#diskChart' + i) + .data('disk', rdata.disk[i]) + .hover( + function () { + var disk = $(this).data('disk'); + clearInterval(diskInterval); + var top = $(this).offset().top, + left = $(this).offset().left, + used_size = parseFloat(disk.size[3].substring(0, disk.size[3].lastIndexOf('%'))); + idx = $(this).prop('id').replace('diskChart', ''); + for (var i = 0; i < is_remove_disk.length; i++) { + if (i !== parseInt(idx) && is_remove_disk[i]) { + $('.disk_scanning_tips' + i).remove(); + } + } + if (!$('.disk_scanning_tips' + idx).length) { + layer.open({ + type: 1, + closeBtn: 1, + shade: 0, + area: '320px', + title: false, + skin: 'disk_scanning_tips disk_scanning_tips' + idx, + content: + '
      \ +
      \ +
      \ + Disk space:
      ' + + (used_size >= 80 ? 'Lack' : 'Plenty') + + '
      \ +
      \ +
      \ +
      \ +
      Basic information
      \ +
      \ +
      \ +
      Type:' + + disk.type + + '
      \ +
      Mount point:
      ' + + disk.path + + '
      \ +
      ' + + disk.size[3] + + '
      \ +
      Available:' + + parseFloat(disk.size[2]) + + ' ' + + disk.size[2].replace(parseFloat(disk.size[2]), '') + + ',Total:' + + parseFloat(disk.size[0]) + + ' ' + + disk.size[0].replace(parseFloat(disk.size[0]), '') + + '\n Used:' + + parseFloat(disk.size[1]) + + ' ' + + disk.size[1].replace(parseFloat(disk.size[1]), '') + + ',System:' + + disk.size[4] + + '
      \ +
      \ +
      \ +
      \ +
      \ +
      \ +
      Other information
      \ +
      \ +
      \ +
      File system:
      ' + + disk.filesystem + + '
      \ +
      Total Inodes:' + + disk.inodes[0] + + '
      \ +
      Used Inode:' + + disk.inodes[1] + + '
      \ +
      Available Inode:' + + disk.inodes[2] + + '
      \ +
      Usage Inode:' + + disk.inodes[3] + + '
      \ +
      \ +
      \ +
      \ +
      \ +
      \ + \ +
      磁盘扫描
      \ +
      \ +
      \ +
      正在获取扫描日志
      \ +
      \ +
      \ + \ +
      \ +
      \ +
      \ +
      文件名
      \ +
      大小
      \ +
      操作
      \ +
      \ +
      \ +
      \ +
      \ +
      \ +
      ', + success: function (layero, index) { + is_remove_disk[idx] = true; + // $(layero).find('.layui-layer-close2').addClass('layui-layer-close1').removeClass('layui-layer-close2'); + $(layero).find('.layui-layer-close2').remove(); + $(layero).css({ + top: top + 140 - $(window).scrollTop() + 'px', + left: left - 160, + }); + $(window).resize(function () { + for (var i = 0; i < is_remove_disk.length; i++) { + if ($('.disk_scanning_tips' + i).length) { + $('.disk_scanning_tips' + i).css({ + top: $('#diskChart' + i).offset().top + 140 - $(window).scrollTop() + 'px', + left: $('#diskChart' + i).offset().left - 160, + }); + } + } + }); + $(window).scroll(function () { + $(layero).css({ + top: $('#diskChart' + idx).offset().top + 140 - $(window).scrollTop() + 'px', + left: $('#diskChart' + idx).offset().left - 160, + }); + }); + var id = null, // 扫描id + taskPath = '', // 扫描目录 + taskList = {}; // 扫描缓存列表 + //展示收起 + // $(layero).find('.disk-item-header').on('click', function () { + // if ($(this).parent().hasClass('active')) { + // $(this).parent().removeClass('active'); + // $(this).find('span').text('展示'); + // $(this).find('img').removeAttr('style'); + // } else { + // $(this).parent().addClass('active'); + // $(this).find('span').text('收起'); + // $(this).find('img').css('transform', 'rotate(180deg)'); + // } + // }) - setTimeout(function () { - bt.system.check_update(function (rdata) { - //console.log(rdata); - if (rdata.status !== false) { - $('#toUpdate a').html(lan.index.update+'.'); - $('#toUpdate a').css("position", "relative"); + // 后退 + $(layero) + .find('.disk_back_btn') + .on('click', function () { + var path = $(this).data('path'), + index = $(this).data('index'); + if (path !== undefined && path !== 'undefined') { + if (path === '') { + $(layero).find('.filescan-nav-item.present').click(); + $(this).data('path', 'undefined'); + } else { + var rdata = taskList[path.replace('//', '/')]; + renderFilesTable(rdata, path); // 渲染文件表格 + renderFilesPath(path); // 渲染文件路径 + } + } else { + if (taskStatus[index]) { + layer.confirm( + '取消扫描,将会中断当前扫描目录进程,是否继续?', + { + title: '取消扫描', + closeBtn: 2, + icon: 3, + }, + function (indexs) { + taskStatus[index] = false; + layer.close(indexs); + cancelScanTaskRequest(id, function (rdata) { + if (!rdata.status) return bt_tools.msg(rdata); + renderInitView(); + }); + } + ); + } else { + renderInitView(); + } + } + }); + /** + * @description 渲染扫描初始化页面 + */ + function renderInitView() { + id = null; + taskStatus[idx] = false; + taskPath = ''; + taskList = {}; + $(layero).find('.disk_cont').removeClass('hide').siblings('.disk_scan_cont').addClass('hide'); + $(layero).find('.layui-layer-close1').show(); + $(layero).find('.disk-file-view,.disk-scan-view').addClass('hide'); + $(layero).find('.disk-file-load').css('display', 'none'); + } - } - // if (rdata.msg.is_beta === 1) { - // $('#btversion').prepend('Beta'); - // $('#btversion').append(' ['+lan.index.find_bug_reward+']'); - // } + // 扫描 + $(layero) + .find('.disk_scanning_btn') + .unbind('click') + .on('click', function () { + // if(taskStatus.some(function (item){ return item === true })) { + // if(bt.get_cookie('taskStatus') === 'true') { + // return layer.tips('有任务在执行,请稍后再操作!', $(this), {tips: [3, '#f00']}); + // } + is_remove_disk[idx] = false; + var $path = $(this).data('path'); + //判断是否安装插件 + bt.soft.get_soft_find('disk_analysis', function (dataRes) { + if (dataRes.setup && dataRes.endtime > 0) { + layer.closeAll(); + bt.set_cookie('diskPath', $path); + bt.set_cookie('taskStatus', true); + bt.soft.set_lib_config(dataRes.name, dataRes.title, dataRes.version); + } else { + var item = { + name: 'disk_analysis', + pluginName: 'Disk_analysis', + ps: 'Quickly analyze disk/Hard disk usage', + preview: false, + limit: 'ltd', + description: ['Check hard disk space', 'Occupancy percentage display'], + imgSrc: 'https://www.bt.cn/Public/new/plugin/disk_analysis/1.png', + }; + product_recommend.recommend_product_view( + item, + { + imgArea: ['783px', '718px'], + }, + 'ltd', + 120, + item.name + ); + var is_buy = dataRes.endtime < 0 && dataRes.pid > 0; + $('.buyNow') + .text(is_buy ? 'Buy now' : 'Install now') + .unbind('click') + .click(function () { + if (is_buy) { + bt.soft.product_pay_view({ + name: dataRes.title, + pid: dataRes.pid, + type: dataRes.type, + plugin: true, + renew: -1, + ps: dataRes.ps, + ex1: dataRes.ex1, + totalNum: 120, + }); + } else { + bt.soft.install('disk_analysis'); + } + }); + } + }); + return; + var ltd = bt.get_cookie('ltd_end'); + if (ltd < 0) { + var item = { + name: 'disk_analysis', + pluginName: 'Disk_analysis', + ps: 'Quickly analyze disk/Hard disk usage', + preview: false, + limit: 'ltd', + description: ['Check hard disk space', 'Occupancy percentage display'], + imgSrc: 'https://www.bt.cn/Public/new/plugin/disk_analysis/1.png', + }; + product_recommend.recommend_product_view( + item, + { + imgArea: ['783px', '718px'], + }, + 'ltd', + 120, + item.name + ); + } else { + $.post('/files/size/scan_disk_info', { path: $path }, function (rdata) { + if (!rdata.status) { + if (rdata['code'] && rdata['code'] === 404) { + bt.soft.install('disk_analysis'); + } + } else { + var $scanView = $(layero).find('.disk-scan-view'); + var shellView = $(layero).find('.disk-scan-view pre'); + $scanView.removeClass('hide'); + $(layero).find('.disk-file-view').addClass('hide'); + $(layero).find('.disk_cont').addClass('hide').siblings('.disk_scan_cont').removeClass('hide'); + taskStatus[$(layero).find('.disk_scanning').data('index')] = true; + renderScanTitle(shellView, '开始扫描磁盘目录\n', true); + renderScanTitle(shellView, '目录正在扫描中\n'); + renderTaskSpeed( + function (rdata) { + id = rdata.id; + $(layero).find('.disk_scanning').data('id', id); + }, + function () { + renderScanTitle(shellView, '扫描完成,等待扫描结果返回\n'); + renderFilesView({ + path: $path, + init: true, + }); + } + ); + } + }); + } + }); - }, false) - }, 70) - }, - get_server_info: function (info) { - var memFree = info.memTotal - info.memRealUsed; - if (memFree < 64) { - $("#messageError").show(); - $("#messageError").append('

      ' + lan.index.mem_warning + '

      ') - } + /** + * @description 渲染文件列表 + * @param {Object} data 数据 + */ + function renderFilesView(data, flag) { + var param = { + root_path: data.path, + }; + if (data['subdir']) param.path = data.subdir; + if (flag) $(layero).find('.disk-file-load').css('display', 'flex'); + bt_tools.send({ url: '/files/size/get_scan_log', data: param }, function (rdata) { + if (flag) $(layero).find('.disk-file-load').css('display', 'none'); + var $fileView = $(layero).find('.disk-file-view'); + $fileView.removeClass('hide').prev().addClass('hide'); + var path = rdata.fullpath; + path = path.replace(/(\\)+/g, '/'); + if (data.init) taskPath = path; + if (!taskList.hasOwnProperty(path)) taskList[path] = rdata; + renderFilesTable(rdata, path); + renderFilesPath(path); + }); + } + // 渲染文件表格 + function renderFilesTable(rdata, path) { + var $fileTableBody = $(layero).find('.filescan-list-body'); + var list = rdata.list; + var html = ''; + for (var i = 0; i < list.length; i++) { + var item = list[i]; + var isDir = item.type == 1; + html += + '
      ' + + '
      ' + + '' + + '' + + item.name + + '' + + '
      ' + + '
      ' + + bt.format_size(isDir ? item.total_asize : item.asize) + + '
      ' + + '
      ' + + '删除' + + '
      ' + + '
      '; + } + $fileTableBody.html(html); + // 删除文件 + $(layero) + .find('.remove-files') + .click(function (e) { + var path = $(this).data('path'), + type = $(this).data('type'), + fullpath = $(this).data('fullpath'), + filename = $(this).data('filename'); + delFileDir( + { + path: path, + type: type, + filename: filename, + }, + function (rdata) { + bt_tools.msg(rdata); + var list = taskList[fullpath].list.filter(function (item) { + return item.name !== filename.toString(); + }); + taskList[fullpath].list = list; + renderFilesTable(taskList[fullpath], fullpath); + } + ); + e.stopPropagation(); + }); + // 打开目录 + $(layero) + .find('.filescan-list-item') + .click(function () { + var root_path = $(layero).find('.disk_scanning_btn').data('path'); + var path = $(this).data('subdir'), + type = $(this).data('type'); + if (type !== 'folder' && typeof type !== 'undefined') return false; + if (!taskList.hasOwnProperty(path.replace('//', '/'))) { + renderFilesView( + { + path: root_path, + subdir: path, + }, + true + ); + } else { + var rdata = taskList[path.replace('//', '/')]; + renderFilesTable(rdata, path); // 渲染文件表格 + renderFilesPath(path); // 渲染文件路径 + } + }); + } + // 渲染文件路径 + function renderFilesPath(path) { + var html = ''; + var newPath = ''; + var pathArr = []; + var isLevel = false; + var isInit = true; + var omission_li = []; + pathArr = path.replace(taskPath.replace(/(\/\/)+/g, '/'), '').split('/'); + if (pathArr.length >= 1 && pathArr[0] !== '') pathArr.unshift(''); + if (pathArr.length > 1 && pathArr[1] !== '') { + var upperPath = (getDirPath(path, false) + '/').replace(/(\/\/)+/g, '/'); + if (pathArr.length > 1) upperPath = upperPath.replace(/\/$/g, ''); + $(layero).find('.disk_back_btn').data('path', upperPath); + } + if (pathArr.length > 2) isInit = true; + for (var i = 0; i < pathArr.length; i++) { + var element = pathArr[i]; + newPath += '/' + element; + if (element === '' && i > 0) continue; + var isLast = pathArr.length - 1 === i; + var isFirst = i === 0; + var currentPath = isFirst ? taskPath : taskPath + newPath; + var divider = !isLast ? '>' : ''; + var menuPath = isFirst ? '当前目录(' + taskPath + ')' : element; + currentPath = currentPath.replace(/\/\//g, '/'); + if (i > 1 && i < pathArr.length - 1 && pathArr.length > 3) { + if (isInit) { + html += + '\ + ...\ +
        \ +
        >'; + } + omission_li.push({ menuPath: element, currentPath: currentPath }); + isInit = false; + } else { + html += + '' + + menuPath + + '' + + divider; + } + } + $(layero).find('#fileScanPath').html(html); + if (omission_li.length > 0) { + var omission = $(layero).find('.omission'); + var ul = omission.find('ul'); + for (var i = 0; i < omission_li.length; i++) { + var element = omission_li[i]; + ul.append( + '
      • ' + + element.menuPath + + '
      • ' + ); + } + $(layero) + .find('.omission') + .click(function (e) { + if ($(this).hasClass('active')) { + $(this).removeClass('active'); + } else { + $(this).addClass('active'); + } + $(document).click(function (ev) { + $(layero).find('.omission').removeClass('active'); + ev.stopPropagation(); + ev.preventDefault(); + }); + e.stopPropagation(); + e.preventDefault(); + }); + } + //打开目录按钮 + $(layero) + .find('#fileScanPath .filescan-nav-item') + .click(function () { + var root_path = $(layero).find('.disk_scanning_btn').data('path'); + var path = $(this).data('path'), + type = $(this).data('type'); + if (type !== 'folder' && typeof type != 'undefined') return layer.msg('文件暂不支持打开', { icon: 0 }); + if (!taskList.hasOwnProperty(path.replace('//', '/'))) { + renderFilesView({ + path: root_path, + subdir: path, + }); + } else { + var rdata = taskList[path.replace('//', '/')]; + renderFilesTable(rdata, path); // 渲染文件表格 + renderFilesPath(path); // 渲染文件路径 + } + }); + } + /** + * @description 获取目录地址 + * @param {string} path 路径 + * @param {number} param 参数 + */ + function getDirPath(path, param) { + path.replace(/\/$/, ''); + var pathArr = path.split('/'); + if (pathArr.length === 1) return path; + if (param === -1) pathArr.push(status); + if (typeof param === 'boolean') pathArr.pop(); + return pathArr.join('/').replace(/(\/)$/, ''); + } + /** + * @description 渲染文件追加功能 + * @param {Element} el 控制器 + * @param {String} html 文本 + * @param {Boolean} isCover 是否覆盖,默认不覆盖 + */ + function renderScanTitle(el, html, isCover) { + var $el = typeof el === 'string' ? $(layero).find(el) : el; + if (isCover) { + $el.html(html); + } else { + $el.append(html); + } + } + /** + * @description 渲染扫描进度 + * @param {Function} callack 回调函数 + * @param {Function} end 结束回调函数 + */ + function renderTaskSpeed(callack, end) { + getScanTaskRequest(false, function (rdata) { + if (rdata.length === 0 || !taskStatus[$(layero).find('.disk_scanning').data('index')]) { + if (end && taskStatus[$(layero).find('.disk_scanning').data('index')]) end(rdata); + taskStatus[$(layero).find('.disk_scanning').data('index')] = false; + return; + } + for (var i = 0; i < rdata.length; i++) { + var item = rdata[i]; + if (item.name.indexOf('扫描目录文件大小') > -1) { + if (callack) callack(rdata[0]); + break; + } + } + // 扫描目录文件大小 + setTimeout(function () { + renderTaskSpeed(callack, end); + }, 1000); + }); + } + /** + * @description 获取扫描任务 + * @param {boolean} load 是否显示加载中 + * @param {function} callback 回调函数 + */ + function getScanTaskRequest(load, callback) { + var isLoad = typeof load === 'function'; + if (isLoad) callback = load; + bt_tools.send( + 'task/get_task_lists', + { + status: -3, + }, + function (rdata) { + if (callback) callback(rdata); + }, + { + load: isLoad ? '获取扫描任务详情' : false, + } + ); + } - if (info.isuser > 0) { - $("#messageError").show(); - $("#messageError").append('

        ' + lan.index.user_warning + ' ['+lan.index.cant_ignore+'] ['+lan.index.edit_now+']

        ') - } + /** + * @description 删除文件或目录 + * @param {Object} data + */ + function delFileDir(data, callback) { + if (bt.get_cookie('file_recycle_status') === 'true') { + bt.simple_confirm( + { + title: '删除' + data.type + '【' + data.filename + '】', + msg: + '删除' + + data.type + + '后,' + + data.type + + '将迁移至文件回收站,请确认删除的文件是不需要的文件,误删文件可能会导致系统崩溃,是否继续操作?
        ', + }, + function () { + delFileRequest(data, function (res) { + if (callback) callback(res); + layer.msg(res.msg, { + icon: res.status ? 1 : 2, + }); + }); + } + ); + } else { + bt.compute_confirm( + { + title: '删除' + data.type + '【' + data.filename + '】', + msg: + '风险操作,当前未开启文件回收站,删除' + + data.type + + '将彻底删除,无法恢复,请确认删除的文件是不需要的文件,误删文件可能会导致系统崩溃,是否继续操作?', + }, + function () { + delFileRequest(data, function (res) { + if (callback) callback(res); + layer.msg(res.msg, { + icon: res.status ? 1 : 2, + }); + }); + } + ); + } + } + /** + * @description 删除文件(文件和文件夹) + * @param {Object} data 文件目录参数 + * @param {Function} callback 回调函数 + * @return void + */ + function delFileRequest(data, callback) { + var _req = data.type === '文件' ? 'DeleteFile' : 'DeleteDir'; + bt_tools.send( + 'files/' + _req, + { + path: data.path, + }, + function (res) { + if (callback) callback(res); + }, + { + load: '删除文件/目录', + } + ); + } + }, + cancel: function (index, layero) { + if (taskStatus[$(layero).find('.disk_scanning').data('index')]) { + layer.confirm( + '取消扫描,将会中断当前扫描目录进程,是否继续?', + { + title: '取消扫描', + closeBtn: 2, + icon: 3, + }, + function (indexs) { + taskStatus[$(layero).find('.disk_scanning').data('index')] = false; + layer.close(indexs); + layer.close(index); + cancelScanTaskRequest($(layero).find('.disk_scanning').data('id'), function (rdata) { + if (!rdata.status) return bt_tools.msg(rdata); + }); + } + ); + return false; + } + }, + }); + } + /** + * @description 删除扫描任务 + * @param {string} id 任务id + * @param {function} callback 回调函数 + */ + function cancelScanTaskRequest(id, callback) { + bt_tools.send( + 'task/remove_task', + { + id: id, + }, + function (rdata) { + if (callback) callback(rdata); + }, + { + load: '取消扫描任务', + } + ); + } + }, + function () { + diskInterval = setInterval(function () { + if ($('.disk_scanning_tips' + idx).length) { + var diskX = $('.disk_scanning_tips' + idx).offset().left, + diskY = $('.disk_scanning_tips' + idx).offset().top, + diskW = $('.disk_scanning_tips' + idx).width(), + diskH = $('.disk_scanning_tips' + idx).height(); + var diskChartY = $('#diskChart' + idx).offset().top, + diskChartX = $('#diskChart' + idx).offset().left, + diskChartW = $('#diskChart' + idx).width(), + diskChartH = $('#diskChart' + idx).height(); + var is_move_disk = mouseX >= diskChartX && mouseX <= diskChartX + diskChartW && mouseY >= diskChartY && mouseY <= diskChartY + diskChartH; + var is_move = mouseX >= diskX && mouseX <= diskX + diskW && mouseY >= diskY && mouseY <= diskY + diskH; + if (!is_move && !is_move_disk) { + $('.disk_scanning_tips' + idx).remove(); + } + } else { + clearInterval(diskInterval); + } + }, 500); + } + ); + if ($('.disk_scanning_tips' + i).length) { + var disk = $('#diskChart' + i).data('disk'); + var size3 = parseFloat(disk.size[3].substring(0, disk.size[3].lastIndexOf('%'))); + $('.disk_scanning_tips' + i + ' .disk-body-list .progressBar span') + .text(disk.size[3]) + .css({ + left: (size3 < 12 ? size3 + 2 : size3 - 11) + '%;', + color: size3 < 12 ? '#666;' : '#fff', + }); + var progressCss = { + width: disk.size[3], + }; + if (size3 === 100) progressCss.borderRadius = '2px'; + $('.disk_scanning_tips' + i + ' .disk-body-list .progressBar .progress').css(progressCss); + $('.disk_scanning_tips' + i + ' .disk-body-list .progressBar .progress') + .removeClass('bg-red bg-org bg-green') + .addClass(size3 >= 80 ? (size3 >= 90 ? 'bg-red' : 'bg-org') : 'bg-green'); + $('.disk_scanning_tips' + i + ' .disk-body-list.use_disk').html( + parseFloat(disk.size[2]) + + ' ' + + disk.size[2].replace(parseFloat(disk.size[2]), '') + + '可用,' + + parseFloat(disk.size[1]) + + ' ' + + disk.size[1].replace(parseFloat(disk.size[1]), '') + + '已用,共' + + parseFloat(disk.size[0]) + + ' ' + + disk.size[0].replace(parseFloat(disk.size[0]), '') + ); + $('.disk_scanning_tips' + i + ' .disk-body-list.inodes0').html('Inode总数:' + disk.inodes[0]); + $('.disk_scanning_tips' + i + ' .disk-body-list.inodes1').html('Inode已用:' + disk.inodes[1]); + $('.disk_scanning_tips' + i + ' .disk-body-list.inodes2').html('Inode可用:' + disk.inodes[2]); + $('.disk_scanning_tips' + i + ' .disk-body-list.inodes3').html('Inode使用率:' + disk.inodes[3]); + } + } - if (info.isport === true) { - $("#messageError").show(); - $("#messageError").append('

        '+lan.index.panel_port_tips+' ['+lan.index.panel_port_tip2+'] ['+lan.index.panel_port_tip3+']

        ') - } - var _system = info.system; - $("#info").html(_system); - $("#running").html(info.time); - if (_system.indexOf("Windows") != -1) { - $(".ico-system").addClass("ico-windows"); - } - else if (_system.indexOf("CentOS") != -1) { - $(".ico-system").addClass("ico-centos"); - } - else if (_system.indexOf("Ubuntu") != -1) { - $(".ico-system").addClass("ico-ubuntu"); - } - else if (_system.indexOf("Debian") != -1) { - $(".ico-system").addClass("ico-debian"); - } - else if (_system.indexOf("Fedora") != -1) { - $(".ico-system").addClass("ico-fedora"); - } - else { - $(".ico-system").addClass("ico-linux"); - } - }, - render_disk: function (data) { - if (data.items.length > 0) { - var _tab = $(data.table); - for (var i = 0; i < data.items.length; i++) { - var item = data.items[i]; - var html = ''; - html += '
      • '; - html += '

        ' + item.name + '

        '; - html += '
        '; - html += '
        '; - html += '
        '; - html += '
        0%
        '; - html += '
        '; - html += '

        ' + item.title + '

        '; - html += '
      • '; - var _li = $(html); - if (item.masks) { - var mask = ''; - for (var j = 0; j < item.masks.length; j++) mask += item.masks[j].title + ': ' + item.masks[j].value + "
        "; - _li.data('mask', mask); - _li.find('.cicle').hover(function () { - var _this = $(this); - layer.tips(_this.parent().data('mask'), _this, { time: 0, tips: [1, '#999'] }); - }, function () { - layer.closeAll('tips'); - }) - } - var color = '#20a53a'; - if (parseFloat(item.rate) >= 80) color = '#ff9900'; - var size = parseFloat(item.free.substr(0, item.free.length - 1)); - var unit = item.free.substr(item.free.length - 1, 1); - switch (unit) { - case 'G': - if (size < 1) color = '#dd2f00'; - break; - case 'T': - if (size < 0.1) color = '#dd2f00'; - break; - default: - color = '#dd2f00' - break; - } + _this.get_server_info(rdata); + + // 未安装环境时弹出 + if (rdata.installed === false) bt.index.rec_install(); - index.set_val(_li, { usage: item.rate, color: color }) - _tab.append(_li); - } - } - }, - set_val: function (_li, obj) { - //obj.usage = parseInt(obj.usage) - if (obj.usage > 50) { - setTimeout(function () { _li.find('.bar-right-an').css({ "transform": "rotate(45deg)", "transition": "transform 750ms linear" }); }, 10) - setTimeout(function () { _li.find('.bar-left-an').css({ "transform": "rotate(" + (((obj.usage - 50) / 100 * 360) - 135) + "deg)", "transition": "transform 750ms linear" }); }, 760); - } else { - if (parseInt(_li.find('.occupy span').html()) > 50) { - setTimeout(function () { _li.find('.bar-right-an').css({ "transform": "rotate(" + ((obj.usage / 100 * 360) - 135) + "deg)", "transition": "transform 750ms linear" }) }, 760); - setTimeout(function () { _li.find('.bar-left-an').css({ "transform": "rotate(-135deg)", "transition": "transform 750ms linear" }) }, 10) - } else { - setTimeout(function () { _li.find('.bar-right-an').css({ "transform": "rotate(" + ((obj.usage / 100 * 360) - 135) + "deg)", "transition": "transform 750ms linear" }); }, 10) - } - } - if (obj.items) { - var item = {}; - for (var i = 0; i < obj.items.length; i++) { - if (obj.usage <= obj.items[i].val) { - item = obj.items[i]; - continue; - } - break; - } - if (item.title) obj.title = item.title; - if (item.color) obj.color = item.color; - } - if (obj.color) { - _li.find('.cicle .bar-left-an').css('border-color', 'transparent transparent ' + obj.color + ' ' + obj.color); - _li.find('.cicle .bar-right-an').css('border-color', obj.color + ' ' + obj.color + ' transparent transparent'); - _li.find('.occupy').css('color', obj.color); - } - if (obj.title) _li.find('h4').text(obj.title); - _li.find('.occupy span').html(obj.usage); - }, + if (rdata.user_info.status) { + var rdata_data = rdata.user_info.data; + bt.set_cookie('bt_user_info', JSON.stringify(rdata.user_info)); + $('.bind-user').html(rdata_data.username); + } else { + $('.bind-weixin a').attr('href', 'javascript:;'); + $('.bind-weixin a').click(function () { + bt.msg({ msg: '请先绑定宝塔账号!', icon: 2 }); + }); + } + }); + setTimeout(function () { + _this.interval.start(); + }, 40); + setTimeout(function () { + index.get_index_list(); + }, 50); + setTimeout(function () { + _this.net.init(); + }, 60); + setTimeout(function () { + _this.iostat.init(); + }, 60); - /** - * @description 渲染系统信息 - * @param callback 回调函数 - * - */ - reander_system_info:function(callback){ - var _this = this; - bt.system.get_net(function (res){ - _this.chart_result = res - // 动态添加磁盘,并赋值disk_view - if(_this.chart_view.disk == undefined){ - for (var i = 0; i < res.disk.length; i++) { - var diskHtml = "
      • "; - $("#systemInfoList").append(diskHtml); - _this.disk_view.push(echarts.init(document.querySelector("#diskChart" + i))); - } - } + setTimeout(function () { + bt.system.check_update(function (rdata) { + if (rdata.status !== false) { + var res = rdata.msg; + var ignore = res.ignore; + var beta = res.beta; + var is_beta = res.is_beta; + if (ignore.indexOf(is_beta ? beta.version : res.version) == -1) index.check_update(true); + $('#toUpdate a').html(lan.index.update + '.'); + $('#toUpdate a').css('position', 'relative'); + } + // if (rdata.msg.is_beta === 1) { + // $('#btversion').prepend('Beta'); + // $('#btversion').append(' ['+lan.index.find_bug_reward+']'); + // } + }, false); + }, 70); + }, + get_server_info: function (info) { + var memFree = info.memTotal - info.memRealUsed; + if (memFree < 64) { + $('#messageError').show(); + $('#messageError').append('

        ' + lan.index.mem_warning + '

        '); + } - // 负载 - var loadCount = Math.round((res.load.one / res.load.max) * 100) > 100 ? 100 : Math.round((res.load.one / res.load.max) * 100); - loadCount = loadCount < 0 ? 0 : loadCount; - var loadInfo = _this.chart_color_active(loadCount); + if (info.isuser > 0) { + $('#messageError').show(); + $('#messageError').append( + '

        ' + + lan.index.user_warning + + ' [' + + lan.index.cant_ignore + + '] [' + + lan.index.edit_now + + ']

        ' + ); + } - // cpu - var cpuCount = res.cpu[0]; - var cpuInfo = _this.chart_color_active(cpuCount); + if (info.isport === true) { + $('#messageError').show(); + $('#messageError').append( + '

        ' + + lan.index.panel_port_tips + + ' [' + + lan.index.panel_port_tip2 + + '] [' + + lan.index.panel_port_tip3 + + ']

        ' + ); + } + var _system = info.system; + $('#info').html(_system); + $('#running').html(info.time); + if (_system.indexOf('Windows') != -1) { + $('.ico-system').addClass('ico-windows'); + } else if (_system.indexOf('CentOS') != -1) { + $('.ico-system').addClass('ico-centos'); + } else if (_system.indexOf('Ubuntu') != -1) { + $('.ico-system').addClass('ico-ubuntu'); + } else if (_system.indexOf('Debian') != -1) { + $('.ico-system').addClass('ico-debian'); + } else if (_system.indexOf('Fedora') != -1) { + $('.ico-system').addClass('ico-fedora'); + } else { + $('.ico-system').addClass('ico-linux'); + } + }, + render_disk: function (data) { + if (data.items.length > 0) { + var _tab = $(data.table); + for (var i = 0; i < data.items.length; i++) { + var item = data.items[i]; + var html = ''; + html += '
      • '; + html += '

        ' + item.name + '

        '; + html += '
        '; + html += '
        '; + html += '
        '; + html += '
        0%
        '; + html += '
        '; + html += '

        ' + item.title + '

        '; + html += '
      • '; + var _li = $(html); + if (item.masks) { + var mask = ''; + for (var j = 0; j < item.masks.length; j++) mask += item.masks[j].title + ': ' + item.masks[j].value + '
        '; + _li.data('mask', mask); + _li.find('.cicle').hover( + function () { + var _this = $(this); + layer.tips(_this.parent().data('mask'), _this, { time: 0, tips: [1, '#999'] }); + }, + function () { + layer.closeAll('tips'); + } + ); + } + var color = '#20a53a'; + if (parseFloat(item.rate) >= 80) color = '#ff9900'; + var size = parseFloat(item.free.substr(0, item.free.length - 1)); + var unit = item.free.substr(item.free.length - 1, 1); + switch (unit) { + case 'G': + if (size < 1) color = '#dd2f00'; + break; + case 'T': + if (size < 0.1) color = '#dd2f00'; + break; + default: + color = '#dd2f00'; + break; + } - // 内存 - var memCount = Math.round((res.mem.memRealUsed / res.mem.memTotal) * 1000) / 10; // 返回 memRealUsed 占 memTotal 的百分比 - var memInfo = _this.chart_color_active(memCount); - bt.set_cookie('memSize',res.mem.memTotal) + index.set_val(_li, { usage: item.rate, color: color }); + _tab.append(_li); + } + } + }, + set_val: function (_li, obj) { + //obj.usage = parseInt(obj.usage) + if (obj.usage > 50) { + setTimeout(function () { + _li.find('.bar-right-an').css({ transform: 'rotate(45deg)', transition: 'transform 750ms linear' }); + }, 10); + setTimeout(function () { + _li.find('.bar-left-an').css({ transform: 'rotate(' + (((obj.usage - 50) / 100) * 360 - 135) + 'deg)', transition: 'transform 750ms linear' }); + }, 760); + } else { + if (parseInt(_li.find('.occupy span').html()) > 50) { + setTimeout(function () { + _li.find('.bar-right-an').css({ transform: 'rotate(' + ((obj.usage / 100) * 360 - 135) + 'deg)', transition: 'transform 750ms linear' }); + }, 760); + setTimeout(function () { + _li.find('.bar-left-an').css({ transform: 'rotate(-135deg)', transition: 'transform 750ms linear' }); + }, 10); + } else { + setTimeout(function () { + _li.find('.bar-right-an').css({ transform: 'rotate(' + ((obj.usage / 100) * 360 - 135) + 'deg)', transition: 'transform 750ms linear' }); + }, 10); + } + } + if (obj.items) { + var item = {}; + for (var i = 0; i < obj.items.length; i++) { + if (obj.usage <= obj.items[i].val) { + item = obj.items[i]; + continue; + } + break; + } + if (item.title) obj.title = item.title; + if (item.color) obj.color = item.color; + } + if (obj.color) { + _li.find('.cicle .bar-left-an').css('border-color', 'transparent transparent ' + obj.color + ' ' + obj.color); + _li.find('.cicle .bar-right-an').css('border-color', obj.color + ' ' + obj.color + ' transparent transparent'); + _li.find('.occupy').css('color', obj.color); + } + if (obj.title) _li.find('h4').text(obj.title); + _li.find('.occupy span').html(obj.usage); + }, - // 磁盘 - var diskList = res.disk; - var diskJson = []; - for (var i = 0; i < diskList.length; i++) { + /** + * @description 渲染系统信息 + * @param callback 回调函数 + * + */ + reander_system_info: function (callback) { + var _this = this; + bt.system.get_net(function (res) { + _this.chart_result = res; + // 动态添加磁盘,并赋值disk_view + if (_this.chart_view.disk == undefined) { + for (var i = 0; i < res.disk.length; i++) { + var diskHtml = + "
      • "; + $('#systemInfoList').append(diskHtml); + _this.disk_view.push(echarts.init(document.querySelector('#diskChart' + i))); + } + } - var ratio = diskList[i].size[3]; - ratio = parseFloat(ratio.substring(0, ratio.lastIndexOf("%"))); - var diskInfo = _this.chart_color_active(ratio) - diskJson.push(diskInfo) + // 负载 + var loadCount = Math.round((res.load.one / res.load.max) * 100) > 100 ? 100 : Math.round((res.load.one / res.load.max) * 100); + loadCount = loadCount < 0 ? 0 : loadCount; + var loadInfo = _this.chart_color_active(loadCount); - } + // cpu + var cpuCount = res.cpu[0]; + var cpuInfo = _this.chart_color_active(cpuCount); - // chart_json存储最新数据 - _this.chart_json['load'] = loadInfo; - _this.chart_json['cpu'] = cpuInfo; - _this.chart_json['mem'] = memInfo; - _this.chart_json['disk'] = diskJson - // 初始化 || 刷新 - if(_this.chart_view.disk == undefined) { - _this.init_chart_view() - } else { - _this.set_chart_data() - } - $('.rank .titles').show() + // 内存 + var memCount = Math.round((res.mem.memRealUsed / res.mem.memTotal) * 1000) / 10; // 返回 memRealUsed 占 memTotal 的百分比 + var memInfo = _this.chart_color_active(memCount); + bt.set_cookie('memSize', res.mem.memTotal); - var net_key = bt.get_cookie('network_io_key'); - if(net_key){ - res.up = res.network[net_key].up; - res.down = res.network[net_key].down; - res.downTotal = res.network[net_key].downTotal; - res.upTotal = res.network[net_key].upTotal; - res.downPackets = res.network[net_key].downPackets; - res.upPackets = res.network[net_key].upPackets; - res.downAll = res.network[net_key].downTotal; - res.upAll = res.network[net_key].upTotal; - } - var net_option = ''; - $.each(res.network,function(k,v){ - var act = (k == net_key)?'selected':''; - net_option += ''; - }); + // 磁盘 + var diskList = res.disk; + var diskJson = []; + for (var i = 0; i < diskList.length; i++) { + var ratio = diskList[i].size[3]; + ratio = parseFloat(ratio.substring(0, ratio.lastIndexOf('%'))); + var diskInfo = _this.chart_color_active(ratio); + diskJson.push(diskInfo); + } - $('select[name="network-io"]').html(net_option); - //刷新流量 - $("#upSpeed").html(res.up.toFixed(2) + ' KB'); - $("#downSpeed").html(res.down.toFixed(2) + ' KB'); - $("#downAll").html(bt.format_size(res.downTotal)); - $("#upAll").html(bt.format_size(res.upTotal)); - index.net.add(res.up, res.down); - var disk_key = bt.get_cookie('disk_io_key') || 'ALL', disk_io_data = res.iostat[disk_key || 'ALL'],mb = 1048576,ioTime = disk_io_data.write_time>disk_io_data.read_time?disk_io_data.write_time:disk_io_data.read_time - $('#readBytes').html(bt.format_size(disk_io_data.read_bytes)) - $('#writeBytes').html(bt.format_size(disk_io_data.write_bytes)) - $('#diskIops').html((disk_io_data.read_count + disk_io_data.write_count)) - $('#diskTime').html(ioTime +' ms').css({'color':ioTime > 100 && ioTime < 1000?'#ff9900':ioTime >= 1000?'red':'#20a53a'}) + // chart_json存储最新数据 + _this.chart_json['load'] = loadInfo; + _this.chart_json['cpu'] = cpuInfo; + _this.chart_json['mem'] = memInfo; + _this.chart_json['disk'] = diskJson; + // 初始化 || 刷新 + if (_this.chart_view.disk == undefined) { + _this.init_chart_view(); + } else { + _this.set_chart_data(); + } + $('.rank .titles').show(); - index.iostat.add((disk_io_data.read_bytes / mb).toFixed(2), (disk_io_data.write_bytes / mb).toFixed(2),disk_io_data); + var net_key = bt.get_cookie('network_io_key'); + if (net_key) { + res.up = res.network[net_key].up; + res.down = res.network[net_key].down; + res.downTotal = res.network[net_key].downTotal; + res.upTotal = res.network[net_key].upTotal; + res.downPackets = res.network[net_key].downPackets; + res.upPackets = res.network[net_key].upPackets; + res.downAll = res.network[net_key].downTotal; + res.upAll = res.network[net_key].upTotal; + } + var net_option = ''; + $.each(res.network, function (k, v) { + var act = k == net_key ? 'selected' : ''; + net_option += ''; + }); + $('select[name="network-io"]').html(net_option); + //刷新流量 + $('#upSpeed').html(res.up.toFixed(2) + ' KB'); + $('#downSpeed').html(res.down.toFixed(2) + ' KB'); + $('#downAll').html(bt.format_size(res.downTotal)); + $('#upAll').html(bt.format_size(res.upTotal)); + index.net.add(res.up, res.down); + var disk_key = bt.get_cookie('disk_io_key') || 'ALL', + disk_io_data = res.iostat[disk_key || 'ALL'], + mb = 1048576, + ioTime = disk_io_data.write_time > disk_io_data.read_time ? disk_io_data.write_time : disk_io_data.read_time; + $('#readBytes').html(bt.format_size(disk_io_data.read_bytes)); + $('#writeBytes').html(bt.format_size(disk_io_data.write_bytes)); + $('#diskIops').html(disk_io_data.read_count + disk_io_data.write_count); + $('#diskTime') + .html(ioTime + ' ms') + .css({ color: ioTime > 100 && ioTime < 1000 ? '#ff9900' : ioTime >= 1000 ? 'red' : '#20a53a' }); - var disk_option = ''; - $.each(res.iostat,function(k,v){ - disk_option += ''; - }); - $('select[name="disk-io"]').html(disk_option); + index.iostat.add((disk_io_data.read_bytes / mb).toFixed(2), (disk_io_data.write_bytes / mb).toFixed(2), disk_io_data); - if (index.net.table) index.net.table.setOption({ xAxis: { data: index.net.data.aData }, series: [{ name: lan.index.net_up, data: index.net.data.uData }, { name: lan.index.net_down, data: index.net.data.dData }] }); - if (index.iostat.table) index.iostat.table.setOption({ xAxis: { data: index.iostat.data.aData }, series: [{ name: 'Read Bytes', data: index.iostat.data.uData }, { name: 'Write Bytes', data: index.iostat.data.dData }] }); - if(callback) callback(res) - }); - }, - /** - * @description 渲染画布视图 - */ - init_chart_view:function(){ - // 所有图表对象装进chart_view - this.chart_view['load'] = echarts.init(document.querySelector("#loadChart")) - this.chart_view['cpu'] = echarts.init(document.querySelector("#cpuChart")) - this.chart_view['mem'] = echarts.init(document.querySelector("#memChart")) - this.chart_view['disk'] = this.disk_view + var disk_option = ''; + $.each(res.iostat, function (k, v) { + disk_option += ''; + }); + $('select[name="disk-io"]').html(disk_option); - // 图表配置项 - this.series_option = { - series: [{ - type: 'gauge', - startAngle: 90, - endAngle: -270, - animationDuration: 1500, - animationDurationUpdate: 1000, - radius: '99%', - pointer: { - show: false - }, - progress: { - show: true, - overlap: false, - roundCap: true, - clip: false, - itemStyle: { - borderWidth: 1, - borderColor: '#20a53a' - } - }, - axisLine: { - lineStyle: { - width: 7, - color: [[0, "rgba(204,204,204,0.5)"], [1, "rgba(204,204,204,0.5)"]] - } - }, - splitLine: { - show: false, - distance: 0, - length: 10 - }, - axisTick: { - show: false - }, - axisLabel: { - show: false, - distance: 50 - }, - data: [{ - value: 0, - detail: { - offsetCenter: ['0%', '0%'] - }, - itemStyle: { - color: '#20a53a', - borderColor: '#20a53a' - }, - }], - detail: { - width: 50, - height: 15, - lineHeight:15, - fontSize: 17, - color: '#20a53a', - formatter: '{value}%', - fontWeight:'normal' - } - }] - }; - this.set_chart_data() - }, - /** - * @description 赋值chart的数据 - * - */ - set_chart_data:function(){ - this.chart_active("load") - this.chart_active("cpu") - if(!this.release){ - this.chart_active("mem") - } - for(var i = 0; i < this.chart_view.disk.length; i++){ - this.series_option.series[0].data[0].value = this.chart_json.disk[i].val - this.series_option.series[0].data[0].itemStyle.color = this.chart_json.disk[i].color - this.series_option.series[0].data[0].itemStyle.borderColor = this.chart_json.disk[i].color - this.series_option.series[0].progress.itemStyle.borderColor = this.chart_json.disk[i].color - this.series_option.series[0].detail.color = this.chart_json.disk[i].color - this.chart_view.disk[i].setOption(this.series_option, true) - $("#disk" + i).text(this.chart_result.disk[i].size[1] + " / " + this.chart_result.disk[i].size[0]) - $("#diskName" + i).text(this.chart_result.disk[i].path) - } - }, - /** - * @description 赋值chart的数据 - * - */ - chart_active:function(name){ - // 图表数据 - this.series_option.series[0].data[0].value = this.chart_json[name].val - this.series_option.series[0].data[0].itemStyle.color = this.chart_json[name].color - this.series_option.series[0].data[0].itemStyle.borderColor = this.chart_json[name].color - this.series_option.series[0].progress.itemStyle.borderColor = this.chart_json[name].color - this.series_option.series[0].detail.color = this.chart_json[name].color + if (index.net.table) + index.net.table.setOption({ + xAxis: { data: index.net.data.aData }, + series: [ + { name: lan.index.net_up, data: index.net.data.uData }, + { name: lan.index.net_down, data: index.net.data.dData }, + ], + }); + if (index.iostat.table) + index.iostat.table.setOption({ + xAxis: { data: index.iostat.data.aData }, + series: [ + { name: 'Read Bytes', data: index.iostat.data.uData }, + { name: 'Write Bytes', data: index.iostat.data.dData }, + ], + }); + if (callback) callback(res); + }); + }, + /** + * @description 渲染画布视图 + */ + init_chart_view: function () { + // 所有图表对象装进chart_view + this.chart_view['load'] = echarts.init(document.querySelector('#loadChart')); + this.chart_view['cpu'] = echarts.init(document.querySelector('#cpuChart')); + this.chart_view['mem'] = echarts.init(document.querySelector('#memChart')); + this.chart_view['disk'] = this.disk_view; - this.chart_view[name].setOption(this.series_option, true) + // 图表配置项 + this.series_option = { + series: [ + { + type: 'gauge', + startAngle: 90, + endAngle: -270, + animationDuration: 1500, + animationDurationUpdate: 1000, + radius: '99%', + pointer: { + show: false, + }, + progress: { + show: true, + overlap: false, + roundCap: true, + clip: false, + itemStyle: { + borderWidth: 1, + borderColor: '#20a53a', + }, + }, + axisLine: { + lineStyle: { + width: 7, + color: [ + [0, 'rgba(204,204,204,0.5)'], + [1, 'rgba(204,204,204,0.5)'], + ], + }, + }, + splitLine: { + show: false, + distance: 0, + length: 10, + }, + axisTick: { + show: false, + }, + axisLabel: { + show: false, + distance: 50, + }, + data: [ + { + value: 0, + detail: { + offsetCenter: ['0%', '0%'], + }, + itemStyle: { + color: '#20a53a', + borderColor: '#20a53a', + }, + }, + ], + detail: { + width: 50, + height: 15, + lineHeight: 15, + fontSize: 17, + color: '#20a53a', + formatter: '{value}%', + fontWeight: 'normal', + }, + }, + ], + }; + this.set_chart_data(); + }, + /** + * @description 赋值chart的数据 + * + */ + set_chart_data: function () { + this.chart_active('load'); + this.chart_active('cpu'); + if (!this.release) { + this.chart_active('mem'); + } + for (var i = 0; i < this.chart_view.disk.length; i++) { + this.series_option.series[0].data[0].value = this.chart_json.disk[i].val; + this.series_option.series[0].data[0].itemStyle.color = this.chart_json.disk[i].color; + this.series_option.series[0].data[0].itemStyle.borderColor = this.chart_json.disk[i].color; + this.series_option.series[0].progress.itemStyle.borderColor = this.chart_json.disk[i].color; + this.series_option.series[0].detail.color = this.chart_json.disk[i].color; + this.chart_view.disk[i].setOption(this.series_option, true); + $('#disk' + i).text(this.chart_result.disk[i].size[1] + ' / ' + this.chart_result.disk[i].size[0]); + $('#diskName' + i).text(this.chart_result.disk[i].path); + } + }, + /** + * @description 赋值chart的数据 + * + */ + chart_active: function (name) { + // 图表数据 + this.series_option.series[0].data[0].value = this.chart_json[name].val; + this.series_option.series[0].data[0].itemStyle.color = this.chart_json[name].color; + this.series_option.series[0].data[0].itemStyle.borderColor = this.chart_json[name].color; + this.series_option.series[0].progress.itemStyle.borderColor = this.chart_json[name].color; + this.series_option.series[0].detail.color = this.chart_json[name].color; - // 文字 - var val = "" - switch (name) { - case 'load': - val = this.chart_json[name].title - break; - case 'cpu': - val = this.chart_result.cpu[1] + ' '+lan.index.cpu_core - break; - case 'mem': - val = this.chart_result.mem.memRealUsed + " / " + this.chart_result.mem.memTotal + "(MB)" - break; - } + this.chart_view[name].setOption(this.series_option, true); - $("#" + name).text(val) - }, - /** - * @description 赋值chart的颜色 - * - */ - chart_color_active:function(number){ - var activeInfo = {}; - for (var i = 0; i < this.load_config.length; i++) { - if (number >= this.load_config[i].val) { - activeInfo = JSON.parse(JSON.stringify(this.load_config[i])); - break; - } else if (number <= 30) { - activeInfo = JSON.parse(JSON.stringify(this.load_config[3])); - break; - } - } - activeInfo.val = number; - return activeInfo; - }, + // 文字 + var val = ''; + switch (name) { + case 'load': + val = this.chart_json[name].title; + break; + case 'cpu': + val = this.chart_result.cpu[1] + ' ' + lan.index.cpu_core; + break; + case 'mem': + val = this.chart_result.mem.memRealUsed + ' / ' + this.chart_result.mem.memTotal + '(MB)'; + break; + } + $('#' + name).text(val); + }, + /** + * @description 赋值chart的颜色 + * + */ + chart_color_active: function (number) { + var activeInfo = {}; + for (var i = 0; i < this.load_config.length; i++) { + if (number >= this.load_config[i].val) { + activeInfo = JSON.parse(JSON.stringify(this.load_config[i])); + break; + } else if (number <= 30) { + activeInfo = JSON.parse(JSON.stringify(this.load_config[3])); + break; + } + } + activeInfo.val = number; + return activeInfo; + }, - get_index_list: function () { - bt.soft.get_index_list(function (rdata) { - var con = ''; - var icon = ''; - var rlen = rdata.length; - var clickName = ''; - var setup_length = 0; - var softboxsum = 12; - var softboxcon = ''; - for (var i = 0; i < rlen; i++) { - if (rdata[i].setup) { - setup_length++; - if (rdata[i].admin) { - clickName = ' onclick="bt.soft.set_lib_config(\'' + rdata[i].name + '\',\'' + rdata[i].title + '\')"'; - } - else { - clickName = 'onclick="soft.set_soft_config(\'' + rdata[i].name + '\')"'; - } - var icon = rdata[i].name; - if (bt.contains(rdata[i].name, 'php-')) { - icon = 'php'; - rdata[i].version = ''; - } - var status = ''; - if (rdata[i].status) { - status = ''; - } else { - status = '' - } - con += '
        \ + get_index_list: function () { + bt.soft.get_index_list(function (rdata) { + var con = ''; + var icon = ''; + var rlen = rdata.length; + var clickName = ''; + var setup_length = 0; + var softboxsum = 12; + var softboxcon = ''; + for (var i = 0; i < rlen; i++) { + if (rdata[i].setup) { + setup_length++; + if (rdata[i].admin) { + clickName = ' onclick="bt.soft.set_lib_config(\'' + rdata[i].name + "','" + rdata[i].title + '\')"'; + } else { + clickName = 'onclick="soft.set_soft_config(\'' + rdata[i].name + '\')"'; + } + var icon = rdata[i].name; + if (bt.contains(rdata[i].name, 'php-')) { + icon = 'php'; + rdata[i].version = ''; + } + var status = ''; + if (rdata[i].status) { + status = ''; + } else { + status = ''; + } + con += + '
        \ \ -
        \ -
        \ -
        '+ rdata[i].title + ' ' + rdata[i].version + status + '
        \ +
        \ +
        \ +
        ' + + rdata[i].title + + ' ' + + rdata[i].version + + status + + '
        \
        \ -
        ' - } - } - $("#indexsoft").html(con); - // 推荐安装软件 - try { - var recomConfig = product_recommend.get_recommend_type(1) - if(recomConfig){ - var pay_status = product_recommend.get_pay_status(); - for (var i = 0; i < recomConfig['list'].length; i++) { - const item = recomConfig['list'][i]; - if(setup_length > softboxsum) break; - if(pay_status.is_pay && item['install']) continue; - softboxcon += '
        \ +
        '; + } + } + $('#indexsoft').html(con); + // 推荐安装软件 + try { + var recomConfig = product_recommend.get_recommend_type(1); + if (recomConfig) { + var pay_status = product_recommend.get_pay_status(); + for (var i = 0; i < recomConfig['list'].length; i++) { + const item = recomConfig['list'][i]; + if (setup_length > softboxsum) break; + if (pay_status.is_pay && item['install']) continue; + softboxcon += + '
        \
        \
        关闭推荐
        \ -
        \ -
        '+ item['title'] +'
        \ +
        \ +
        ' + + item['title'] + + '
        \
        \ - '+ ((item['isBuy'] && !item['install'])? - '': - 'Preview') +'\ + ' + + (item['isBuy'] && !item['install'] + ? '' + : 'Preview') + + '\
        \
        \ -
        ' - setup_length ++; - } - } - } catch (error) { - console.log(error) - } - //软件位置移动 - if (setup_length <= softboxsum) { - for (var i = 0; i < softboxsum - setup_length; i++) { - softboxcon += '
        ' - } - $("#indexsoft").append(softboxcon); - } - $("#indexsoft").dragsort({ dragSelector: ".spanmove", dragBetween: true, dragEnd: saveOrder, placeHolderTemplate: "
        " }); +
        '; + setup_length++; + } + } + } catch (error) { + console.log(error); + } + //软件位置移动 + if (setup_length <= softboxsum) { + for (var i = 0; i < softboxsum - setup_length; i++) { + softboxcon += '
        '; + } + $('#indexsoft').append(softboxcon); + } + $('#indexsoft').dragsort({ dragSelector: '.spanmove', dragBetween: true, dragEnd: saveOrder, placeHolderTemplate: "
        " }); - function saveOrder() { - var data = $("#indexsoft > div").map(function () { return $(this).attr("data-id"); }).get(); - data = data.join('|'); - bt.soft.set_sort_index(data) - }; - }) - }, - check_update: function () { - var _load = bt.load('Getting updates, please wait...'); - bt.system.check_update(function (rdata) { - _load.close(); - if (rdata.status === false) { - if (!rdata.msg.beta) { - bt.msg(rdata); - return; - } - var result = rdata, - is_beta = rdata.msg.is_beta, - loading = bt.open({ - type: 1, - title: '[Linux' + (rdata.msg.is_beta == 1 ? lan.index.test_version : lan.index.final_version) + ']-'+lan.index.update_log, - area: '550px', - shadeClose: false, - skin: 'layui-layer-dialog', - closeBtn: 2, - content: '
        \ -
        '+lan.index.last_version_now+'
        \ -
        '+lan.index.this_version+''+lan.index.bt_linux+ (rdata.msg.is_beta == 1 ? lan.index.test_version+' ' + rdata.msg.beta.version : lan.index.final_version+' ' + rdata.msg.version) + '  '+ lan.index.release_time + (rdata.msg.is_beta == 1 ? rdata.msg.beta.uptime : rdata.msg.uptime) + '
        \ -
        \ -
        '+ lan.index.last_version_is+(is_beta != 1 ? lan.index.test_version : lan.index.final_version) + (result.msg.is_beta != 1 ? result.msg.beta.version : result.msg.version) + '      '+lan.index.update_time+'  ' + (is_beta != 1 ? result.msg.beta.uptime : result.msg.uptime) + '
        \ - '+ (is_beta !== 1 ? ''+lan.index.update_verison_click+''+lan.index.check_detail+'' : ''+lan.index.change_final_click+'  '+lan.index.change_final+'') + '\ -
        \ -
        \ - \ - \ -
        \ -
        \ - ' - }); - return; - } - if (rdata.status === true) { - var result = rdata - var is_beta = rdata.msg.is_beta - if (is_beta) { - rdata = result.msg.beta - } else { - rdata = result.msg - } - var loading = bt.open({ - type: 1, - title: '[Linux' + (is_beta === 1 ? lan.index.test_version : lan.index.final_version) + ']-'+ lan.index.update_log, - area: '520px', - shadeClose: false, - skin: 'layui-layer-dialog', - closeBtn: 2, - content: '
        \ -
        '+lan.index.have_new_version+'
        \ -
        \ -
        '+lan.index.last_version+''+lan.index.bt_linux+ (is_beta === 1 ? lan.index.test_version : lan.index.final_version) +' '+ rdata.version + '
        '+lan.index.update_date + (result.msg.is_beta == 1 ? result.msg.beta.uptime : result.msg.uptime) + '
        \ -
        '+ rdata.updateMsg + '
        \ -
        \ -
        \ -
        '+ lan.index.last_version_is +(is_beta !== 1 ? lan.index.test_version : lan.index.final_version) + (result.msg.is_beta != 1 ? result.msg.beta.version : result.msg.version) + '   '+lan.index.update_time+'  ' + (is_beta != 1 ? result.msg.beta.uptime : result.msg.uptime) + '
        \ - '+ (is_beta !== 1 ? ''+lan.index.update_verison_click+''+lan.index.check_detail+'' : ''+lan.index.change_final_click+''+lan.index.change_final+'') + '\ -
        \ -
        \ - \ - \ -
        \ -
        \ - ' - }); - } - }) - }, - to_update: function () { - layer.closeAll(); - bt.system.to_update(function (rdata) { - if (rdata.status) { - bt.msg({ msg: rdata.msg, icon: 1 }) - $("#btversion").html(rdata.version); - $("#toUpdate").html(''); - bt.system.reload_panel(); - setTimeout(function () { window.location.reload(); }, 3000); - } - else { - bt.msg({ msg: rdata.msg, icon: 5, time: 5000 }); - } - }); - }, - to_not_beta: function () { - bt.show_confirm(lan.index.change_final,lan.index.change_test_to_final, function () { + function saveOrder() { + var data = $('#indexsoft > div') + .map(function () { + return $(this).attr('data-id'); + }) + .get(); + data = data.join('|'); + bt.soft.set_sort_index(data); + } + }); + }, + check_update: function () { + if ($('.layui-layer-dialog').length > 0) return false; + var loadT = bt.load(); + bt.system.check_update(function (rdata) { + loadT.close(); + if (rdata.status === false && typeof rdata.msg === 'string') { + try { + messagebox(); + } catch (err) {} + layer.msg(rdata.msg, { icon: 2 }); + return; + } + var data = rdata.msg; + var is_beta = data.is_beta; + var beta = data.beta; + var versionData = is_beta ? beta : data; + var isOld = rdata.status; - bt.send('apple_beta', 'ajax/to_not_beta', {}, function (rdata) { - if (rdata.status === false) { - bt.msg(rdata); - return; - } - bt.system.check_update(function (rdata) { - index.to_update(); - }); - - }); - }); - }, - beta_msg: function () { - var new_load = bt.load(); - bt.send('get_beta_logs', 'ajax/get_beta_logs', {}, function (data) { - var my_list = ''; - new_load.close(); - if(data.status == false){ - layer.msg(data.msg,{icon: 2}); - return false; - } - for (var i = 0; i < data.list.length; i++) { - my_list += '
        \ + if (isOld) { + content = + '\ +
        [Linux' + + (rdata.msg.is_beta == 1 ? lan.index.test_version : lan.index.final_version) + + '] - ' + + lan.index.update_log + + '
        \ + \ +
        \ +
        \ +
        ' + + lan.index.have_new_version + + '
        \ +
        ' + + lan.index.last_version + + '' + + lan.index.bt_linux + + (is_beta === 1 ? lan.index.test_version : lan.index.final_version) + + ' ' + + versionData.version + + '' + + (!isOld ? '  ' + lan.index.update_date + versionData.uptime : '') + + '
        \ +
        \ +
        ' + + (isOld ? '
        ' + versionData.updateMsg + '

        ' : '') + + '
        ' + + lan.index.last_version_is + + (is_beta ? lan.index.final_version : lan.index.test_version) + + (is_beta ? data.version : beta.version) + + '   ' + + lan.index.update_time + + ' ' + + (is_beta ? data.uptime : beta.uptime) + + '   \ + ' + + (!is_beta + ? '' + lan.index.update_verison_click + '' + lan.index.check_detail + '' + : '' + lan.index.change_final_click + '' + lan.index.change_final + '') + + '\ +
        \ +
        \ +
        \ + \ + \ +
        \ +
        '; + } else { + content = + '\ +
        \ +
        \ +
        \ + \ + ' + + lan.index.last_version_now + + '\ +
        \ + \ +
        \ +
        \ +
        \ + ' + + lan.index.last_version_is + + (is_beta ? lan.index.final_version : lan.index.test_version) + + (is_beta ? data.version : data.beta.version) + + '\ + ' + + lan.index.update_time + + (is_beta ? data.uptime.replaceAll('/', '-') : beta.uptime.replaceAll('/', '-')) + + '\ +
        \ + ' + + (!is_beta + ? '' + + lan.index.update_verison_click + + '' + + lan.index.check_detail + + '' + : '' + lan.index.change_final + '') + + '\ + \ +
        \ +
        \ +
        \ + '; + } + bt.open({ + type: 1, + title: isOld + ? false + : [ + '[Linux' + (rdata.msg.is_beta == 1 ? lan.index.test_version : lan.index.final_version) + '] - ' + lan.index.update_log, + 'background-color:#37BC51;color:white;height:36px;padding:0 80px 0 13.5px;', + ], + area: isOld ? '480px' : '530px', + shadeClose: false, + skin: 'layui-layer-dialog' + (!isOld ? '' : ' new-layer-update active'), + closeBtn: 2, + content: content, + success: function (layers, indexs) { + if (!isOld) $(layers).find('.layui-layer-content').css('padding', '0'); + $('.ignore-renew').on('click', function () { + bt.send('ignore_version', 'ajax/ignore_version', { version: versionData.version }, function (rdata) { + bt.msg(rdata); + if (rdata.status) layer.close(indexs); + }); + }); + }, + cancel: function () { + if (isOld) bt.send('ignore_version', 'ajax/ignore_version', { version: versionData.version }); + }, + }); + }); + }, + to_update: function () { + layer.closeAll(); + bt.system.to_update(function (rdata) { + if (rdata.status) { + bt.msg({ msg: rdata.msg, icon: 1 }); + $('#btversion').html(rdata.version); + $('#toUpdate').html(''); + bt.system.reload_panel(); + setTimeout(function () { + window.location.reload(); + }, 3000); + } else { + bt.msg({ msg: rdata.msg, icon: 5, time: 5000 }); + } + }); + }, + to_not_beta: function () { + bt.show_confirm(lan.index.change_final, lan.index.change_test_to_final, function () { + bt.send('apple_beta', 'ajax/to_not_beta', {}, function (rdata) { + if (rdata.status === false) { + bt.msg(rdata); + return; + } + bt.system.check_update(function (rdata) { + index.to_update(); + }); + }); + }); + }, + beta_msg: function () { + var new_load = bt.load(); + bt.send('get_beta_logs', 'ajax/get_beta_logs', {}, function (data) { + var my_list = ''; + new_load.close(); + if (data.status == false) { + layer.msg(data.msg, { icon: 2 }); + return false; + } + for (var i = 0; i < data.list.length; i++) { + my_list += + '
        \ \ -
        '+ bt.format_data(data.list[i].uptime).split(' ')[0] + '
        \ -
        '+ data.list[i].version + '
        \ -
        '+ data.list[i].upmsg + '
        \ -
        ' - } - layer.open({ - type: 1, - title: lan.index.apply_linux_test_version, - area: '650px', - shadeClose: false, - skin: 'layui-layer-dialog', - closeBtn: 2, - content: '
        \ +
        ' + + bt.format_data(data.list[i].uptime).split(' ')[0] + + '
        \ +
        ' + + data.list[i].version + + '
        \ +
        ' + + data.list[i].upmsg + + '
        \ +
        '; + } + layer.open({ + type: 1, + title: lan.index.apply_linux_test_version, + area: '650px', + shadeClose: false, + skin: 'layui-layer-dialog', + closeBtn: 2, + content: + '
        \
        \ - '+lan.index.apply_most_know+'\ -
        '+ data.beta_ps + '
        \ + ' + + lan.index.apply_most_know + + '\ +
        ' + + data.beta_ps + + '
        \
        \
        \ - '+lan.index.linux_test_version_update_log+'\ -
        '+ my_list + '
        \ + ' + + lan.index.linux_test_version_update_log + + '\ +
        ' + + my_list + + '
        \
        \ -
        \
        \ +
        \
        \ - \ - \ + \ + \
        \ \ -
        ' - }); - var countdown = 5; - function settime(val) { - if (countdown == 0) { - val.removeAttr("disabled"); - $('#update_time').text(''); - return false; - } else { - $('#update_time').text(lan.index.second_left_of_click.replace('{1}',countdown)); - countdown--; - setTimeout(function () { - settime(val) - }, 1000) - } - } - settime($('#notice')); - $('#notice').click(function () { - console.log($(this).prop('checked')) - if ($(this).prop('checked')) { - $('.btn_update_panel_beta').removeAttr('disabled'); - } else { - $('.btn_update_panel_beta').attr('disabled', 'disabled'); - } - }); - $('.btn_update_panel_beta').click(function () { - bt.show_confirm(lan.index.update_test_version, lan.index.check_test_version_detail, function () { - var loading = bt.load(); - bt.send('apple_beta', 'ajax/apple_beta', {}, function (rdata) { - if (rdata.status === false) { - bt.msg(rdata); - return; - } - bt.system.check_update(function (res) { - loading.close(); - index.to_update(); - }); - }); - }); - }) - }); - }, - re_panel: function () { - layer.confirm(lan.index.rep_panel_msg, { title: lan.index.rep_panel_title, closeBtn: 2, icon: 3 }, function () { - bt.system.rep_panel(function (rdata) { - if (rdata.status) { - bt.msg({ msg: lan.index.rep_panel_ok, icon: 1 }); - return; - } - bt.msg(rdata); - }) - }); - }, - re_server: function () { - bt.open({ - type: 1, - title: lan.index.restart_serverorpanel, - area: '330px', - closeBtn: 2, - shadeClose: false, - content: '' - }) - setTimeout(function () { - $('.rebt-con a').click(function () { - var type = $(this).attr('data-id'); - switch (type) { - case 'panel': - layer.confirm(lan.index.panel_reboot_msg, { title: lan.index.panel_reboot_title, closeBtn: 2, icon: 3 }, function () { - var loading = bt.load(); - interval_stop = true; - bt.system.reload_panel(function (rdata) { - loading.close(); - bt.msg(rdata); - }); - setTimeout(function () { window.location.reload(); }, 3000); - }); - break; - case 'server': - var rebootbox = bt.open({ - type: 1, - title: lan.index.reboot_title, - area: ['500px', '280px'], - closeBtn: 2, - shadeClose: false, - content: "
        \ +
        ', + }); + var countdown = 5; + function settime(val) { + if (countdown == 0) { + val.removeAttr('disabled'); + $('#update_time').text(''); + return false; + } else { + $('#update_time').text(lan.index.second_left_of_click.replace('{1}', countdown)); + countdown--; + setTimeout(function () { + settime(val); + }, 1000); + } + } + settime($('#notice')); + $('#notice').click(function () { + console.log($(this).prop('checked')); + if ($(this).prop('checked')) { + $('.btn_update_panel_beta').removeAttr('disabled'); + } else { + $('.btn_update_panel_beta').attr('disabled', 'disabled'); + } + }); + $('.btn_update_panel_beta').click(function () { + bt.show_confirm(lan.index.update_test_version, lan.index.check_test_version_detail, function () { + var loading = bt.load(); + bt.send('apple_beta', 'ajax/apple_beta', {}, function (rdata) { + if (rdata.status === false) { + bt.msg(rdata); + return; + } + bt.system.check_update(function (res) { + loading.close(); + index.to_update(); + }); + }); + }); + }); + }); + }, + re_panel: function () { + layer.confirm(lan.index.rep_panel_msg, { title: lan.index.rep_panel_title, closeBtn: 2, icon: 3 }, function () { + bt.system.rep_panel(function (rdata) { + if (rdata.status) { + bt.msg({ msg: lan.index.rep_panel_ok, icon: 1 }); + return; + } + bt.msg(rdata); + }); + }); + }, + re_server: function () { + bt.open({ + type: 1, + title: lan.index.restart_serverorpanel, + area: '330px', + closeBtn: 2, + shadeClose: false, + content: + '', + }); + setTimeout(function () { + $('.rebt-con a').click(function () { + var type = $(this).attr('data-id'); + switch (type) { + case 'panel': + layer.confirm(lan.index.panel_reboot_msg, { title: lan.index.panel_reboot_title, closeBtn: 2, icon: 3 }, function () { + var loading = bt.load(); + interval_stop = true; + bt.system.reload_panel(function (rdata) { + loading.close(); + bt.msg(rdata); + }); + setTimeout(function () { + window.location.reload(); + }, 3000); + }); + break; + case 'server': + var rebootbox = bt.open({ + type: 1, + title: lan.index.reboot_title, + area: ['500px', '280px'], + closeBtn: 2, + shadeClose: false, + content: + "
        \
        \ -

        "+ lan.index.reboot_warning + "

        \ +

        " + + lan.index.reboot_warning + + "

        \
        \ -

        "+ lan.index.reboot_ps + "

        \ -

        "+ lan.index.reboot_ps_1 + "

        \ -

        "+ lan.index.reboot_ps_2 + "

        \ -

        "+ lan.index.reboot_ps_3 + "

        \ -

        "+ lan.index.reboot_ps_4 + "

        \ +

        " + + lan.index.reboot_ps + + '

        \ +

        ' + + lan.index.reboot_ps_1 + + '

        \ +

        ' + + lan.index.reboot_ps_2 + + '

        \ +

        ' + + lan.index.reboot_ps_3 + + '

        \ +

        ' + + lan.index.reboot_ps_4 + + "

        \
        \
        \
        \ - \ - \ + \ + \
        \ -
        " - }); - setTimeout(function () { - $(".btn-reboot").click(function () { - rebootbox.close(); - }) - $(".WSafeRestart").click(function () { - var body = '
        '; - $(".bt-window-restart").html(body); - $(".SafeRestartCode").append("

        " + lan.index.reboot_msg_1 + "

        "); - bt.pub.set_server_status_by("name={{session['webserver']}}&type=stop", function (r1) { - $(".SafeRestartCode p").addClass('c9'); - $(".SafeRestartCode").append("

        " + lan.index.reboot_msg_2 + "...

        "); - bt.pub.set_server_status_by("name=mysqld&type=stop", function (r2) { - $(".SafeRestartCode p").addClass('c9'); - $(".SafeRestartCode").append("

        " + lan.index.reboot_msg_3 + "...

        "); - bt.system.root_reload(function (rdata) { - $(".SafeRestartCode p").addClass('c9'); - $(".SafeRestartCode").append("

        " + lan.index.reboot_msg_4 + "...

        "); - var sEver = setInterval(function () { - bt.system.get_total(function () { - clearInterval(sEver); - $(".SafeRestartCode p").addClass('c9'); - $(".SafeRestartCode").append("

        " + lan.index.reboot_msg_5 + "...

        "); - setTimeout(function () { - layer.closeAll(); - }, 3000); - }) - }, 3000); - }) - }) - }) - }) - }, 100) - break; - } - }) - }, 100) - }, - open_log: function () { - return - bt.open({ - type: 1, - area: '640px', - title: lan.index.update_log, - closeBtn: 2, - shift: 5, - shadeClose: false, - content: '
        ' - }); - $.get('https://www.bt.cn/api/panel/updateLinuxEn', function (rdata) { - var body = ''; - for (var i = 0; i < rdata.length; i++) { - body += '
        \ -
        '+ rdata[i].addtime + '
        \ +
        ', + }); + setTimeout(function () { + $('.btn-reboot').click(function () { + rebootbox.close(); + }); + $('.WSafeRestart').click(function () { + var body = '
        '; + $('.bt-window-restart').html(body); + $('.SafeRestartCode').append('

        ' + lan.index.reboot_msg_1 + '

        '); + bt.pub.set_server_status_by("name={{session['webserver']}}&type=stop", function (r1) { + $('.SafeRestartCode p').addClass('c9'); + $('.SafeRestartCode').append('

        ' + lan.index.reboot_msg_2 + '...

        '); + bt.pub.set_server_status_by('name=mysqld&type=stop', function (r2) { + $('.SafeRestartCode p').addClass('c9'); + $('.SafeRestartCode').append('

        ' + lan.index.reboot_msg_3 + '...

        '); + bt.system.root_reload(function (rdata) { + $('.SafeRestartCode p').addClass('c9'); + $('.SafeRestartCode').append('

        ' + lan.index.reboot_msg_4 + '...

        '); + var sEver = setInterval(function () { + bt.system.get_total(function () { + clearInterval(sEver); + $('.SafeRestartCode p').addClass('c9'); + $('.SafeRestartCode').append('

        ' + lan.index.reboot_msg_5 + '...

        '); + setTimeout(function () { + layer.closeAll(); + }, 3000); + }); + }, 3000); + }); + }); + }); + }); + }, 100); + break; + } + }); + }, 100); + }, + open_log: function () { + return; + bt.open({ + type: 1, + area: '640px', + title: lan.index.update_log, + closeBtn: 2, + shift: 5, + shadeClose: false, + content: '
        ', + }); + $.get( + 'https://www.bt.cn/api/panel/updateLinuxEn', + function (rdata) { + var body = ''; + for (var i = 0; i < rdata.length; i++) { + body += + '
        \ +
        ' + + rdata[i].addtime + + '
        \
        \ -

        '+ rdata[i].title + '

        \ -

        '+ rdata[i].body + '

        \ +

        ' + + rdata[i].title + + '

        \ +

        ' + + rdata[i].body + + '

        \
        \ -
        ' - } - $(".DrawRecordCon").html(body); - }, 'jsonp'); - }, - get_cloud_list: function () { - $.post('/plugin?action=get_soft_list', { type: 8, p: 1, force: 1, cache: 1 }, function (rdata) { - console.log(lan.index.get_soft_list_success); - }); - }, - // 获取安全风险列表 - get_warning_list:function(active,callback){ - var that = this,obj = {}; - if(active == true) obj = {force:1} - bt.send('get_list','warning/get_list',obj,function(res){ - if(res.status !== false){ - that.warning_list = res; - that.warning_num = res.risk.length; - $('.warning_num').css('color',(that.warning_num > 0?'red':'#20a53a')).html(that.warning_num); - $('.warning_scan_ps').html(that.warning_num>0?('This scan check '+ that.warning_num +' risks, please repair them in time!'):'There is no risk item detected in this scan, please keep it!'); - if(callback) callback(res); - } - }); - }, - /** - * @description 获取时间简化缩写 - * @param {Numbre} dateTimeStamp 需要转换的时间戳 - * @return {String} 简化后的时间格式 - */ - get_simplify_time:function(dateTimeStamp){ - if(dateTimeStamp === 0) return 'Just'; - if(dateTimeStamp.toString().length == 10) dateTimeStamp = dateTimeStamp * 1000 - var minute = 1000 * 60,hour = minute * 60,day = hour * 24,halfamonth = day * 15,month = day * 30,now = new Date().getTime(),diffValue = now - dateTimeStamp; - if(diffValue < 0) return 'Just'; - var monthC = diffValue / month,weekC = diffValue / (7 * day),dayC = diffValue / day,hourC = diffValue / hour,minC = diffValue / minute; - if(monthC >= 1) { - result = "" + parseInt(monthC) + "month ago"; - } else if(weekC >= 1) { - result = "" + parseInt(weekC) + "weeks ago"; - } else if(dayC >= 1) { - result = "" + parseInt(dayC) + "days ago"; - } else if(hourC >= 1) { - result = "" + parseInt(hourC) + "hours ago"; - } else if(minC >= 1) { - result = "" + parseInt(minC) + "minutes ago"; - } else{ - result = "Just"; - } - return result; - }, - /** - * @description 渲染安全模块视图 - * @return 无返回值 - */ - reader_warning_view:function(){ - var that = this; - function reader_warning_list(data){ - var html = '',scan_time = '',arry = [['risk','Risk'],['security','Security'],['ignore','Ignore']],level = [['Low risk','#e8d544'],['Medium risk','#E6A23C'],['High risk','red']] - bt.each(arry,function(index,item){ - var data_item = data[item[0]],data_title = item[1]; - html += '
      • '+ - '
        '+ - ''+ data_title +''+ - ''+ data_item.length +''+ - ''+ (item[index] == 'risk' && that.warning_num > 0?'Collapse':'Details') +''+ - '
        '+ - (function(index,item){ - var htmls = '
          '; - bt.each(data_item,function(indexs,items){ - scan_time = items.check_time; - htmls += '
        • '+ - '
          '+ - ''+ items.ps +'(Checked: '+ (that.get_simplify_time(items.check_time) || 'Just') +', time: '+ ( items.taking>1?( items.taking +'Sec'):((items.taking * 1000).toFixed(2) +'ms')) +')'+ - ''+ (item[0] != 'security'?('Detail  |  '+ (item[0] != 'ignore'?'Ignore':'Remove') +'  |  Check'):'Detail') +'' + - '
          '+ - '
          '+ - '
          '+ - '
          Test type: '+ items.title +'
          '+ - '
          Risk level: '+ level[items.level-1][0] +'
          '+ - '
          '+ - '
          Risk detail: '+ items.msg +'
          '+ - '
          '+ (item[0] != 'security'?'Solution: ':'Suggest: ') +''+ - (function(){ - var htmlss = ''; - bt.each(items.tips,function(indexss,itemss){ - htmlss +=''+ (indexss+1) +'、'+ itemss +'
          '; - }); - return htmlss; - }()) +'
          '+ - (items.help != ''?(''):'') + - '
          '+ - '
        • '; - }); - htmls += '
        '; - return htmls; - }(index,item)) - +'
      • ' - }); - $('.warning_scan_body').html(html); - $('.warning_scan_time').html('Checked:  '+ bt.format_data(scan_time)); - } - bt.open({ - type:'1', - title:'Security risk', - area:['850px','700px'], - skin:'warning_scan_view', - content:'
        '+ - '
        '+ - ''+ (that.warning_num>0?('This scan check '+ that.warning_num +' risks, please repair them in time!'):'This scan check no risks, please keep it!') +''+ - ''+ - ''+ - '
        '+ - '
          '+ - '
          ', - success:function(){ - $('.warning_again_scan').click(function(){ - var loadT = layer.msg('Re detecting security risks, please wait...',{icon:16}); - that.get_warning_list(true,function(){ - layer.msg('Scan succeeded',{icon:1}); - reader_warning_list(that.warning_list); - }); - }); - $('.warning_scan_body').on('click','.module_item .module_head',function(){ - var _parent = $(this).parent(),_parent_index = _parent.index(),_list = $(this).next(); - if(parseInt($(this).find('.module_num').text()) > 0){ - if(_list.hasClass('active')){ - _list.css('height',0); - $(this).find('.module_cut_show i').text('Detail').next().removeClass('glyphicon-menu-up').addClass('glyphicon-menu-down'); - setTimeout(function(){ - _list.removeClass('active').removeAttr('style'); - },500); - }else{ - $(this).find('.module_cut_show i').text('Collapse').next().removeClass('glyphicon-menu-down').addClass('glyphicon-menu-up'); - _list.addClass('active'); - var details_list = _list.parent().siblings().find('.module_details_list'); - details_list.removeClass('active'); - details_list.prev().find('.module_cut_show i').text('Detail').next().removeClass('glyphicon-menu-up').addClass('glyphicon-menu-down') - } - } - }); - $('.warning_scan_body').on('click','.operate_tools a',function(){ - var index = $(this).index(),data = $(this).data(); - switch(index){ - case 0: - if($(this).hasClass('active')){ - $(this).parents('.module_details_head').next().hide(); - $(this).removeClass('active').text('Detail'); - }else{ - var item = $(this).parents('.module_details_item'),indexs = item.index(); - $(this).addClass('active').text('Collapse'); - item.siblings().find('.module_details_body').hide(); - item.siblings().find('.operate_tools a:eq(0)').removeClass('active').text('Detail'); - $(this).parents('.module_details_head').next().show(); - $('.module_details_list').scrollTop(indexs * 41); - } - break; - case 1: - if(data.type != 'ignore'){ - bt.confirm({title:'Ignore risk',msg:'Confirm to ignore [ '+ data.title +' ] risk?'},function(){ - that.warning_set_ignore(data.model,function(res){ - that.get_warning_list(false,function(){ - bt.msg(res) - reader_warning_list(that.warning_list); - }); - }); - }); - }else{ - that.warning_set_ignore(data.model,function(res){ - that.get_warning_list(false,function(){ - bt.msg(res) - reader_warning_list(that.warning_list); - setTimeout(function(){ - $('.module_item.ignore').click(); - },100) - }); - }); - } - break; - case 2: - that.waring_check_find(data.model,function(res){ - that.get_warning_list(false,function(){ - bt.msg(res) - reader_warning_list(that.warning_list); - }); - }); - break; - } - }); - reader_warning_list(that.warning_list); - } - }) - }, - /** - * @description 安全风险指定模块检查 - * @param {String} model_name 模块名称 - * @param {Function} callback 成功后的回调 - * @return 无返回值 - */ - waring_check_find:function(model_name,callback){ - var loadT = layer.msg('Detecting the specified module, please wait...',{icon:16,time:0}); - bt.send('check_find','warning/check_find',{m_name:model_name},function(res){ - bt.msg(res); - if(res.status !== false){ - if(callback) callback(res); - } - }); - - }, +
          '; + } + $('.DrawRecordCon').html(body); + }, + 'jsonp' + ); + }, + get_cloud_list: function () { + $.post('/plugin?action=get_soft_list', { type: 8, p: 1, force: 1, cache: 1 }, function (rdata) { + console.log(lan.index.get_soft_list_success); + }); + }, + // 获取安全风险列表 + get_warning_list: function (active, callback) { + var that = this, + obj = {}; + if (active == true) obj = { force: 1 }; + bt.send('get_list', 'warning/get_list', obj, function (res) { + if (res.status !== false) { + that.warning_list = res; + that.warning_num = res.risk.length; + $('.warning_num') + .css('color', that.warning_num > 0 ? 'red' : '#20a53a') + .html(that.warning_num); + $('.warning_scan_ps').html(that.warning_num > 0 ? 'This scan check ' + that.warning_num + ' risks, Suggested repair!' : 'There is no risk item detected in this scan, please keep it!'); + if (callback) callback(res); + } + }); + }, + getScanSpeed: function (sele, msg, url) { + var that = this; + if (!$(sele).length) return; + bt_tools.send({ url: url }, function (rdata) { + var percentage = rdata.percentage; + body = + '

          ' + + msg + + '

          \ +
          \ + ' + + percentage + + '%
          '; + $(sele).prev().hide(); + $(sele).css({ 'margin-left': '-37px', width: '380px' }); + $(sele).parents('.layui-layer').css({ 'margin-left': '-100px' }); + $(sele).html(body); + setTimeout(function () { + that.getScanSpeed(sele, msg, url); + }, 200); + }); + }, + /** + * @description 获取时间简化缩写 + * @param {Numbre} dateTimeStamp 需要转换的时间戳 + * @return {String} 简化后的时间格式 + */ + get_simplify_time: function (dateTimeStamp) { + if (dateTimeStamp === 0) return 'Just'; + if (dateTimeStamp.toString().length == 10) dateTimeStamp = dateTimeStamp * 1000; + var minute = 1000 * 60, + hour = minute * 60, + day = hour * 24, + halfamonth = day * 15, + month = day * 30, + now = new Date().getTime(), + diffValue = now - dateTimeStamp; + if (diffValue < 0) return 'Just'; + var monthC = diffValue / month, + weekC = diffValue / (7 * day), + dayC = diffValue / day, + hourC = diffValue / hour, + minC = diffValue / minute; + if (monthC >= 1) { + result = '' + parseInt(monthC) + ' month ago'; + } else if (weekC >= 1) { + result = '' + parseInt(weekC) + ' weeks ago'; + } else if (dayC >= 1) { + result = '' + parseInt(dayC) + ' days ago'; + } else if (hourC >= 1) { + result = '' + parseInt(hourC) + ' hours ago'; + } else if (minC >= 1) { + result = '' + parseInt(minC) + ' mins ago'; + } else { + result = 'Just'; + } + return result; + }, + /** + * @description 渲染安全模块视图 + * @return 无返回值 + */ + reader_warning_view: function () { + var that = this; + if (!that.warning_num && that.warning_num !== 0) { + layer.msg('正在获取安全风险项,请稍后 ...', { icon: 0 }); + return false; + } + function reader_warning_list(data) { + var html = '', + scan_time = '', + arry = [ + ['risk', 'Risk'], + ['security', 'Security'], + ['ignore', 'Ignore'], + ], + level = [ + ['Low risk', '#e8d544'], + ['Medium risk', '#E6A23C'], + ['High risk', 'red'], + ]; + bt.each(arry, function (index, item) { + var data_item = data[item[0]], + data_title = item[1]; + html += + '
        1. ' + + '
          ' + + '' + + data_title + + '' + + '' + + data_item.length + + '' + + '' + + (item[index] == 'risk' && that.warning_num > 0 + ? 'Collapse' + : 'Details') + + '' + + '
          ' + + (function (index, item) { + var htmls = '
          '; + return htmls; + })(index, item) + + '
        2. '; + }); + $('.warning_scan_body').html(html); + scan_time = Date.now() / 1000; + // $('.warning_scan_time').html('Checked: ' + bt.format_data(scan_time)+'>>Obtain test report ' ); + $('.warning_scan_time').html('Checked: ' + bt.format_data(scan_time)); + } + var dialog_forbid_data; + var danger_check_data = []; + bt.open({ + type: '1', + title: 'Security risk', + area: ['850px', '700px'], + skin: 'warning_scan_view', + content: + '
          ' + + '
          ' + + '' + + (that.warning_num > 0 ? 'This scan check ' + that.warning_num + ' risks, Suggested repair!' : 'This scan check no risks, please keep it!') + + '' + + '' + + '' + + '' + + '
          ' + + '
            ' + + '
            ', + success: function () { + //检测按钮 + $('.warning_again_scan').click(function () { + var loadT = bt.load("
            Re detecting security risks, please wait...
            "); + setTimeout(function () { + that.getScanSpeed('.myspeed', 'Security risks are being redetected, please wait', '/warning?action=get_scan_bar'); + }, 50); + that.get_warning_list(true, function () { + layer.msg('Scan succeeded', { icon: 1 }); + reader_warning_list(that.warning_list); + if (that.warning_list.risk.length == 0) { + $('.warning_auto_repair').css('display', 'none'); + $('.warning_again_scan').css('right', '20px'); + } else { + $('.warning_auto_repair').css('display', 'inline'); + $('.warning_again_scan').css('right', '160px'); + } + }); + }); + bt_tools.send({ url: '/warning?action=get_list' }, function (warInfo) { + // 显示数据 + if (that.warning_list.risk.length == 0) { + $('.warning_auto_repair').css('display', 'none'); + $('.warning_again_scan').css('right', '20px'); + } + //一键修复按钮 + $('.warning_auto_repair').click(function () { + dialog_forbid_data = []; + danger_check_data = []; + $.each(that.warning_list.risk, function (index_c, item_c) { + //可修复项 + if (!item_c.cve_id) { + if ($.inArray(item_c.m_name, warInfo.is_autofix) != -1) { + danger_check_data.push(item_c); + } else { + dialog_forbid_data.push(item_c); + } + } else { + if ($.inArray(item_c.cve_id, warInfo.is_autofix) != -1) { + item_c['title'] = 'System vulnerability'; + item_c['ps'] = item_c.vuln_name; + danger_check_data.push(item_c); + } else { + item_c['ps'] = item_c.vuln_name; + dialog_forbid_data.push(item_c); + } + } + }); + + var contentHtml = + '
            \ +
            \ +
            \ +
            \ + There are ' + + dialog_forbid_data.length + + ' risks that cannot be repaired with one click\ + \ + Detail\ +
            \ +
            \ +
            \ +
            \ +
            \ +

            \ + The above ' + + dialog_forbid_data.length + + ' items may lead to normal website access and abnormal service operation after one-click repair (please repair manually)\ +

            \ +
            \ +
            \ +
            \ +
            \ + Please select the risk items to be repaired (selected: ' + + 0 + + ')\ +
            \ +
            \ +
            \ +
            \ + If you have installed [System hardening], please turn them off before repairing\ + For Professional Version only, please Upgrade now\ + \ +
            \ +
            '; + + if (!dialog_forbid_data.length || !danger_check_data.length) height = true; + var check_data; + var height = false; + layer.open({ + title: 'One-click repair confirm information', + content: contentHtml, + btn: false, + closeBtn: 2, + area: height ? ['640px', '380px'] : ['640px', '480px'], + success: function (layero, index) { + check_data = bt_tools.table({ + el: '#auto_repair', + data: danger_check_data, + load: true, + height: '178px', + column: [ + { + type: 'checkbox', + width: 20, + }, + { + fid: 'title', + title: 'Test Type', + }, + { + fid: 'ps', + title: 'Risk Item', + }, + { + fid: 'level', + title: 'Risk Level', + width: 100, + template: function (row) { + return row.level == 1 ? 'High' : row.level == 2 ? 'Medium' : 'Low'; + }, + }, + ], + }); + // 判定表格选中长度 + $('#auto_repair tbody input,#auto_repair thead input').change(function () { + $('#danger_length').text(check_data.checkbox_list.length); + if (check_data.checkbox_list.length) { + $('#confirm_button').attr('disabled', false); + $('#confirm_button').css('background-color', '#20a53a'); + } else { + $('#confirm_button').attr('disabled', true); + $('#confirm_button').css('background-color', 'rgb(203, 203, 203)'); + } + }); + // 不存在不可修复项时 + if (!dialog_forbid_data.length) { + $('#choose_auto_repair').html('Please select the risk items to be repaired (selected: ' + 0 + ')'); + $('.forbid').css('display', 'none'); + $('.dialog').find('hr').css('display', 'none'); + } + if (!danger_check_data.length) { + $('.dialog').find('hr').css('display', 'none'); + $('#choose_auto_repair').html('There are no currently repairable risk items!'); + $('#confirm_button').attr('disabled', true); + $('#confirm_button').css('background-color', 'rgb(203, 203, 203)'); + } + // 一键修复 + $('#confirm_button').click(function (e) { + if (check_data.checkbox_list.length != 0) { + var danger_selected_data = []; + $.each(check_data.checkbox_list, function (index, item) { + danger_selected_data.push(danger_check_data[item].m_name || danger_check_data[item].cve_id); + }); + that.auto_repair(danger_selected_data, that.warning_list); + } else { + layer.msg('No risk items are currently selected!', { type: 1 }); + e.stopPropagation(); + e.preventDefault(); + } + }); + // 查看详情列表 + var _details = + '
            ', + thead = '', + _tr = ''; + $.each(dialog_forbid_data, function (index, item) { + _tr += + ''; + }); + thead = ''; + _details += thead + '' + _tr + '
            ' + + (index + 1) + + '' + + item.ps + + '
            The following ' + dialog_forbid_data.length + ' items cannot be repaired with one click
            '; + + $('.daily_details_mask').html(_details); + + $('#look_detail').on('click', function (e) { + $('.daily_details_mask').prev('a').css('color', '#23527c'); + if (e.target.localName == 'a') { + if ($('.daily_details_mask').hasClass('hide')) { + $('.daily_details_mask').removeClass('hide').css({ right: 20, top: 50 }); + } else { + $('.daily_details_mask').addClass('hide'); + $('.daily_details_mask').prev('a').removeAttr('style'); + } + } + bt.fixed_table('daliy_details_table'); + $(document).click(function (ev) { + $('.daily_details_mask').addClass('hide').prev('a').removeAttr('style'); + ev.stopPropagation(); + }); + e.stopPropagation(); + }); + + $('i[data-checkbox=all]').click(); + + // 是否为专业版 + var ltd = parseInt(bt.get_cookie('pro_end') || -1); + if (ltd > 0) { + $('#is_ltd').css('display', 'none'); + } else { + $('#is_ltd').prev().hide(); + $('#confirm_button').attr('disabled', true); + $('#confirm_button').css('background-color', 'rgb(203, 203, 203)'); + } + + $('.openLtd').click(function () { + var item = { + ps: 'Provide automatic repair solutions for security problems such as vulnerabilities and settings in the scanning server system, and perform automatic one-click repair for risk items scanned', + description: ['Automatic Repair Scheme', 'Repair result display'], + pluginName: 'Risk one-click repair', + preview: false, + imgSrc: 'https://www.bt.cn/Public/new/plugin/introduce/home/autoRepair.png', + }; + bt.soft.product_pay_view({ + totalNum: 68, + limit: 'pro', + closePro: true, + pluginName: item.pluginName, + fun: function () { + product_recommend.recommend_product_view(item, undefined, 'pro', 68, 'pro', true); + }, + }); + }); + }, + }); + }); + // 3个大的下来的点击事件 + $('.warning_scan_body').on('click', '.module_item .module_head', function () { + var _parent = $(this).parent(), + _parent_index = _parent.index(), + _list = $(this).next(); + if (parseInt($(this).find('.module_num').text()) > 0) { + if (_list.hasClass('active')) { + _list.css('height', 0); + $(this).find('.module_cut_show i').text('Detail').next().removeClass('glyphicon-menu-up').addClass('glyphicon-menu-down'); + setTimeout(function () { + _list.removeClass('active').removeAttr('style'); + }, 500); + } else { + $(this).find('.module_cut_show i').text('Collapse').next().removeClass('glyphicon-menu-down').addClass('glyphicon-menu-up'); + _list.addClass('active'); + var details_list = _list.parent().siblings().find('.module_details_list'); + details_list.removeClass('active'); + details_list.prev().find('.module_cut_show i').text('Detail').next().removeClass('glyphicon-menu-up').addClass('glyphicon-menu-down'); + } + } + }); + $('.warning_repair_scan').click(function () { + bt.onlineService(); + }); + // 右边的操作 + $('.warning_scan_body').on('click', '.operate_tools a', function () { + var index = $(this).index(), + data = $(this).data(); + switch (index) { + case 0: + if ($(this).hasClass('active')) { + $(this).parents('.module_details_head').next().hide(); + $(this).removeClass('active').text('Detail'); + } else { + var item = $(this).parents('.module_details_item'), + indexs = item.index(); + $(this).addClass('active').text('Collapse'); + item.siblings().find('.module_details_body').hide(); + item.siblings().find('.operate_tools a:eq(0)').removeClass('active').text('Detail'); + $(this).parents('.module_details_head').next().show(); + $('.module_details_list').scrollTop(indexs * 41); + } + + break; + case 1: + if (data.type != 'ignore') { + bt.confirm({ title: 'Ignore risk', msg: 'Confirm to ignore [' + data.title + '] risk?' }, function () { + if (data.type != 'vuln') { + that.warning_set_ignore(data.model, function (res) { + that.get_warning_list(false, function () { + if (!that.warning_list.risk.length) { + $('.warning_auto_repair').css('display', 'none'); + $('.warning_again_scan').css('right', '40px'); + } + bt.msg(res); + reader_warning_list(that.warning_list); + }); + }); + } else { + // console.log('漏洞的'); + that.bug_set_ignore(data.id, function (res) { + that.get_warning_list(false, function () { + if (!that.warning_list.risk.length) { + $('.warning_auto_repair').css('display', 'none'); + $('.warning_again_scan').css('right', '40px'); + } + bt.msg(res); + reader_warning_list(that.warning_list); + }); + }); + } + }); + } else { + that.warning_set_ignore(data.model, function (res) { + that.get_warning_list(false, function () { + bt.msg(res); + reader_warning_list(that.warning_list); + if (that.warning_list.risk.length) { + $('.warning_auto_repair').css('display', 'inline'); + $('.warning_again_scan').css('right', '160px'); + } + setTimeout(function () { + $('.module_item.ignore').click(); + }, 100); + }); + }); + } + break; + case 2: + if (data.type != 'vuln') { + that.waring_check_find(data.model, function (res) { + that.get_warning_list(false, function () { + bt.msg(res); + reader_warning_list(that.warning_list); + }); + }); + } else { + that.bug_check_find(data.id, function (res) { + that.get_warning_list(false, function () { + bt.msg(res); + reader_warning_list(that.warning_list); + }); + }); + } + break; + } + }); + reader_warning_list(that.warning_list); + }); + }, + }); + // var that = this; + // function reader_warning_list(data){ + // var html = '',scan_time = '',arry = [['risk','Risk'],['security','Security'],['ignore','Ignore']],level = [['Low risk','#e8d544'],['Medium risk','#E6A23C'],['High risk','red']] + // bt.each(arry,function(index,item){ + // var data_item = data[item[0]],data_title = item[1]; + // html += '
          1. '+ + // '
            '+ + // ''+ data_title +''+ + // ''+ data_item.length +''+ + // ''+ (item[index] == 'risk' && that.warning_num > 0?'Collapse':'Details') +''+ + // '
            '+ + // (function(index,item){ + // var htmls = '
              '; + // bt.each(data_item,function(indexs,items){ + // scan_time = items.check_time; + // htmls += '
            • '+ + // '
              '+ + // ''+ items.ps +'(Checked: '+ (that.get_simplify_time(items.check_time) || 'Just') +', time: '+ ( items.taking>1?( items.taking +'Sec'):((items.taking * 1000).toFixed(2) +'ms')) +')'+ + // ''+ (item[0] != 'security'?('Detail  |  '+ (item[0] != 'ignore'?'Ignore':'Remove') +'  |  Check'):'Detail') +'' + + // '
              '+ + // '
              '+ + // '
              '+ + // '
              Test type: '+ items.title +'
              '+ + // '
              Risk level: '+ level[items.level-1][0] +'
              '+ + // '
              '+ + // '
              Risk detail: '+ items.msg +'
              '+ + // '
              '+ (item[0] != 'security'?'Solution: ':'Suggest: ') +''+ + // (function(){ + // var htmlss = ''; + // bt.each(items.tips,function(indexss,itemss){ + // htmlss +=''+ (indexss+1) +'、'+ itemss +'
              '; + // }); + // return htmlss; + // }()) +'
              '+ + // (items.help != ''?(''):'') + + // '
              '+ + // '
            • '; + // }); + // htmls += '
            '; + // return htmls; + // }(index,item)) + // +'
          2. ' + // }); + // $('.warning_scan_body').html(html); + // $('.warning_scan_time').html('Checked:  '+ bt.format_data(scan_time)); + // } + // bt.open({ + // type:'1', + // title:'Security risk', + // area:['850px','700px'], + // skin:'warning_scan_view', + // content:'
            '+ + // '
            '+ + // ''+ (that.warning_num>0?('This scan check '+ that.warning_num +' risks, Suggested repair!'):'This scan check no risks, please keep it!') +''+ + // ''+ + // ''+ + // '
            '+ + // '
              '+ + // '
              ', + // success:function(){ + // $('.warning_again_scan').click(function(){ + // var loadT = layer.msg('Re detecting security risks, please wait...',{icon:16}); + // that.get_warning_list(true,function(){ + // layer.msg('Scan succeeded',{icon:1}); + // reader_warning_list(that.warning_list); + // }); + // }); + // $('.warning_scan_body').on('click','.module_item .module_head',function(){ + // var _parent = $(this).parent(),_parent_index = _parent.index(),_list = $(this).next(); + // if(parseInt($(this).find('.module_num').text()) > 0){ + // if(_list.hasClass('active')){ + // _list.css('height',0); + // $(this).find('.module_cut_show i').text('Detail').next().removeClass('glyphicon-menu-up').addClass('glyphicon-menu-down'); + // setTimeout(function(){ + // _list.removeClass('active').removeAttr('style'); + // },500); + // }else{ + // $(this).find('.module_cut_show i').text('Collapse').next().removeClass('glyphicon-menu-down').addClass('glyphicon-menu-up'); + // _list.addClass('active'); + // var details_list = _list.parent().siblings().find('.module_details_list'); + // details_list.removeClass('active'); + // details_list.prev().find('.module_cut_show i').text('Detail').next().removeClass('glyphicon-menu-up').addClass('glyphicon-menu-down') + // } + // } + // }); + // $('.warning_scan_body').on('click','.operate_tools a',function(){ + // var index = $(this).index(),data = $(this).data(); + // switch(index){ + // case 0: + // if($(this).hasClass('active')){ + // $(this).parents('.module_details_head').next().hide(); + // $(this).removeClass('active').text('Detail'); + // }else{ + // var item = $(this).parents('.module_details_item'),indexs = item.index(); + // $(this).addClass('active').text('Collapse'); + // item.siblings().find('.module_details_body').hide(); + // item.siblings().find('.operate_tools a:eq(0)').removeClass('active').text('Detail'); + // $(this).parents('.module_details_head').next().show(); + // $('.module_details_list').scrollTop(indexs * 41); + // } + // break; + // case 1: + // if(data.type != 'ignore'){ + // bt.confirm({title:'Ignore risk',msg:'Confirm to ignore [ '+ data.title +' ] risk?'},function(){ + // that.warning_set_ignore(data.model,function(res){ + // that.get_warning_list(false,function(){ + // bt.msg(res) + // reader_warning_list(that.warning_list); + // }); + // }); + // }); + // }else{ + // that.warning_set_ignore(data.model,function(res){ + // that.get_warning_list(false,function(){ + // bt.msg(res) + // reader_warning_list(that.warning_list); + // setTimeout(function(){ + // $('.module_item.ignore').click(); + // },100) + // }); + // }); + // } + // break; + // case 2: + // that.waring_check_find(data.model,function(res){ + // that.get_warning_list(false,function(){ + // bt.msg(res) + // reader_warning_list(that.warning_list); + // }); + // }); + // break; + // } + // }); + // reader_warning_list(that.warning_list); + // } + // }) + }, + /** + * @description 安全风险指定模块检查 + * @param {String} model_name 模块名称 + * @param {Function} callback 成功后的回调 + * @return 无返回值 + */ + waring_check_find: function (model_name, callback) { + var loadT = layer.msg('Detecting the specified module, please wait...', { icon: 16, time: 0 }); + bt.send('check_find', 'warning/check_find', { m_name: model_name }, function (res) { + bt.msg(res); + if (res.status !== false) { + if (callback) callback(res); + } + }); + }, + + /** + * @description: 安全风险一键修复 + * @param {*} params 选中的修复项的数组 + * @param {*} data 原先的数组 + * @return {*} + */ + auto_repair: function (params, data) { + var that = this; + var res_data = []; + var loadT = bt.load('
              Fixing the security risk, please wait...
              '); + setTimeout(function () { + that.getScanSpeed('.repair_speed', 'Fixing security risks', '/safe/security/get_repair_bar'); + }, 50); + $.post('/safe/security/set_security', { data: JSON.stringify({ m_name: params }) }, function (rdata) { + if (rdata.msg == 'The current features are exclusive to the professional edition') { + layer.msg(rdata.msg); + return; + } + var res_item = {}; + res_data = []; + $.each(rdata.success, function (index, item) { + res_item.status = item.result.status; + res_item.type = item.result.type; + res_item.msg = item.result.msg; + res_item.m_name = item.m_name; + res_data.push(res_item); + res_item = {}; + }); + $.each(rdata.failed, function (index, item) { + res_item.status = item.result.status; + res_item.type = item.result.type; + res_item.msg = item.result.msg; + res_item.m_name = item.m_name; + res_data.push(res_item); + res_item = {}; + }); + if (rdata.cannot_automatically.length) { + $.each(rdata.cannot_automatically, function (index, item) { + res_item.m_name = item; + res_item.status = 'ignore'; + res_data.push(res_item); + res_item = {}; + }); + } + var result_table = + '

              Repair result: Success ' + + rdata.success.length + + ' items, Fail ' + + rdata.failed.length + + ' items, Ignore ' + + rdata.cannot_automatically.length + + ' items

              ' + + '

              After closing, risk items will be automatically re-detected. If you do not re-detect, please manually click the "Retest" button
              If any item fails to be repaired, close the current window and repair the item manually based on the solution

              '; + layer.open({ + title: 'Result', + content: result_table, + closeBtn: 2, + area: '540px', + btn: false, + success: function (layero, index) { + $('#auto_repair_result').empty(); + bt_tools.table({ + el: '#auto_repair_result', + data: res_data, + load: true, + height: '240px', + column: [ + { + type: 'text', + title: 'Risk item', + template: function (row) { + var rowData; + $.each(data.risk, function (index_d, item_d) { + if (!item_d.cve_id) { + if (item_d.m_name == row.m_name) { + rowData = '' + item_d.title + ''; + } + } else { + rowData = '' + row.m_name + ''; + } + }); + return rowData; + }, + }, + { + type: 'text', + title: 'Info (website or other)', + width: 200, + template: function (row) { + if (row.type.length) { + if (Array.isArray(row.type)) { + var data = row.type.join(','); + return '' + data + ''; + } + return '' + row.type + ''; + } else { + return '--'; + } + }, + }, + { + title: 'Opt', + type: 'text', + align: 'right', + template: function (row) { + if (row.status == false) { + return 'Fail'; + } else if (row.status == true) { + return 'Success'; + } else if (row.status == 'ignore') { + return 'Ignore risk'; + } + }, + }, + ], + }); + }, + cancel: function (index, layers) { + res_data = []; + layer.close(index); + var loadT = layer.msg('Retesting for security risks, please wait...', { + icon: 16, + }); + $('.warning_again_scan').click(); + }, + }); + }); + }, + /** + * @description 安全风险指定模块是否忽略 + * @param {String} model_name 模块名称 + * @param {Function} callback 成功后的回调 + * @return 无返回值 + */ + warning_set_ignore: function (model_name, callback) { + var loadT = layer.msg('Setting the specified module, please wait...', { icon: 16, time: 0 }); + bt.send('set_ignore', 'warning/set_ignore', { m_name: model_name }, function (res) { + bt.msg(res); + if (res.status !== false) { + if (callback) callback(res); + } + }); + }, + /** + * @description 获取当前的产品状态 + */ + get_product_status: function (callback) { + // var loadT = layer.msg('正在获取产品状态,请稍候...', { icon: 16, time: 0 }) + bt.send('get_pd', 'ajax/get_pd', {}, function (res) { + $('.btpro-gray').replaceWith($(res[0])); + bt.set_cookie('pro_end', res[1]); + bt.set_cookie('ltd_end', res[2]); + if (res[1] === 0) { + $('.btpro span').click(function (e) { + layer.confirm('切换回免费版可通过解绑账号实现', { icon: 3, btn: ['解绑账号'], closeBtn: 2, title: '是否取消授权' }, function () { + $.post('/ssl?action=DelToken', {}, function (rdata) { + layer.msg(rdata.msg); + setTimeout(function () { + window.location.reload(); + }, 2000); + }); + }); + e.stopPropagation(); + }); + } + if (callback) callback(); + }); + }, + /** + * @description 推荐进阶版产品 + */ + recommend_paid_version: function () { + try { + var recomConfig = product_recommend.get_recommend_type(0); + var pay_status = product_recommend.get_pay_status(); + var is_pay = pay_status.is_pay; + var advanced = pay_status.advanced; + var end_time = pay_status.end_time; + var html = '', + list_html = ''; + if (!is_pay) advanced = ''; //未购买的时候,使用推荐内容 + if (recomConfig) { + var item = recomConfig; + for (let j = 0; j < item['ps'].length; j++) { + const element = item['ps'][j]; + list_html += '
              ' + element + '
              '; + } + var pay_html = ''; + if (is_pay) { + pay_html = + '
              '; + } else { + pay_html = + '
              '; + } + html = + '
              \ +
              ' + + (!is_pay ? pay_html : '') + + '
              ' + + (is_pay ? pay_html : '') + + '\ +
              ' + + list_html + + '
              \
              \ -
              ' - $('#home-recommend').html(html) - } - } catch (error) { - console.log(error) - } - } -} +
              '; + $('#home-recommend').html(html); + } + } catch (error) { + console.log(error); + } + }, +}; index.get_init(); //setTimeout(function () { index.get_cloud_list() }, 800); -product_recommend.init(function(){ - index.get_product_status(function(){ - index.recommend_paid_version() - }); - index.get_index_list(); -}) \ No newline at end of file +product_recommend.init(function () { + index.get_product_status(function () { + index.recommend_paid_version(); + }); + index.get_index_list(); +}); diff --git a/BTPanel/static/js/jquery-2.2.4.min.js b/BTPanel/static/js/jquery-2.2.4.min.js new file mode 100644 index 00000000..4024b662 --- /dev/null +++ b/BTPanel/static/js/jquery-2.2.4.min.js @@ -0,0 +1,4 @@ +/*! jQuery v2.2.4 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="2.2.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){var b;if("object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype||{},"isPrototypeOf"))return!1;for(b in a);return void 0===b||k.call(a,b)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||n.uniqueSort(e),D.test(a)&&e.reverse()),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},L=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function M(){this.expando=n.expando+M.uid++}M.uid=1,M.prototype={register:function(a,b){var c=b||{};return a.nodeType?a[this.expando]=c:Object.defineProperty(a,this.expando,{value:c,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L(a))return{};var b=a[this.expando];return b||(b={},L(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[b]=c;else for(d in b)e[d]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=a[this.expando];if(void 0!==f){if(void 0===b)this.register(a);else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in f?d=[b,e]:(d=e,d=d in f?[d]:d.match(G)||[])),c=d.length;while(c--)delete f[d[c]]}(void 0===b||n.isEmptyObject(f))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var N=new M,O=new M,P=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function R(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Q,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:P.test(c)?n.parseJSON(c):c; +}catch(e){}O.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",""],thead:[1,"","
              "],col:[2,"","
              "],tr:[2,"","
              "],td:[3,"","
              "],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|&#?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=_(l.appendChild(f),"script"),j&&aa(g),c){k=0;while(f=g[k++])Z.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var da=/^key/,ea=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fa=/^([^.]*)(?:\.(.+)|)/;function ga(){return!0}function ha(){return!1}function ia(){try{return d.activeElement}catch(a){}}function ja(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ja(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ha;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(G)||[""],j=b.length;while(j--)h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.hasData(a)&&N.get(a);if(r&&(i=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&N.remove(a,"handle events")}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(N.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!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&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,la=/\s*$/g;function pa(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function qa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function ra(a){var b=na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function sa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(N.hasData(a)&&(f=N.access(a),g=N.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}O.hasData(a)&&(h=O.access(a),i=n.extend({},h),O.set(b,i))}}function ta(a,b){var c=b.nodeName.toLowerCase();"input"===c&&X.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function ua(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&ma.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),ua(f,b,c,d)});if(o&&(e=ca(b,a[0].ownerDocument,!1,a,d),g=e.firstChild,1===e.childNodes.length&&(e=g),g||d)){for(h=n.map(_(e,"script"),qa),i=h.length;o>m;m++)j=e,m!==p&&(j=n.clone(j,!0,!0),i&&n.merge(h,_(j,"script"))),c.call(a[m],j,m);if(i)for(k=h[h.length-1].ownerDocument,n.map(h,ra),m=0;i>m;m++)j=h[m],Z.test(j.type||"")&&!N.access(j,"globalEval")&&n.contains(k,j)&&(j.src?n._evalUrl&&n._evalUrl(j.src):n.globalEval(j.textContent.replace(oa,"")))}return a}function va(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(_(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&aa(_(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(ka,"<$1>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=_(h),f=_(a),d=0,e=f.length;e>d;d++)ta(f[d],g[d]);if(b)if(c)for(f=f||_(a),g=g||_(h),d=0,e=f.length;e>d;d++)sa(f[d],g[d]);else sa(a,h);return g=_(h,"script"),g.length>0&&aa(g,!i&&_(a,"script")),h},cleanData:function(a){for(var b,c,d,e=n.event.special,f=0;void 0!==(c=a[f]);f++)if(L(c)){if(b=c[N.expando]){if(b.events)for(d in b.events)e[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);c[N.expando]=void 0}c[O.expando]&&(c[O.expando]=void 0)}}}),n.fn.extend({domManip:ua,detach:function(a){return va(this,a,!0)},remove:function(a){return va(this,a)},text:function(a){return K(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.appendChild(a)}})},prepend:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(_(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return K(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!la.test(a)&&!$[(Y.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(_(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return ua(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(_(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),f=e.length-1,h=0;f>=h;h++)c=h===f?this:this.clone(!0),n(e[h])[b](c),g.apply(d,c.get());return this.pushStack(d)}});var wa,xa={HTML:"block",BODY:"block"};function ya(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function za(a){var b=d,c=xa[a];return c||(c=ya(a,b),"none"!==c&&c||(wa=(wa||n("'; - $("body").append(loginForm); - layer.msg(lan.bt.panel_open, { icon: 16, shade: [0.3, '#000'], time: 1000 }); - setTimeout(function() { - $("#toBtpanel").submit(); - }, 500); - setTimeout(function() { - window.open(murl); - }, 1000); - }); - $(".btedit").click(function(e) { - e.stopPropagation(); - }); - }) - + $('body').append(loginForm); + layer.msg(lan.bt.panel_open, { icon: 16, shade: [0.3, '#000'], time: 1000 }); + setTimeout(function () { + $('#toBtpanel').submit(); + }, 500); + setTimeout(function () { + window.open(murl); + }, 1000); + }); + $('.btedit').click(function (e) { + e.stopPropagation(); + }); + }); } GetBtpanelList(); //添加面板快捷登录 function bindBTPanel(a, type, ip, btid, url, user, pw) { - var titleName = lan.bt.panel_add; - if (type == "b") { - btn = ""; - } else { - titleName = lan.bt.panel_edit + ip; - btn = ""; - } - if (url == undefined) url = "http://"; - if (user == undefined) user = ""; - if (pw == undefined) pw = ""; - if (ip == undefined) ip = ""; - if (a == 1) { - var gurl = "/config?action=AddPanelInfo"; - var btaddress = $("#btaddress").val(); - if (!btaddress.match(/^(http|https)+:\/\/([\w-]+\.)+[\w-]+:\d+/)) { - layer.msg(lan.bt.panel_err_format + '

              http://192.168.0.1:8888

              ', { icon: 5, time: 5000 }); - return; - } - var btuser = encodeURIComponent($("#btuser").val()); - var btpassword = encodeURIComponent($("#btpassword").val()); - var bttitle = $("#bttitle").val(); - var data = "title=" + bttitle + "&url=" + encodeURIComponent(btaddress) + "&username=" + btuser + "&password=" + btpassword; - if (btaddress == "" || btuser == "" || btpassword == "" || bttitle == "") { - layer.msg(lan.bt.panel_err_empty, { icon: 8 }); - return; - } - if (type == "c") { - gurl = "/config?action=SetPanelInfo"; - data = data + "&id=" + btid; - } - $.post(gurl, data, function(b) { - if (b.status) { - layer.closeAll(); - layer.msg(b.msg, { icon: 1 }); - GetBtpanelList(); - } else { - layer.msg(b.msg, { icon: 2 }) - } - }); - return - } - layer.open({ - type: 1, - area: "400px", - title: titleName, - closeBtn: 2, - shift: 5, - shadeClose: false, - content: "
              \ -
              " + lan.bt.panel_address + "\ -
              \ + var titleName = lan.bt.panel_add; + if (type == 'b') { + btn = "'; + } else { + titleName = lan.bt.panel_edit + ip; + btn = + "'; + } + if (url == undefined) url = 'http://'; + if (user == undefined) user = ''; + if (pw == undefined) pw = ''; + if (ip == undefined) ip = ''; + if (a == 1) { + var gurl = '/config?action=AddPanelInfo'; + var btaddress = $('#btaddress').val(); + if (!btaddress.match(/^(http|https)+:\/\/([\w-]+\.)+[\w-]+:\d+/)) { + layer.msg(lan.bt.panel_err_format + '

              http://192.168.0.1:8888

              ', { icon: 5, time: 5000 }); + return; + } + var btuser = encodeURIComponent($('#btuser').val()); + var btpassword = encodeURIComponent($('#btpassword').val()); + var bttitle = $('#bttitle').val(); + var data = 'title=' + bttitle + '&url=' + encodeURIComponent(btaddress) + '&username=' + btuser + '&password=' + btpassword; + if (btaddress == '' || btuser == '' || btpassword == '' || bttitle == '') { + layer.msg(lan.bt.panel_err_empty, { icon: 8 }); + return; + } + if (type == 'c') { + gurl = '/config?action=SetPanelInfo'; + data = data + '&id=' + btid; + } + $.post(gurl, data, function (b) { + if (b.status) { + layer.closeAll(); + layer.msg(b.msg, { icon: 1 }); + GetBtpanelList(); + } else { + layer.msg(b.msg, { icon: 2 }); + } + }); + return; + } + layer.open({ + type: 1, + area: '400px', + title: titleName, + closeBtn: 2, + shift: 5, + shadeClose: false, + content: + "
              \ +
              " + + lan.bt.panel_address + + "\ +
              \
              \ -
              " + lan.bt.panel_user + "\ -
              \ +
              " + + lan.bt.panel_user + + "\ +
              \
              \ -
              " + lan.bt.panel_pass + "\ -
              \ +
              " + + lan.bt.panel_pass + + "\ +
              \
              \ -
              " + lan.bt.panel_ps + "\ -
              \ +
              " + + lan.bt.panel_ps + + "\ +
              \
              \ -
              • " + lan.bt.panel_ps_1 + "
              • " + lan.bt.panel_ps_2 + "
              • " + lan.bt.panel_ps_3 + "
              \ -
              " + btn + "
              " - }); - $("#btaddress").on("input", function() { - var str = $(this).val(); - var isip = /([\w-]+\.){2,6}\w+/; - var iptext = str.match(isip); - if (iptext) $("#bttitle").val(iptext[0]); - }).blur(function() { - var str = $(this).val(); - var isip = /([\w-]+\.){2,6}\w+/; - var iptext = str.match(isip); - if (iptext) $("#bttitle").val(iptext[0]); - }); +
              • " + + lan.bt.panel_ps_1 + + '
              • ' + + lan.bt.panel_ps_2 + + '
              • ' + + lan.bt.panel_ps_3 + + "
              \ +
              ' + + btn + + '
              ', + }); + $('#btaddress') + .on('input', function () { + var str = $(this).val(); + var isip = /([\w-]+\.){2,6}\w+/; + var iptext = str.match(isip); + if (iptext) $('#bttitle').val(iptext[0]); + }) + .blur(function () { + var str = $(this).val(); + var isip = /([\w-]+\.){2,6}\w+/; + var iptext = str.match(isip); + if (iptext) $('#bttitle').val(iptext[0]); + }); } //删除快捷登录 function bindBTPaneldel(id) { - $.post("/config?action=DelPanelInfo", "id=" + id, function(rdata) { - layer.closeAll(); - layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); - GetBtpanelList(); - }) -} - -function getSpeed(sele) { - if (!$(sele)) return; - $.get('/ajax?action=GetSpeed', function(speed) { - if (speed.title === null) return; - mspeed = ''; - if (speed.speed > 0) { - mspeed = '' + ToSize(speed.speed) + '/s'; - } - body = '

              ' + speed.title + '

              \ -
              ' + speed.progress + '%
              \ -

              ' + speed.used + '/' + speed.total + '' + mspeed + '

              '; - $(sele).prev().hide(); - $(sele).css({ "margin-left": "-37px", "width": "380px" }); - $(sele).parents(".layui-layer").css({ "margin-left": "-100px" }); - - $(sele).html(body); - setTimeout(function() { - getSpeed(sele); - }, 1000); - }); -} -//消息盒子 -function messagebox(){ - layer.open({ - type: 1, - title: lan.bt.task_title, - area: "680px", - closeBtn: 2, - shadeClose: false, - content: '
              ' + - '
              ' + - '
              ' + - '

              '+ lan.bt.task_list +' (0)

              ' + - '

              '+ lan.bt.task_msg +' (0)

              ' + - '

              '+lan.public.exec_log+'

              ' + - '
              ' + - '
              ' + - '
              \ -
                \ -
                ' + lan.public.task_long_time_not_exec + '
                \ -
                '+ - '
                '+ - '
                '+ - '
                ' + - '
                ' + - '
                ', - success: function(layers,indexs){ - $(layers).find('.bt-w-menu p').on('click',function(){ - var index = $(this).index() - $(this).addClass('bgw').siblings().removeClass('bgw'); - $(layers).find('.bt-w-con .bt-w-item:eq('+ index +')').addClass('active').siblings().removeClass('active'); - switch (index) { - case 0: - reader_realtime_tasks() - break; - case 1: - reader_message_list() - break; - case 2: - var loadT = bt.load('正在获取执行日志,请稍后...') - bt.send('GetExecLog','files/GetExecLog',{},function(res){ - loadT.close(); - var exec_log = $('#execLog'); - // console.log(exec_log) - exec_log.html(res) - exec_log[0].scrollTop = exec_log[0].scrollHeight - }) - break; - } - }) - reader_realtime_tasks() - setTimeout(function(){ - reader_realtime_tasks() - },1000) - reader_message_list() - } + $.post('/config?action=DelPanelInfo', 'id=' + id, function (rdata) { + layer.closeAll(); + layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); + GetBtpanelList(); }); } -function get_message_data(page,callback){ - if(typeof page === "function") callback = page,page = 1; - var loadT = bt.load('Getting message list, please wait...'); - bt.send("getData","data/getData",{ - tojs:'reader_message_list', - table:'tasks', - result:'2,4,6,8', - limit:'11', - search:'1', - p:page - },function(res){ - loadT.close(); - if(callback) callback(res); - }) +function getSpeed(sele) { + if (!$(sele)) return; + $.get('/ajax?action=GetSpeed', function (speed) { + if (speed.title === null) return; + mspeed = ''; + if (speed.speed > 0) { + mspeed = '' + ToSize(speed.speed) + '/s'; + } + body = + '

                ' + + speed.title + + '

                \ +
                ' + + speed.progress + + '%
                \ +

                ' + + speed.used + + '/' + + speed.total + + '' + + mspeed + + '

                '; + $(sele).prev().hide(); + $(sele).css({ 'margin-left': '-37px', width: '380px' }); + $(sele).parents('.layui-layer').css({ 'margin-left': '-100px' }); + + $(sele).html(body); + setTimeout(function () { + getSpeed(sele); + }, 1000); + }); +} +//消息盒子 +function messagebox() { + layer.open({ + type: 1, + title: lan.bt.task_title, + area: '680px', + closeBtn: 2, + shadeClose: false, + content: + '
                ' + + '
                ' + + '
                ' + + '

                ' + + lan.bt.task_list + + ' (0)

                ' + + '

                ' + + lan.bt.task_msg + + ' (0)

                ' + + '

                ' + + lan.public.exec_log + + '

                ' + + '
                ' + + '
                ' + + '
                \ +
                  \ +
                  ' + + lan.public.task_long_time_not_exec + + '
                  \ +
                  ' + + '
                  ' + + '
                  ' + + '
                  ' + + '
                  ' + + '
                  ', + success: function (layers, indexs) { + $(layers) + .find('.bt-w-menu p') + .on('click', function () { + var index = $(this).index(); + $(this).addClass('bgw').siblings().removeClass('bgw'); + $(layers) + .find('.bt-w-con .bt-w-item:eq(' + index + ')') + .addClass('active') + .siblings() + .removeClass('active'); + switch (index) { + case 0: + reader_realtime_tasks(); + break; + case 1: + reader_message_list(); + break; + case 2: + var loadT = bt.load('Getting execution log, please wait...'); + bt.send('GetExecLog', 'files/GetExecLog', {}, function (res) { + loadT.close(); + var exec_log = $('#execLog'); + // console.log(exec_log) + exec_log.html(res); + exec_log[0].scrollTop = exec_log[0].scrollHeight; + }); + break; + } + }); + reader_realtime_tasks(); + setTimeout(function () { + reader_realtime_tasks(); + }, 1000); + reader_message_list(); + }, + }); } -function reader_message_list(page){ - get_message_data(page,function(res){ - var html = "",f = false,task_count = 0; +function get_message_data(page, callback) { + if (typeof page === 'function') (callback = page), (page = 1); + var loadT = bt.load('Getting message list, please wait...'); + bt.send( + 'getData', + 'data/getData', + { + tojs: 'reader_message_list', + table: 'tasks', + result: '2,4,6,8', + limit: '11', + search: '1', + p: page, + }, + function (res) { + loadT.close(); + if (callback) callback(res); + } + ); +} + +function reader_message_list(page) { + get_message_data(page, function (res) { + var html = '', + f = false, + task_count = 0; for (var i = 0; i < res.data.length; i++) { - var item = res.data[i]; + var item = res.data[i]; if (item.status !== '1') { - task_count ++; + task_count++; continue; } - html += '
                  ' + item.name + '【' + lan.bt.task_ok + '】' + lan.bt.time + (item.end - item.start) + lan.bt.s + '
                  ' + item.addtime + '' + html += + '
                  ' + + item.name + + ' [' + + lan.bt.task_ok + + '] ' + + lan.bt.time + + ' ' + + (item.end - item.start) + + ' ' + + lan.bt.s + + '
                  ' + + item.addtime + + ''; } - var con = '
                  \ - \ - '+ html + '\ + var con = + '
                  '+ lan.bt.task_name + '' + lan.bt.task_time + '
                  \ + \ + ' + + html + + '\
                  ' + + lan.bt.task_name + + '' + + lan.bt.task_time + + '
                  \
                  \ - \ + \
                  \
                  '; - - var msg_count = res.page.match(/\'Pcount\'>.+<\/span>/)[0].replace(/[^0-9]/ig, ""); - $("#taskCompleteNum").text(parseInt(msg_count) - task_count); - $("#messageContent").html(con); - $("#taskPage").html(res.page); - }) + var msg_count = res.page.match(/\'Pcount\'>.+<\/span>/)[0].replace(/[^0-9]/gi, ''); + $('#taskCompleteNum').text(parseInt(msg_count) - task_count); + $('#messageContent').html(con); + $('#taskPage').html(res.page); + }); } - -function get_realtime_tasks(callback){ - bt.send('GetTaskSpeed','files/GetTaskSpeed',{},function(res){ - if(callback) callback(res) - }) +function get_realtime_tasks(callback) { + bt.send('GetTaskSpeed', 'files/GetTaskSpeed', {}, function (res) { + if (callback) callback(res); + }); } -var initTime = null,messageBoxWssock = null; +var initTime = null, + messageBoxWssock = null; -function reader_realtime_tasks(refresh){ - get_realtime_tasks(function(res){ +function reader_realtime_tasks(refresh) { + get_realtime_tasks(function (res) { var command_install_list = $('#command_install_list'), - loading = 'data:image/gif;base64,R0lGODlhDgACAIAAAHNzcwAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFDgABACwAAAAAAgACAAACAoRRACH5BAUOAAEALAQAAAACAAIAAAIChFEAIfkEBQ4AAQAsCAAAAAIAAgAAAgKEUQAh+QQJDgABACwAAAAADgACAAACBoyPBpu9BQA7', + loading = + 'data:image/gif;base64,R0lGODlhDgACAIAAAHNzcwAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFDgABACwAAAAAAgACAAACAoRRACH5BAUOAAEALAQAAAACAAIAAAIChFEAIfkEBQ4AAQAsCAAAAAIAAgAAAgKEUQAh+QQJDgABACwAAAAADgACAAACBoyPBpu9BQA7', html = '', message = res.msg, task = res.task; - $('#taskNum').html(typeof res.task === "undefined" ? 0 : res.task.length); - if(typeof res.task === "undefined"){ - html = '
                  '+lan.bt.task_not_list+'
                  ' + lan.public.task_long_time_not_exec + '
                  ' - - command_install_list.html(html) - }else{ - var shell = '', message_split = message.split("\n"); - var del_task = ''+ lan.public.del +'',loading_img = ""; - for(var j = 0; j < message_split.length; j++) { - shell += message_split[j] + "
                  "; + $('#taskNum').html(typeof res.task === 'undefined' ? 0 : res.task.length); + if (typeof res.task === 'undefined') { + html = '
                  ' + lan.bt.task_not_list + '
                  ' + lan.public.task_long_time_not_exec + '
                  '; + + command_install_list.html(html); + } else { + var shell = '', + message_split = message.split('\n'); + var del_task = '' + lan.public.del + '', + loading_img = ""; + for (var j = 0; j < message_split.length; j++) { + shell += message_split[j] + '
                  '; } // if(command_install_list.find('li').length){ // if(command_install_list.find('li').length > res.task.length) command_install_list.find('li:eq(0)').remove(); @@ -3897,397 +5044,509 @@ function reader_realtime_tasks(refresh){ // messageBoxWssock.el = command_install_list.find('pre'); // }else{ for (var i = 0; i < task.length; i++) { - var item = task[i], task_html = ''; - if(item.status === '-1' && item.type === 'download'){ - task_html = "
                  " + item.name + "" + (ToSize(message.used) + "/" + ToSize(message.total)) + "" + message.pre + "%"+ lan.bt.task_downloading +" "+ loading_img +" | "+ del_task.replace('$id', item.id) +""; - }else{ + var item = task[i], + task_html = ''; + if (item.status === '-1' && item.type === 'download') { + task_html = + "
                  " + + item.name + + "" + + (ToSize(message.used) + '/' + ToSize(message.total)) + + "" + + message.pre + + "%" + + lan.bt.task_downloading + + ' ' + + loading_img + + ' | ' + + del_task.replace('$id', item.id) + + ''; + } else { task_html += '' + item.name + ''; task_html += ''; - switch(item.status){ - case '0': - task_html += lan.bt.task_sleep + ' | ' + del_task.replace('$id', item.id); - break - case '-1': - var is_scan = item.name.indexOf("扫描") !== -1; - task_html += (is_scan ? lan.bt.task_scan : lan.bt.task_install) + ' ' + loading_img + ' | ' + del_task.replace('$id', item.id); - break - } - task_html += ""; - if(item.type !== "download" && item.status === "-1"){ - task_html += '
                  ' + shell +'
                  ' + switch (item.status) { + case '0': + task_html += lan.bt.task_sleep + ' | ' + del_task.replace('$id', item.id); + break; + case '-1': + var is_scan = item.name.indexOf('扫描') !== -1; + task_html += (is_scan ? lan.bt.task_scan : lan.bt.task_install) + ' ' + loading_img + ' | ' + del_task.replace('$id', item.id); + break; + } + task_html += ''; + if (item.type !== 'download' && item.status === '-1') { + task_html += "
                  " + shell + '
                  '; } } - html += "
                • "+ task_html +"
                • "; + html += '
                • ' + task_html + '
                • '; } command_install_list.find('ul').html(html); // } - if(task.length > 0 && task[0].status === '0'){ - setTimeout(function(){ - reader_realtime_tasks(true) - },100) + if (task.length > 0 && task[0].status === '0') { + setTimeout(function () { + reader_realtime_tasks(true); + }, 100); } - if(command_install_list.find('pre').length){ - var pre = command_install_list.find('pre') - pre.scrollTop(pre[0].scrollHeight) + if (command_install_list.find('pre').length) { + var pre = command_install_list.find('pre'); + pre.scrollTop(pre[0].scrollHeight); } - if(!refresh){ + if (!refresh) { messageBoxWssock = bt_tools.command_line_output({ - el:'#command_install_list .command_output_pre', - area:['100%','200px'], - shell:'tail -n 100 -f /tmp/panelExec.log', - message:function(res){ - if(res.indexOf('|-Successify ---Script execution completed---') > -1){ - setTimeout(function(){ - reader_realtime_tasks(true) - reader_message_list() - },100) - } + el: '#command_install_list .command_output_pre', + area: ['100%', '200px'], + shell: 'tail -n 100 -f /tmp/panelExec.log', + message: function (res) { + if (res.indexOf('|-Successify ---Script execution completed---') > -1) { + setTimeout(function () { + reader_realtime_tasks(true); + reader_message_list(); + }, 100); } - } - ); + }, + }); } } - }) + }); } //取执行日志 function execLog() { - $.post('/files?action=GetExecLog', {}, function(logs) { - var lbody = ''; - $(".taskcon").html(lbody); - var ob = document.getElementById('exec_log'); - ob.scrollTop = ob.scrollHeight; - }); + $.post('/files?action=GetExecLog', {}, function (logs) { + var lbody = ''; + $('.taskcon').html(lbody); + var ob = document.getElementById('exec_log'); + ob.scrollTop = ob.scrollHeight; + }); } function get_msg_data(a, fun) { - a = a == undefined ? 1 : a; - $.post("/data?action=getData", "tojs=remind&table=tasks&result=2,4,6,8&limit=10&search=1&p=" + a, function(g) { - fun(g) - }) + a = a == undefined ? 1 : a; + $.post('/data?action=getData', 'tojs=remind&table=tasks&result=2,4,6,8&limit=10&search=1&p=' + a, function (g) { + fun(g); + }); } - function remind(a) { - get_msg_data(a, function(g) { - var e = ""; - var f = false; - var task_count = 0; - for (var d = 0; d < g.data.length; d++) { - if (g.data[d].status != '1') { - task_count++; - continue; - } - e += '
                  ' + g.data[d].name + g.data[d].addtime +'【' + lan.bt.task_ok + '】' + lan.bt.time + (g.data[d].end - g.data[d].start) + lan.bt.s + '
                  ' + g.data[d].addtime + '' - } - var con = '
                  \ - \ - ' + e + '\ + get_msg_data(a, function (g) { + var e = ''; + var f = false; + var task_count = 0; + for (var d = 0; d < g.data.length; d++) { + if (g.data[d].status != '1') { + task_count++; + continue; + } + e += + ''; + } + var con = + '
                  ' + lan.bt.task_name + '' + lan.bt.task_time + '
                  ' + + g.data[d].name + + g.data[d].addtime + + '【' + + lan.bt.task_ok + + '】' + + lan.bt.time + + (g.data[d].end - g.data[d].start) + + lan.bt.s + + '
                  ' + + g.data[d].addtime + + '
                  \ + \ + ' + + e + + '\
                  ' + + lan.bt.task_name + + '' + + lan.bt.task_time + + '
                  \
                  \ - \ + \
                  \
                  '; - - var msg_count = g.page.match(/\'Pcount\'>.+<\/span>/)[0].replace(/[^0-9]/ig, ""); - $(".msg_count").text(parseInt(msg_count) - task_count); - $(".taskcon").html(con); - $("#taskPage").html(g.page); - $("#Rs-checkAll").click(function() { - if ($(this).prop("checked")) { - $("#remind").find("input").prop("checked", true) - } else { - $("#remind").find("input").prop("checked", false) - } - }); - }) - + var msg_count = g.page.match(/\'Pcount\'>.+<\/span>/)[0].replace(/[^0-9]/gi, ''); + $('.msg_count').text(parseInt(msg_count) - task_count); + $('.taskcon').html(con); + $('#taskPage').html(g.page); + $('#Rs-checkAll').click(function () { + if ($(this).prop('checked')) { + $('#remind').find('input').prop('checked', true); + } else { + $('#remind').find('input').prop('checked', false); + } + }); + }); } function GetReloads() { - var a = 0; - var mm = $("#taskList").html() - if (mm == undefined || mm.indexOf(lan.bt.task_list) == -1) { - clearInterval(speed); - a = 0; - speed = null; - return - } - if (speed) return; - speed = setInterval(function() { - var mm = $("#taskList").html() - if (mm == undefined || mm.indexOf(lan.bt.task_list) == -1) { - clearInterval(speed); - speed = null; - a = 0; - return - } - a++; - $.post("/files?action=GetTaskSpeed", "", function(h) { - if (h.task == undefined) { - $(".cmdlist").html(lan.bt.task_not_list); - return - } + var a = 0; + var mm = $('#taskList').html(); + if (mm == undefined || mm.indexOf(lan.bt.task_list) == -1) { + clearInterval(speed); + a = 0; + speed = null; + return; + } + if (speed) return; + speed = setInterval(function () { + var mm = $('#taskList').html(); + if (mm == undefined || mm.indexOf(lan.bt.task_list) == -1) { + clearInterval(speed); + speed = null; + a = 0; + return; + } + a++; + $.post('/files?action=GetTaskSpeed', '', function (h) { + if (h.task == undefined) { + $('.cmdlist').html(lan.bt.task_not_list); + return; + } - if (h.status === false) { - clearInterval(speed); - speed = null; - a = 0; - return - } + if (h.status === false) { + clearInterval(speed); + speed = null; + a = 0; + return; + } - var b = ""; - var d = ""; - $("#task").text(h.task.length); - $(".task_count").text(h.task.length); - for (var g = 0; g < h.task.length; g++) { - if (h.task[g].status == "-1") { - if (h.task[g].type != "download") { - var c = ""; - var f = h.msg.split("\n"); - for (var e = 0; e < f.length; e++) { - c += f[e] + "
                  " - } - if (h.task[g].name.indexOf(lan.public.scan) != -1) { - b = "
                • " + h.task[g].name + "" + lan.bt.task_scan + " | " + lan.public.close + "
                  " + c + "
                • " - } else { - b = "
                • " + h.task[g].name + "" + lan.bt.task_install + " | " + lan.public.close + "
                  " + c + "
                • " - } - } else { - b = "
                • " + h.task[g].name + "" + (ToSize(h.msg.used) + "/" + ToSize(h.msg.total)) + "" + h.msg.pre + "%" + lan.bt.task_downloading + " | " + lan.public.close + "
                • " - } - } else { - d += "
                • " + h.task[g].name + "" + lan.bt.task_sleep + " | ' + lan.public.del + '
                • ' - } - } - $(".cmdlist").html(b + d); - $(".cmd").html(c); - try { - if ($(".cmd")[0].scrollHeight) $(".cmd").scrollTop($(".cmd")[0].scrollHeight); - } catch (e) { - return; - } - }).error(function() {}); - }, 1000); + var b = ''; + var d = ''; + $('#task').text(h.task.length); + $('.task_count').text(h.task.length); + for (var g = 0; g < h.task.length; g++) { + if (h.task[g].status == '-1') { + if (h.task[g].type != 'download') { + var c = ''; + var f = h.msg.split('\n'); + for (var e = 0; e < f.length; e++) { + c += f[e] + '
                  '; + } + if (h.task[g].name.indexOf(lan.public.scan) != -1) { + b = + "
                • " + + h.task[g].name + + "" + + lan.bt.task_scan + + " | ' + + lan.public.close + + "
                  " + + c + + '
                • '; + } else { + b = + "
                • " + + h.task[g].name + + "" + + lan.bt.task_install + + " | ' + + lan.public.close + + "
                  " + + c + + '
                • '; + } + } else { + b = + "
                • " + + h.task[g].name + + "" + + (ToSize(h.msg.used) + '/' + ToSize(h.msg.total)) + + "" + + h.msg.pre + + "%" + + lan.bt.task_downloading + + " | ' + + lan.public.close + + '
                • '; + } + } else { + d += + "
                • " + + h.task[g].name + + "" + + lan.bt.task_sleep + + " | ' + + lan.public.del + + '
                • '; + } + } + $('.cmdlist').html(b + d); + $('.cmd').html(c); + try { + if ($('.cmd')[0].scrollHeight) $('.cmd').scrollTop($('.cmd')[0].scrollHeight); + } catch (e) { + return; + } + }).error(function () {}); + }, 1000); } //检查选中项 function RscheckSelect() { - setTimeout(function() { - var checkList = $("#remind").find("input"); - var count = 0; - for (var i = 0; i < checkList.length; i++) { - if (checkList[i].checked) count++; - } - if (count > 0) { - $(".buttongroup .btn").removeAttr("disabled"); - } else { - $(".rs-del,.rs-read").attr("disabled", "disabled"); - } - }, 5); + setTimeout(function () { + var checkList = $('#remind').find('input'); + var count = 0; + for (var i = 0; i < checkList.length; i++) { + if (checkList[i].checked) count++; + } + if (count > 0) { + $('.buttongroup .btn').removeAttr('disabled'); + } else { + $('.rs-del,.rs-read').attr('disabled', 'disabled'); + } + }, 5); } - function tasklist(a) { - var con = '
                    ' + lan.public.task_long_time_not_exec + ''; - $(".taskcon").html(con); - a = a == undefined ? 1 : a; - $.post("/data?action=getData", "tojs=GetTaskList&table=tasks&limit=10&p=" + a, function(g) { - var e = ""; - var b = ""; - var c = ""; - var f = false; - var task_count = 0; - for (var d = 0; d < g.data.length; d++) { - switch (g.data[d].status) { - case "-1": - f = true; - if (g.data[d].type != "download") { - b = "
                  • " + g.data[d].name + "" + lan.bt.task_install + " | " + lan.public.close + "
                  • " - } else { - b = "
                  • " + g.data[d].name + "0.0M/12.5M0%" + lan.bt.task_downloading + " | " + lan.public.close + "
                  • " - } - task_count++; - break; - case "0": - c += "
                  • " + g.data[d].name + "" + lan.bt.task_sleep + " | " + lan.public.del + "
                  • "; - task_count++; - break; - } - } + var con = '
                      ' + lan.public.task_long_time_not_exec + ''; + $('.taskcon').html(con); + a = a == undefined ? 1 : a; + $.post('/data?action=getData', 'tojs=GetTaskList&table=tasks&limit=10&p=' + a, function (g) { + var e = ''; + var b = ''; + var c = ''; + var f = false; + var task_count = 0; + for (var d = 0; d < g.data.length; d++) { + switch (g.data[d].status) { + case '-1': + f = true; + if (g.data[d].type != 'download') { + b = + "
                    • " + + g.data[d].name + + "" + + lan.bt.task_install + + " | ' + + lan.public.close + + "
                    • "; + } else { + b = + "
                    • " + + g.data[d].name + + "0.0M/12.5M0%" + + lan.bt.task_downloading + + " | ' + + lan.public.close + + '
                    • '; + } + task_count++; + break; + case '0': + c += + "
                    • " + + g.data[d].name + + "" + + lan.bt.task_sleep + + ' | " + + lan.public.del + + '
                    • '; + task_count++; + break; + } + } + $('.task_count').text(task_count); - $(".task_count").text(task_count); + get_msg_data(1, function (d) { + var msg_count = d.page.match(/\'Pcount\'>.+<\/span>/)[0].replace(/[^0-9]/gi, ''); + $('.msg_count').text(parseInt(msg_count)); + }); - get_msg_data(1, function(d) { - var msg_count = d.page.match(/\'Pcount\'>.+<\/span>/)[0].replace(/[^0-9]/ig, ""); - $(".msg_count").text(parseInt(msg_count)); - }) - - $(".cmdlist").html(b + c); - GetReloads(); - return f - }) + $('.cmdlist').html(b + c); + GetReloads(); + return f; + }); } //检查登陆状态 function check_login() { - $.post('/ajax?action=CheckLogin', {}, function(rdata) { - if (rdata === true) return; - }); + $.post('/ajax?action=CheckLogin', {}, function (rdata) { + if (rdata === true) return; + }); } - //登陆跳转 function to_login() { - layer.confirm(lan.public.login_expire, { title: lan.public.session_expire, icon: 2, closeBtn: 1, shift: 5 }, function() { - location.reload(); - }); + layer.confirm(lan.public.login_expire, { title: lan.public.session_expire, icon: 2, closeBtn: 1, shift: 5 }, function () { + location.reload(); + }); } //表格头固定 function table_fixed(name) { - var tableName = document.querySelector('#' + name); - tableName.addEventListener('scroll', scroll_handle); + var tableName = document.querySelector('#' + name); + tableName.addEventListener('scroll', scroll_handle); } function scroll_handle(e) { - var scrollTop = this.scrollTop; - $(this).find("thead").css({ "transform": "translateY(" + scrollTop + "px)", "position": "relative", "z-index": "1" }); + var scrollTop = this.scrollTop; + $(this) + .find('thead') + .css({ transform: 'translateY(' + scrollTop + 'px)', position: 'relative', 'z-index': '1' }); } var clipboard, interval, socket, term, ssh_login, term_box; var pdata_socket = { - x_http_token: document.getElementById("request_token_head").getAttribute('token') -} - + x_http_token: document.getElementById('request_token_head').getAttribute('token'), +}; var Term = { - bws: null, //websocket对象 - route: '/webssh', //被访问的方法 - term: null, - term_box: null, - ssh_info: {}, - last_body:false, - last_cd:null, - config:{ - cols:0, - rows:0, - fontSize:12 + bws: null, //websocket对象 + route: '/webssh', //被访问的方法 + term: null, + term_box: null, + ssh_info: {}, + last_body: false, + last_cd: null, + config: { + cols: 0, + rows: 0, + fontSize: 12, }, - + // 缩放尺寸 - detectZoom:(function(){ - var ratio = 0, - screen = window.screen, - ua = navigator.userAgent.toLowerCase(); - if (window.devicePixelRatio !== undefined) { - ratio = window.devicePixelRatio; - } - else if (~ua.indexOf('msie')) { - if (screen.deviceXDPI && screen.logicalXDPI) { - ratio = screen.deviceXDPI / screen.logicalXDPI; - } - } - else if (window.outerWidth !== undefined && window.innerWidth !== undefined) { - ratio = window.outerWidth / window.innerWidth; - } - - if (ratio){ - ratio = Math.round(ratio * 100); - } - return ratio; - })(), - //连接websocket - connect: function() { - if (!Term.bws || Term.bws.readyState == 3 || Term.bws.readyState == 2) { - //连接 - ws_url = (window.location.protocol === 'http:' ? 'ws://' : 'wss://') + window.location.host + Term.route; + detectZoom: (function () { + var ratio = 0, + screen = window.screen, + ua = navigator.userAgent.toLowerCase(); + if (window.devicePixelRatio !== undefined) { + ratio = window.devicePixelRatio; + } else if (~ua.indexOf('msie')) { + if (screen.deviceXDPI && screen.logicalXDPI) { + ratio = screen.deviceXDPI / screen.logicalXDPI; + } + } else if (window.outerWidth !== undefined && window.innerWidth !== undefined) { + ratio = window.outerWidth / window.innerWidth; + } - Term.bws = new WebSocket(ws_url); + if (ratio) { + ratio = Math.round(ratio * 100); + } + return ratio; + })(), + //连接websocket + connect: function () { + if (!Term.bws || Term.bws.readyState == 3 || Term.bws.readyState == 2) { + //连接 + ws_url = (window.location.protocol === 'http:' ? 'ws://' : 'wss://') + window.location.host + Term.route; + Term.bws = new WebSocket(ws_url); - //绑定事件 - Term.bws.addEventListener('message', Term.on_message); - Term.bws.addEventListener('close', Term.on_close); - Term.bws.addEventListener('error', Term.on_error); - Term.bws.addEventListener('open',Term.on_open); + //绑定事件 + Term.bws.addEventListener('message', Term.on_message); + Term.bws.addEventListener('close', Term.on_close); + Term.bws.addEventListener('error', Term.on_error); + Term.bws.addEventListener('open', Term.on_open); - //if (Term.ssh_info) Term.send(JSON.stringify(Term.ssh_info)) - } - }, - //连接服务器成功 - on_open:function(ws_event){ - var http_token = $("#request_token_head").attr('token'); - Term.send(JSON.stringify({'x-http-token':http_token})) - if(JSON.stringify(Term.ssh_info) !== '{}') Term.send(JSON.stringify(Term.ssh_info)) -// Term.term.FitAddon.fit(); -// Term.resize(); -// var f_path = $("#fileInputPath").val(); - var f_path = $("#fileInputPath").attr('data-path'); - if(f_path){ - Term.last_cd = "cd " + f_path; - Term.send(Term.last_cd + "\n"); + //if (Term.ssh_info) Term.send(JSON.stringify(Term.ssh_info)) + } + }, + //连接服务器成功 + on_open: function (ws_event) { + var http_token = $('#request_token_head').attr('token'); + Term.send(JSON.stringify({ 'x-http-token': http_token })); + if (JSON.stringify(Term.ssh_info) !== '{}') Term.send(JSON.stringify(Term.ssh_info)); + // Term.term.FitAddon.fit(); + // Term.resize(); + // var f_path = $("#fileInputPath").val(); + var f_path = $('#fileInputPath').attr('data-path'); + if (f_path) { + Term.last_cd = 'cd ' + f_path; + Term.send(Term.last_cd + '\n'); } }, - //服务器消息事件 - // on_message: function(ws_event) { - // result = ws_event.data; - // if (result === "\r'Server connection failed'!\r" || result === "\rWrong user name or password!\r") { - // show_ssh_login(result); - // Term.close(); - // return; - // } - // Term.term.write(result); + //服务器消息事件 + // on_message: function(ws_event) { + // result = ws_event.data; + // if (result === "\r'Server connection failed'!\r" || result === "\rWrong user name or password!\r") { + // show_ssh_login(result); + // Term.close(); + // return; + // } + // Term.term.write(result); - // if (result == '\r\n登出\r\n' || result == '登出\r\n' || result == '\r\nlogout\r\n' || result == 'logout\r\n') { - // setTimeout(function() { - // layer.close(Term.term_box); - // }, 500); - // Term.close(); - // Term.bws = null; - // } - // }, - on_message: function (ws_event) { - result = ws_event.data; - if ((result.indexOf("@127.0.0.1:") != -1 || result.indexOf("@localhost:") != -1) && result.indexOf('Authentication failed') != -1) { - Term.term.write(result); - Term.localhost_login_form(result); - Term.close(); - return; - } - if(Term.last_cd){ - if(result.indexOf(Term.last_cd) != -1 && result.length - Term.last_cd.length < 3) { + // if (result == '\r\n登出\r\n' || result == '登出\r\n' || result == '\r\nlogout\r\n' || result == 'logout\r\n') { + // setTimeout(function() { + // layer.close(Term.term_box); + // }, 500); + // Term.close(); + // Term.bws = null; + // } + // }, + on_message: function (ws_event) { + result = ws_event.data; + if ((result.indexOf('@127.0.0.1:') != -1 || result.indexOf('@localhost:') != -1) && result.indexOf('Authentication failed') != -1) { + Term.term.write(result); + Term.localhost_login_form(result); + Term.close(); + return; + } + if (Term.last_cd) { + if (result.indexOf(Term.last_cd) != -1 && result.length - Term.last_cd.length < 3) { Term.last_cd = null; return; } } - if (result === "\rServer connection failed!\r" || result == "\rWrong user name or password!\r") { - Term.close(); - return; + if (result === '\rServer connection failed!\r' || result == '\rWrong user name or password!\r') { + Term.close(); + return; } - if(result.length > 1 && Term.last_body === false){ + if (result.length > 1 && Term.last_body === false) { Term.last_body = true; } - Term.term.write(result); - if (result == '\r\n登出\r\n' || result == '\r\n注销\r\n' || result == '注销\r\n' || result == '登出\r\n' || result == '\r\nlogout\r\n' || result == 'logout\r\n') { - setTimeout(function () { + Term.term.write(result); + if (result == '\r\n登出\r\n' || result == '\r\n注销\r\n' || result == '注销\r\n' || result == '登出\r\n' || result == '\r\nlogout\r\n' || result == 'logout\r\n') { + setTimeout(function () { layer.close(Term.term_box); Term.term.dispose(); - }, 500); - Term.close(); - Term.bws = null; - } + }, 500); + Term.close(); + Term.bws = null; + } + }, + //websocket关闭事件 + on_close: function (ws_event) { + Term.bws = null; }, - //websocket关闭事件 - on_close: function(ws_event) { - Term.bws = null; - }, - //websocket错误事件 - // on_error: function(ws_event) { - // if(ws_event.target.readyState === 3){ + //websocket错误事件 + // on_error: function(ws_event) { + // if(ws_event.target.readyState === 3){ // var msg = 'Error: unable to create websocket connection, please close 【Developer mode】 on the settings page'; // layer.msg(msg,{time:5000}) // if(Term.state === 3) return @@ -4296,192 +5555,199 @@ var Term = { // }else{ // console.log(ws_event) // } - // }, - on_error: function (ws_event) { - if(ws_event.target.readyState === 3){ - if(Term.state === 3) return - Term.term.write(msg) + // }, + on_error: function (ws_event) { + if (ws_event.target.readyState === 3) { + if (Term.state === 3) return; + Term.term.write(msg); Term.state = 3; - }else{ - console.log(ws_event) + } else { + console.log(ws_event); } - }, + }, - //关闭连接 - close: function () { - if(Term.bws){ + //关闭连接 + close: function () { + if (Term.bws) { Term.bws.close(); } }, - resize: function () { - setTimeout(function(){ - $("#term").height($(".term_box_all .layui-layer-content").height()-18) - Term.term.FitAddon.fit() - Term.send(JSON.stringify({resize:1,rows:Term.term.rows,cols:Term.term.cols})); - Term.term.focus(); - },100) - }, - // resize: function() { - // var m_width = 100; - // var m_height = 34; - // Term.term.resize(m_width, m_height); - // Term.term.scrollToBottom(); - // Term.term.focus(); - // Term.send('new_terminal'); - // }, + resize: function () { + setTimeout(function () { + $('#term').height($('.term_box_all .layui-layer-content').height() - 18); + Term.term.FitAddon.fit(); + Term.send(JSON.stringify({ resize: 1, rows: Term.term.rows, cols: Term.term.cols })); + Term.term.focus(); + }, 100); + }, + // resize: function() { + // var m_width = 100; + // var m_height = 34; + // Term.term.resize(m_width, m_height); + // Term.term.scrollToBottom(); + // Term.term.focus(); + // Term.send('new_terminal'); + // }, - //发送数据 - //@param event 唯一事件名称 - //@param data 发送的数据 - //@param collback 服务器返回结果时回调的函数,运行完后将被回收 - send: function(data, num) { - //如果没有连接,则尝试连接服务器 - if (!Term.bws || Term.bws.readyState == 3 || Term.bws.readyState == 2) { - Term.connect(); - } + //发送数据 + //@param event 唯一事件名称 + //@param data 发送的数据 + //@param collback 服务器返回结果时回调的函数,运行完后将被回收 + send: function (data, num) { + //如果没有连接,则尝试连接服务器 + if (!Term.bws || Term.bws.readyState == 3 || Term.bws.readyState == 2) { + Term.connect(); + } - //判断当前连接状态,如果!=1,则100ms后尝试重新发送 - if (Term.bws.readyState === 1) { - Term.bws.send(data); - } else { - if(Term.state === 3) return; - if (!num) num = 0; - if (num < 5) { - num++; - setTimeout(function() { Term.send(data, num++); }, 100) - } - } - }, - // run: function (ssh_info) { - // var termCols = 100; - // var termRows = 34; - // var loadT = layer.msg('It is loading the files required by the terminal. Please wait...', { icon: 16, time: 0, shade: 0.3 }); - // loadScript([ - // "/static/build/xterm.min.js", - // "/static/build/addons/attach/attach.min.js", - // "/static/build/addons/fit/fit.min.js", - // "/static/build/addons/fullscreen/fullscreen.min.js", - // "/static/build/addons/search/search.min.js", - // "/static/build/addons/winptyCompat/winptyCompat.js" - // ], function () { - // layer.close(loadT); - // Term.term = new Terminal({ cols: termCols, rows: termRows, screenKeys: true, useStyle: true }); - // Term.term.setOption('cursorBlink', true); - // Term.term_box = layer.open({ - // type: 1, - // title: lan.public.terminal, - // area: ['920px', '630px'], - // closeBtn: 2, - // shadeClose: false, - // content: '\ + //判断当前连接状态,如果!=1,则100ms后尝试重新发送 + if (Term.bws.readyState === 1) { + Term.bws.send(data); + } else { + if (Term.state === 3) return; + if (!num) num = 0; + if (num < 5) { + num++; + setTimeout(function () { + Term.send(data, num++); + }, 100); + } + } + }, + // run: function (ssh_info) { + // var termCols = 100; + // var termRows = 34; + // var loadT = layer.msg('It is loading the files required by the terminal. Please wait...', { icon: 16, time: 0, shade: 0.3 }); + // loadScript([ + // "/static/build/xterm.min.js", + // "/static/build/addons/attach/attach.min.js", + // "/static/build/addons/fit/fit.min.js", + // "/static/build/addons/fullscreen/fullscreen.min.js", + // "/static/build/addons/search/search.min.js", + // "/static/build/addons/winptyCompat/winptyCompat.js" + // ], function () { + // layer.close(loadT); + // Term.term = new Terminal({ cols: termCols, rows: termRows, screenKeys: true, useStyle: true }); + // Term.term.setOption('cursorBlink', true); + // Term.term_box = layer.open({ + // type: 1, + // title: lan.public.terminal, + // area: ['920px', '630px'], + // closeBtn: 2, + // shadeClose: false, + // content: '\ // \ // [' + lan.public.set + ']\ //
                      ', - // cancel: function () { - // Term.term.destroy(); - // }, - // success: function () { - // Term.term.open(document.getElementById('term')); - // Term.resize(); - // } - // }); - // Term.term.on('data', function (data) { - // try { - // Term.bws.send(data) - // } catch (e) { - // Term.term.write('\r\nThe connection is lost and you are trying to reconnect!\r\n') - // Term.connect() - // } - // }); - // if (ssh_info) Term.ssh_info = ssh_info - // Term.connect(); - // }) + // cancel: function () { + // Term.term.destroy(); + // }, + // success: function () { + // Term.term.open(document.getElementById('term')); + // Term.resize(); + // } + // }); + // Term.term.on('data', function (data) { + // try { + // Term.bws.send(data) + // } catch (e) { + // Term.term.write('\r\nThe connection is lost and you are trying to reconnect!\r\n') + // Term.connect() + // } + // }); + // if (ssh_info) Term.ssh_info = ssh_info + // Term.connect(); + // }) - // }, - run: function (ssh_info) { + // }, + run: function (ssh_info) { // if($("#panel_debug").attr("data") == 'True') { // layer.msg('Error: unable to create websocket connection, please close 【Developer mode】 on the settings page!',{icon:2,time:5000}); // return; // } - var loadT = layer.msg('It is loading the files required by the terminal. Please wait...', { icon: 16, time: 0, shade: 0.3 }); - loadScript([ - "/static/js/xterm.js" - ],function(){ - layer.close(loadT); - Term.term = new Terminal({ - rendererType: "canvas", - cols: 100, - rows: 31, - fontSize:15, - screenKeys: true, - useStyle: true , + var loadT = layer.msg('It is loading the files required by the terminal. Please wait...', { icon: 16, time: 0, shade: 0.3 }); + loadScript(['/static/js/xterm.js'], function () { + layer.close(loadT); + Term.term = new Terminal({ + rendererType: 'canvas', + cols: 100, + rows: 31, + fontSize: 15, + screenKeys: true, + useStyle: true, }); Term.term.setOption('cursorBlink', true); Term.last_body = false; - Term.term_box = layer.open({ - type: 1, - title: lan.public.terminal, - area: ['925px', '630px'], - closeBtn: 2, - shadeClose: false, - skin:'term_box_all', - content: '\ + Term.term_box = layer.open({ + type: 1, + title: lan.public.terminal, + area: ['925px', '630px'], + closeBtn: 2, + shadeClose: false, + skin: 'term_box_all', + content: + '\
                      ', - cancel: function (index,lay) { - bt.confirm({msg:'
                      Closing the SSH session, the command in progress in the current command line session may be aborted. Continute?
                      ',title: "Cofirm to close the SSH session?"},function(ix){ - Term.term.dispose(); - layer.close(index); - layer.close(ix); - Term.close(); - }); + cancel: function (index, lay) { + bt.confirm( + { + msg: '
                      Closing the SSH session, the command in progress in the current command line session may be aborted. Continute?
                      ', + title: 'Cofirm to close the SSH session?', + }, + function (ix) { + Term.term.dispose(); + layer.close(index); + layer.close(ix); + Term.close(); + } + ); return false; - }, - success: function () { - $('.term_box_all').css('background-color','#000'); + }, + success: function () { + $('.term_box_all').css('background-color', '#000'); Term.term.open(document.getElementById('term')); Term.term.FitAddon = new FitAddon.FitAddon(); Term.term.loadAddon(Term.term.FitAddon); - Term.term.WebLinksAddon = new WebLinksAddon.WebLinksAddon() - Term.term.loadAddon(Term.term.WebLinksAddon) + Term.term.WebLinksAddon = new WebLinksAddon.WebLinksAddon(); + Term.term.loadAddon(Term.term.WebLinksAddon); Term.term.focus(); - } - }); - Term.term.onData(function (data) { - try { - Term.bws.send(data) - } catch (e) { - Term.term.write('\r\nThe connection is lost and you are trying to reconnect!\r\n') - Term.connect() - } - }); - if (ssh_info) Term.ssh_info = ssh_info - Term.connect(); - }); - - }, - reset_login: function() { - var ssh_info = { - data: JSON.stringify({ - host: $("input[name='host']").val(), - port: $("input[name='port']").val(), - username: $("input[name='username']").val(), - password: $("input[name='password']").val() - }) - } - $.post('/term_open', ssh_info, function(rdata) { - if (rdata.status === false) { - layer.msg(rdata.msg); - return; - } - layer.closeAll(); - Term.connect(); - Term.term.scrollToBottom(); - Term.term.focus(); - }); - }, - localhost_login_form:function(result){ - var template = '
                      Login failed, please fill the local server information!
                      \ + }, + }); + Term.term.onData(function (data) { + try { + Term.bws.send(data); + } catch (e) { + Term.term.write('\r\nThe connection is lost and you are trying to reconnect!\r\n'); + Term.connect(); + } + }); + if (ssh_info) Term.ssh_info = ssh_info; + Term.connect(); + }); + }, + reset_login: function () { + var ssh_info = { + data: JSON.stringify({ + host: $("input[name='host']").val(), + port: $("input[name='port']").val(), + username: $("input[name='username']").val(), + password: $("input[name='password']").val(), + }), + }; + $.post('/term_open', ssh_info, function (rdata) { + if (rdata.status === false) { + layer.msg(rdata.msg); + return; + } + layer.closeAll(); + Term.connect(); + Term.term.scrollToBottom(); + Term.term.focus(); + }); + }, + localhost_login_form: function (result) { + var template = + '
                      Login failed, please fill the local server information!
                      \
                      \ Server IP\
                      \ @@ -4516,107 +5782,108 @@ var Term = { \
                      \
                      '; - $('.term-box').after(template); - $('.auth_type_checkbox').click(function(){ - var index = $(this).index(); - $(this).addClass('btn-success').removeClass('btn-default').siblings().removeClass('btn-success').addClass('btn-default') - switch(index){ - case 0: - $('.c_password_view').addClass('show').removeClass('hidden'); - $('.c_pkey_view').addClass('hidden').removeClass('show').find('input').val(''); - break; - case 1: - $('.c_password_view').addClass('hidden').removeClass('show').find('input').val(''); - $('.c_pkey_view').addClass('show').removeClass('hidden'); - break; - } - }); - $('.localhost-form-view > button').click(function(){ - var form = {}; - $('.localhost-form-view input,.localhost-form-view textarea').each(function(index,el){ - var name = $(this).attr('name'),value = $(this).val(); - form[name] = value; - switch(name){ - case 'port': - if(!bt.check_port(value)){ - bt.msg({status:false,msg:'Server port format error!'}); - return false; - } - break; - case 'username': - if(value == ''){ - bt.msg({status:false,msg:'Server user name cannot be empty!'}); - return false; - } - break; - case 'password': - if(value == '' && $('.c_password_view').hasClass('show')){ - bt.msg({status:false,msg:'Server password cannot be empty!'}); - return false; - } - break; - case 'pkey': - if(value == '' && $('.c_pkey_view').hasClass('show')){ - bt.msg({status:false,msg:'The server key cannot be empty!'}); - return false; - } - break; - } - }); + $('.term-box').after(template); + $('.auth_type_checkbox').click(function () { + var index = $(this).index(); + $(this).addClass('btn-success').removeClass('btn-default').siblings().removeClass('btn-success').addClass('btn-default'); + switch (index) { + case 0: + $('.c_password_view').addClass('show').removeClass('hidden'); + $('.c_pkey_view').addClass('hidden').removeClass('show').find('input').val(''); + break; + case 1: + $('.c_password_view').addClass('hidden').removeClass('show').find('input').val(''); + $('.c_pkey_view').addClass('show').removeClass('hidden'); + break; + } + }); + $('.localhost-form-view > button').click(function () { + var form = {}; + $('.localhost-form-view input,.localhost-form-view textarea').each(function (index, el) { + var name = $(this).attr('name'), + value = $(this).val(); + form[name] = value; + switch (name) { + case 'port': + if (!bt.check_port(value)) { + bt.msg({ status: false, msg: 'Server port format error!' }); + return false; + } + break; + case 'username': + if (value == '') { + bt.msg({ status: false, msg: 'Server user name cannot be empty!' }); + return false; + } + break; + case 'password': + if (value == '' && $('.c_password_view').hasClass('show')) { + bt.msg({ status: false, msg: 'Server password cannot be empty!' }); + return false; + } + break; + case 'pkey': + if (value == '' && $('.c_pkey_view').hasClass('show')) { + bt.msg({ status: false, msg: 'The server key cannot be empty!' }); + return false; + } + break; + } + }); form.ps = 'Local server'; - - if(result){ - if(result.indexOf('@127.0.0.1') != -1){ + + if (result) { + if (result.indexOf('@127.0.0.1') != -1) { var user = result.split('@')[0].split(',')[1]; - var port = result.split('1:')[1] + var port = result.split('1:')[1]; $("input[name='username']").val(user); $("input[name='port']").val(port); } } - var loadT = bt.load('Adding server information, please wait...'); - bt.send('create_host','xterm/create_host',form,function(res){ - loadT.close(); - bt.msg(res); - if(res.status){ - bt.msg({status:true,msg:'Login successful!'}); - $('.layui-layer-shade').remove(); - $('.term_box_all').remove(); - Term.term.dispose(); - Term.close(); - web_shell(); - } - }); - }); - $('.localhost-form-view [name="password"]').keyup(function(e){ - if(e.keyCode == 13){ - $('.localhost-form-view > button').click(); - } - }).focus() - } - -} + var loadT = bt.load('Adding server information, please wait...'); + bt.send('create_host', 'xterm/create_host', form, function (res) { + loadT.close(); + bt.msg(res); + if (res.status) { + bt.msg({ status: true, msg: 'Login successful!' }); + $('.layui-layer-shade').remove(); + $('.term_box_all').remove(); + Term.term.dispose(); + Term.close(); + web_shell(); + } + }); + }); + $('.localhost-form-view [name="password"]') + .keyup(function (e) { + if (e.keyCode == 13) { + $('.localhost-form-view > button').click(); + } + }) + .focus(); + }, +}; function web_shell() { - Term.run(); + Term.run(); } socket = { - emit: function(data, data2) { - if (data === 'webssh') { - data = data2 - } - if (typeof(data) === 'object') { - return; - } - Term.send(data); - } -} - - + emit: function (data, data2) { + if (data === 'webssh') { + data = data2; + } + if (typeof data === 'object') { + return; + } + Term.send(data); + }, +}; function show_ssh_login(is_config) { - if ($("input[name='ssh_user']").attr('autocomplete')) return; - var s_body = '
                      \ + if ($("input[name='ssh_user']").attr('autocomplete')) return; + var s_body = + '
                      \ \
                      \ \
                        \ - '+ (data.update ? "
                      • " + lan.public_backup.update_wait + "
                      • " : "
                      • " + lan.public_backup.install_wait + "
                      • " + lan.public_backup.exist_cover + "
                      • ")+'\ + ' + + (data.update ? '
                      • ' + lan.public_backup.update_wait + '
                      • ' : '
                      • ' + lan.public_backup.install_wait + '
                      • ' + lan.public_backup.exist_cover + '
                      • ') + + '\
                      \
                      ', - yes:function(index,event){ - soft.input_zip(data.name,data.tmp_path,data); - } - }); - }, - update_soft: function(name, title, version, min_version, update_msg,type) { - var _this = this; - var msg = "
                    • " + lan.public_backup.update_tips + "
                    • "; - if (name == 'mysql') msg = "
                      • " + lan.public_backup.db_update_tips + "
                      • " + lan.public_backup.update_tips1 + "
                      • " + lan.public_backup.update_tips + "
                      "; - if (update_msg) msg += '
                      Update description:
                      ' + update_msg.replace(/(_bt_)/g, "\n") + '

                      '; - bt.show_confirm(lan.public_backup.update + '[' + title + ']', lan.public_backup.update_tips2.replace('{1}', title).replace('{2}', version).replace('{3}', min_version), function() { - // bt.soft.show_speed_window('Updating to [' + title + '-' + version + '.' + min_version + '],Please wait...', function() { - // bt.send('install_plugin', 'plugin/install_plugin', { sName: name, version: version, upgrade: version }, function(rdata) { - // if (rdata.size) { - // _this.install_other(rdata) - // return; - // } - // layer.close(bt.soft.loadT); - // bt.pub.get_task_count(function(rdata){ - // if(rdata > 0 && item.type === 5) messagebox(); - // }); - // if (soft) soft.get_list(); - // if (rdata.status === true && rdata.msg.indexOf('queue') === -1) rdata.msg = 'Update completed!'; - // bt.msg(rdata); - // }) - // }) - bt.soft.show_speed_window({title:'Updating to [' + title+'-'+version+'.'+min_version+'],Please wait...',status:true,soft:{type:parseInt(type)}},function(){ - bt.send('install_plugin', 'plugin/install_plugin', { sName: name, version: version, upgrade: version }, function (rdata) { - console.log(rdata); - if (rdata.size) { - _this.install_other(rdata) - return; - } - layer.close(bt.soft.loadT); - bt.pub.get_task_count(function(rdata){ - if(rdata > 0 && item.type === 5) messagebox(); + yes: function (index, event) { + soft.input_zip(data.name, data.tmp_path, data); + }, + }); + }, + update_soft: function (name, title, version, min_version, update_msg, type) { + var _this = this; + var msg = '
                    • ' + lan.public_backup.update_tips + '
                    • '; + if (name == 'mysql') + msg = "
                      • " + lan.public_backup.db_update_tips + '
                      • ' + lan.public_backup.update_tips1 + '
                      • ' + lan.public_backup.update_tips + '
                      '; + if (update_msg) + msg += + '
                      Update description:
                      ' +
                      +				update_msg.replace(/(_bt_)/g, '\n') +
                      +				'

                      '; + bt.show_confirm( + lan.public_backup.update + '[' + title + ']', + lan.public_backup.update_tips2.replace('{1}', title).replace('{2}', version).replace('{3}', min_version), + function () { + // bt.soft.show_speed_window('Updating to [' + title + '-' + version + '.' + min_version + '],Please wait...', function() { + // bt.send('install_plugin', 'plugin/install_plugin', { sName: name, version: version, upgrade: version }, function(rdata) { + // if (rdata.size) { + // _this.install_other(rdata) + // return; + // } + // layer.close(bt.soft.loadT); + // bt.pub.get_task_count(function(rdata){ + // if(rdata > 0 && item.type === 5) messagebox(); + // }); + // if (soft) soft.get_list(); + // if (rdata.status === true && rdata.msg.indexOf('queue') === -1) rdata.msg = 'Update completed!'; + // bt.msg(rdata); + // }) + // }) + bt.soft.show_speed_window({ title: 'Updating to [' + title + '-' + version + '.' + min_version + '],Please wait...', status: true, soft: { type: parseInt(type) } }, function () { + bt.send('install_plugin', 'plugin/install_plugin', { sName: name, version: version, upgrade: version }, function (rdata) { + if (rdata.size) { + _this.install_other(rdata); + return; + } + layer.close(bt.soft.loadT); + bt.pub.get_task_count(function (rdata) { + if (rdata > 0 && item.type === 5) messagebox(); + }); + if (typeof soft != 'undefined') soft.get_list(); + bt.msg(rdata); }); - if(typeof soft != "undefined") soft.get_list(); + }); + }, + msg + ); + }, + un_install: function (name) { + var _this = this; + _this.get_soft_find(name, function (item) { + var version = ''; + for (var i = 0; i < item.versions.length; i++) { + if (item.versions[i].setup && bt.contains(item.version, item.versions[i].m_version)) { + version = item.versions[i].m_version; + if (version.indexOf('.') < 0) version += '.' + item.versions[i].version; + break; + } + } + var title = bt.replace_all(item.title, '-' + version, ''); + bt.confirm({ msg: lan.soft.uninstall_confirm.replace('{1}', title).replace('{2}', version), title: lan.soft.uninstall, icon: 3, closeBtn: 2 }, function () { + var loadT = bt.load(lan.soft.lib_uninstall_the); + bt.send('uninstall_plugin', 'plugin/uninstall_plugin', { sName: name, version: version }, function (rdata) { + loadT.close(); + bt.pub.get_task_count(); + if (soft) soft.get_list(); bt.msg(rdata); - }) - }) - }, msg); - }, - un_install: function(name) { - var _this = this; - _this.get_soft_find(name, function(item) { - var version = ''; - for (var i = 0; i < item.versions.length; i++) { - if (item.versions[i].setup && bt.contains(item.version, item.versions[i].m_version)) { - version = item.versions[i].m_version; - if (version.indexOf('.') < 0) version += '.' + item.versions[i].version; - break; - } - } - var title = bt.replace_all(item.title, '-' + version, ''); - bt.confirm({ msg: lan.soft.uninstall_confirm.replace('{1}', title).replace('{2}', version), title: lan.soft.uninstall, icon: 3, closeBtn: 2 }, function() { - var loadT = bt.load(lan.soft.lib_uninstall_the); - bt.send('uninstall_plugin', 'plugin/uninstall_plugin', { sName: name, version: version }, function(rdata) { - loadT.close(); - bt.pub.get_task_count(); - if (soft) soft.get_list(); - bt.msg(rdata); - }) - }) - }) - - }, - get_soft_find: function(name, callback) { - var loadT = bt.load(); - bt.send('get_soft_find', 'plugin/get_soft_find', { sName: name }, function(rdata) { - loadT.close(); - if (callback) callback(rdata); - }) - }, - get_config_path: function(name) { - var fileName = ''; - if (bt.os == 'Linux') { - switch (name) { - case 'mysql': - case 'mysqld': - fileName = '/etc/my.cnf'; - break; - case 'nginx': - fileName = '/www/server/nginx/conf/nginx.conf'; - break; - case 'pureftpd': - fileName = '/www/server/pure-ftpd/etc/pure-ftpd.conf'; - break; - case 'apache': - fileName = '/www/server/apache/conf/httpd.conf'; - break; - case 'tomcat': - fileName = '/www/server/tomcat/conf/server.xml'; - break; - case 'memcached': - fileName = '/etc/init.d/memcached'; - break; - case 'redis': - fileName = '/www/server/redis/redis.conf'; - break; - case 'openlitespeed': - fileName = '/usr/local/lsws/conf/httpd_config.conf'; - break; - default: - fileName = '/www/server/php/' + name + '/etc/php.ini'; - break; - } - } - return fileName - }, - set_lib_config: function(name, title) { - var loadT = bt.load(lan.soft.menu_temp); - bt.send('getConfigHtml', 'plugin/getConfigHtml', { name: name }, function(rhtml) { - loadT.close(); - if (rhtml.status === false) { - if (name == "phpguard") { - layer.msg(lan.soft.menu_phpsafe, { icon: 1 }) - } else { - layer.msg(rhtml.msg, { icon: 2 }); - } - return; - } - bt.open({ - type: 1, - shift: 5, - offset: '20%', - closeBtn: 2, - area: '700px', - title: '' + title, - content: rhtml.replace('"javascript/text"', '"text/javascript"') - }); - /*rtmp = rhtml.split('', ''); + } else { + list = rhtml.split('', ''); + } + rcss = rhtml.split('')[0]; + rcode = rcode.replace(' wafview()', ''); + $('body').append('
                      '); - setTimeout(function () { - if (!!(window.attachEvent && !window.opera)) { - execScript(rcode); - } else { - window.eval(rcode); - } - }, 200) - }) + setTimeout(function () { + if (!!(window.attachEvent && !window.opera)) { + execScript(rcode); + } else { + window.eval(rcode); + } + }, 200); + }); + }, + select_site_txt: function (box, value) { + var that = this; + layer.open({ + type: 1, + closeBtn: 2, + title: lan.site.set_ssl.cust_domain, + area: '600px', + btn: [lan.public.ok, lan.public.cancel], + content: + '
                      Domain name
                      \ +
                        \ +
                      • ' + + lan.site.set_ssl.cust_tip1 + + '
                      • \ +
                      • ' + + lan.site.set_ssl.cust_tip2 + + '
                      • \ +
                      • ' + + lan.site.set_ssl.cust_tip3 + + '
                      • \ +
                      • 1、' + + lan.site.set_ssl.cust_tip4 + + '
                      • \ +
                      • 2、' + + lan.site.set_ssl.cust_tip5 + + '
                      • \ +
                      • 3、' + + lan.site.set_ssl.cust_tip6 + + '
                      • \ +
                      \ +
                      ', + success: function () { + $('[name="site_name"]').focus(); + }, + yes: function (layers, index) { + var domain = $('.ssl_site_name_rc').val(), + code = $('.perfect_ssl_info').data('code'); + if (!bt.check_domain(domain)) { + return layer.msg(lan.site.set_ssl.sing_domain_err, { icon: 2 }); + } else if (code.indexOf('wildcard') === -1) { + if (domain.indexOf('*') > -1) { + return layer.msg(lan.site.set_ssl.sing_domain_more, { icon: 2 }); + } + } + layer.close(layers); + $('#' + box).val($('.ssl_site_name_rc').val()); + // that.check_domain_error(domain); + that.check_domain_dns(); + }, + }); + }, + /** + * @descripttion: 选择站点 + * @author: Lifu + * @Date: 2020-08-14 + * @param {String} box 输出时所用ID + * @return: 无返回值 + */ + select_site_list: function (box, code) { + var that = this, + _optArray = [], + all_site_list = []; + bt.send('getData', 'data/getData', { tojs: 'site.get_list', table: 'domain', limit: 10000, search: '', p: 1, order: 'id desc', type: -1 }, function (res) { + var _tbody = ''; + if (res.data.length > 0) { + $.each(res.data, function (index, item) { + _body = + '' + + '' + + '
                      ' + + '
                      ' + + '
                      ' + + '' + + '' + + item['name'] + + '' + + ''; + if (code.indexOf('wildcard') > -1) { + if (item['name'].indexOf('*.') > -1) { + all_site_list.push(item['name']); + _tbody += _body; + } + } else { + all_site_list.push(item['name']); + _tbody += _body; + } + }); + if (all_site_list.length == 0) { + _tbody = '' + lan.bt.no_data + ''; + } + } else { + _tbody = '' + lan.bt.no_data + ''; + } - }, - web_edit: function (obj) { - var _this = this; - var item = obj; - bt.open({ - type: 1, - area: ['780px', '683px'], - title: lan.site.website_change + ' [' + item.name + '] -- ' + lan.site.addtime + ' [' + item.addtime + ']', - closeBtn: 2, - shift: 0, - content: "
                      " - }) - setTimeout(function () { - var webcache = bt.get_cookie('serverType') == 'openlitespeed' ? { - title: 'LS-Cache', - callback: site.edit.ols_cache - } : ''; - var menus = [ - {title: lan.site.domain_man, callback: site.edit.set_domains}, - {title: lan.site.site_menu_1, callback: site.edit.set_dirbind}, - {title: lan.site.site_menu_2, callback: site.edit.set_dirpath}, - {title: 'Limit access', callback: site.edit.set_dirguard}, - {title: lan.site.site_menu_3, callback: site.edit.limit_network}, - {title: lan.site.site_menu_4, callback: site.edit.get_rewrite_list}, - {title: lan.site.site_menu_5, callback: site.edit.set_default_index}, - {title: lan.site.site_menu_6, callback: site.edit.set_config}, - {title: lan.site.site_menu_7, callback: site.set_ssl}, - {title: lan.site.php_ver, callback: site.edit.set_php_version}, - {title: 'Composer', callback: site.edit.set_composer}, - // { title: lan.site.site_menu_9, callback: site.edit.set_tomact }, - // { title: lan.site.redirect, callback: site.edit.set_301_old }, - {title: lan.site.redirect_test, callback: site.edit.set_301}, - {title: lan.site.site_menu_11, callback: site.edit.set_proxy}, - {title: lan.site.site_menu_12, callback: site.edit.set_security}, - {title: lan.site.response_log, callback: site.edit.get_site_logs} - ]; - if (webcache !== '') menus.splice(3, 0, webcache); - if(item.project_type == 'WP') menus.splice(10,0,{title: 'Wordpress Setting', callback: site.edit.set_wp_config}) - for (var i = 0; i < menus.length; i++) { - var men = menus[i]; - var _p = $('

                      ' + men.title + '

                      '); - _p.data('callback', men.callback); - $('.site-menu').append(_p); - } - $('.site-menu p').click(function () { - $('#webedit-con').html(''); - $(this).addClass('bgw').siblings().removeClass('bgw'); - var callback = $(this).data('callback') - if (callback) callback(item); - }) - site.reload(0); - }, 100) - }, + layer.open({ + type: 1, + closeBtn: 2, + title: lan.site.set_ssl.select_domain, + area: ['600px', '650px'], + btn: [lan.public.ok, lan.public.cancel], + content: + '\ +
                      \ +
                      \ + \ +
                      \ +
                      \ +
                      \ + \ + \ + \ + \ + \ + ' + + _tbody + + '\ +
                      \ +
                      \ +
                      \ +
                      \ +
                      ' + + lan.site.set_ssl.domain_name + + '
                      \ +
                      \ +
                      \ +
                        \ +
                      • ' + + lan.site.set_ssl.cust_tip1 + + '
                      • \ +
                      • ' + + lan.site.set_ssl.cust_tip2 + + '
                      • \ +
                      • ' + + lan.site.set_ssl.cust_tip3 + + '
                      • \ +
                      • 1、' + + lan.site.set_ssl.cust_tip4 + + '
                      • \ +
                      • 2、' + + lan.site.set_ssl.cust_tip5 + + '
                      • \ +
                      • 3、' + + lan.site.set_ssl.cust_tip6 + + '
                      • \ +
                      \ +
                      ', + success: function () { + // 固定表格头部 + if (jQuery.prototype.fixedThead) { + $('.dynamic_list_table .divtable').fixedThead({ resize: false }); + } else { + $('.dynamic_list_table .divtable').css({ overflow: 'auto' }); + } + //检索输入 + $('input[name=serach_site]').on('input', function () { + var _serach = $(this).val(); + if (_serach.trim() != '') { + $('.dynamic_list tr').each(function () { + var _td = $(this).find('td').eq(1).html(); + if (_td.indexOf(_serach) == -1) { + $(this).hide(); + } else { + $(this).show(); + } + }); + } else { + $('.dynamic_list tr').show(); + } + }); - set_ssl: function (web) { - // if(typeof web['ele'] === 'undefined') web['ele'] = $('.webedit-con') - $('#webedit-con').html("
                      "); - bt.site.get_site_ssl(web.name, function (rdata) { - var _tabs = [ - // { - // title: lan.site.bt_ssl, on: true, callback: function (robj) { - // bt.pub.get_user_info(function (udata) { - // if (udata.status) { - // bt.site.get_domains(web.id, function (ddata) { - // var domains = []; - // for (var i = 0; i < ddata.length; i++) { - // if (ddata[i].name.indexOf('*') == -1) domains.push({ title: ddata[i].name, value: ddata[i].name }); - // } - // var arrs1 = [ - // { title: lan.site.domain, width: '200px', name: 'domains', type: 'select', items: domains }, - // { - // title: ' ', name: 'btsslApply', text: lan.site.btapply, type: 'button', callback: function (sdata) { - // if (sdata.domains.indexOf('www.') != -1) { - // var rootDomain = sdata.domains.split(/www\./)[1]; - // if (!$.inArray(domains, rootDomain)) { - // layer.msg(lan.site.not_resolve_domain.replace('{1}',sdata.domains).replace("{2}",rootDomain), { icon: 2, time: 5000 }); - // return; - // } - // } - // bt.site.get_dv_ssl(sdata.domains, web.path, function (tdata) { - // bt.msg(tdata); - // if (tdata.status) site.ssl.verify_domain(tdata.data.partnerOrderId, web.name); - // }) - // } - // } - // ] - // for (var i = 0; i < arrs1.length; i++) { - // var _form_data = bt.render_form_line(arrs1[i]); - // robj.append(_form_data.html); - // bt.render_clicks(_form_data.clicks); - // } - // var loading = bt.load() - // bt.site.get_order_list(web.name, function (odata) { - // loading.close(); - // robj.append("
                      "); - // bt.render({ - // table: '#bt_order_list', - // columns: [ - // { field: 'commonName', title: lan.site.domain }, - // { - // field: 'endtime', width: '70px', title: lan.site.endtime, templet: function (item) { - // return bt.format_data(item.endtime, 'yyyy/MM/dd'); - // } - // }, - // { field: 'stateName', width: '100px', title: lan.site.status }, - // { - // field: 'opt', align: 'right', width: '100px', title: lan.site.operate, templet: function (item) { - // var opt = ''+lan.site.deploy+'' - // if (item.stateCode == 'WF_DOMAIN_APPROVAL') { - // opt = ''+lan.site.domain_validate+''; - // } - // else { - // if (item.setup) opt = lan.site.deployed+' | '+lan.site.turn_off+'' - // } - // return opt; - // } - // } - // ], - // data: odata.data - // }) - // bt.fixed_table('bt_order_list'); - // var helps = [ - // lan.site.ssl_tips1, - // lan.site.ssl_tips2, - // lan.site.ssl_tips3, - // lan.site.ssl_tips4, - // lan.site.ssl_tips5, - // lan.site.ssl_tips6 - // ] - // robj.append(bt.render_help(helps)); - // }) - // }) - // } - // else { - // robj.append('
                      '+lan.site.bt_bind_no+'
                      '); - // - // var datas = [ - // { title: lan.site.bt_user, name: 'bt_username', value: rdata.email, width: '260px', placeholder: lan.site.phone_input }, - // { title: lan.site.password, type: 'password', name: 'bt_password', value: rdata.email, width: '260px' }, - // { - // title: ' ', items: [ - // { - // text: lan.site.login, name: 'btn_ssl_login', type: 'button', callback: function (sdata) { - // bt.pub.login_btname(sdata.bt_username, sdata.bt_password, function (ret) { - // if (ret.status) site.reload(7); - // }) - // } - // }, - // { - // text: lan.site.bt_reg, name: 'bt_register', type: 'button', callback: function (sdata) { - // window.open('https://www.bt.cn/register.html') - // } - // } - // ] - // } - // ] - // for (var i = 0; i < datas.length; i++) { - // var _form_data = bt.render_form_line(datas[i]); - // robj.append(_form_data.html); - // bt.render_clicks(_form_data.clicks); - // } - // robj.append(bt.render_help([lan.site.bt_ssl_help_1, lan.site.bt_ssl_help_2, lan.site.bt_ssl_help_3, lan.site.bt_ssl_help_4])); - // } - // }) - // - // } - // }, - { - title: "Let's Encrypt", - callback: function (robj) { - robj = $('#webedit-con .tab-con') - // console.log(robj,'obj'); - acme.get_account_info(function (let_user) { - }); - acme.id = web.id; - if (rdata.status && rdata.type == 1) { - var cert_info = ''; - if (rdata.cert_data['notBefore']) { - cert_info = '
                      \ - ' + lan.site.deploy_success_cret + '' + lan.site.try_renew_cret + '\ + // 单选设置 + $('.dynamic_list').on('click', '.bt_checkbox_groups', function (e) { + var _tr = $(this).parents('tr'); + if ($(this).hasClass('active')) { + $(this).removeClass('active'); + } else { + $('.dynamic_list .bt_checkbox_groups').removeClass('active'); + $(this).addClass('active'); + _optArray = [_tr.find('td').eq(1).text()]; + } + e.preventDefault(); + e.stopPropagation(); + }); + // tr点击时 + $('.dynamic_list').on('click', 'tr', function (e) { + $(this).find('.bt_checkbox_groups').click(); + e.preventDefault(); + e.stopPropagation(); + }); + }, + yes: function (layers, index) { + var _olist = []; + if (_optArray.length > 0) { + $.each(_optArray, function (index, item) { + if ($.inArray(item, _olist) == -1) { + _olist.push(item); + } + }); + } + layer.close(layers); + // 多域名时,将olist过滤并追加到site.domain_dns_list + if (site.domain_dns_type == 'multi') { + var domainList = site.domain_dns_list; + var newDomainList = []; + $.each(_olist, function (index, item) { + if ($.inArray(item, domainList) == -1) { + newDomainList.push(item); + } + }); + domainList = domainList.concat(newDomainList); + } else { + domainList = _olist; + } + $('#' + box).val(domainList.join('\n')); + site.domain_dns_list = domainList; + $('textarea[name=lb_site]').focus(); + + // that.check_domain_error(_olist[0]); + that.check_domain_dns(); + }, + }); + }); + }, + web_edit: function (obj) { + var _this = this; + var item = obj; + bt.open({ + type: 1, + area: ['860px', '740px'], + title: lan.site.website_change + ' [' + item.name + '] -- ' + lan.site.addtime + ' [' + item.addtime + ']', + closeBtn: 2, + shift: 0, + content: "
                      ", + }); + setTimeout(function () { + var webcache = + bt.get_cookie('serverType') == 'openlitespeed' + ? { + title: 'LS-Cache', + callback: site.edit.ols_cache, + } + : ''; + var menus = [ + { title: lan.site.domain_man, callback: site.edit.set_domains }, + { title: lan.site.site_menu_1, callback: site.edit.set_dirbind }, + { title: lan.site.site_menu_2, callback: site.edit.set_dirpath }, + { title: 'Limit access', callback: site.edit.set_dirguard }, + { title: lan.site.site_menu_3, callback: site.edit.limit_network }, + { title: lan.site.site_menu_4, callback: site.edit.get_rewrite_list }, + { title: lan.site.site_menu_5, callback: site.edit.set_default_index }, + { title: lan.site.site_menu_6, callback: site.edit.set_config }, + { title: lan.site.site_menu_7, callback: site.set_ssl }, + { title: lan.site.php_ver, callback: site.edit.set_php_version }, + { title: 'Composer', callback: site.edit.set_composer }, + // { title: lan.site.site_menu_9, callback: site.edit.set_tomact }, + // { title: lan.site.redirect, callback: site.edit.set_301_old }, + { title: lan.site.redirect_test, callback: site.edit.set_301 }, + { title: lan.site.site_menu_11, callback: site.edit.set_proxy }, + { title: lan.site.site_menu_12, callback: site.edit.set_security }, + { title: lan.site.response_log, callback: site.edit.get_site_logs }, + ]; + if (webcache !== '') menus.splice(3, 0, webcache); + if (item.project_type == 'WP') menus.splice(10, 0, { title: 'Wordpress Setting', callback: site.edit.set_wp_config }); + for (var i = 0; i < menus.length; i++) { + var men = menus[i]; + var _p = $('

                      ' + men.title + '

                      '); + _p.data('callback', men.callback); + $('.site-menu').append(_p); + } + $('.site-menu p').click(function () { + $('#webedit-con').html(''); + $(this).addClass('bgw').siblings().removeClass('bgw'); + var callback = $(this).data('callback'); + if (callback) callback(item); + }); + site.reload(0); + }, 100); + }, + domain_dns_list: [], // dns域名列表 + domain_dns_type: '', // dns域名类型[one/multi] + dns_data_treating: [], // 原始dns接口数据 + dns_configured_table: [], // 已配置的dns域名列表 + dns_interface_list: [], // dns接口列表 + dnsForm: null, + //检测域名api配置是否正确 + check_domain_dns: function () { + if (site.domain_dns_type == 'one') { + var domain = $('#apply_site_name').val(); + site.domain_dns_list = [domain]; + if (domain == '') return layer.msg(lan.site.set_ssl.domain_name_pl, { icon: 0 }); + } else if (site.domain_dns_type == 'multi') { + if (site.domain_dns_list.length == 0) return layer.msg(lan.site.set_ssl.domain_name_pla, { icon: 0 }); + } + site.refresh_dns_interface(); + }, + // 管理dns接口 + set_dns_api_open: function () { + bt_tools.open({ + title: lan.site.set_ssl.man_dns, + area: '600px', + btn: false, + content: '
                      ', + success: function (layers) { + bt_tools.table({ + el: '.dnsManager', + url: '/site?action=GetDnsApi', + height: '400', + dataFilter: function (res) { + var data = []; + for (var i = 1; i < res.length; i++) { + var resI = res[i]; + for (var j = 0; j < resI.data.length; j++) { + var info = {}; + info = { + ps: resI.data[j].ps, + id: resI.data[j].id, + domain: resI.data[j].domain, + conf: resI.data[j].conf, + typeTitle: resI.title, + dns_type: resI.name, + name: resI.data[j].conf[0].value, + value: resI.data[j].conf[1].value, + }; + // 获取dns接口配置信息 + for (var k = 0; k < resI.data[j].conf.length; k++) { + info[resI.data[j].conf[k].name] = resI.data[j].conf[k].value; + } + data.push(info); + } + } + site.dns_configured_table = site.data_treating(res); + return { data: data }; + }, + column: [ + { + fid: 'typeTitle', + title: lan.public_backup.type, + }, + { + fid: 'ps', + title: lan.soft.ps, + }, + { + title: bt.public.action, + align: 'right', + type: 'group', + group: [ + { + title: bt.public.edit, + event: function (row, index, ev, key, _that) { + site.editDns(row, _that); + }, + }, + { + title: bt.public.del, + event: function (row, index, ev, key, _that) { + bt.simple_confirm({ title: 'delete【' + row.ps + '】', msg: lan.site.set_ssl.del_api_confirm + '?' }, function () { + bt_tools.send( + { url: '/site?action=remove_dns_api', data: { dns_type: row.dns_type, api_id: row.id } }, + function (res) { + bt_tools.msg(res); + if (res.status) _that.$refresh_table_list(true); + }, + 'Delete authentication interface' + ); + }); + }, + }, + ], + }, + ], + tootls: [ + { + type: 'group', + positon: ['left', 'top'], + list: [ + { + title: lan.site.set_ssl.add_dns, + active: true, + event: function (row, _that) { + site.editDns(undefined, _that); + }, + }, + ], + }, + ], + }); + }, + }); + }, + + // 添加dns接口 + add_dns_interface: function () { + var _this = this; + if ($('.dns_interface_line').length > 0) return; + $('.check_model_line.line').after('
                      '); // 插入dns + $('.isdnsbtn').show(); // 显示dns刷新按钮 + var formConfig = [ + { + label: lan.site.set_ssl.select_dns, + group: [ + { + type: 'select', + name: 'dns_select', + width: '250px', + placeholder: lan.site.set_ssl.select_parse, + list: [ + // {title:lan.site.set_ssl.auto_parse,value:'dns#@api'}, + { title: lan.site.set_ssl.manual_parse, value: 'dns' }, + ], + change: function (formData, el, that) { + that.config.form[0].group[0].value = formData.dns_select; + if (formData.dns_select == 'dns#@api') { + that.config.form[0].group[0].suffix = ''; + that.config.form[0].group[1].display = true; + } else { + that.config.form[0].group[0].suffix = '
                      ' + lan.site.set_ssl.parse_tip + ''; + that.config.form[0].group[1].display = false; + } + that.$replace_render_content(0); + }, + }, + { + display: false, + type: 'button', + class: 'btn-sub-success', + style: { 'margin-left': '10px', 'vertical-align': 'middle' }, + title: lan.site.set_ssl.dns_api_config, + }, + ], + }, + ]; + if ($('#ssl_tabs span.on').text().indexOf('Let') > -1) { + // formConfig插入数据 + formConfig.push( + { + label: '', + group: [ + { + name: 'app_root', + type: 'checkbox', + title: lan.site.set_ssl.auto_more_domain, + }, + ], + }, + { + label: '', + group: [ + { + type: 'help', + style: { margin: '0' }, + list: [lan.site.set_ssl.auto_more_tip], + }, + ], + } + ); + } + // 渲染dns + _this.dnsForm = bt_tools.form({ + el: '.dnsForm', + form: formConfig, + }); + //管理dns点击事件 + $('.dnsForm') + .unbind('click') + .on('click', '.btn-sub-success.btn-success', function () { + site.set_dns_api_open(); + }); + }, + // 添加/编辑dns接口 + editDns: function (row, _that, isGlobal) { + var isEdit = row && row.hasOwnProperty('name') ? true : false; + bt_tools.open({ + title: isEdit ? 'Edit【' + row.ps + '】' : lan.site.set_ssl.add_dns_ver, + area: '530px', + skin: 'dns_layer_form', + content: { + class: 'pd20', + data: row, + form: this.switch_dns_add_key(isEdit ? row.dns_type : site.dns_interface_list[0].value, isGlobal), + }, + success: function (layero) { + $('.dns-help li').eq(3).show().siblings().hide(); + $(layero).find('.layui-layer-content').css('overflow', 'inherit'); + if (isGlobal) { + $('textarea[name=domains]').val(isEdit ? row.domain.join('\n') : ''); + } + }, + yes: function (formData, indexs) { + // 是否验证成功 + var isverify = true, + param = { dns_type: formData.dns_type, ps: formData.ps }, + paramArr = []; + // 限制ps的长度 + if (formData.ps.length > 35) return layer.msg(lan.site.set_ssl.ps_pl, { icon: 0 }); + // dns_layer_form下input如果为空,提示对应的placeholder,然后return false + $('.dns_layer_form input').each(function (index, item) { + var _val = $(item).val(); + if (_val == '' || _val.replace(/\s+/g, '') == '') { + layer.msg($(item).attr('placeholder'), { icon: 0 }); + isverify = false; + return false; + } + }); + if (!isverify) return false; + // 排除formData中的dns_type和ps,循环添加到paramArr中 + for (var key in formData) { + if (key !== 'dns_type' && key !== 'ps') { + paramArr.push({ name: key, value: formData[key] }); + } + } + param['pdata'] = JSON.stringify(paramArr); + + if (isEdit) param['api_id'] = row.id; + if (typeof row != 'undefined' && row.hasOwnProperty('domains')) { + param['domains'] = JSON.stringify([row.domains]); // 没有dns接口,默认已当前域名添加 + } else if (isGlobal) { + // 高级设置类型 + param['domains'] = JSON.stringify(formData.domains.split('\r\n')); + } else { + param['domains'] = JSON.stringify([]); //不设定固定域名,单纯链接dns接口 + } + bt_tools.send( + { url: isEdit ? '/site?action=set_dns_api' : '/site?action=add_dns_api', data: param }, + function (res) { + bt_tools.msg(res); + if (res.status) { + layer.close(indexs); + if (_that) { + _that.$refresh_table_list(true); + } else { + bt_tools.send({ url: '/site?action=GetDnsApi' }, function (data) { + site.dns_configured_table = site.data_treating(data); + }); + } + } + }, + isEdit ? 'Modify authentication interface' : 'Add authentication interface' + ); + }, + }); + }, + /** + * 生成不同dns类型的配置 + * @param {*} type dns|DNSPodDns|AliyunDns|CloudflareDns|GodaddyDns|DNSLADns| + * @returns config 用于重新渲染表单 + */ + switch_dns_add_key: function (type, isGlobal) { + // 在原始数据中查找type相同的数据 + var sthat = this, + firstApi = site.dns_data_treating.find(function (item) { + return item.name === type; + }), + helpObj = {}, + configKey = []; + for (var i = 0; i < site.dns_interface_list.length; i++) { + var help = site.dns_interface_list[i].help; + helpObj[site.dns_interface_list[i].value] = [ + '' + help[0].title + '', + '' + help[1].title + '', + ]; + } + var config = [ + { + label: lan.site.set_ssl.ver_type, + group: [ + { + type: 'select', + name: 'dns_type', + width: '330px', + list: this.dns_interface_list, + change: function (formData, element, that) { + // 根据不同的dns接口,渲染不同的输入框 + that.config.form[0].group[0].value = formData.dns_type; + that.$again_render_form(sthat.switch_dns_add_key(formData.dns_type)); + }, + }, + ], + }, + { + label: lan.soft.ps, + group: [ + { + type: 'text', + name: 'ps', + width: '330px', + placeholder: lan.site.set_ssl.ps_pls, + }, + ], + }, + { + group: [ + { + type: 'help', + class: 'dns-help', + list: helpObj[type], + }, + ], + }, + ]; + //高级设置类型追加显示已添加的域名 + if (isGlobal) { + // 往config的第二个种,追加域名 + config.splice(2, 0, { + label: lan.site.set_ssl.as_domain, + group: [ + { + type: 'textarea', + name: 'domains', + style: { + width: '330px', + 'min-width': '330px', + 'min-height': '130px', + 'line-height': '22px', + 'padding-top': '10px', + resize: 'both', + }, + placeholder: lan.site.set_ssl.more_domain_pl, + }, + ], + }); + } + $.each(firstApi.add_table[0].fields, function (index, item) { + configKey.push({ + label: item, + group: [ + { + type: 'text', + name: item, + width: '330px', + placeholder: 'Please enter' + item, + }, + ], + }); + }); + config = config.slice(0, 1).concat(configKey).concat(config.slice(1)); + return config; + }, + // 深度获取所有dns账号中的域名 + data_treating: function (data) { + var tableData = [], + dns_type = []; + this.dns_data_treating = data.filter(function (item) { + return item.name !== 'dns'; + }); // 原始数据 + for (var i = 0; i < data.length; i++) { + if (data[i].name == 'dns') continue; //手动解析 + var item = data[i]; + if (item.data) { + for (var j = 0; j < item.data.length; j++) { + tableData.push({ + ps: item.data[j].ps, + id: item.data[j].id, + domain: item.data[j].domain, + conf: item.data[j].conf, + typeTitle: item.title, + dns_type: item.name, + name: item.data[j].conf ? item.data[j].conf[0].value : '', + value: item.data[j].conf ? item.data[j].conf[1].value : '', + help: item.help, + add_table: item.add_table, + }); + } + } + dns_type.push({ title: item.title, value: item.name, help: item.help }); + } + this.dns_interface_list = dns_type; + return tableData; + }, + // 移除dns接口 + remove_dns_interface: function () { + $('.dns_interface_line.line').remove(); + $('.isdnsbtn').hide(); + }, + // 自动刷新dns域名情况 + refresh_dns_interface: function () { + // 当前解析类型 + var dns_type = $('select[name=dns_select]').val(), + that = this; + // 是否手动解析 + if (dns_type == 'dns') { + return false; + } + bt_tools.send({ url: 'site?action=test_domains_api', data: { domains: JSON.stringify(site.domain_dns_list) } }, function (res) { + if (site.domain_dns_type == 'one') { + if ($.isEmptyObject(res[0])) { + $('.damin_dns_result').html( + '
                      ' + ); + } else { + $('.damin_dns_result').html( + '
                      ' + ); + } + + // 点击配置 + $('.damin_dns_result').on('click', 'button', function () { + // 没有dns接口,直接跳转到添加 + if (site.dns_configured_table.length == 0) return site.editDns({ domains: $('#apply_site_name').val() }); + // 渲染dns列表 + var options = ''; + $.each(site.dns_configured_table, function (index, item) { + options += '
                    • ' + item.typeTitle + '[' + item.ps + ']' + '
                    • '; + }); + $('.damin_dns_result .dropdown-menu').html(options); + }); + // 点击选择 + $('.damin_dns_result .dropdown-menu') + .unbind('click') + .on('click', 'li', function () { + var dns_id = $(this).data('id'), + param = { api_id: dns_id }, + item = site.dns_configured_table.find(function (item) { + return item.id == dns_id; + }); + + param['dns_type'] = item.dns_type; + param['force_domain'] = $('#apply_site_name').val(); + bt_tools.send({ url: 'site?action=set_dns_api', data: param }, function (res) { + that.refresh_dns_interface(); + }); + }); + } else { + var view = ''; + $.each(site.domain_dns_list, function (index, item) { + // 是否空对象(没有设置dns) + var isDnsEmpty = $.isEmptyObject(res[index]); + view += + '
                      \ +
                      ' + + item + + '
                      \ +
                      \ +
                      \ + \ + \ +
                      \ +
                      \ + \ +
                      \ +
                      \ +
                      '; + }); + $('.dns_domains_multi_list').html(view); + + // 点击配置 + $('.dns_domains_item_btn button').click(function () { + // 没有dns接口,直接跳转到添加 + if (site.dns_configured_table.length == 0) return site.editDns({ domains: $(this).parents('.dns_domains_item').find('.dns_domains_item_title').text() }); + // 渲染dns列表 + var options = ''; + $.each(site.dns_configured_table, function (index, item) { + options += '
                    • ' + item.typeTitle + '[' + item.ps + ']' + '
                    • '; + }); + $('.dns_domains_item_btn .dropdown-menu').html(options); + }); + // 点击选择 + $('.dns_domains_item_btn .dropdown-menu') + .unbind('click') + .on('click', 'li', function () { + var dns_id = $(this).data('id'), + param = { api_id: dns_id }, + item = site.dns_configured_table.find(function (item) { + return item.id == dns_id; + }); + + param['dns_type'] = item.dns_type; + param['force_domain'] = $(this).parents('.dns_domains_item').find('.dns_domains_item_title').text(); + bt_tools.send({ url: 'site?action=set_dns_api', data: param }, function (res) { + that.refresh_dns_interface(); + }); + }); + // 点击删除 + $('.dns_domains_item_close') + .unbind('click') + .click(function () { + // 从site.domain_dns_list中删除当前选中的域名 + var domain = $(this).parents('.dns_domains_item').find('.dns_domains_item_title').text(); + site.domain_dns_list = site.domain_dns_list.filter(function (item) { + return item != domain; + }); + $(this).parents('.dns_domains_item').remove(); + }); + // dns_domains_item鼠标经过时添加active,离开时移除active + $('.dns_domains_item') + .unbind('mouseenter') + .mouseenter(function () { + $(this).addClass('active'); + }); + $('.dns_domains_item') + .unbind('mouseleave') + .mouseleave(function () { + $(this).removeClass('active'); + }); + } + }); + }, + //批量设置站点证书 + setBathSiteSsl: function (batch_list, callback) { + bt_tools.send( + { + url: '/ssl?action=SetBatchCertToSite', + data: { + BatchInfo: JSON.stringify(batch_list), + }, + }, + function (res) { + if (callback) callback(res); + }, + 'Set site certificates in batches' + ); + }, + set_ssl: function (web) { + //站点/项目名、放置位置 + bt.site.get_site_ssl(web.name, function (rdata) { + var type = rdata.type; // 类型 + var certificate = rdata.cert_data; // 证书信息 + var pushAlarm = rdata.push; // 是否推送告警 + var isStart = rdata.status; // 是否启用 + var layers = null; + var expirationTime = certificate.endtime; // 证书过期时间 + var isRenew = (function () { + // 是否续签 + var state = false; + if (expirationTime <= 30) state = true; + if (type === 2 && expirationTime < 0) state = true; + if (type === 0 || type === -1) state = false; + return state; + })(); + + // 续签视图 + function renewal_ssl_view(item) { + bt.confirm( + { + title: 'Visa renewal letter', + msg: 'The current certificate order needs to be regenerated into a new order, which requires manual renewal and re-deployment of the certificate. Do you want to continue?', + }, + function () { + var loadT = bt.load(lan.site.set_ssl.renew_cert_load); + bt.send( + 'renew_cert_order', + 'ssl/renew_cert_order', + { + pdata: JSON.stringify({ oid: item.oid }), + }, + function (res) { + loadT.close(); + site.reload(); + setTimeout(function () { + bt.msg(res); + }, 1000); + } + ); + } + ); + } + + // 申请宝塔证书 + function apply_bt_certificate() { + var html = ''; + var domains = []; + for (var i = 0; i < rdata.domain.length; i++) { + var item = rdata.domain[i]; + if (item.name.indexOf('*') == -1) domains.push({ title: item.name, value: item.name }); + } + for (var i = 0; i < domains.length; i++) { + var item = domains[i]; + html += ''; + } + bt.open({ + type: 1, + title: lan.site.set_ssl.req_free_cert, + area: '610px', + content: + '
                      \ +
                      \ + \ +
                      提示:尊敬的用户您好,感谢您对宝塔免费SSL证书的支持,由于证书签发机制的调整,我们的免费SSL证书签发将于2023年12月31日进行下架,查看详情
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.cert_info + + '\ +
                      \ + TrustAsia TLS RSA CA(Free edition)\ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.domain_name + + '\ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.per_name + + '\ +
                      \ + \ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.lo_area + + '\ +
                      \ + \ + \ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.address + + '\ +
                      \ + \ +
                      \ +
                      \ +
                      \ + ' + + lan.public_backup.mobile_phone_or_email + + '\ +
                      \ + \ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.pos_code + + '\ +
                      \ + \ +
                      \ +
                      \ + \ +
                      \ + \ +
                      \ + ' + + lan.site.set_ssl.add_tips + + '\ +
                      \ +
                      \ +
                      \ +
                      \ +
                      \ +
                      ', + success: function (layero, index) { + $('.submit_ssl_info').click(function () { + var form = $('.free_ssl_info').serializeObject(); + for (var key in form) { + if (Object.hasOwnProperty.call(form, key)) { + var value = form[key], + el = $('[name="' + key + '"]'); + if (value == '') { + layer.tips(el.attr('placeholder'), el, { tips: ['1', 'red'] }); + el.focus(); + el.css('borderColor', 'red'); + return false; + } else { + el.css('borderColor', ''); + } + switch (key) { + case 'orgPhone': + if (!bt.check_phone(value)) { + layer.tips(lan.site.set_ssl.phone_ver, el, { tips: ['1', 'red'] }); + el.focus(); + el.css('borderColor', 'red'); + return false; + } + break; + case 'orgPostalCode': + if (!/^[0-9]\d{5}(?!\d)$/.test(value)) { + layer.tips(lan.site.set_ssl.postal_ver, el, { tips: ['1', 'red'] }); + el.focus(); + el.css('borderColor', 'red'); + return false; + } + break; + } + } + } + if (form.domain.indexOf('www.') != -1) { + var rootDomain = form.domain.split(/www\./)[1]; + if (!$.inArray(domains, rootDomain)) { + layer.msg(lan.site.set_ssl.no_root_tip(form.domain, rootDomain), { icon: 2, time: 5000 }); + return; + } + } + var loadT = bt.load(lan.site.set_ssl.sub_cert); + bt.send('ApplyDVSSL', 'ssl/ApplyDVSSL', $.extend(form, { path: web.path }), function (tdata) { + loadT.close(); + if (tdata.msg.indexOf('
                      ') != -1) { + layer.msg(tdata.msg, { time: 0, shadeClose: true, area: '600px', icon: 2, shade: 0.3 }); + } else { + bt.msg(tdata); + } + if (tdata.status) { + layer.close(index); + site.ssl.verify_domain(tdata.data.partnerOrderId, web.name); + } + }); + }); + $('.free_ssl_info input').keyup(function (res) { + var value = $(this).val(); + if (value == '') { + layer.tips($(this).attr('placeholder'), $(this), { tips: ['1', 'red'] }); + $(this).focus(); + $(this).css('borderColor', 'red'); + } else { + $(this).css('borderColor', ''); + } + }); + }, + }); + } + + if (!Array.isArray(certificate.dns)) certificate = { dns: [] }; + + $('#webedit-con').html( + '
                      ' + + '

                      ' + + lan.site.set_ssl.tips1 + + '

                      ' + + '

                      ' + + lan.site.set_ssl.tips2( + '' + + certificate.dns.join(', ') + + '', + expirationTime < 0 + ) + + '

                      ' + + '
                      ' + + '
                      ' + ); + var tabs = [ + { + title: lan.site.set_ssl.menu1 + ' - [' + (rdata.status ? lan.site.set_ssl.deployed : lan.site.set_ssl.not_deployed) + ']', + callback: function (content) { + acme.id = web.id; + var classify = ''; + var typeList = [lan.site.set_ssl.cert_type1, lan.site.set_ssl.cert_type2, lan.site.set_ssl.cert_type3, lan.site.set_ssl.cert_type4]; + var state = $( + '
                      ' + + '
                      ' + + '' + + '
                      ' + + lan.site.set_ssl.cert_brand + + ':' + + certificate.issuer + + '
                      ' + + '
                      ' + + '
                      ' + + '
                      ' + + lan.site.set_ssl.auth_domain + + '' + + certificate.dns.join('、') + + '
                      ' + + '
                      ' + + lan.site.set_ssl.expire_time + + '' + + (expirationTime >= 0 ? lan.site.set_ssl.expire_time_text(rdata.cert_data.notAfter, expirationTime.toFixed(0)) : lan.site.set_ssl.expired) + + '
                      ' + + '
                      ' + + '
                      ' + + '
                      ' + + lan.site.set_ssl.force_https + + '
                      ' + + // '
                      ' + lan.site.set_ssl.expire_reminder + ':Config
                      ' + + '
                      ' + + '
                      ' + + '
                      ' + + '
                      ' + + lan.site.set_ssl.ssl_key + + '
                      ' + + '
                      ' + + lan.site.set_ssl.ssl_crt + + '
                      ' + + '
                      ' + + '
                      ' + + '' + + '' + + '' + + '' + + '
                      ' + ); + content.append(state); + content.append( + bt.render_help([lan.site.set_ssl.save_ssl_tips1, lan.public_backup.cret_err, lan.public_backup.pem_format, lan.site.set_ssl.save_ssl_tips2, lan.site.set_ssl.save_ssl_tips3]) + ); + // if(rdata.status) { + // bt_tools.send({url: '/site?action=check_ssl',data: {hostname: web.name}}, function (res) { + // if(!res.status) content.prepend('
                      '+ res.msg +'
                      ') + // },{verify:false}) + // } + var setAlarmMode = bt.get_cookie('setAlarmMode'); + if (!pushAlarm.status && rdata.csr && !setAlarmMode) { + // if (true) { + bt.set_cookie('setAlarmMode', 1); + layer.tips(lan.site.set_ssl.set_alarm_mode_tips, '.setAlarmMode', { + tips: [1, '#d9534f'], + area: '380px', + time: 5000, + }); + setTimeout(function () { + $(window).one('click', function () { + layer.closeAll('tips'); + }); + }, 500); + } + var moduleConfig = null; + function cacheModule(callback) { + if (moduleConfig && callback) return callback(moduleConfig); + bt.site.get_module_config({ name: 'site_push', type: 'ssl' }, function (rdata1) { + moduleConfig = rdata1; + if (callback) callback(rdata1); + }); + } + + /** + * 提醒到期弹框 + * @param $check 到期提醒开关 + */ + function alarmMode($check) { + var time = new Date().getTime(); + var isExpiration = pushAlarm.status; + if ($check) isExpiration = $check.is(':checked'); + layer.open({ + type: 1, + title: lan.site.set_ssl.expire_reminder_title, + area: '470px', + closeBtn: 2, + content: + '\ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.expire_reminder + + '\ +
                      \ + \ + \ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.site + + '\ +
                      \ + \ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.remaining_days + + '\ +
                      \ +
                      \ + \ + Days\ +
                      \ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.number_ransmissions + + '\ +
                      \ +
                      \ + \ + ,' + + lan.site.set_ssl.no_more + + '\ +
                      \ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.notification_mode + + '\ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.application_config + + '\ +
                      \ +
                      \ +
                      \ + \ + \ + ' + + lan.site.set_ssl.apply_all + + ' ' + + lan.site.set_ssl.no_config_site + + '\ +
                      \ +
                      \ +
                      \ +
                      \ +
                      \ +
                      ', + btn: [lan.site.set_ssl.save_config, lan.public.cancel], + success: function ($layer) { + cacheModule(function (rdata1) { + // 获取配置 + bt.site.get_msg_configs(function (rdata) { + var html = '', + unInstall = '', + pushList = rdata1.push; + for (var key in rdata) { + var item = rdata[key], + _html = '', + accountConfigStatus = false, + module = pushAlarm.module || []; + if (pushList.indexOf(item.name) === -1) continue; + if (key == 'sms') continue; + if (key === 'wx_account') { + if (!$.isEmptyObject(item.data) && item.data.res.is_subscribe && item.data.res.is_bound) { + accountConfigStatus = true; //安装微信公众号模块且绑定 + } + } + _html = + '
                      ' + + '
                      ' + + '' + + '' + + '' + + item.title + + (!item.setup || $.isEmptyObject(item.data) + ? '[' + lan.public_backup.install + ']' + : key == 'wx_account' && !accountConfigStatus + ? '[' + lan.public_backup.install + ']' + : '') + + '' + + '
                      ' + + '
                      '; + if (!item.setup) { + unInstall += _html; + } else { + html += _html; + } + } + $('.installPush').html(html + unInstall); + $('.setAllSsl').on('click', function () { + var that = $(this).find('i'); + if (that.hasClass('active')) { + that.removeClass('active'); + that.next().prop('checked', false); + } else { + that.addClass('active'); + that.next().prop('checked', true); + } + }); + if (pushAlarm.project === 'all' && pushAlarm.status) $('.setAllSsl').trigger('click'); + }); + }); + + // 安装消息通道 + $('.installPush').on('click', '.form-checkbox-label', function () { + var that = $(this).find('i'); + if (!that.parent().parent().hasClass('check_disabled')) { + if (that.hasClass('active')) { + that.removeClass('active'); + that.next().prop('checked', false); + } else { + that.addClass('active'); + that.next().prop('checked', true); + } + } + }); + $('.triggerCycle').on('input', function () { + $('.siteSslHelp span').html($(this).val()); + }); + + $('.installPush').on('click', '.installNotice', function () { + var type = $(this).data('type'); + openAlertModuleInstallView(type); + }); + }, + yes: function (index) { + var status = $('input[name="due_alarm"]').is(':checked'); + var cycle = $('.triggerCycle').val(); + var push_count = $('.triggerPushCount').val(); + var arry = []; + var module = ''; + var isAll = $('[name="allSsl"]').is(':checked'); + $('.installPush .active').each(function (item) { + var item = $(this).attr('data-type'); + arry.push(item); + }); + if (!arry.length) return layer.msg('Please select an alarm mode', { icon: 2 }); + if (!parseInt(cycle)) return layer.msg('Remaining days cannot be less than 1', { icon: 2 }); + if (!parseInt(push_count)) return layer.msg('Send times cannot be less than 1', { icon: 2 }); + + // 参数 + var data = { + status: status, + type: 'ssl', + project: web.name, + cycle: parseInt(cycle), + title: 'Website SSL expiration alert', + module: arry.join(','), + interval: 600, + push_count: parseInt(push_count), + }; + + // 判断是否点击全局应用 + if (isAll) { + // 请求设置全局应用告警配置 + var allData = Object.assign({}, data); + allData.status = true; + allData.project = 'all'; + bt.site.set_push_config({ + name: 'site_push', + id: time, + data: JSON.stringify(allData), + }); + } + + // 请求设置本站点告警配置 + bt.site.set_push_config( + { + name: 'site_push', + id: pushAlarm.id ? pushAlarm.id : time, + data: JSON.stringify(data), + }, + function (rdata) { + bt.msg(rdata); + setTimeout(function () { + site.reload(); + }, 1000); + layer.close(index); + } + ); + }, + cancel: function () { + $check && $check.prop('checked', !isExpiration); + }, + btn2: function () { + $check && $check.prop('checked', !isExpiration); + }, + }); + } + // 设置强制HTTPS + $('#https').on('click', function () { + var that = $(this), + isHttps = $(this).is(':checked'); + if (!isHttps) { + layer.confirm( + lan.site.set_ssl.force_https_confirm, + { + icon: 3, + closeBtn: 2, + title: 'Turn off forced HTTPS', + cancel: function () { + that.prop('checked', !isHttps); + }, + btn2: function () { + that.prop('checked', !isHttps); + }, + }, + function () { + bt.site.close_http_to_https(web.name, function (rdata) { + if (rdata.status) { + setTimeout(function () { + site.reload(7); + }, 3000); + } else { + that.prop('checked', !isHttps); + } + }); + } + ); + } else { + bt.site.set_http_to_https(web.name, function (rdata) { + if (rdata.status) { + site.reload(7); + } else { + that.prop('checked', !isHttps); + layer.confirm(lan.site.set_ssl.open_ssl_comfirm, { icon: 3, title: 'Tips' }, function (index) { + $.ajaxSettings.async = false; + $('.saveCertificate').click(); + $.ajaxSettings.async = true; + $('#https').click(); + layer.close(index); + }); + } + }); + } + }); + + // 设置告警通知 + $('#expiration').on('click', function () { + layer.close(layers); + var _that = $(this); + var isExpiration = $(this).is(':checked'); + var time = new Date().getTime(); + if (isExpiration) { + alarmMode(_that); + } else { + var data = JSON.stringify({ + status: isExpiration, + type: 'ssl', + project: web.name, + cycle: parseInt(pushAlarm.cycle), + title: 'Website SSL expiration alert', + module: pushAlarm.module, + interval: 600, + push_count: 1, + }); + var id = pushAlarm.id ? pushAlarm.id : time; + if (pushAlarm.project === 'all') id = time; + bt.site.set_push_config( + { + name: 'site_push', + id: id, + data: data, + }, + function (rdata) { + bt.msg(rdata); + setTimeout(function () { + site.reload(); + }, 1000); + } + ); + } + }); + + // 保存证书 + $('.saveCertificate').on('click', function () { + var key = $('[name="key"]').val(), + csr = $('[name="csr"]').val(); + function set_ssl() { + if (key === '' || csr === '') return bt.msg({ status: false, msg: 'Please fill in the complete certificate content' }); + bt.site.set_ssl( + web.name, + { + type: rdata.type, + siteName: rdata.siteName, + key: key, + csr: csr, + }, + function (ret) { + if (ret.status) site.reload(7); + if (site.model_table) site.model_table.$refresh_table_list(true); + if (node_table) node_table.$refresh_table_list(true); + if (site_table) site_table.$refresh_table_list(true); + bt.msg(ret); + } + ); + } + + if ((key !== rdata.key && rdata.key) || (csr !== rdata.csr && rdata.key)) { + layer.confirm( + lan.site.set_ssl.edit_cert_comfirm, + { + icon: 3, + closeBtn: 2, + title: 'Certificate saving prompt', + }, + set_ssl + ); + } else { + set_ssl(); + } + }); + + // 告警方式 + $('.setAlarmMode').on('click', function () { + layer.close(layers); + alarmMode(); + }); + + // 续签证书 + $('.renewCertificate') + .unbind('click') + .on('click', function () { + var type = parseInt($(this).attr('data-type')); + switch (type /**/) { + case 3: // 商业证书续签 + renewal_ssl_view({ oid: rdata.oid }); + break; + case 2: // 宝塔证书 续签 + apply_bt_certificate(); + layer.msg('The current certificate type does not support one-click renewal. Please fill in the information application again', { icon: 2, time: 2000 }); + break; + case 1: // Let's Encrypt 续签 + site.ssl.renew_ssl(web.name, rdata.auth_type, rdata.index); + break; + } + }); + + // 关闭证书 + $('.closeCertificate').on('click', function () { + site.ssl.set_ssl_status('CloseSSLConf', web.name); + }); + + // 切换证书类型 + $('.cutSslType').on('click', function () { + var type = $(this).attr('data-type'); + switch (type) { + case '0': + type = 0; + break; + case '1': + type = 3; + break; + case '2': + type = 2; + break; + case '3': + type = 1; + break; + } + $('#ssl_tabs span:eq(' + type + ')').trigger('click'); + }); + + // 下载证书 + $('.downloadCertificate').on('click', function () { + var key = $('[name="key"]').val(), + pem = $('[name="csr"]').val(); + bt.site.download_cert( + { + siteName: web.name, + pem: pem, + key: key, + }, + function (rdata) { + if (rdata.status) { + window.open('/download?filename=' + encodeURIComponent(rdata.msg)); + } else { + layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); + } + } + ); + }); + }, + }, + { + title: lan.site.set_ssl.menu2 + '', + callback: function (robj) { + $.getScript('https://js.stripe.com/v3/'); + robj = $('#webedit-con .tab-con'); + bt.pub.get_user_info(function (udata) { + if (udata.status) { + var deploy_ssl_info = rdata, + html = '', + deploy_html = '', + product_list, + userInfo, + order_list, + is_check = true, + itemData, + activeData, + loadY, + pay_ssl_layer; + bt.send('get_order_list', 'ssl/get_order_list', {}, function (res) { + var rdata = res.res; + order_list = rdata; + if (rdata.length == 0) { + $('#ssl_order_list tbody').html( + '' + + lan.site.set_ssl.no_cert + + ' ->' + + lan.site.set_ssl.apply_certificate + + '' + ); + return; + } + $.each(rdata, function (index, item) { + if (deploy_ssl_info.type == 3 && deploy_ssl_info.oid === item.uc_id) { + deploy_html += + '' + + '' + + item.domains.join('、') + + '' + + item.title + + '' + + (function () { + var dayTime = new Date().getTime() / 1000, + color = '', + endTiems = ''; + if (item.end_date != '') { + item.end_date = parseInt(item.end_date); + endTiems = parseInt((item.end_date - dayTime) / 86400); + if (endTiems <= 15) color = 'orange'; + if (endTiems <= 7) color = 'red'; + if (endTiems < 0) return '' + lan.site.set_ssl.expired + ''; + return '' + lan.site.set_ssl.expire_date_text(endTiems) + ''; + } else { + return '--'; + } + })() + + '' + + lan.site.set_ssl.order_complate + + '' + + lan.site.set_ssl.deployed + + ' | ' + + lan.public.close + + ''; + } else { + html += + '' + + '' + + (item.domains == null ? '--' : item.domains.join('、')) + + '' + + item.title + + '' + + (function () { + var dayTime = new Date().getTime() / 1000, + color = '', + endTiems = ''; + if (item.end_date != '') { + item.end_date = parseInt(item.end_date); + endTiems = parseInt((item.end_date - dayTime) / 86400); + if (endTiems <= 15) color = 'orange'; + if (endTiems <= 7) color = 'red'; + if (endTiems < 0) return '' + lan.site.set_ssl.expired + ''; + return '' + lan.site.set_ssl.expire_date_text(endTiems) + ''; + } else { + return '--'; + } + })() + + '' + + (function () { + var suggest = ''; + if (!item.install) + suggest = + ' |' + + lan.site.set_ssl.troubleshooting_method + + '?
                      • ' + + lan.site.set_ssl.check_oneself + + '

                        ' + + lan.site.set_ssl.check_self_tip + + '

                      • Labor Service Purchase

                        Need deployment assistance? Human customer service available.

                      • ' + + '
                      '; + if (item.certId == '') { + return '' + lan.site.set_ssl.data_com + '' + suggest; + } else if (item.status === 1) { + switch (item.order_status) { + case 'COMPLETE': + return '' + lan.site.set_ssl.order_complate + ''; + break; + case 'PENDING': + return '' + lan.site.set_ssl.in_verify + '' + suggest; + break; + case 'CANCELLED': + return '' + lan.site.set_ssl.cancelled + ''; + break; + case 'FAILED': + return '' + lan.site.set_ssl.app_fail + ''; + break; + default: + return '' + lan.site.set_ssl.to_verified + ''; + break; + } + } else { + switch (item.status) { + case 0: + return '' + lan.site.set_ssl.no_pay + ''; + break; + case -1: + return '' + lan.site.set_ssl.cancelled + ''; + break; + default: + return '--'; + } + } + })() + + '' + + (function () { + var html = ''; + if (item.renew) html += '' + lan.site.set_ssl.renew_cert + '  |  '; + if (item.certId == '') { + // if (item.install) html += '人工服务 | '; + html += '' + lan.site.set_ssl.complete_data + ''; + return html; + } else if (item.status === 1) { + var html = ''; + switch (item.order_status) { + case 'COMPLETE': //申请成功 + return ( + '' + + lan.site.set_ssl.deploy + + '  |  ' + + lan.site.set_ssl.download + + '' + ); + break; + case 'PENDING': //申请中 + // if (item.install) html += '人工服务 | '; + html += '' + lan.site.set_ssl.verify + ''; + return html; + break; + case 'CANCELLED': //已取消 + return lan.site.set_ssl.no_action; + break; + case 'FAILED': + return '' + lan.site.set_ssl.detail + ''; + break; + default: + // if (item.install) html += '人工服务 | '; + html += '' + lan.site.set_ssl.verify + ''; + return html; + break; + } + } else { + return '--'; + } + })() + + '' + + ''; + } + }); + $('#ssl_order_list tbody').html(deploy_html + html); + //解决方案事件 + $('#ssl_order_list').on('click', '.bt_ssl_suggest', function (e) { + var $this = $(this); + var $layer = $this.parents('.layui-layer'); + var $cont = $this.find('.suggest_content'); + var rect = $this.offset(); + var layerRect = $layer.offset(); + var top = rect.top - layerRect.top + $this.height() + 7; + var left = rect.left - layerRect.left - 153; + $cont.css({ + top: top + 'px', + left: left + 'px', + right: 'auto', + bottom: 'auto', + width: '410px', + }); + $('.suggest_content').hide(); + $cont.show(); + $(document).one('click', function () { + $cont.hide(); + }); + e.stopPropagation(); + }); + // 表格滚动隐藏解决方案内容 + $('.ssl_order_list').scroll(function (e) { + $('.suggest_content').hide(); + }); + //人工客服购买 + $('#ssl_order_list').on('click', '.service_buy', function () { + var loads = bt.load('Payment order is being generated, please wait...'); + bt.send( + 'apply_cert_install_pay', + 'ssl/apply_cert_install_pay', + { + uc_id: $(this).data('oid'), + }, + function (res) { + loads.close(); + if (!res.success) { + layer.msg(res.res, { icon: 2 }); + return; + } + var stripe = Stripe(res.res.stripe_public_key); + stripe.redirectToCheckout({ sessionId: res.res.session_id }); + // if (res.status != undefined && !res.status) { + // return layer.msg(res.msg, { time: 0, shadeClose: true, icon: 2, shade: 0.3 }); + // } + // open_service_buy(res); + } + ); + }); + + //人工客服咨询 + $('.service_method').click(function () { + bt.onlineService(); + }); + }); + robj.append( + '
                      ' + + lan.site.set_ssl.enterprise_certificate + + '
                      ' + + lan.site.set_ssl.exceptional_application + + '
                      ' + + lan.site.set_ssl.anti_hijackingTampering + + '
                      ' + + lan.site.set_ssl.increase_seo + + '
                      ' + + lan.site.set_ssl.indemnity_guarantee + + '
                      ' + + lan.site.set_ssl.refund_failure + + '
                      ' + + lan.site.set_ssl.official_use + + '
                      \ +
                      \ + \ +
                      \ + \ + \ + \ +
                      ' + + lan.public_backup.domain + + '' + + lan.site.set_ssl.certificate_type + + '' + + lan.site.set_ssl.expire_date + + '' + + lan.public.status + + '' + + lan.public.action + + '
                      ' + + lan.site.set_ssl.get_certificate_list + + '...
                      \ +
                      \ +
                        \ +
                      • ' + + lan.site.set_ssl.bus_tip1 + + '
                      • \ +
                      • ' + + lan.site.set_ssl.bus_tip2 + + '
                      • \ +
                      • ' + + lan.site.set_ssl.bus_tip3 + + '
                      • \ +
                      • ' + + lan.site.set_ssl.bus_tip4 + + '
                      • \ +
                      ' + ); + $('.service_buy_before').click(function () { + bt.onlineService(); + }); + bt.fixed_table('ssl_order_list'); + /** + * @description 证书购买人工服务 + * @param {Object} param 支付回调参数 + * @returns void + */ + function open_service_buy(param) { + var order_info = {}, + is_check = true; + pay_ssl_layer = bt.open({ + type: 1, + title: '购买人工服务', + area: ['790px', '770px'], + skin: 'service_buy_view', + content: + '
                      \ +
                      \ +
                      微信支付支付宝支付
                      \ +
                      \ +
                      \ +
                      \ +
                      \ + 总计\ + \ +
                      \ +
                      \ +
                      \ + 商品名称\ + \ +
                      \ +
                      \ + 下单时间\ + \ +
                      \ +
                      \ +
                      微信扫一扫支付
                      \ +
                      \ +
                      \ +
                      \ +
                      支付成功
                      \ +
                      \ +
                      \ + 商品名称:\ + \ +
                      \ +
                      \ +
                      \ + 商品价格:\ + \ +
                      \ +
                      \ + 下单时间:\ + \ +
                      \ +
                      \ +
                      \ +
                      \ +
                      \ +
                      请打开微信扫一扫联系人工客服
                      \ +
                      qrcode
                      \ +
                      \ +
                      \ +
                      \ +
                      ', + success: function (layero, indexs) { + var order_wxoid = null, + qq_info = null; + + $('.guide_nav span').click(function () { + $(this).addClass('active').siblings().removeClass('active'); + $('.lib-prompt span').html($(this).index() == 0 ? '微信扫一扫支付' : '支付宝扫一扫支付'); + $('#PayQcode').empty(); + $('#PayQcode').qrcode({ + render: 'canvas', + width: 200, + height: 200, + text: $(this).index() != 0 ? order_info.alicode : order_info.wxcode, + }); + }); + reader_applay_qcode( + $.extend( + { + name: '证书安装服务', + price: param.price, + time: bt.format_data(new Date().getTime()), + }, + param + ), + function (info) { + check_applay_status(function (rdata) { + $('.order_service_check').addClass('active').siblings().removeClass('active'); + $('.order_service_check .lib-price-detailed .text-right:eq(0)').html(info.name); + $('.order_service_check .lib-price-detailed .text-right:eq(1)').html('¥' + info.price); + $('.order_service_check .lib-price-detailed .text-right:eq(2)').html(info.time); + $('#ssl_tabs .on').click(); + //人工客服二维码 + $('#contact_qcode').qrcode({ + render: 'canvas', + width: 120, + height: 120, + text: 'https://work.weixin.qq.com/kfid/kfc9151a04b864d993f', + }); + //缩小展示窗口 + $('.service_buy_view') + .width(690) + .height(350) + .css({ + //设置最外层弹窗大小 + left: (document.body.clientWidth - 690) / 2 + 'px', + top: (document.body.clientHeight - 350) / 2 + 'px', + }); + }); //检测支付状态 + } + ); //渲染二维码 + + function reader_applay_qcode(data, callback) { + order_wxoid = data.wxoid; + qq_info = data.qq; + order_info = data; + + $('#PayQcode').empty().qrcode({ + render: 'canvas', + width: 240, + height: 240, + text: data.wxcode, + }); + $('.price-txt .sale-price').html(data.price); + $('.lib-price-detailed .info:eq(0) span:eq(1)').html(data.name); + $('.lib-price-detailed .info:eq(1) span:eq(1)').html(data.time); + if (typeof data.qq != 'undefined') { + $('.order_pay_btn a:eq(0)').attr({ + href: data.qq, + target: '_blank', + }); + } else { + $('.order_pay_btn a:eq(0)').remove(); + } + if (callback) callback(data); + } + + function check_applay_status(callback) { + bt.send( + 'get_wx_order_status', + 'auth/get_wx_order_status', + { + wxoid: order_wxoid, + }, + function (res) { + if (res.status) { + is_check = false; + if (callback) callback(res); + } else { + if (!is_check) return false; + setTimeout(function () { + check_applay_status(callback); + }, 2000); + } + } + ); + } + }, + cancel: function (index) { + if (is_check) { + if (confirm('当前正在支付订单,是否取消?')) { + layer.close(index); + is_check = false; + } + return false; + } + }, + }); + } + /** + * @description 对指定表单元素的内容进行效验 + * @param {Object} el jqdom对象 + * @param {String} name 表单元素name名称 + * @param {*} value 表单元素的值 + * @returns 返回当前元素的值 + */ + function check_ssl_user_info(el, name, value, config) { + el.css('borderColor', '#ccc'); + var status; + switch (name) { + case 'domains': + el = site.domain_dns_type == 'multi' ? $('.dns_domains_multi_view') : el; + value = bt.strim(value).replace(/\n*$/, ''); + var list = value.split('\n'); + if (value == '') { + set_info_tips(el, { msg: 'The domain name cannot be empty!', color: 'red' }); + status = false; + } + if (!Array.isArray(list)) list = [list]; + $.each(list, function (index, item) { + if (bt.check_domain(item)) { + var type = item.indexOf(), + index = null; + if (config.code.indexOf('multi') > -1) index = 0; + if (config.code.indexOf('wildcard') > -1) index = 1; + if (config.code.indexOf('wildcard') > -1 && config.code.indexOf('multi') > -1) index = 2; + switch (index) { + case 0: + if (list.length > config.limit) { + set_info_tips(el, { msg: lan.site.set_ssl.more_cert_tip1(config.limit), color: 'red' }); + status = false; + } else if (list.length == 1) { + set_info_tips(el, { msg: lan.site.set_ssl.more_cert_tip2(config.limit), color: 'red' }); + status = false; + } + break; + case 1: + if (item.indexOf('*') != 0) { + set_info_tips(el, { msg: "Wildcard domain name format error, correct writing '*.bt.cn'", color: 'red' }); + status = false; + } + break; + case 2: + if (list.length > config.limit) { + set_info_tips(el, { msg: lan.site.set_ssl.more_cert_tip1(config.limit), color: 'red' }); + status = false; + } else if (list.length == 1) { + set_info_tips(el, { msg: lan.site.set_ssl.more_cert_tip2(config.limit), color: 'red' }); + status = false; + } + if (item.indexOf('*') != 0) { + set_info_tips(el, { msg: "Wildcard domain name format error, correct writing '*.bt.cn'", color: 'red' }); + status = false; + } + break; + } + } else { + if (value != '') { + set_info_tips(el, { msg: '【 ' + item + ' 】' + ',Domain name format error!', color: 'red' }); + } else { + set_info_tips(el, { msg: 'The domain name cannot be empty!', color: 'red' }); + } + status = false; + } + }); + value = list; + break; + case 'state': + if (value == '') { + set_info_tips(el, { msg: 'The province cannot be empty!', color: 'red' }); + status = false; + } + break; + case 'city': + if (value == '') { + set_info_tips(el, { msg: 'Your city/county cannot be empty!', color: 'red' }); + status = false; + } + break; + case 'city': + if (value == '') { + set_info_tips(el, { msg: 'Your city/county cannot be empty!', color: 'red' }); + status = false; + } + break; + case 'organation': + if (value == '') { + set_info_tips(el, { msg: 'The company name cannot be empty, if it is an individual application, please enter your name!', color: 'red' }); + status = false; + } + break; + case 'address': + if (value == '') { + set_info_tips(el, { msg: 'Please enter the company address, cannot be empty, specific requirements see the description', color: 'red' }); + status = false; + } + break; + case 'name': + if (value == '') { + set_info_tips(el, { msg: 'User name cannot be empty!', color: 'red' }); + status = false; + } + break; + case 'email': + if (value == '') { + set_info_tips(el, { msg: 'User email address cannot be empty!', color: 'red' }); + status = false; + } + if (!bt.check_email(value)) { + set_info_tips(el, { msg: 'User email address format error!', color: 'red' }); + status = false; + } + break; + // case 'mobile': + // if (value != '') { + // if (!bt.check_phone(value)) { + // set_info_tips(el, { msg: 'User mobile phone number format error!', color: 'red' }); + // status = false; + // } + // } + // break; + // case 'phonePre': + // if (value != '') { + // var reg = /^\+\d+/ + // if (!reg.test(value)) { + // set_info_tips(el, { msg: 'User mobile phone number format error!', color: 'red' }); + // status = false; + // } + // } + // break; + default: + status = value; + break; + } + if (typeof status == 'boolean' && status === false) return false; + status = value; + return status; + } + + /** + * @description 设置元素的提示和边框颜色 + * @param {Object} el jqdom对象 + * @param {Object} config = { + * @param {String} config.msg 提示内容 + * @param {String} config.color 提示颜色 + * } + */ + function set_info_tips(el, config) { + $('html').append($('' + config.msg + '')); + layer.tips(config.msg, el, { tips: [1, config.color], time: 3000 }); + el.css('borderColor', config.color); + $('#width_test').remove(); + } + /** + * @description 更换域名验证方式 + * @param {Number} oid 域名订单ID + * @returns void + */ + function again_verify_veiw(oid, is_success) { + var loads = bt.load('Please wait while obtaining verification method...'); + bt.send('get_verify_result', 'ssl/get_verify_result', { uc_id: oid }, function (res) { + loads.close(); + var type = res.data.dcvList[0].dcvMethod; + loadT = bt.open({ + type: 1, + title: lan.site.set_ssl.ver_file(type), + area: '520px', + btn: [lan.public.edit, lan.public.cancel], + content: + '
                      Verification mode
                      \ +
                        ' + + lan.site.set_ssl.file_ver_tip + + '
                      \ +
                      ', + success: function (layero, index) { + var _option_list = { 'File Validation (HTTP)': 'HTTP_CSR_HASH', 'File Validation (HTTPS)': 'HTTPS_CSR_HASH', 'DNS Authentication (CNAME resolution)': 'CNAME_CSR_HASH' }, + _option = ''; + $.each(_option_list, function (index, item) { + _option += ''; + }); + $('select[name=file_rule]').html(_option); + }, + yes: function (index, layero) { + var new_type = $('select[name=file_rule]').val(); + if (type == new_type) return layer.msg('Duplicate authentication mode', { icon: 2 }); + var loads = bt.load('Changing the verification mode, please wait...'); + bt.send('again_verify', 'ssl/again_verify', { uc_id: oid, dcv_method: new_type }, function (res) { + loads.close(); + if (res.success) layer.close(index); + layer.msg(res.res, { icon: res.success ? 1 : 2 }); + }); + }, + }); + }); + } + /** + * @description 验证域名 + * @param {Number} oid 域名订单ID + * @param {Boolean} openTips 是否展示状态 + * @returns void + */ + function verify_order_veiw(oid, is_success, openTips) { + var loads = bt.load('Obtaining verification results, please wait...'); + bt.send('get_verify_result', 'ssl/get_verify_result', { uc_id: oid }, function (res) { + loads.close(); + if (!res.status) { + bt.msg(res); + return false; + } + if (res.status == 'COMPLETE') { + site.ssl.reload(); + return false; + } + var rdata = res.data; + var domains = [], + type = rdata.dcvList[0].dcvMethod != 'CNAME_CSR_HASH', + info = {}; + $.each(rdata.dcvList, function (key, item) { + domains.push(item['domainName']); + }); + if (type) { + info = { fileName: rdata.DCVfileName, fileContent: rdata.DCVfileContent, filePath: '/.well-known/pki-validation/', paths: res.paths, kfqq: res.kfqq }; + } else { + info = { dnsHost: rdata.DCVdnsHost, dnsType: rdata.DCVdnsType, dnsValue: rdata.DCVdnsValue, paths: res.paths, kfqq: res.kfqq }; + } + if (is_success) { + is_success({ type: type, domains: domains, info: info }); + return false; + } + loadT = bt.open({ + type: 1, + title: lan.site.set_ssl.ver_file(type), + area: '620px', + content: reader_domains_cname_check({ type: type, domains: domains, info: info }), + success: function (layero, index) { + //展示验证状态 + setTimeout(function () { + if (openTips && res.status == 'PENDING') layer.msg('Verification, please wait patiently', { time: 0, shadeClose: true, icon: 0, shade: 0.3 }); + }, 500); + var clipboard = new ClipboardJS('.parsing_info .parsing_icon'); + clipboard.on('success', function (e) { + bt.msg({ status: true, msg: 'Successful copy' }); + e.clearSelection(); + }); + clipboard.on('error', function (e) { + bt.msg({ status: true, msg: 'Copy failed, please manually ctrl+c copy!' }); + }); + $('.verify_ssl_domain').click(function () { + verify_order_veiw(oid, false, true); + layer.close(index); + }); + + $('.set_verify_type').click(function () { + again_verify_veiw(oid); + layer.close(index); + }); + + $('.return_ssl_list').click(function () { + layer.close(index); + $('#ssl_tabs span.on').click(); + }); + + // 重新验证按钮 + $('.domains_table').on('click', '.check_url_results', function () { + var _url = $(this).data('url'), + _con = $(this).data('content'); + check_url_txt(_url, _con, this); + }); + }, + }); + }); + } + + /** + * @description 重新验证 + * @param {String} url 验证地址 + * @param {String} content 验证内容 + * @returns 返回验证状态 + */ + function check_url_txt(url, content, _this) { + var loads = bt.load('Obtaining verification results, please wait...'); + bt.send('check_url_txt', 'ssl/check_url_txt', { url: url, content: content }, function (res) { + loads.close(); + var html = + 'fail[' + + res + + ']?'; + if (res === 1) { + html = 'pass'; + } + $(_this).parents('tr').find('td:nth-child(2)').html(html); + }); + } + /** + * @description 渲染验证模板接口 + * @param {Object} data 验证数据 + * @returns void + */ + function reader_domains_cname_check(data) { + var html = ''; + if (data.type) { + var check_html = + '
                      '; + var paths = data.info.paths; + for (var i = 0; i < paths.length; i++) { + check_html += + ''; + } + check_html += '
                      URL' + + lan.site.set_ssl.verification_result + + '' + + lan.public.action + + '
                      ' + + paths[i].url + + '' + + (paths[i].status == 1 + ? 'pass' + : 'fail[' + + paths[i].status + + ']?') + + 'copy | open | reverify
                      '; + html = + '
                      \ +
                      Please give the following domain name【 ' + + data.domains.join('、') + + ' 】Add a verification file. The verification information is as follows:
                      \ +
                      File location:
                      \ +
                      File name:
                      copy
                      \ +
                      File content:
                      copy
                      ' + + check_html + + '
                      · The verification result is verified by [this server], and the actual verification will be verified by [CA server]. Please wait patiently
                      · Please ensure that all items in the above list are successfully verified and click [Verify domain name] to submit verification again
                      · If the authentication fails for a long time, please change it to [DNS authentication] through [Modify Authentication method].
                      · SSL Adds the file authentication mode ->> View the tutorial
                      \ +
                      \ +
                      '; + } else { + html = + '
                      \ +
                      Please give the following domain name【 ' + + data.domains.join('、') + + ' 】add“' + + data.info.dnsType + + '”the parsing parameters as follows:
                      \ +
                      Host record:
                      copy
                      \ +
                      Record type:
                      \ +
                      Record value:
                      copy
                      \ +
                      · The verification result is verified by [this server], and the actual verification will be verified by [CA server]. Please wait patiently
                      · Please ensure that all items in the above list are successfully verified and click [Verify domain name] to submit verification again
                      · If the authentication fails for a long time, please change it to [DNS authentication] through [Modify Authentication method].
                      · How to add domain name resolution,And consult the server operator
                      · How do I verify commercial certificates?
                      \ +
                      \ +
                      '; + } + return html; + } + // 购买证书信息 + function pay_ssl_business() { + var order_info = {}, + user_info = {}, + is_check = false; + var loadT = bt.load(lan.site.set_ssl.get_apply_cert); + bt.send('get_product_list_v2', 'ssl/get_product_list_v2', {}, function (rdata) { + loadT.close(); + var res = rdata.res; + var dataLength = res['data'] && res.data.length, + data_list = res.data, + list = [], + prompt_msg = res.info; + bt.open({ + type: 1, + title: lan.site.set_ssl.buy_cert, + area: ['810px', '832px'], + skin: 'layer-business-ssl', + content: + '\ +
                      \ +
                      \ + \ + ' + + lan.site.set_ssl.bus_cert_tip + + '\ +
                      \ +
                      \ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.domain_num + + '\ +
                      \ +
                      \ +
                      \ + \ +
                      \ +
                      \ +
                      \ +

                      ' + + lan.site.set_ssl.select_domain_num + + '

                      \ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.cert_class + + '\ +
                      \ +
                      \ +
                      \ +
                      ' + + lan.site.set_ssl.ov_cert + + '
                      \ +
                      ' + + lan.site.set_ssl.recom_enterprise + + '
                      \ +
                      \ +
                      \ + Hot\ +
                      ' + + lan.site.set_ssl.dv_cert + + '
                      \ +
                      ' + + lan.site.set_ssl.recom_pseson + + '
                      \ +
                      \ +
                      \ +
                      ' + + lan.site.set_ssl.ev_cert + + '
                      \ +
                      ' + + lan.site.set_ssl.recom_large + + '
                      \ +
                      \ +
                      \ +
                      \ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.cert_brand + + '\ +
                      \ +
                      \ +
                      Positive
                      \ +
                      sslTrus
                      \ +
                      CFCA
                      \ +
                      Digicert
                      \ +
                      GeoTrust
                      \ +
                      Sectigo
                      \ +
                      \ +
                      \ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.cert_type + + '\ +
                      \ +
                      \ +
                      ' + + lan.site.set_ssl.one_domain + + '
                      \ +
                      ' + + lan.site.set_ssl.more_domain + + '
                      \ +
                      \ +
                      \ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.pur_period + + '\ +
                      \ +
                      \ +
                      ' + + lan.site.set_ssl.num_year_test(1) + + '
                      \ +
                      ' + + lan.site.set_ssl.num_year_test(2) + + '
                      \ +
                      ' + + lan.site.set_ssl.num_year_test(3) + + '
                      \ +
                      ' + + lan.site.set_ssl.num_year_test(4) + + '
                      \ +
                      ' + + lan.site.set_ssl.num_year_test(5) + + '
                      \ +
                      \ +
                      \ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.deploy_service + + '\ +
                      \ +
                      \ +
                      ' + + lan.site.set_ssl.no_necess + + '
                      \ +
                      ' + + lan.site.set_ssl.deploy_service + + '
                      \ + \ +
                      \ +
                      \ +
                      \ +
                      \ +
                      \ +
                      \ +
                      \ +
                      ' + + lan.site.set_ssl.goods_include + + ':
                      \ +
                      ' + + lan.site.set_ssl.total_cost + + ':
                      \ + $278.66/1year(' + + lan.site.set_ssl.in_service + + ')\ +
                      \ +
                      Original price$342/1year
                      \ +
                      \ +
                      \ +
                      \ + \ +
                      \ +
                      \ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.wechat_pay + + '\ + ' + + lan.site.set_ssl.Alipay_pay + + '\ +
                      \ +
                      \ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.total + + '\ + $\ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.tar_name + + '\ + \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.order_time + + '\ + \ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.wechat_swipe + + '\ +
                      \ +
                      \ +
                      \ +
                      ' + + lan.site.set_ssl.pay_sus + + '
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.tar_name + + '\ + \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.com_price + + '\ + \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.order_time + + '\ + \ +
                      \ +
                      \ + \ +
                        \ +
                      • ' + + lan.site.set_ssl.buy_cert_tip1 + + '
                      • \ +
                      \ +
                      \ +
                      \ +
                      ', + //
                      '+ lan.site.set_ssl.deploy_service +'
                      \ + //
                      '+ lan.site.set_ssl.service_secret +'
                      \ + //
                    • 如果已购买人工服务,请点击“人工服务”咨询帮助。
                    • \ + success: function (layero, indexs) { + $.getScript('https://js.stripe.com/v3/'); + + var numBtn = $('.domain_number_reduce,.domain_number_add'), + ssl_type_item = $('.ssl_type_item'), + ssl_brand_item = $('.ssl_brand_item'), + ssl_service_item = $('.ssl_service_item'), + ssl_price_item = $('.ssl_price_item'), + ssl_year_item = $('.ssl_year_item'), + business_brand_list = $('.business_brand_list'), + input = $('.domain_number_input'), + ssl_type_tips = $('.ssl_type_tips'), + ssl_brand_tips = $('.ssl_brand_tips'), + ssl_year_tips = $('.ssl_year_tips'), + ssl_price_tips = $('.ssl_price_tips'), + ssl_service_unit = $('.ssl_service_unit'), + ssl_service_tips = $('.ssl_service_tips'); + var dataInfo = [], + ylist = [], + is_single = false, //是否存在单域名 + is_worldxml = false, //是否存在泛域名 + year = 1, + serviceprice = 0, + install = 0, + add_domain_number = 0, + order_id = null, + qq_info = null; + + $('.ssl-service').click(function () { + bt.onlineService(); + }); + + // 数量加减 + numBtn.click(function () { + var type = $(this).data('type'), + reduce = input.prev(), + add = input.next(), + min = 1, + max = 99, + input_val = parseInt(input.val()); + if ($(this).hasClass('is_disable')) { + layer.msg(type === 'reduce' ? 'The number of current domain names cannot be 0' : 'The number of domain names cannot be greater than 99'); + return false; + } + switch (type) { + case 'reduce': + input_val--; + if (min > input_val < max) { + input.val(min); + } + break; + case 'add': + input_val++; + if (min > input_val < max) { + input.val(input_val); + add.removeClass('is_disable'); + } + if (input_val == max) $(this).addClass('is_disable'); + break; + } + if (input_val == min) { + reduce.addClass('is_disable'); + } else if (input.val() == max) { + add.addClass('is_disable'); + } else { + reduce.removeClass('is_disable'); + add.removeClass('is_disable'); + } + + reader_product_info({ current_num: parseInt(input_val) }); + }); + $('.domain_number_input').on('input', function () { + var _input = $(this), + input_val = parseInt(_input.val()), + input_min = 1, + input_max = 99, + reduce = _input.prev(), + add = _input.next(); + if (input_val <= input_min) { + _input.val(input_min); + reduce.addClass('is_disable'); + } else if (input_val >= input_max) { + input.val(input_max); + add.addClass('is_disable'); + } else { + reduce.removeClass('is_disable'); + add.removeClass('is_disable'); + } + if (_input.val() == '') { + _input.val(input_min); + input_val = input_min; + reduce.addClass('is_disable'); + } + reader_product_info({ current_num: parseInt(_input.val()) }); + }); + + function automatic_msg() { + layer.msg('The current certificate brand does not support multi-domain certificate, has automatically switched to the supported certificate brand for you!'); + } + + //总计费用信息 + function reader_product_info(config) { + config.current_num = config.current_num !== '' ? config.current_num : 1; + add_domain_number = config.current_num; + input.val(config.current_num !== '' ? config.current_num : 1); + var p_index = $('.ssl_price_item.active').index(); //证书类型下标 + var year_list = ylist.filter(function (s) { + return p_index ? s.code.indexOf('wildcard') > -1 : s.code.indexOf('wildcard') === -1; + }); + var is_flag = year_list.some(function (s) { + return s.code.indexOf('multi') > -1 || s.brand === 'Digicert'; + }); + if (p_index) { + ssl_type_item.eq(2).addClass('disabled'); + } else { + ssl_type_item.eq(2).removeClass('disabled'); + } + if (input.val() > 1) { + // disabled + //证书类型禁用 + var is_type_disabled = ylist + .filter(function (s) { + return !p_index ? s.code.indexOf('wildcard') > -1 : s.code.indexOf('wildcard') === -1; + }) + .some(function (s) { + return s.code.indexOf('multi') > -1 || s.brand === 'Digicert'; + }); + if (!is_type_disabled) { + ssl_price_item.eq(p_index ? 0 : 1).addClass('disabled'); + } else { + ssl_price_item.eq(p_index ? 0 : 1).removeClass('disabled'); + } + //证书品牌禁用 + for (var i = 0; i < ssl_brand_item.length; i++) { + if (ssl_brand_item.eq(i).css('display') !== 'none') { + var brand_data = ssl_brand_item.eq(i).data(); + if (p_index) { + if (!brand_data.is_multi_w) ssl_brand_item.eq(i).addClass('disabled'); + else ssl_brand_item.eq(i).removeClass('disabled'); + } else { + if (!brand_data.is_multi) ssl_brand_item.eq(i).addClass('disabled'); + else ssl_brand_item.eq(i).removeClass('disabled'); + } + } + } + } else { + ssl_price_item.eq(p_index ? 0 : 1).removeClass('disabled'); + ssl_brand_item.removeClass('disabled'); + } + if (!is_flag) { + if (input.val() > 1) { + for (var i = 0; i < ssl_brand_item.length; i++) { + if (ssl_brand_item.eq(i).css('display') !== 'none') { + var brand_data = ssl_brand_item.eq(i).data(); + if (p_index) { + if (brand_data.is_multi_w) { + automatic_msg(); + return ssl_brand_item.eq(i).click(); + } + } else { + if (brand_data.is_multi) { + automatic_msg(); + return ssl_brand_item.eq(i).click(); + } + } + } + } + } + } + //选中的证书信息 + var data_info = year_list.filter(function (s) { + return $('.domain_number_input').val() > 1 ? (s.brand === 'Digicert' ? s.code.indexOf('multi') === -1 : s.code.indexOf('multi') > -1) : s.code.indexOf('multi') === -1; + })[0]; + dataInfo = data_info; + dataInfo['current_num'] = config['current_num']; + //服务费 + var service_price = [0, data_info.deploy_price / 100 || 0, data_info.install_price_v2 || 0]; + for (var i = 0; i < service_price.length; i++) { + ssl_service_item.eq(i).data('serviceprice', service_price[i]); + // if(i == 1){ + // ssl_service_item.eq(i).data('serviceprice', 28.9); + // } + } + serviceprice = $('.ssl_service_item.active').data('serviceprice'); + if ($('.ssl_service_item.active').index()) ssl_service_unit.html('' + lan.site.set_ssl.deploy_cost + '$' + serviceprice + '/1 Time'); + else ssl_service_unit.html(''); + var cur_num = (config.current_num < data_info.num ? data_info.num : config.current_num) - data_info.num; + var p_price = parseFloat(Number(serviceprice) * 100 + (data_info.price + data_info.add_price * cur_num) * year).toFixed(2); + if (config.current_num > 1 || data_info.brand === 'Digicert') { + if (data_info.brand !== 'Digicert') ssl_price_item.eq(0).text('Universal domain'); + if (data_info.brand === 'Digicert') ssl_price_item.eq(0).text('Single domain'); + $('.domain_number_tips').html(lan.site.set_ssl.default_over(data_info.num) + '$' + (data_info.add_price / 100).toFixed(2) + '/one/year'); + } else { + ssl_price_item.eq(0).text('Single domain'); + $('.domain_number_tips').empty(); + } + var pp_html = '$' + Number(p_price) / 100 + '/' + year + 'year' + ($('.ssl_service_item.active').index() ? '(' + lan.site.set_ssl.in_service + ')' : ''), + op_html = + lan.site.set_ssl.or_price + + '$' + + parseFloat(parseFloat((Number(serviceprice) * 100 + (data_info.other_price + data_info.add_price * cur_num) * year) / 100).toFixed(2)) + + '/' + + year + + 'year'; + var price_pack = parseFloat(parseFloat(data_info.price * year).toFixed(2)), + price_extra = data_info.add_price * cur_num * year; + $('.business_ssl_btn .bname span').html( + lan.site.set_ssl.default_domain(data_info.num) + + '$' + + price_pack / 100 + + '/' + + year + + 'year' + + (cur_num ? lan.site.set_ssl.over_domain(cur_num) + '$' + price_extra / 100 + '/' + year + 'year' : '') + ); + $('.business_ssl_btn .present_price').html(pp_html); + $('.business_ssl_btn .original_price').html(op_html); + } + + setTimeout(function () { + ssl_type_item.eq(1).click(); + }, 50); + //证书分类切换 + ssl_type_item.click(function () { + if ($(this).hasClass('disabled')) return layer.msg(lan.site.set_ssl.dis_tip); + if (!$(this).hasClass('active')) $(this).addClass('active').siblings().removeClass('active'); + //证书类型 + var type = $(this).data('type'), + brand_list = []; //品牌类型 + list = dataLength + ? data_list.filter(function (s) { + return s.type.indexOf(type) > -1; + }) + : []; + var type_tips_list = prompt_msg['type'][type.toLowerCase()], + type_tips = ''; + for (var i = 0; i < type_tips_list.length; i++) { + type_tips += '

                      ' + type_tips_list[i] + '

                      '; + } + ssl_type_tips.html(type_tips); //提示信息 + $.each(list, function (i, item) { + brand_list.push(item.brand); + }); + brand_list = Array.from(new Set(brand_list)); //去重 + var recommend = prompt_msg['recommend'][type.toLowerCase()]; + business_brand_list.find('em').remove(); + business_brand_list.find('[data-type="' + prompt_msg['recommend'][type.toLowerCase()] + '"]').prepend('Hot'); + ssl_brand_item.hide(); + for (var i = 0; i < brand_list.length; i++) { + business_brand_list.find('[data-type="' + brand_list[i] + '"]').show(); + var b_list = list.filter(function (s) { + return s.brand === brand_list[i]; + }); + //品牌是否存在多域名 + var is_multi = b_list.some(function (s) { + return (s.code.indexOf('wildcard') === -1 && s.code.indexOf('multi') > -1) || s.brand === 'Digicert'; + }); + var is_multi_w = b_list.some(function (s) { + return (s.code.indexOf('wildcard') > -1 && s.code.indexOf('multi') > -1) || s.brand === 'Digicert'; + }); + business_brand_list.find('[data-type="' + brand_list[i] + '"]').data({ is_multi: is_multi, is_multi_w: is_multi_w }); + } + business_brand_list.find('[data-type="' + recommend + '"]').click(); + }); + + //证书品牌 + ssl_brand_item.click(function () { + var p_index = $('.ssl_price_item.active').index(); + if ($(this).hasClass('disabled')) { + if (p_index !== -1) { + for (var i = 0; i < ssl_brand_item.length; i++) { + if (ssl_brand_item.eq(i).css('display') !== 'none') { + var brand_data = ssl_brand_item.eq(i).data(); + if (p_index) { + if (brand_data.is_multi_w) return ssl_brand_item.eq(i).click(); + } else { + if (brand_data.is_multi) return ssl_brand_item.eq(i).click(); + } + } + } + } + return layer.msg('The current certificate brand does not support multi-domain wildcard certificates. Please select another brand certificate'); + } + if (!$(this).hasClass('active')) $(this).addClass('active').siblings().removeClass('active'); + var type = $(this).data('type'), + years_list = [], + max_years = 0, + years_html = '', + cert_html = ''; + ylist = list.filter(function (s) { + return s.brand.indexOf(type) > -1; + }); + brand_type = $('.ssl_type_item.active').data('type'); + var brand_tips_list = prompt_msg['brand'][type === 'Positive' || type === 'sslTrus' ? type : type.toLowerCase()], + brand_tips = ''; + for (var i = 0; i < brand_tips_list.length; i++) { + brand_tips += '

                      ' + brand_tips_list[i] + '

                      '; + } + ssl_brand_tips.html(brand_tips); //提示信息 + $.each(ylist, function (i, item) { + years_list.push(item.max_years); + }); + //是否存在单域名/泛域名按钮 + is_single = ylist.some(function (s) { + return s.code.indexOf('wildcard') === -1; + }); + is_worldxml = ylist.some(function (s) { + return s.code.indexOf('wildcard') > -1; + }); + if (is_single) { + ssl_price_item.eq(0).show(); + } else { + ssl_price_item.eq(0).hide(); + } + if (is_worldxml) { + ssl_price_item.eq(1).show(); + } else { + ssl_price_item.eq(1).hide(); + } + max_years = Array.from(new Set(years_list))[0]; + for (var i = 0; i < 5; i++) { + if (i < max_years) { + ssl_year_item.eq(i).show(); + } else { + ssl_year_item.eq(i).hide(); + } + } + //证书类型点击 + var p_index = $('.ssl_price_item.active').index(); + ssl_price_item.eq(p_index !== -1 ? (!is_worldxml && p_index === 1 ? 0 : p_index) : 0).click(); + }); + //证书类型 + $('.business_ssl_form').on('click', '.ssl_price_item', function () { + if ($(this).hasClass('disabled')) return layer.msg(lan.site.set_ssl.dis_tip); + if (!$(this).hasClass('active')) $(this).addClass('active').siblings().removeClass('active'); + var price_tips_list_0 = [lan.site.set_ssl.single_tip1, lan.site.set_ssl.single_tip2], + price_tips_list_1 = [lan.site.set_ssl.more_tip1, lan.site.set_ssl.more_tip2]; + var price_tips_list = $(this).index() ? price_tips_list_1 : price_tips_list_0, + price_tips = ''; + for (var i = 0; i < price_tips_list.length; i++) { + price_tips += '

                      ' + price_tips_list[i] + '

                      '; + } + ssl_price_tips.html(price_tips); + //购买年限点击 + var y_index = $('.ssl_year_item.active').index(); + + ssl_year_item.eq(y_index !== -1 && $('.ssl_year_item.active').css('display') !== 'none' ? y_index : 0).click(); + }); + //购买年限 + $('.business_ssl_form').on('click', '.ssl_year_item', function () { + if (!$(this).hasClass('active')) $(this).addClass('active').siblings().removeClass('active'); + year = $(this).data('year'); + var year_tips_list = prompt_msg['times'][year + '_year'], + year_tips = ''; + for (var i = 0; i < year_tips_list.length; i++) { + year_tips += '

                      ' + year_tips_list[i] + '

                      '; + } + ssl_year_tips.html(year_tips); //提示信息 + + var ser_index = $('.ssl_service_item.active').index(); + ssl_service_item.eq(ser_index !== -1 ? ser_index : 1).click(); + }); + + //部署服务点击 + ssl_service_item.click(function () { + if (!$(this).hasClass('active')) $(this).addClass('active').siblings().removeClass('active'); + var index = $(this).index(); + (serviceprice = $(this).data('serviceprice')), (install = $(this).data('install')); + ssl_service_tips.html( + index + ? index === 1 + ? 'aaPanel provides manual deployment certificate deployment services from China time 9:00 -18:30 to help customers troubleshoot deployment certificate validity problems and quickly go online' + : '宝塔提供9:00 - 24:00的人工部署国密算法证书部署服务,帮助客户排查部署证书部署生效问题,快速上线' + : '' + ); + var value = $('.domain_number_input').val(); + reader_product_info({ current_num: value === '' ? value : parseInt(value) }); + }); + + //购买事件 + $('.business_ssl_pay').click(function () { + var loadT = bt.load('Payment order is being generated, please wait...'), + num = 0; + add_domain_number = input.val(); + if (dataInfo.add_price !== 0) num = parseInt(dataInfo.current_num - dataInfo.num); + bt.send( + 'apply_cert_order_pay', + 'ssl/apply_cert_order_pay', + { + pdata: JSON.stringify({ + pid: dataInfo.pid, + deploy: install, + years: year, + num: num, + }), + }, + function (rdata) { + loadT.close(); + if (rdata.success) { + is_check = true; + var res = rdata.res; + + var stripe = Stripe(res.stripe_public_key); + stripe.redirectToCheckout({ sessionId: res.session_id }); + } + } + ); + }); + //支付切换 + $('.guide_nav span').click(function () { + var price = $('.business_ssl_btn .present_price span').text(), + is_wx_quota = parseFloat(price) >= 6000; + if ($(this).index() === 0 && is_wx_quota) { + layer.msg('Wechat single transaction limit 6000 yuan, please use Alipay payment', { + icon: 0, + }); + } else { + $(this).addClass('active').siblings().removeClass('active'); + $('.lib-prompt span').html($(this).index() == 0 ? lan.site.set_ssl.wechat_swipe : 'Pay with a swipe on Alipay'); + $('#PayQcode').empty(); + $('#PayQcode').qrcode({ + render: 'canvas', + width: 200, + height: 200, + text: $(this).index() != 0 ? order_info.alicode : order_info.wxcode, + }); + } + }); + $('.order_pay_btn a').click(function () { + switch ($(this).data('type')) { + case 'info': + confirm_certificate_info( + $.extend(dataInfo, { + oid: order_id, + qq: qq_info, + install: install ? true : false, + limit: add_domain_number, + }) + ); + break; + case 'clear': + layer.close(indexs); + break; + } + }); + }, + cancel: function (index) { + if (is_check) { + if (confirm('The order is currently being paid, would you like to cancel it?')) { + layer.close(index); + is_check = false; + } + return false; + } + }, + }); + }); + } + // 确认证书信息 + function confirm_certificate_info(config) { + var userLoad = bt.load('Getting user info, please wait...'); + bt.send('get_cert_admin', 'ssl/get_cert_admin', {}, function (rdata) { + var res = rdata.res; + userLoad.close(); + var html = ''; + var isWildcard = config.code.indexOf('wildcard') > -1; + var isMulti = config.code.indexOf('multi') > -1; + if (typeof pay_ssl_layer != 'undefined') pay_ssl_layer.close(); + if (config.code.indexOf('multi') > -1) { + if (isWildcard) { + placeholder = lan.site.set_ssl.more_cert_pl1(config.limit); + } else { + placeholder = lan.site.set_ssl.more_cert_pl2(config.limit); + } + site.domain_dns_type = 'multi'; + html = + '
                      Select a website domain name
                      '; + } else { + if (isWildcard) { + placeholder = 'single domain wildcard certificate, for example, *.bt.cn'; + } else { + placeholder = 'single domain name certificate, for example, www.bt.cn'; + } + site.domain_dns_type = 'one'; + html = + '
                      '; + } + bt.open({ + type: 1, + title: lan.site.set_ssl.inpro_cert_info, + area: '640px', + content: + '
                      \ +
                      \ + Cert Info\ +
                      \ + ' + + config.title + + (config.limit > 1 ? ',Contains ' + config.limit + 'domain names' : '') + + '\ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.domain_name + + '\ +
                      ' + + html + + '
                      \ +
                      \ +
                      \ + ' + + lan.site.checking_mode + + '\ +
                      \ +
                      \ + \ + \ + \ +
                      \ +
                      \ + \ + \ + \ +
                      \ +
                      \ + \ + \ + \ +
                      \ +
                      \ +
                      \ +
                      \ +
                      \ + \ + Created with Pixso.\ + \ + \ + \ + \ +
                      \ + Show user Info\ + \ +
                      \ +
                      \ + Local area\ +
                      \ + \ + \ + \ +
                      \ +
                      \ +
                      \ + ' + + lan.site.set_ssl.address + + '\ +
                      \ + \ +
                      \ +
                      \ +
                      \ + Company name\ +
                      \ + \ +
                      \ +
                      \ +
                      \ + Name\ +
                      \ + \ + \ +
                      \ +
                      \ +
                      \ + Email\ +
                      \ + \ +
                      \ +
                      \ +
                      \ + ' + + lan.public_backup.mobile_phone_or_email + + '\ +
                      \ + \ + \ +
                      \ +
                      \ +
                      \ +
                      \ +
                      \ +
                        \ +
                      • Wildcard certificates support only DNS authentication
                      • \ +
                      • Multiple domain names support only DNS authentication
                      • \ +
                      • https or http authentication: Ensure that the website can be accessed through http/https
                      • \ +
                      • The domain name prefix is www, reminding users to resolve the upper-level root domain name, such as www.bt.cn, please ensure that the resolution of bt.cn
                      • \ +
                      • How do I verify commercial certificates?
                      • \ +
                      \ +
                        \ +
                      • OV/EV certificate application process conditions:
                      • \ +
                      • 1、Fill in the website authentication information (file authentication or DNS authentication)
                      • \ +
                      • 2、Complete the email authentication, and improve the email content according to the mail sent by CA (just fill in Chinese)
                      • \ +
                      • 3、Enterprise check or love enterprise check, Baidu map, 114best can query relevant enterprise information, and the company name and company address exactly match
                      • \ +
                      • 4、The phone number left by the company or other platforms can guarantee that you can hear the CA certification phone from Monday to Friday (7:00-15:00), the phone number belongs to the United States, please pay attention to answer.
                      • \ +
                      \ +
                      ', + check_dns_interface: function (callback) { + var val = $('input[name="dcvMethod"]:radio:checked').val(); + if (val !== 'CNAME_CSR_HASH') { + if (callback) callback(); + return; + } + var dns_val = $('.dns_interface_select').val(); + if (dns_val == 'dns') { + if (callback) callback(); + } else { + bt.site.get_dns_api(function (res) { + var config; + for (var i = 0; i < res.length; i++) { + if (res[i].name == dns_val) { + config = res[i]; + break; + } + } + var check = true; + var title = ''; + if (config && config.data) { + for (var j = 0; j < config.data.length; j++) { + if (config.data[j].value === '') { + check = false; + title = config.title; + break; + } + } + } + if (check) { + if (callback) callback(); + } else { + layer.msg('No key is configured for the selected DNS interface [' + title + ']', { icon: 2 }); + } + }); + } + }, + success: function (layero, index) { + $.ajax({ + type: 'GET', + url: '/static/js/countryCode.json', + data: 'data', + dataType: 'JSON', + success: function (data) { + countryList = data; + var _option = ''; + var couOp = ''; + $.each(data, function (index, item) { + _option += ''; + couOp += ''; + }); + var node_pid = $('.pre[name=phonePre]'); + var countrySelect = $('.cou[name=country]'); + node_pid.html(_option); + node_pid.val(res.tel_prefix); + countrySelect.html(couOp); + countrySelect.val(res.country); + }, + }); + $('.basics-clid').hide(); + if (config.code.indexOf('multi') > -1) { + $('#CNAME_CSR_HASH').click(); + $('#HTTP_CSR_HASH,#HTTPS_CSR_HASH').attr('disabled', 'disabled'); + + // dns_domains_add_block下的input焦点触发时,隐藏selct_site_btn + $('.dns_domains_add_block input').on('focus blur keyup', function (e) { + e = e || window.event; + switch (e.type) { + case 'focus': + $('.selct_site_btn').hide(); + break; + case 'blur': + $('.selct_site_btn').css('display', 'inline-block'); + break; + case 'keyup': + if (e.keyCode != 13 && e.type == 'keyup') return false; + var val = $(this).val(); + if (!bt.check_domain(val)) return layer.msg('Domain name format error', { icon: 2 }); + site.domain_dns_list.push(val); + $(this).val(''); // 清空输入框 + site.refresh_dns_interface(); + break; + } + }); + } + $('.perfect_ssl_info').data('code', config.code); + var _this_layer = this; + bt_tools.send({ url: '/site?action=GetDnsApi' }, function (data) { + site.dns_configured_table = site.data_treating(data); + site.add_dns_interface(); + // 基础信息隐藏显示 + $('.basics-info').click(function () { + if ($('.basics-info').hasClass('active')) { + $('.basics-info').removeClass('active'); + $('.basics-title').text('Show user Info'); + $('.basics-clid').hide(); + } else { + $('.basics-info').addClass('active'); + $('.basics-title').text('Hide user Info'); + $('.basics-clid').show(); + //config.code.含有ov、ev时,隐藏公司详细地址 + // if(config.code.indexOf('ov') == -1 || config.code.indexOf('ev') == -1){ + // $('.basics-clid').eq(1).hide(); + // } + } + $('.ssl_help_info').toggle(); + }); + // 判断基础信息中是否存在空置,将基础信息自动显示 + $('.basics-clid input').each(function () { + // isMulti为false时,不需要验证公司详细地址 + if (!isMulti && $(this).attr('name') == 'address') return true; + if ($(this).val() == '') { + $('.basics-info').click(); + return false; + } + }); + + // 验证方式 + $('input[name="dcvMethod"]').change(function () { + var val = $(this).val(); + if (val == 'CNAME_CSR_HASH') { + site.add_dns_interface(); + } else { + site.remove_dns_interface(); + } + }); + + // 公司详细地址联动 + $('.perfect_ssl_info').on('input', 'input[name="state"], input[name="city"]', function (e) { + var is_ovev = config.code.indexOf('ov') > -1 || config.code.indexOf('ev') > -1; + if (!is_ovev) { + var state = $('.perfect_ssl_info input[name="state"]').val(); + var city = $('.perfect_ssl_info input[name="city"]').val(); + $('.perfect_ssl_info input[name="address"]').val(state + city); + } + }); + $('.perfect_ssl_info') + .on('focus', 'input[type=text],textarea', function () { + var placeholder = $(this).attr('placeholder'); + $('html').append($('' + placeholder + '')); + $(this).attr('data-placeholder', placeholder); + layer.tips(placeholder, $(this), { tips: [1, '#20a53a'], time: 0 }); + $(this).attr('placeholder', ''); + $('#width_test').remove(); + }) + .on('blur', 'input[type=text],textarea', function () { + var name = $(this).attr('name'), + val = $(this).val(); + layer.closeAll('tips'); + $(this).attr('placeholder', $(this).attr('data-placeholder')); + check_ssl_user_info($(this), name, val, config); + }); + function btserializeDiv(div) { + var result = {}; + var elements = div.querySelectorAll('input, select, textarea'); + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; + var name = element.name; + var value = element.value; + if (name && !element.disabled) { + result[name] = value; + } + } + return result; + } + $('.submit_ssl_info').on('click', function () { + var data = {}, + // form = $('.perfect_ssl_info').serializeObject(), + form = btserializeDiv(document.querySelector('.perfect_ssl_info')), + is_ovev = config.code.indexOf('ov') > -1 || config.code.indexOf('ev') > -1, + loadT = null; + // var reg = /^[\u4E00-\u9FA5]+$/; + // if (form.name.length < 2 || !reg.test(form.name)) return layer.msg('The name shall be Chinese and two characters or more in length'); + $('.perfect_ssl_info') + .find('input,textarea') + .each(function () { + var name = $(this).attr('name'), + value = $(this).val(), + value = check_ssl_user_info($(this), name, value, config); + if (typeof value === 'boolean') { + form = false; + return false; + } + form[name] = value; + }); + form.phonePre = $('.perfect_ssl_info [name=phonePre]').val(); + form.phonePre = $('.perfect_ssl_info [name=phonePre]').val(); + if (typeof form == 'boolean') return false; + delete form['undefined']; // 删除undefined + form['domains'] = site.domain_dns_list; + + if (!is_ovev) form['address'] = form['state'] + form['city']; + if (typeof config.limit == 'undefined') config.limit = config.num; + if (form.domains.length < config.limit) { + bt.confirm({ title: 'Tips', msg: 'The current certificate supports ' + config.limit + ' domain names. Do you want to continue to add domain names?' }, function () { + req(true); + }); + return false; + } + req(true); + function req(verify) { + if (verify) { + bt.open({ + title: 'The user information is confirmed twice', + area: ['600px'], + btn: ['Continue to submit', 'Cancel'], + content: + '
                      ' + + '
                      ' + + 'Local area' + + '
                      ' + + '' + + '' + + '' + + '
                      ' + + '
                      ' + + '
                      ' + + 'Address' + + '
                      ' + + '' + + '
                      ' + + '
                      ' + + '
                      ' + + 'Company name' + + '
                      ' + + '' + + '
                      ' + + '
                      ' + + '
                      ' + + 'Name' + + '
                      ' + + '' + + '' + + '
                      ' + + '
                      ' + + '
                      ' + + 'Email' + + '
                      ' + + '' + + '
                      ' + + '
                      ' + + '
                      ' + + '' + + lan.public_backup.mobile_phone_or_email + + '' + + '
                      ' + + '' + + '' + + '
                      ' + + '
                      ' + + '' + + '
                      ', + yes: function () { + var isVerify = true; + $('.certificate_confirm') + .find('input') + .each(function () { + var name = $(this).attr('name'), + value = $(this).val(), + value = check_ssl_user_info($(this), name, value, config); + if (typeof value === 'boolean') { + form = false; + return false; + } + form[name] = value; + }); + req(false); + }, + success: function () { + if (countryList.length > 0) { + var _option = ''; + var couOp = ''; + $.each(countryList, function (index, item) { + _option += ''; + couOp += ''; + }); + var node_pid = $('[name=phonePre]'); + var countrySelect = $('[name=country]'); + node_pid.html(_option); + node_pid.val(form.phonePre); + countrySelect.html(couOp); + countrySelect.val(form.country); + } + // $.ajax({ + // type: "GET", + // url: "/static/js/countryCode.json", + // data: "data", + // dataType: "JSON", + // success: function (data) { + // console.log(data); + + // } + // }) + $('.certificate_confirm [name="organation"]').change(function () { + $('.perfect_ssl_info [name="organation"]').val($(this).val()); + form.organation = $(this).val(); + }); + $('.certificate_confirm [name="address"]').change(function () { + $('.perfect_ssl_info [name="address"]').val($(this).val()); + form.address = $(this).val(); + }); + $('.checkInfo').on('click', function (e) { + window.open('https://www.qcc.com/web/search?key=' + $('.certificate_confirm [name="organation"]').val()); + }); + }, + }); + return false; + } + _this_layer.check_dns_interface(function () { + var loadT = bt.load('Please wait while submitting certificate information...'); + var auth_to = $("[name='dns_select']") ? $("[name='dns_select']").val() : ''; + bt.send( + 'apply_order_ca', + 'ssl/apply_order_ca', + { + pdata: JSON.stringify({ + pid: config.pid, + oid: config.oid, + domains: form.domains, + dcvMethod: $("[name='dcvMethod']:checked").val(), + auth_to: auth_to, + uc_id: config.uc_id, + Administrator: { + job: 'General affairs', + postCode: '523000', + country: form.country, + firstName: form.firstName, + lastName: form.name, + state: form.state, + city: form.city, + address: form.address, + organation: form.organation, + email: form.email, + tel_prefix: form.phonePre, + mobile: form.mobile, + lastName: form.name, + }, + }), + }, + function (res) { + loadT.close(); + if (typeof res.msg == 'object') { + for (var key in res.msg.errors) { + if (Object.hasOwnProperty.call(res.msg.errors, key)) { + var element = res.msg.errors[key]; + bt.msg({ + status: false, + msg: element, + }); + } + } + } else { + if (res.caa_list) { + site.show_domain_error_dialog(res.caa_list, res.msg); + } else { + bt.msg({ status: res.success, msg: res.res }); + } + } + if (res.success) { + layer.close(index); + verify_order_veiw(config.uc_id); + $('#ssl_tabs span.on').click(); + } + } + ); + }); + } + }); + + $('.check_method_item label').click(function (e) { + e.stopPropagation(); + }); + + $('.check_method_item').click(function () { + // 选中 + $(this).find('label').trigger('click'); + // 判断是否显示异常 + var show = $(this).data('show-tips'); + if (!show) return; + $(this).data('show-tips', false); + // 判断是否存在异常数据 + var data = $(this).data('error-data'); + if (!data) return; + $(this).find('.error-link').trigger('click'); + }); + + $('.check_method_item').on('click', '.error-link', function (e) { + e.stopPropagation(); + var data = $(this).parents('.check_method_item').data('error-data'); + + if ($.isPlainObject(data)) { + site.show_domain_error_dialog(data); + } + if (Array.isArray(data)) { + var html = ''; + $.each(data, function (i, item) { + html += '

                      ' + item + '

                      '; + }); + layer.msg(html, { + icon: 2, + shade: 0.3, + closeBtn: 2, + time: 0, + success: function ($layer) { + $layer.css({ 'max-width': '560px' }); + var width = $(window).width(); + var lWidth = $layer.width(); + $layer.css({ + left: (width - lWidth) / 2 + 'px', + }); + }, + }); + } + }); + + var Timer = null; + $('.CNAME_CSR_HASH,.HTTP_CSR_HASH,.HTTPS_CSR_HASH').hover( + function () { + var $this = $(this); + var data = $(this).data('error-data'); + if (data) return; + var arry = [ + 'If the website has not been filed, optional [DNS verification]', + 'If the 301, 302, forced HTTPS, and reverse proxy functions are not enabled, select HTTP', + 'If the website enables "mandatory HTTPS", please select "HTTPS verification".', + ]; + var tips = arry[$this.index()]; + clearTimeout(Timer); + Timer = setTimeout(function () { + $this.data({ + tips: layer.tips(tips, $this.find('label'), { tips: 1, time: 0 }), + }); + }, 200); + }, + function () { + clearTimeout(Timer); + layer.close($(this).data('tips')); + } + ); + }); + }, + }); + }); + } + $('.ssl_business_application').click(function () { + pay_ssl_business(); + }); + //订单证书操作 + $('.ssl_order_list') + .unbind('click') + .on('click', '.options_ssl', function () { + var type = $(this).data('type'), + tr = $(this).parents('tr'); + itemData = order_list[tr.data('index')]; + switch (type) { + case 'deploy_ssl': // 部署证书 + bt.confirm( + { + title: 'Deployment certificate', + msg: + 'Whether to deploy the certificate and whether to continue?
                      Certificate type:' + + itemData.title + + '
                      Certificate supported domain name:' + + itemData.domains.join('、') + + '
                      Deployment site name:' + + web.name + + '', + }, + function (index) { + var loads = bt.load('Please wait while certificates are deployed...'); + bt.send('set_cert', 'ssl/set_cert', { uc_id: itemData.uc_id, siteName: web.name }, function (rdata) { + layer.close(index); + $('#webedit-con').empty(); + site.set_ssl(web); + site.ssl.reload(); + bt.msg(rdata); + }); + } + ); + break; + case 'verify_order': // 验证订单 + verify_order_veiw(itemData.uc_id); + break; + case 'clear_order': // 取消订单 + bt.confirm( + { + title: 'Cancel order', + msg: 'Whether to cancel the order, the order domain name [' + itemData.domains.join('、') + '], whether to continue?', + }, + function (index) { + var loads = bt.load('Cancelling order, please wait...'); + bt.send('cancel_cert_order', 'ssl/cancel_cert_order', { oid: itemData.oid }, function (rdata) { + layer.close(index); + if (rdata.status) { + $('#ssl_tabs span:eq(2)').click(); + setTimeout(function () { + bt.msg(rdata); + }, 2000); + } + bt.msg(rdata); + }); + } + ); + break; + case 'perfect_user_info': //完善用户信息 + confirm_certificate_info(itemData); + break; + case 'renewal_ssl': + renewal_ssl_view(itemData); + break; + } + }); + } else { + robj.append('
                      ' + lan.site.set_ssl.no_bind + '
                      '); + var datas = [ + { title: lan.public.user, name: 'bt_username', value: rdata.email, width: '260px', placeholder: lan.public_backup.mobile_phone_or_email }, + { title: lan.public.pass, type: 'password', name: 'bt_password', value: rdata.email, width: '260px' }, + { + title: ' ', + items: [ + { + text: lan.public_backup.login, + name: 'btn_ssl_login', + type: 'button', + callback: function (sdata) { + bt.pub.login_btname(sdata.bt_username, sdata.bt_password, function (ret) { + if (ret.status) site.reload(7); + }); + }, + }, + { + text: lan.site.set_ssl.register_ac, + name: 'bt_register', + type: 'button', + callback: function (sdata) { + window.open('https://www.aapanel.com/user_admin/register'); + }, + }, + ], + }, + ]; + for (var i = 0; i < datas.length; i++) { + var _form_data = bt.render_form_line(datas[i]); + robj.append(_form_data.html); + bt.render_clicks(_form_data.clicks); + } + robj.append( + bt.render_help([ + lan.site.set_ssl.bind_tip1 + '' + lan.site.set_ssl.click_view + '', + lan.site.set_ssl.bind_tip2, + ]) + ); + } + }); + }, + }, + { + title: "Let's Encrypt", + callback: function (robj) { + robj = $('#webedit-con .tab-con'); + // console.log(robj,'obj'); + acme.get_account_info(function (let_user) {}); + acme.id = web.id; + if (rdata.status && rdata.type == 1) { + var cert_info = ''; + if (rdata.cert_data['notBefore']) { + cert_info = + '
                      \ + ' + + lan.site.deploy_success_cret + + '' + + lan.site.try_renew_cret + + '\ \ - ' + lan.site.cert_brand + '' + rdata.cert_data.issuer + '\ - ' + lan.site.auth_domain + ' ' + (rdata.cert_data.dns ? rdata.cert_data.dns.join(', ') : '') + '\ - ' + lan.site.expire_time + ' ' + rdata.cert_data.notAfter + '
                      ' - } - robj.append('
                      ' + cert_info + '
                      ' + lan.site.ssl_key + '' + lan.site.ssl_crt + '
                      '); - var datas = [{ - items: [ - {name: 'key', width: '48%', height: '220px', type: 'textarea', value: rdata.key}, - {name: 'csr', width: '48%', height: '220px', type: 'textarea', value: rdata.csr} - ] - }, - { - items: [{ - text: lan.site.ssl_close, - name: 'btn_ssl_close', - hide: !rdata.status, - type: 'button', - callback: function (sdata) { - site.ssl.set_ssl_status('CloseSSLConf', web.name); - } - }, - { - text: lan.site.ssl_renew, - name: 'btn_ssl_renew', - hide: !rdata.status, - type: 'button', - callback: function (sdata) { - site.ssl.renew_ssl(web.name, rdata.auth_type, rdata.index); - } - } - ] - } - ] - for (var i = 0; i < datas.length; i++) { - var _form_data = bt.render_form_line(datas[i]); - robj.append(_form_data.html); - bt.render_clicks(_form_data.clicks); - } - robj.find('textarea').css({ - 'background-color': '#f6f6f6', - 'resize': 'none' - }).attr('readonly', true); - robj.find('[name=csr]').css('margin-right', '0'); - var helps = [ - lan.site.ssl_tips1, - lan.site.ssl_tips2, - lan.site.ssl_tips3, - lan.site.ssl_tips4, - lan.site.ssl_tips5, - ] - robj.append(bt.render_help([lan.site.ssl_help_2, lan.site.ssl_help_3])); - return; - } - bt.site.get_site_domains(web.id, function (ddata) { - var helps = [ - [ - lan.site.bt_ssl_help_5, - lan.site.bt_ssl_help_8, - lan.site.bt_ssl_help_9, - lan.site.ssl_tips5 - ], - [ - lan.site.dns_check_tips1, - lan.site.dns_check_tips2, - lan.site.dns_check_tips3, - lan.site.dns_check_tips4 - ] - ] - var datas = [{ - title: lan.site.checking_mode, - items: [{ - name: 'check_file', - text: lan.site.file_check, - type: 'radio', - callback: function (obj) { - $('.checks_line').remove() - $(obj).siblings().removeAttr('checked'); + ' + + lan.site.cert_brand + + '' + + rdata.cert_data.issuer + + '\ + ' + + lan.site.auth_domain + + ' ' + + (rdata.cert_data.dns ? rdata.cert_data.dns.join(', ') : '') + + '\ + ' + + lan.site.expire_time + + ' ' + + rdata.cert_data.notAfter + + '
                      '; + } + robj.append('
                      ' + cert_info + '
                      ' + lan.site.ssl_key + '' + lan.site.ssl_crt + '
                      '); + var datas = [ + { + items: [ + { name: 'key', width: '48%', height: '220px', type: 'textarea', value: rdata.key }, + { name: 'csr', width: '48%', height: '220px', type: 'textarea', value: rdata.csr }, + ], + }, + { + items: [ + { + text: lan.site.ssl_close, + name: 'btn_ssl_close', + hide: !rdata.status, + type: 'button', + callback: function (sdata) { + site.ssl.set_ssl_status('CloseSSLConf', web.name); + }, + }, + { + text: lan.site.ssl_renew, + name: 'btn_ssl_renew', + hide: !rdata.status, + type: 'button', + callback: function (sdata) { + site.ssl.renew_ssl(web.name, rdata.auth_type, rdata.index); + }, + }, + ], + }, + ]; + for (var i = 0; i < datas.length; i++) { + var _form_data = bt.render_form_line(datas[i]); + robj.append(_form_data.html); + bt.render_clicks(_form_data.clicks); + } + robj + .find('textarea') + .css({ + 'background-color': '#f6f6f6', + resize: 'none', + }) + .attr('readonly', true); + robj.find('[name=csr]').css('margin-right', '0'); + var helps = [lan.site.ssl_tips1, lan.site.ssl_tips2, lan.site.ssl_tips3, lan.site.ssl_tips4, lan.site.ssl_tips5]; + robj.append(bt.render_help([lan.site.ssl_help_2, lan.site.ssl_help_3])); + return; + } + bt.site.get_site_domains(web.id, function (ddata) { + var helps = [ + [lan.site.bt_ssl_help_5, lan.site.bt_ssl_help_8, lan.site.bt_ssl_help_9, lan.site.ssl_tips5], + [lan.site.dns_check_tips1, lan.site.dns_check_tips2, lan.site.dns_check_tips3, lan.site.dns_check_tips4], + ]; + var datas = [ + { + title: lan.site.checking_mode, + items: [ + { + name: 'check_file', + text: lan.site.file_check, + type: 'radio', + callback: function (obj) { + $('.checks_line').remove(); + $(obj).siblings().removeAttr('checked'); - $('.help-info-text').html($(bt.render_help(helps[0]))); - //var _form_data = bt.render_form_line({ title: ' ', class: 'checks_line label-input-group', items: [{ name: 'force', type: 'checkbox', value: true, text: '提前校验域名(提前发现问题,减少失败率)' }] }); - //$(obj).parents('.line').append(_form_data.html); + $('.help-info-text').html($(bt.render_help(helps[0]))); + //var _form_data = bt.render_form_line({ title: ' ', class: 'checks_line label-input-group', items: [{ name: 'force', type: 'checkbox', value: true, text: '提前校验域名(提前发现问题,减少失败率)' }] }); + //$(obj).parents('.line').append(_form_data.html); - $('#ymlist li input[type="checkbox"]').each(function () { - if ($(this).val().indexOf('*') >= 0) { - $(this).parents('li').hide(); - } - }) - } - }, - { - name: 'check_dns', - text: lan.site.check_dns, - type: 'radio', - callback: function (obj) { - $('.checks_line').remove(); - $(obj).siblings().removeAttr('checked'); - $('.help-info-text').html($(bt.render_help(helps[1]))); - $('#ymlist li').show(); + $('#ymlist li input[type="checkbox"]').each(function () { + if ($(this).val().indexOf('*') >= 0) { + $(this).parents('li').hide(); + } + }); + }, + }, + { + name: 'check_dns', + text: lan.site.check_dns, + type: 'radio', + callback: function (obj) { + $('.checks_line').remove(); + $(obj).siblings().removeAttr('checked'); + $('.help-info-text').html($(bt.render_help(helps[1]))); + $('#ymlist li').show(); - var arrs_list = [], - arr_obj = {}; - bt.site.get_dns_api(function (api) { - site.dnsapi = {} + var arrs_list = [], + arr_obj = {}; + bt.site.get_dns_api(function (api) { + site.dnsapi = {}; - for (var x = 0; x < api.length; x++) { - site.dnsapi[api[x].name] = {} - site.dnsapi[api[x].name].s_key = "None" - site.dnsapi[api[x].name].s_token = "None" - if (api[x].data) { - site.dnsapi[api[x].name].s_key = api[x].data[0].value - site.dnsapi[api[x].name].s_token = api[x].data[1].value - } - arrs_list.push({title: api[x].title, value: api[x].name}); - arr_obj[api[x].name] = api[x]; - } + for (var x = 0; x < api.length; x++) { + site.dnsapi[api[x].name] = {}; + site.dnsapi[api[x].name].s_key = 'None'; + site.dnsapi[api[x].name].s_token = 'None'; + if (api[x].data) { + site.dnsapi[api[x].name].s_key = api[x].data[0].value; + site.dnsapi[api[x].name].s_token = api[x].data[1].value; + } + arrs_list.push({ title: api[x].title, value: api[x].name }); + arr_obj[api[x].name] = api[x]; + } - var data = [{ - title: lan.site.choose_dns, - class: 'checks_line', - items: [{ - name: 'dns_select', - width: 'auto', - type: 'select', - items: arrs_list, - callback: function (obj) { - var _val = obj.val(); - $('.set_dns_config').remove(); - var _val_obj = arr_obj[_val]; - var _form = { - title: '', - area: '530px', - list: [], - btns: [{title: lan.site.turn_off, name: 'close'}] - }; + var data = [ + { + title: lan.site.choose_dns, + class: 'checks_line', + items: [ + { + name: 'dns_select', + width: 'auto', + type: 'select', + items: arrs_list, + callback: function (obj) { + var _val = obj.val(); + $('.set_dns_config').remove(); + var _val_obj = arr_obj[_val]; + var _form = { + title: '', + area: '530px', + list: [], + btns: [{ title: lan.site.turn_off, name: 'close' }], + }; - var helps = []; - if (_val_obj.data !== false) { - _form.title = lan.site.set + '【' + _val_obj.title + '】' + lan.site.interface; - if (_val_obj.help == "How to get API Token") { - _val_obj.help = '' + _val_obj.help + "" - } - helps.push(_val_obj.help); - var is_hide = true; - for (var i = 0; i < _val_obj.data.length; i++) { - _form.list.push({ - title: _val_obj.data[i].name, - name: _val_obj.data[i].key, - value: _val_obj.data[i].value - }) - if (!_val_obj.data[i].value) is_hide = false; - } - if (_val_obj.title == 'CloudFlare') { - _form.list.push({html: '
                      API-Limit
                      '}); - } - _form.btns.push({ - title: lan.site.save, - css: 'btn-success', - name: 'btn_submit_save', - callback: function (ldata, load) { - bt.site.set_dns_api({pdata: JSON.stringify(ldata)}, function (ret) { - if (ret.status) { - load.close(); - robj.find('input[type="radio"]:eq(0)').trigger('click') - robj.find('input[type="radio"]:eq(1)').trigger('click') - } - bt.msg(ret); - }) - } - }) - if (is_hide) { - obj.after(''); - $('.set_dns_config').click(function () { - var _bs = bt.render_form(_form); - $('div[data-id="form' + _bs + '"]').append(bt.render_help(helps)); - }) - } else { - var _bs = bt.render_form(_form); - $('div[data-id="form' + _bs + '"]').append(bt.render_help(helps)); - } - } - } - },] - }, { - title: ' ', - class: 'checks_line label-input-group', - items: [ - { - css: 'label-input-group ptb10', - text: 'Automatically combine pan-domain names', - name: 'app_root', - type: 'checkbox' - } - ] - }] - for (var i = 0; i < data.length; i++) { - var _form_data = bt.render_form_line(data[i]); - $(obj).parents('.line').append(_form_data.html) - bt.render_clicks(_form_data.clicks); - } - }) - } - }, - ] - }] + var helps = []; + if (_val_obj.data !== false) { + _form.title = lan.site.set + '【' + _val_obj.title + '】' + lan.site.interface; + if (_val_obj.help == 'How to get API Token') { + _val_obj.help = + '' + + _val_obj.help + + ''; + } + helps.push(_val_obj.help); + var is_hide = true; + for (var i = 0; i < _val_obj.data.length; i++) { + _form.list.push({ + title: _val_obj.data[i].name, + name: _val_obj.data[i].key, + value: _val_obj.data[i].value, + }); + if (!_val_obj.data[i].value) is_hide = false; + } + if (_val_obj.title == 'CloudFlare') { + _form.list.push({ + html: + '
                      API-Limit
                      ', + }); + } + _form.btns.push({ + title: lan.site.save, + css: 'btn-success', + name: 'btn_submit_save', + callback: function (ldata, load) { + bt.site.set_dns_api({ pdata: JSON.stringify(ldata) }, function (ret) { + if (ret.status) { + load.close(); + robj.find('input[type="radio"]:eq(0)').trigger('click'); + robj.find('input[type="radio"]:eq(1)').trigger('click'); + } + bt.msg(ret); + }); + }, + }); + if (is_hide) { + obj.after(''); + $('.set_dns_config').click(function () { + var _bs = bt.render_form(_form); + $('div[data-id="form' + _bs + '"]').append(bt.render_help(helps)); + }); + } else { + var _bs = bt.render_form(_form); + $('div[data-id="form' + _bs + '"]').append(bt.render_help(helps)); + } + } + }, + }, + ], + }, + { + title: ' ', + class: 'checks_line label-input-group', + items: [ + { + css: 'label-input-group ptb10', + text: 'Automatically combine pan-domain names', + name: 'app_root', + type: 'checkbox', + }, + ], + }, + ]; + for (var i = 0; i < data.length; i++) { + var _form_data = bt.render_form_line(data[i]); + $(obj).parents('.line').append(_form_data.html); + bt.render_clicks(_form_data.clicks); + } + }); + }, + }, + ], + }, + ]; - for (var i = 0; i < datas.length; i++) { - var _form_data = bt.render_form_line(datas[i]); - robj.append(_form_data.html); - bt.render_clicks(_form_data.clicks); - } - var _ul = $('
                      '); - for (var i = 0; i < ddata.domains.length; i++) { - if (ddata.domains[i].binding === true) continue - _ul.append('
                    • ' + ddata.domains[i].name + '
                    • '); - } - var _line = $("
                      "); - _line.append('' + lan.site.domain + ''); - _line.append(_ul); - robj.append(_line); - robj.find('input[type="radio"]').parent().addClass('label-input-group ptb10'); - $("#ymlist li input").click(function (e) { - e.stopPropagation(); - var a = true; - $("#ymlist li input").each(function () { - var o = $(this).prop("checked"); - if (!o) { - a = false; - return false; - } - }); - $("#ymlist div input").prop("checked", a); - }) - $("#ymlist li").click(function () { + for (var i = 0; i < datas.length; i++) { + var _form_data = bt.render_form_line(datas[i]); + robj.append(_form_data.html); + bt.render_clicks(_form_data.clicks); + } + var _ul = $( + '
                      ' + ); + for (var i = 0; i < ddata.domains.length; i++) { + if (ddata.domains[i].binding === true) continue; + _ul.append('
                    • ' + ddata.domains[i].name + '
                    • '); + } + var _line = $("
                      "); + _line.append('' + lan.site.domain + ''); + _line.append(_ul); + robj.append(_line); + robj.find('input[type="radio"]').parent().addClass('label-input-group ptb10'); + $('#ymlist li input').click(function (e) { + e.stopPropagation(); + var a = true; + $('#ymlist li input').each(function () { + var o = $(this).prop('checked'); + if (!o) { + a = false; + return false; + } + }); + $('#ymlist div input').prop('checked', a); + }); + $('#ymlist li').click(function () { + var o = $(this).find('input'), + a = true; + if (o.prop('checked')) { + o.prop('checked', false); + } else { + o.prop('checked', true); + } + $('#ymlist li input').each(function () { + var o = $(this).prop('checked'); + if (!o) { + a = false; + return false; + } + }); + $('#ymlist div input').prop('checked', a); + }); + $('#ymlist div').click(function () { + var o = $('#ymlist div input'), + p = $('#ymlist input'); + if (o.prop('checked')) { + p.prop('checked', true); + } else { + p.prop('checked', false); + } + }); + var _btn_data = bt.render_form_line({ + title: ' ', + text: lan.site.btapply, + name: 'letsApply', + type: 'button', + callback: function (ldata) { + ldata['domains'] = []; + $('#ymlist li:visible input[type="checkbox"]:checked').each(function () { + ldata['domains'].push($(this).val()); + }); + // console.log(ldata) + var auth_type = 'http'; + var auth_to = web.id; + var auto_wildcard = '0'; + if (ldata.check_dns) { + auth_type = 'dns'; + auth_to = 'dns'; + auto_wildcard = ldata.app_root ? '1' : '0'; + if (ldata.dns_select !== auth_to) { + if (!site.dnsapi[ldata.dns_select].s_key) { + layer.msg('No key information is set for the specified dns interface'); + return; + } + auth_to = ldata.dns_select + '|' + site.dnsapi[ldata.dns_select].s_key + '|' + site.dnsapi[ldata.dns_select].s_token; + } + } + if (ldata['domains'].length <= 0) { + return layer.msg('Need at least a domain name!', { icon: 2 }); + } + site.show_certificate_confirm(web.name, function () { + acme.apply_cert(ldata['domains'], auth_type, auth_to, auto_wildcard, function (res) { + site.ssl.ssl_result(res, auth_type, web.name); + }); + }); + }, + }); + robj.append(_btn_data.html); + bt.render_clicks(_btn_data.clicks); - var o = $(this).find("input"), - a = true; - if (o.prop("checked")) { - o.prop("checked", false) - } else { - o.prop("checked", true); - } - $("#ymlist li input").each(function () { - var o = $(this).prop("checked"); - if (!o) { - a = false; - return false; - } - }); - $("#ymlist div input").prop("checked", a); - }) - $("#ymlist div").click(function () { - var o = $("#ymlist div input"), p = $("#ymlist input"); - if (o.prop("checked")) { - p.prop("checked", true); - } else { - p.prop("checked", false); - } - }) - var _btn_data = bt.render_form_line({ - title: ' ', - text: lan.site.btapply, - name: 'letsApply', - type: 'button', - callback: function (ldata) { - ldata['domains'] = []; - $('#ymlist li:visible input[type="checkbox"]:checked').each(function () { - ldata['domains'].push($(this).val()); - }); - console.log(ldata) - var auth_type = 'http' - var auth_to = web.id - var auto_wildcard = '0' - if (ldata.check_dns) { - auth_type = 'dns' - auth_to = 'dns' - auto_wildcard = ldata.app_root ? '1' : '0' - if (ldata.dns_select !== auth_to) { - if (!site.dnsapi[ldata.dns_select].s_key) { - layer.msg("No key information is set for the specified dns interface"); - return; - } - auth_to = ldata.dns_select + "|" + site.dnsapi[ldata.dns_select].s_key + "|" + site.dnsapi[ldata.dns_select].s_token; - } - } - if (ldata['domains'].length <= 0) { - return layer.msg('Need at least a domain name!', {icon: 2}); - } - site.show_certificate_confirm(web.name, function () { - acme.apply_cert(ldata['domains'], auth_type, auth_to, auto_wildcard, function (res) { - site.ssl.ssl_result(res, auth_type, web.name); - }); - }); - } - }); - robj.append(_btn_data.html); - bt.render_clicks(_btn_data.clicks); + robj.append(bt.render_help(helps[0])); + robj.find('input[type="radio"]:eq(0)').trigger('click'); + }); + }, + }, + // { + // title: lan.site.other_ssl, + // callback: function (robj) { + // robj = $('#webedit-con .tab-con') + // var cert_info = ''; + // if (rdata.cert_data['notBefore']) { + // cert_info = '
                      \ + // ' + (rdata.status ? lan.site.deploy_success_tips : lan.site.not_deploy_and_save) + '\ + // ' + lan.site.cert_brand + '' + rdata.cert_data.issuer + '\ + // ' + lan.site.auth_domain + ' ' + (rdata.cert_data.dns ? rdata.cert_data.dns.join(', ') : '') + '\ + // ' + lan.site.expire_time + ' ' + rdata.cert_data.notAfter + '
                      ' + // } + // robj.append('
                      ' + cert_info + '
                      ' + lan.site.ssl_key + '' + lan.site.ssl_crt + '
                      '); + // var datas = [{ + // items: [ + // {name: 'key', width: '48%', height: '220px', type: 'textarea', value: rdata.key}, + // {name: 'csr', width: '48%', height: '220px', type: 'textarea', value: rdata.csr} + // ] + // }, + // { + // items: [{ + // text: lan.site.save, + // name: 'btn_ssl_save', + // type: 'button', + // callback: function (sdata) { + // bt.site.set_ssl(web.name, sdata, function (ret) { + // if (ret.status) site.reload(7); + // bt.msg(ret); + // }) + // } + // }, + // { + // text: lan.site.ssl_close, + // name: 'btn_ssl_close', + // hide: !rdata.status, + // type: 'button', + // callback: function (sdata) { + // site.ssl.set_ssl_status('CloseSSLConf', web.name); + // } + // } + // ] + // } + // ] + // for (var i = 0; i < datas.length; i++) { + // var _form_data = bt.render_form_line(datas[i]); + // robj.append(_form_data.html); + // bt.render_clicks(_form_data.clicks); + // } + // var helps = [ + // lan.site.bt_ssl_help_10, + // lan.public_backup.cret_err, + // lan.public_backup.pem_format, + // lan.site.ssl_tips5, + // ] + // robj.append(bt.render_help(helps)); + // robj.find(".help-info-text").css('margin-top', '0'); + // robj.find('textarea').css('resize', 'none'); + // robj.find('[name=csr]').css('margin-right', '0'); + // } + // }, + // { + // title: lan.site.turn_off, + // callback: function (robj) { + // robj = $('#webedit-con .tab-con'); + // if (rdata.type == -1) { + // robj.html("
                      " + lan.site.ssl_help_1 + "
                      "); + // } else { + // var txt = ''; + // switch (rdata.type) { + // case 1: + // txt = "Let's Encrypt"; + // break; + // case 0: + // txt = lan.site.other_ssl; + // break; + // case 2: + // txt = lan.site.bt_ssl; + // break; + // } + // robj.html('\ + //
                      ' + lan.get('ssl_enable', [txt]) + '
                      \ + //
                      \ + // \ + //
                      \ + // '); + // } + // var loadT = bt.load(lan.site.the_msg); + // $.post('/site?action=get_auto_restart_rph', { + // sitename: web.name + // }, function (res) { + // loadT.close(); + // if (res) { + // var checked_str = res.status ? 'checked="true"' : ''; + // robj.append('\ + //
                      \ + //
                      Auto restart proxy, redirect, http to https when apply or renew SSL
                      \ + //
                      \ + // \ + // \ + //
                      \ + // '); + // } + // }); + // } + // }, + { + title: lan.site.ssl_dir, + callback: function (robj) { + robj = $('#webedit-con .tab-con'); + robj.html("
                      "); + bt.site.get_cer_list(function (rdata) { + bt.render({ + table: '#cer_list_table', + columns: [ + { + field: 'subject', + title: lan.site.domain, + templet: function (item) { + return item.dns.join('
                      '); + }, + }, + { field: 'notAfter', width: '100px', title: lan.site.endtime }, + { field: 'issuer', width: '150px', title: lan.site.brand }, + { + field: 'opt', + width: '100px', + align: 'right', + title: lan.site.operate, + templet: function (item) { + var opt = + '' + + lan.site.deploy + + ' | '; + opt += + '' + + lan.site.del + + ''; + return opt; + }, + }, + ], + data: rdata, + }); + }); + }, + }, + ]; - robj.append(bt.render_help(helps[0])); - robj.find('input[type="radio"]:eq(0)').trigger('click') - }) - } - }, - { - title: lan.site.other_ssl, - callback: function (robj) { - robj = $('#webedit-con .tab-con') - var cert_info = ''; - if (rdata.cert_data['notBefore']) { - cert_info = '
                      \ - ' + (rdata.status ? lan.site.deploy_success_tips : lan.site.not_deploy_and_save) + '\ - ' + lan.site.cert_brand + '' + rdata.cert_data.issuer + '\ - ' + lan.site.auth_domain + ' ' + (rdata.cert_data.dns ? rdata.cert_data.dns.join(', ') : '') + '\ - ' + lan.site.expire_time + ' ' + rdata.cert_data.notAfter + '
                      ' - } - robj.append('
                      ' + cert_info + '
                      ' + lan.site.ssl_key + '' + lan.site.ssl_crt + '
                      '); - var datas = [{ - items: [ - {name: 'key', width: '48%', height: '220px', type: 'textarea', value: rdata.key}, - {name: 'csr', width: '48%', height: '220px', type: 'textarea', value: rdata.csr} - ] - }, - { - items: [{ - text: lan.site.save, - name: 'btn_ssl_save', - type: 'button', - callback: function (sdata) { - bt.site.set_ssl(web.name, sdata, function (ret) { - if (ret.status) site.reload(7); - bt.msg(ret); - }) - } - }, - { - text: lan.site.ssl_close, - name: 'btn_ssl_close', - hide: !rdata.status, - type: 'button', - callback: function (sdata) { - site.ssl.set_ssl_status('CloseSSLConf', web.name); - } - } - ] - } - ] - for (var i = 0; i < datas.length; i++) { - var _form_data = bt.render_form_line(datas[i]); - robj.append(_form_data.html); - bt.render_clicks(_form_data.clicks); - } - var helps = [ - lan.site.bt_ssl_help_10, - lan.public_backup.cret_err, - lan.public_backup.pem_format, - lan.site.ssl_tips5, - ] - robj.append(bt.render_help(helps)); - robj.find(".help-info-text").css('margin-top', '0'); - robj.find('textarea').css('resize', 'none'); - robj.find('[name=csr]').css('margin-right', '0'); - } - }, - { - title: lan.site.turn_off, - callback: function (robj) { - robj = $('#webedit-con .tab-con'); - if (rdata.type == -1) { - robj.html("
                      " + lan.site.ssl_help_1 + "
                      "); - } else { - var txt = ''; - switch (rdata.type) { - case 1: - txt = "Let's Encrypt"; - break; - case 0: - txt = lan.site.other_ssl; - break; - case 2: - txt = lan.site.bt_ssl; - break; - } - robj.html('\ -
                      ' + lan.get('ssl_enable', [txt]) + '
                      \ -
                      \ - \ -
                      \ - '); - } - var loadT = bt.load(lan.site.the_msg); - $.post('/site?action=get_auto_restart_rph', { - sitename: web.name - }, function (res) { - loadT.close(); - if (res) { - var checked_str = res.status ? 'checked="true"' : ''; - robj.append('\ -
                      \ -
                      Auto restart proxy, redirect, http to https when apply or renew SSL
                      \ -
                      \ - \ - \ -
                      \ - '); - } - }); - } - }, - { - title: lan.site.ssl_dir, - callback: function (robj) { - robj = $('#webedit-con .tab-con') - robj.html("
                      "); - bt.site.get_cer_list(function (rdata) { - bt.render({ - table: '#cer_list_table', - columns: [{ - field: 'subject', - title: lan.site.domain, - templet: function (item) { - return item.dns.join('
                      ') - } - }, - {field: 'notAfter', width: '100px', title: lan.site.endtime}, - {field: 'issuer', width: '150px', title: lan.site.brand}, - { - field: 'opt', - width: '100px', - align: 'right', - title: lan.site.operate, - templet: function (item) { - var opt = '' + lan.site.deploy + ' | '; - opt += '' + lan.site.del + '' - return opt; - } - } - ], - data: rdata - }) - }) - } - } - ] - bt.render_tab('ssl_tabs', _tabs); - $('#ssl_tabs').append('
                      ' + lan.site.force_https + '
                      '); - $("#toHttps").attr('checked', rdata.httpTohttps); - $('#toHttps').click(function (sdata) { - var isHttps = $("#toHttps").attr('checked'); - if (isHttps) { - layer.confirm('After closing HTTPS, you need to clear your browser cache to see the effect. Continue?', { - icon: 3, - title: "Turn off forced HTTPS\"" - }, function () { - bt.site.close_http_to_https(web.name, function (rdata) { - if (rdata.status) { - setTimeout(function () { - site.reload(7); - }, 3000); - } - }) - }); - } else { - bt.site.set_http_to_https(web.name, function (rdata) { - if (!rdata.status) { - setTimeout(function () { - site.reload(7); - }, 3000); - } + bt.render_tab('ssl_tabs', tabs); - }) - } - }) - // switch (rdata.type) { - // case 1: - // $('#ssl_tabs span:eq(0)').trigger('click'); - // break; - // case 0: - // $('#ssl_tabs span:eq(0)').trigger('click'); - // break; - // default: - // $('#ssl_tabs span:eq(0)').trigger('click'); - // break; - // } - $('#ssl_tabs span:eq(0)').trigger('click'); - }) - }, - show_certificate_confirm: function (sitename, callback) { - var _this = this; - var auto_restart_rph = function (index, loading) { - if (loading) loadT = bt.load(lan.site.the_msg); - $.post('/site?action=auto_restart_rph', { - sitename: sitename - }, function (res) { - loadT.close(); - if (res.status) { - if (index) layer.close(index); - if (callback) callback(res); - } - }); - }; - var loadT = bt.load(lan.site.the_msg); - $.post('/site?action=get_auto_restart_rph', { - sitename: sitename - }, function (res) { - if (res && res.status) { - auto_restart_rph(); - } else { - loadT.close(); - layer.open({ - type: 1, - area: '530px', - title: 'Apply SSL', - closeBtn: 2, - shift: 5, - shadeClose: false, - content: '\ + // $('#ssl_tabs').append('
                      ' + lan.site.force_https + '
                      '); + // $("#toHttps").attr('checked', rdata.httpTohttps); + // $('#toHttps').click(function (sdata) { + // var isHttps = $("#toHttps").attr('checked'); + // if (isHttps) { + // layer.confirm('After closing HTTPS, you need to clear your browser cache to see the effect. Continue?', { + // icon: 3, + // title: "Turn off forced HTTPS\"" + // }, function () { + // bt.site.close_http_to_https(web.name, function (rdata) { + // if (rdata.status) { + // setTimeout(function () { + // site.reload(7); + // }, 3000); + // } + // }) + // }); + // } else { + // bt.site.set_http_to_https(web.name, function (rdata) { + // if (!rdata.status) { + // setTimeout(function () { + // site.reload(7); + // }, 3000); + // } + + // }) + // } + // }) + // switch (rdata.type) { + // case 1: + // $('#ssl_tabs span:eq(0)').trigger('click'); + // break; + // case 0: + // $('#ssl_tabs span:eq(0)').trigger('click'); + // break; + // default: + // $('#ssl_tabs span:eq(0)').trigger('click'); + // break; + // } + + $('#ssl_tabs span:eq(' + (rdata.status ? (rdata.csr ? 0 : 1) : 1) + ')').trigger('click'); + + $('.cutTabView').on('click', function () { + $('#ssl_tabs span:eq(1)').trigger('click'); + setTimeout(function () { + $('.ssl_business_application').trigger('click'); + }, 400); + }); + }); + }, + show_certificate_confirm: function (sitename, callback) { + var _this = this; + var auto_restart_rph = function (index, loading) { + if (loading) loadT = bt.load(lan.site.the_msg); + $.post( + '/site?action=auto_restart_rph', + { + sitename: sitename, + }, + function (res) { + loadT.close(); + if (res.status) { + if (index) layer.close(index); + if (callback) callback(res); + } + } + ); + }; + var loadT = bt.load(lan.site.the_msg); + $.post( + '/site?action=get_auto_restart_rph', + { + sitename: sitename, + }, + function (res) { + if (res && res.status) { + auto_restart_rph(); + } else { + loadT.close(); + layer.open({ + type: 1, + area: '530px', + title: 'Apply SSL', + closeBtn: 2, + shift: 5, + shadeClose: false, + content: + '\
                      \
                      \ \ @@ -7585,19 +12866,20 @@ var site = {
                      \
                      \ ', - success: function (layers, index) { - $('.submit_cert').click(function () { - auto_restart_rph(index, true); - }); - $('.close_cert').click(function () { - layer.close(index); - }); - } - }); - } - }); - } -} + success: function (layers, index) { + $('.submit_cert').click(function () { + auto_restart_rph(index, true); + }); + $('.close_cert').click(function () { + layer.close(index); + }); + }, + }); + } + } + ); + }, +}; $('#cutMode .tabs-item[data-type="' + (bt.get_cookie('site_model') || 'php') + '"]').trigger('click'); // site.get_types(); @@ -7614,4 +12896,4 @@ $('#cutMode .tabs-item[data-type="' + (bt.get_cookie('site_model') || 'php') + ' // } // } // return o; -// }; \ No newline at end of file +// }; diff --git a/BTPanel/static/js/soft.js b/BTPanel/static/js/soft.js index f7321e04..992098fa 100644 --- a/BTPanel/static/js/soft.js +++ b/BTPanel/static/js/soft.js @@ -336,7 +336,8 @@ var soft = { type:item.type, plugin:true, renew:item.endtime, - totalNum:buy_type + totalNum:buy_type, + ps: item.ps }) +')\'>' + re_msg + ''; } else { pay_opt = '' + re_msg + ''; @@ -460,8 +461,15 @@ var soft = { } } ], - data: data + data: data, + empty:'If the search content is not found, submit the demand feedback' }) + // 需求反馈 + if(data.length == 0){ + $('.feedback-btn').remove(); + $('.soft-filter-box .soft-search').after(''); + + } }, // 渲染列表 render_promote_list:function(data){ @@ -585,7 +593,7 @@ var soft = { var ltd = parseInt(bt.get_cookie('ltd_end') || -1),pro = parseInt(bt.get_cookie('pro_end') || -1),todayDate = parseInt(new Date().getTime()/1000),_ltd = null; if((ltd > 0 && (ltd == pro || pro < 0)) || (ltd < 0 && pro >= 0) || (ltd > 0 && pro >= 0)){ _ltd = ((ltd > 0 && (ltd == pro || pro < 0)) || (ltd > 0 && pro >= 0))?1:0; - explain.html('The '+ (_ltd?'Pro':'Pro') +' edition can use the '+ (_ltd?'专业版及企业版插件':'professional plug-in for free,') + (!(pro == 0 && ltd < 0)?('expiration time: '+ (bt.format_data((_ltd?ltd:pro),'yyyy/MM/dd') ) +''+((((_ltd?ltd:pro) - todayDate) <= 15*24*60*60)?(',Only '+ Math.round(((_ltd?ltd:pro) - todayDate) / (24*60*60)) +' days until expiration'):'')):',过期时间:永久授权')); + explain.html('The '+ (_ltd?'Pro':'Pro') +' edition can use the '+ (_ltd?'专业版及企业版插件':'professional plug-in for free,') + (!(pro == 0 && ltd < 0)?('expiration time: '+ (bt.format_data((_ltd?ltd:pro),'yyyy/MM/dd') ) +''+((((_ltd?ltd:pro) - todayDate) <= 15*24*60*60)?(',Only '+ Math.round(((_ltd?ltd:pro) - todayDate) / (24*60*60)) +' days until expiration'):'')):' Expire: Lifetime')); }else if(ltd == -1 && pro == -1){ explain.html('Upgrade to Pro edition, all plugins, free to use!'); }else if(pro == 0 && ltd < 0){ @@ -613,13 +621,20 @@ var soft = { $(el).append(tips_info.addClass('alert-ltd-success')); return false; }else{ - var btn = $('' + (is_buy ? 'Renew Now' : 'Upgrade now') + '') - btn.on('click', function () { - genre ? bt.soft.updata_pro(buy_type) : bt.soft.updata_ltd(undefined,buy_type) - }) - tips_info.addClass('showprofun').find('.btn-ground').append(btn) + // var btn = $('' + (is_buy ? 'Renew Now' : 'Upgrade now') + '') + // btn.on('click', function () { + // genre ? bt.soft.updata_pro(buy_type) : bt.soft.updata_ltd(undefined,buy_type) + // }) + // tips_info.addClass('showprofun').find('.btn-ground').append(btn) } } + if (pro !== 0) { + var btn = $('' + (is_buy ? 'Renew Now' : 'Upgrade now') + '') + btn.on('click', function () { + genre ? bt.soft.updata_pro(buy_type) : bt.soft.updata_ltd(undefined,buy_type) + }) + tips_info.addClass('showprofun').find('.btn-ground').append(btn) + } // if(_ltd != 2){ // if(!(pro == 0 && ltd < 0)){ // btn_ground = soft.render_tips_btn(btn_ground); @@ -627,24 +642,24 @@ var soft = { // } $(el).append(tips_info.addClass(_ltd == 1?'alert-ltd-success':'alert-success')); if(_this.trail){ - setTimeout(function (){ - $('.btn-ground').after('Try the Pro edition for free') - var trail = $('Click to try'); - trail.click((!res.status || !res)?fun:function(){ - var loadT = bt.load() - bt.confirm({ - title:"Pro Edition", - msg:"Get 7-day Pro edition free, get it now?" - },function (){ - bt.send('free_trial','auth/free_trial',{},function(res){ - loadT.close() - bt.msg(res) - setTimeout(function () { window.location.reload() },2000) - }) - }) - }) - $('.pro_trail').after(trail) - },100) + // setTimeout(function (){ + // $('.btn-ground').after('Try the Pro edition for free') + // var trail = $('Click to try'); + // trail.click((!res.status || !res)?fun:function(){ + // var loadT = bt.load() + // bt.confirm({ + // title:"Pro Edition", + // msg:"Get 7-day Pro edition free, get it now?" + // },function (){ + // bt.send('free_trial','auth/free_trial',{},function(res){ + // loadT.close() + // bt.msg(res) + // setTimeout(function () { window.location.reload() },2000) + // }) + // }) + // }) + // $('.pro_trail').after(trail) + // },100) } } var bt_user_info = bt.get_cookie('bt_user_info'); @@ -1099,6 +1114,7 @@ var soft = { var arrs = datas.public; if (name == 'phpmyadmin') arrs = []; if (name == 'openlitespeed') arrs.length = 1; + if(name === 'pureftpd') arrs.push({type: 'pureftpd_log',title: 'Logs Manage'}); arrs = arrs.concat(datas[name]); if (arrs) { for (var i = 0; i < arrs.length; i++) { @@ -1131,7 +1147,7 @@ var soft = { var menu = $('.bt-soft-menu').data("data", rdata); setTimeout(function() { menu.append($('

                      ' + lan.soft.service + '

                      ')) - if (rdata.version_coexist) { + if (rdata.version_coexist) { var ver = name.split('-')[1].replace('.', ''); var opt_list = [{ type: 'set_php_config', @@ -1255,6 +1271,27 @@ var soft = { var version = data.name; if (data.name.indexOf('php-') >= 0) version = data.name.split('-')[1].replace('.', ''); switch (key) { + case 'pureftpd_log': //ftp日志管理 + var tabCon = $(".soft-man-con").empty(); + bt.pub.get_ftp_logs(function (_status) { + tabCon.append('
                      \ + Logs manage switch\ +
                      \ + \ + \ +
                      \ +
                      • After enabling it, all login and operation records of FTP users will be logged.
                      '); + $('.ftp-log .isFtplog').unbind('click').click(function () { + var status = $(this).prev().prop('checked'); + bt.pub.set_ftp_logs(status ? 'stop' : 'start') + }) + var pro = parseInt(bt.get_cookie('pro_end') || -1) + if(pro < 0){ + tabCon.append('
                      \ +
                      This feature is exclusive to the Professional version, Buy Now
                      ') + } + }) + break; case 'service': var tabCon = $(".soft-man-con").empty(); var status_list = [{ diff --git a/BTPanel/static/js/tools.js b/BTPanel/static/js/tools.js index 508f4d94..d12c2ca2 100644 --- a/BTPanel/static/js/tools.js +++ b/BTPanel/static/js/tools.js @@ -1,2447 +1,3186 @@ var bt_tools = { + commandConnectionPool: {}, //ws连接池 + /** + * @description 表格渲染 + * @param {object} config 配置对象 参考说明 + * @return 当前实例对象 + */ + table: function (config) { + var that = this, + table = $(config.el), + tableData = table.data('table'); + if (tableData && table.find('table').length > 0) { + if (config.url !== undefined) { + tableData.$refresh_table_list(true); + } else if (config.data !== undefined) { + tableData.$reader_content(config.data); + } + return tableData; + } + function ReaderTable(config) { + this.config = config; + this.$load(); + } - commandConnectionPool: {}, //ws连接池 - /** - * @description 表格渲染 - * @param {object} config 配置对象 参考说明 - * @return 当前实例对象 - */ - table: function (config) { - var that = this; + ReaderTable.prototype = { + style_list: [], // 样式列表 + event_list: {}, // 事件列表,已绑定事件 + checkbox_list: [], // 元素选中列表 + batch_active: {}, + event_rows_model: {}, // 事件行内元素模型,行内元素点击都会将数据临时存放 + data: [], + page: '', + column: [], + batch_thread: [], + random: bt.get_random(5), + init: false, // 是否初始化渲染 + checked: false, // 是否激活,用来判断是否失去焦点 + /** + * @description 加载数据 + * @return void + */ + $load: function () { + var _that = this; + if (this.config.init) this.config.init(this); + $(this.config.el).addClass('bt_table'); + if (this.config.minWidth) + this.style_list.push({ + className: this.config.el + ' table', + css: 'min-width:' + this.config.minWidth, + }); + if (this.config.tootls) { + this.$reader_tootls(this.config.tootls); + } else { + if ($(_that.config.el + '.divtable').length === 0) $(_that.config.el).append('
                      '); + } + this.$reader_content(); + if (_that.config.url !== undefined) { + this.$refresh_table_list(_that.config.load || false); + } else if (this.config.data !== undefined) { + this.$reader_content(this.config.data); + } else { + alert('缺少data或url参数'); + } + if (this.config.methods) { + //挂载实例方法 + $.extend(this, this.config.methods); + } + if (this.config.height) bt_tools.$fixed_table_thead(this.config.el + ' .divtable'); + }, - function ReaderTable(config) { - this.config = config; - this.$load(); - } + /** + * @description 刷新表格数据 + * @param {boolean} load + * @param {function} callback 回调函数 + * @return void + */ + $refresh_table_list: function (load, callback) { + var _that = this; + this.$http(load, function (data) { + if (callback) callback(data); + _that.$reader_content(data.data, typeof data.total != 'undefined' ? parseInt(data.total) : data.page); + }); + }, - ReaderTable.prototype = { - style_list: [], // 样式列表 - event_list: {}, // 事件列表,已绑定事件 - checkbox_list: [], // 元素选中列表 - batch_active: {}, - event_rows_model: {}, // 事件行内元素模型,行内元素点击都会将数据临时存放 - data: [], - page: '', - column: [], - batch_thread: [], - random: bt.get_random(5), - init: false, // 是否初始化渲染 - checked: false, // 是否激活,用来判断是否失去焦点 - /** - * @description 加载数据 - * @return void - */ - $load: function () { - var _that = this; - if (this.config.init) this.config.init(this); - $(this.config.el).addClass('bt_table'); - if (this.config.minWidth) this.style_list.push({ - className: this.config.el + ' table', - css: ('min-width:' + this.config.minWidth) - }); - if (this.config.tootls) { - this.$reader_tootls(this.config.tootls); - } else { - if ($(_that.config.el + '.divtable').length === 0) $(_that.config.el).append('
                      '); - } - this.$reader_content(); - if (_that.config.url !== undefined) { - this.$refresh_table_list(_that.config.load || false); - } else if (this.config.data !== undefined) { - this.$reader_content(this.config.data); - } else { - alert('缺少data或url参数'); - } - if (this.config.methods) { //挂载实例方法 - $.extend(this, this.config.methods); - } - if (this.config.height) bt_tools.$fixed_table_thead(this.config.el + ' .divtable') - }, - - /** - * @description 刷新表格数据 - * @param {boolean} load - * @param {function} callback 回调函数 - * @return void - */ - $refresh_table_list: function (load, callback) { - var _that = this, loadT; - if (load) loadT = bt_tools.load(lan.database.get_data); - this.$http(function (data) { - if (loadT) loadT.close(); - if (callback) callback(data); - _that.$reader_content(data.data, typeof data.total != "undefined" ? parseInt(data.total) : data.page); - }); - }, - - /** - * @description 渲染内容 - * @param {object} data 渲染的数据 - * @param {number} page 数据分页/总数 - * @return void - */ - $reader_content: function (data, page) { - var _that = this, thead = '', tbody = '', i = 0, column = this.config.column, event_list = {}, - checkbox = $(_that.config.el + ' .checkbox_' + _that.random); - data = data || []; - this.data = data; - if (checkbox.length) { - checkbox.removeClass('active selected'); - _that.checkbox_list = []; - _that.$set_batch_view(); - } - do { - var rows = data[i], - completion = 0; - if (data.length > 0) tbody += ''; - for (var j = 0; j < column.length; j++) { - var item = column[j]; - if ($.isEmptyObject(item)) { - completion++; - continue; - } - if (i === 0 && !this.init) { - if (!this.init) this.style_list.push(this.$dynamic_merge_style(item, j - completion)); - var sortName = 'sort_' + this.random + '', - checkboxName = 'checkbox_' + this.random, - sortValue = item.sortValue || 'desc'; - thead += '' + (item.type == "checkbox" ? '' : '' + item.title + '') + (item.sort ? '' : '') + ''; - if (i === 0) { - if (!event_list[sortName] && item.sort) event_list[sortName] = { - event: this.config.sortEvent, - eventType: 'click', - type: 'sort' - }; - if (!event_list[checkboxName]) event_list[checkboxName] = { - event: item.checked, - eventType: 'click', - type: 'checkbox' - }; - } - } - if (rows !== undefined) { - var template = '', className = 'event_' + item.fid + '_' + this.random; - if (item.template) { - template = _that.$custom_template_render(item, rows, j); - } - if (typeof template === "undefined" || typeof item.template === "undefined") { - template = this.$reader_column_type(item, rows); - event_list = $.extend(event_list, template[1]); - template = template[0]; - } - var fixed = false; - if (typeof item.fixed != "undefined" && item.fixed) { - if (typeof item.class != "undefined") { - if (item.class.indexOf('fixed') === -1) item.class += ' fixed'; - } else { - item.class = 'fixed'; - } - fixed = true; - } - tbody += '' + template + ''; - if (i === 0) { - if (!event_list[className] && item.event) event_list[className] = { - event: item.event, - eventType: 'click', - type: 'rows' - }; - } - } - } - if (data.length > 0) tbody += '' - if (data.length == 0) tbody += '' + (this.config['default'] || lan['public'].empty) + ''; - i++; - } while (i < data.length); - if (!this.init) this.$style_bind(this.style_list); - this.$event_bind(event_list); - if (!this.init) { - $(this.config.el + ' .divtable').append('' + thead + '' + tbody + '
                      '); - } else { - $(this.config.el + ' .divtable tbody').html(tbody); - if (this.config.page) { - $(this.config.el + ' .page').replaceWith(this.$reader_page(this.config.page, page)); - } - } - this.init = true; - if (this.config.success) this.config.success(this); - }, - /** - * @description 自定模板渲染 - * @param {object} item 当前元素模型 - * @param {object} rows 当前元素数据 - * @param {number} j 当前模板index - * @return void - */ - $custom_template_render: function (item, rows, j) { - var className = 'event_' + item.fid + '_' + this.random, - _template = item.template(rows, j), - $template = $(_template); - if ($template.length > 0) { - template = $template.addClass(className)[0].outerHTML; - } else { - if (item.type === 'text') { - template = '' + _template + ''; - } else { - template = '' + _template + ''; - } - } - return template; - }, - - /** - * @description 替换table数据 - * @param {string} newValue 内容数据 - * @return void - */ - $modify_row_data: function (newValue) { - this.event_rows_model.rows = $.extend(this.event_rows_model.rows, newValue); - var row_model = this.event_rows_model, template = null; - if (typeof row_model.model.template != 'undefined') { - template = $(this.$custom_template_render(row_model.model, row_model.rows, row_model.index)); - if (!template.length) template = $(this.$reader_column_type(row_model.model, row_model.rows)[0]); - } else { - template = $(this.$reader_column_type(row_model.model, row_model.rows)[0]); - } - if (row_model.model.type == 'group') { - $(row_model.el).parent().empty().append(template); - } else { - row_model.el.replaceWith(template); - } - row_model.el = template; - }, - - /** - * @description 批量执行程序 - * @param {object} config 配置文件 - * @return void - */ - $batch_success_table: function (config) { - var _that = this, length = $(config.html).length; - bt.open({ - type: 1, - title: config.title, - area: config.area || ['400px'], - shadeClose: false, - closeBtn: 2, - content: config.content || '
                      ' + config.title + ' ' + lan['public'].success + '
                      ' + config.html + '
                      ' + config.th + '' + lan['public'].result + '
                      ', - success: function () { - if (length > 4) _that.$fixed_table_thead('.fiexd_thead'); - } - }); - }, - - /** - * @description 删除行内数据 - */ - $delete_table_row: function (index) { - this.data.splice(index, 1) - this.$reader_content(this.data); - }, - - - /** - * @description 设置批量操作显示 - * @return void 无 - */ - $set_batch_view: function () { - if (typeof this.config.batch != "undefined") { //判断是否存在批量操作 - var bt_select_btn = $(this.config.el + ' .set_batch_option'); - if (typeof this.config.batch.config != "undefined") { // 判断批量操作是多个还是单个 - if (this.checkbox_list.length > 0) { - bt_select_btn.removeClass('bt-disabled btn-default').addClass('btn-success').text(lan['public'].please_choose + this.batch_active.title + '(' + lan['public'].selected + this.checkbox_list.length + ')') - } else { - bt_select_btn.addClass('bt-disabled btn-default').removeClass('btn-success').text(lan['public'].please_choose + this.batch_active.title); - } - } else { - var bt_select_val = $(this.config.el + ' .bt_table_select_group .bt_select_value'); - if (this.checkbox_list.length > 0) { - bt_select_btn.removeClass('bt-disabled btn-default').addClass('btn-success').prev().removeClass('bt-disabled'); - bt_select_val.find('em').html('(' + lan['public'].selected + this.checkbox_list.length + ')'); - } else { - bt_select_btn.addClass('bt-disabled btn-default').removeClass('btn-success').prev().addClass('bt-disabled'); - bt_select_val.children().eq(0).html(lan['public'].please_choose + ''); - bt_select_val.next().find('li').removeClass('active'); - this.batch_active = {}; - } - } - } - }, - - /** - * @description 渲染指定类型列内容 - * @param {object} data 渲染的数据 - * @param {object} rows 渲染的模板 - * @return void - */ - $reader_column_type: function (item, rows) { - var value = rows[item.fid], event_list = {}, className = 'click_' + item.fid + '_' + this.random, - config = [], _that = this; - switch (item.type) { - case 'text': //普通文本 - config = [value, event_list]; - break; - case 'checkbox': //单选内容 - config = ['', event_list]; - break; - case 'password': - var _copy = '', - _eye_open = '', - className = 'ico_' + _that.random + '_', - html = '**********' - if (item.eye_open) { - html += ''; - if (!event_list[className + 'eye_open']) event_list[className + 'eye_open'] = { - type: 'eye_open_password' - }; - } - if (item.copy) { - html += '' - if (!event_list[className + 'copy']) event_list[className + 'copy'] = { - type: 'copy_password' - }; - } - config = [html, event_list]; - break; - case 'link': //超链接类型 - className += '_' + item.fid - if (!event_list[className] && item.event) event_list[className] = { - event: item.event, - type: 'rows' - }; - config = ['' + value + '', event_list]; - break; - case 'input': //可编辑类型 - blurName = 'blur_' + item.fid + '_' + this.random; - keyupName = 'keyup_' + item.fid + '_' + this.random; - if (!event_list[blurName] && item.blur) event_list[blurName] = { - event: item.blur, - eventType: 'blur', - type: 'rows' - }; - if (!event_list[keyupName] && item.keyup) event_list[keyupName] = { - event: item.keyup, - eventType: 'keyup', - type: 'rows' - }; - config = ['', event_list]; - break; - case 'status': // 状态类型 - var active = ''; - $.each(item.config.list, function (index, items) { - if (items[0] === value) active = items; - }); - if (!event_list[className] && item.event) event_list[className] = { - event: item.event, - type: 'rows' - }; - config = ['' + active[1] + '' + (item.config.icon ? '' : '') + '', event_list]; - break; - case 'switch': //开关类型 - var active = '', _random = bt.get_random(5); - active = new Number(value) == true ? 'checked' : '' - if (!event_list[className] && item.event) event_list[className] = { - event: item.event, - type: 'rows' - }; - config = ['
                      ', event_list]; - break; - case 'group': - var _html = ''; - $.each(item.group, function (index, items) { - className = (item.fid ? item.fid : 'group') + '_' + index + '_' + _that.random; - var _hide = false; - if (items.template) { - var _template = items.template(rows, _that), - $template = $(_template); - if ($template.length > 0) { - _html += $template.addClass(className)[0].outerHTML - } else { - _html += '' + _template + ''; - } - } else { - if (typeof items.hide != "undefined") { - _hide = typeof items.hide === "boolean" ? items.hide : items.hide(rows); - if (typeof _hide != "boolean") return false; - } - _html += '' + items.title + ''; - } - //当前操作按钮长度等于当前所以值时不向后添加分割 - if (!_hide) _html += ((item.group.length == (index + 1)) ? '' : ' | ') - if (!event_list[className] && items.event) event_list[className] = { - event: items.event, - type: 'rows' - }; - }); - config = [_html, event_list]; - break; - default: - config = [value, event_list]; - break; - } - return config; - }, - /** - * @description 批量执行程序 - * @param {object} config 配置文件 - * @return void - */ - $batch_success_table: function (config) { - that.$batch_success_table(config); - }, - /** - * @description 渲染工具条 - * @param {object} data 配置参数 - * @return void - */ - $reader_tootls: function (config) { - var _that = this, event_list = {}; - - /** - * @description 请求方法 - * @param {Function} callback 回调函数 - * @returns void - */ - function request(active, check_list) { - var loadT = bt.load(active.title + lan.site.executing), - batch_config = {}, - list = _that.$get_data_batch_list(active.paramId, check_list); - if (!active.beforeRequest) { - batch_config[active.paramName] = list.join(','); - } else { - batch_config[active.paramName] = active.beforeRequest(check_list); - } - bt_tools.send({ - url: active.url || _that.config.batch.url, - data: $.extend(active.param || {}, batch_config) - }, function (res) { - loadT.close(); - if (res.status === false && typeof res.success === "undefined") { - bt_tools.msg(res); - return false; - } - if (typeof active.tips === 'undefined' || active.tips) { - var html = ''; - $.each(res.error, function (key, item) { - html += '' + key + '
                      ' + item + '
                      '; - }); - $.each(res.success, function (index, item) { - html += '' + item + '
                      ' + lan['public'].success + '
                      '; - }); - _that.$batch_success_table({ - title: active.title, - th: active.theadName, - html: html - }); - if (active.refresh) _that.$refresh_table_list(true); - } else { - if (!active.success) { - var html = ''; - $.each(check_list, function (index, item) { - html += '' + item.name + '
                      ' + ((typeof active.theadValue != 'undefined' ? active.theadValue[res.status ? 0 : 1] : null) || res.msg) + '
                      '; - }); - _that.$batch_success_table({ - title: 'Batch' + active.title + 'Success', - th: active.theadName, - html: html - }); - if (active.refresh) _that.$refresh_table_list(true); - } - } - if (active.success) { - active.success(res, check_list, _that); - } - }); - } - - /** - * @description 执行批量,包含递归批量和自动化批量 - * @returns void - */ - function execute_batch(active, check_list, success) { - // if(active.recursion) 递归方式 - var bacth = { - loadT: 0, - config: {}, - check_list: check_list, - bacth_status: true, - start_batch: function (param, callback) { - var _this = this; - if (typeof param == "undefined") param = {}; - if (typeof param == 'function') callback = param, param = {}; - if (active.load) this.loadT = layer.msg(lan['public'].executeing + active.title + ',' + lan['public'].schedule + ':0/' + this.check_list.length + ',' + lan['public'].please_wait, { - icon: 16, - skin: 'batch_tips', - shade: .3, - time: 0, - area: '400px' - }) - this.config = { - param: param, - url: active.url - }; - this.bacth(callback); - }, - /** - * - * @param {Number} index 递归批量程序 - * @param {Function} callback 回调函数 - * @return void(0) - */ - bacth: function (index, callback) { - var _this = this, param = {}; - if (typeof index === "function" || typeof index === "undefined") callback = index, index = 0; - if (index < this.check_list.length) { - "function" == typeof active.url ? this.config.url = active.url(check_list[index]) : this.config.url = active.url; - if (typeof active.param == "function") { - param = active.param(check_list[index]); - } else { - param = active.param; - } - this.config.param = $.extend(this.config.param, param); - if (typeof active.paramId != 'undefined') _this.config.param[active.paramName || active.paramId] = _this.check_list[index][active.paramId]; - if (typeof active.beforeBacth != 'undefined') this.config.param = $.extend(this.config.param, active.beforeBacth(_this.check_list[index])); - if (this.config.param['bacth'] && index == this.check_list.length - 1) { - delete this.config.param['bacth']; - } - if (!_this.bacth_status) return false; - if (active.load) $('#layui-layer' + _this.loadT).find('.layui-layer-content').html('' + lan['public'].executeing + active.title + ',' + lan['public'].schedule + ':' + index + '/' + _this.check_list.length + ',' + lan['public'].please_wait + (active.clear ? 'cancel' : '')); - bt_tools.send({ - url: this.config.url, - data: this.config.param, - bacth: true, - }, function (res) { - $.extend(_this.check_list[index], { - request: { - status: typeof res.status === "boolean" ? res.status : false, - msg: res.msg || lan['public'].request_error - } - }, {requests: res}); - index++; - _this.bacth(index, callback); - }); - } else { - if (success) success(); - if (callback) { - callback(this.check_list); - } - if (active.automatic) { - var html = ''; - for (var i = 0; i < this.check_list.length; i++) { - var item = this.check_list[i]; - html += '' + (typeof item[active.paramThead] != "undefined" ? item[active.paramThead] : item.name) + '
                      ' + item.request.msg + '
                      '; - } - _that.$batch_success_table({ - title: 'Batch' + active.title, - th: active.theadName, - html: html - }); - if (active.refresh) _that.$refresh_table_list(true); - _that.$clear_table_checkbox(); - } - layer.close(this.loadT); - } - }, - clear_bacth: function () { - this.bacth_status = false; - layer.close(this.loadT); - } - } - if (active.callback) { - active.callback(bacth); - } else { - if (!active.confirm || active.recursion) { - if (active.confirmVerify) { - bt.show_confirm('批量操作' + active.title + '已选中', '批量' + active.title + ',该操作可能会存在风险,是否继续?', function (index) { - layer.close(index) - if (!active.recursion) { - request(active, check_list); - } else { - bacth.start_batch(); - } - }); - } else { - bt.confirm({ - title: 'Batch ' + active.title, - msg: 'Please be cautious, The selected item will be [ ' + active.title + ' ] after confirmation', - }, function (index) { - layer.close(index) - if (!active.recursion) { - request(active, check_list); - } else { - bacth.start_batch(); - } - }); - } - } else { - request(active, check_list); - } - } - } - - for (var i = 0; i < config.length; i++) { - var template = '', - item = config[i]; - switch (item.type) { - case 'group': - $.each(item.list, function (index, items) { - var _btn = item.type + '_' + _that.random + '_' + index, - html = ''; - if (items.type == 'division') { - template += ''; - } else { - if (!items.group) { - template += ''; - } else { - template += '
                      \ - \ - \ -
                      ' - if (item.list) { - $.each(item.list, function (index, items) { - html += '
                    • ' + items[item.key] + '
                    • '; - }); - } - if (items.init) setTimeout(function () { - items.init(_btn) - }, 400); - } - } - if (!event_list[_btn]) event_list[_btn] = { - event: items.event, - type: 'button' - }; - }); - break; - case 'search': - this.config.search = item; - var _input = 'search_input_' + this.random, - _focus = 'search_focus_' + this.random, - _btn = 'search_btn_' + this.random; - template = ''; - if (!event_list[_input]) event_list[_input] = { - eventType: 'keyup', - type: 'search_input' - }; - if (!event_list[_focus]) event_list[_focus] = { - type: 'search_focus', - eventType: 'focus' - }; - if (!event_list[_btn]) event_list[_btn] = { - type: 'search_btn' - }; - break; - case 'batch': - this.config.batch = item; - var batch_list = [], - _html = '', - active = item.config; - if (typeof item.config != 'undefined') { - _that.batch_active = active; - $(_that.config.el).on('click', '.set_batch_option', function (e) { - var check_list = []; - for (var i = 0; i < _that.checkbox_list.length; i++) { - check_list.push(_that.data[_that.checkbox_list[i]]); - } - if ($(this).hasClass('bt-disabled')) { - layer.tips(_that.config.batch.disabledTips || 'Select batch operation', $(this), { - tips: [1, 'red'], - time: 2000 - }); - return false; - } - switch (typeof active.confirm) { - case 'function': - active.confirm(active, function (param, callback) { - active.param = $.extend(active.param, param); - execute_batch(active, check_list, callback); - }); - break; - case 'undefined': - execute_batch(active, check_list); - break; - case 'object': - var config = active.confirm; - bt.open({ - title: config.title || 'Batch execute', - area: config.area || '350px', - btn: config.btn || ['Confirm', 'Cancel'], - content: config.content, - success: function (layero, index) { - config.success(layero, index, active); - }, - yes: function (index, layero) { - config.yes(index, layero, function (param, callback) { - active.param = $.extend(active.param, param); - request(active, check_list); - }); - } - }); - break; - } - }); - } else { - $.each(item.selectList, function (index, items) { - if (items.group) { - $.each(items.group, function (indexs, itemss) { - batch_list.push($.extend({}, items, itemss)); - _html += '
                    • ' + itemss.title + '
                    • '; - }); - delete items.group; - } else { - batch_list.push(items); - _html += '
                    • ' + items.title + '
                    • '; - } - }); - // 打开批量类型列表 - $(_that.config.el).unbind().on('click', '.bt_table_select_group .bt_select_value', function (e) { - var _this = this, $parent = $(this).parent(), - bt_selects = $parent.find('.bt_selects'), area = $parent.offset(), - _win_area = _that.$get_win_area(); - if ($parent.hasClass('bt-disabled')) { - layer.tips(_that.config.batch.disabledSelectValue, $parent, { - tips: [1, 'red'], - time: 2000 - }) - return false; - } - if ($parent.hasClass('active')) { - $parent.removeClass('active'); - } else { - $parent.addClass('active'); - } - if (bt_selects.height() > (_win_area[1] - area.top)) { - bt_selects.addClass('top'); - } else { - bt_selects.removeClass('top'); - } - $(document).one('click', function () { - $(_that.config.el).find('.bt_table_select_group').removeClass('active'); - return false; - }); - return false; - }); - // 选择批量的类型 - $(_that.config.el).on('click', '.bt_table_select_group .item', function (e) { - var _text = $(this).text(), - _index = $(this).index(); - $(this).addClass('active').siblings().removeClass('active'); - $(_that.config.el + ' .bt_select_tips').html('Batch execute ' + _text + '(' + lan.site.have_been_selected + _that.checkbox_list.length + ')'); - _that.batch_active = batch_list[_index]; - if (!_that.checked) $('.bt_table_select_group').removeClass('active'); - }); - // 执行批量操作 - $(_that.config.el).on('click', '.set_batch_option', function (e) { - var check_list = [], - active = _that.batch_active; - if ($(this).hasClass('bt-disabled')) { - layer.tips(_that.config.batch.disabledSelectValue, $(this), { - tips: [1, 'red'], - time: 2000 - }); - return false; - } - for (var i = 0; i < _that.checkbox_list.length; i++) { - check_list.push(_that.data[_that.checkbox_list[i]]); - } - if (JSON.stringify(active) === '{}') { - var bt_table_select_group = $(_that.config.el + ' .bt_table_select_group'); - layer.tips(lan['public'].select_opt_type, bt_table_select_group, { - tips: [1, 'red'], - time: 2000 - }); - bt_table_select_group.css('border', '1px solid red'); - setTimeout(function () { - bt_table_select_group.removeAttr('style'); - }, 2000); - return false; - } - switch (typeof active.confirm) { - case 'function': - active.confirm(active, function (param, callback) { - active.param = $.extend(active.param, param); - execute_batch(active, check_list, callback); - }); - break; - case 'undefined': - execute_batch(active, check_list); - break; - case 'object': - var config = active.confirm; - bt.open({ - title: config.title || lan['public'].bulk_opt, - area: config.area || '350px', - btn: config.btn || [lan['public'].confirm, lan['public'].cancel], - content: config.content, - success: function (layero, index) { - config.success(layero, index, active); - }, - yes: function (index, layero) { - config.yes(index, layero, function (param, callback) { - active.param = $.extend(active.param, param); - request(active, check_list); - }); - } - }); - break; - } - }); - } - template = '
                      ' + (typeof item.config != 'undefined' ? '' : '
                      ' + lan['public'].select_opt_type + '
                        ' + _html + '
                      ') + '
                      '; - break; - case 'page': - this.config.page = item; - var pageNumber = bt.get_cookie('page_number'); - if (this.config.cookiePrefix && pageNumber) this.config.page.number = pageNumber; - template = this.$reader_page(this.config.page, '
                      1' + lan.public_backup.total + '
                      '); - break; - } - if (template) { - var tools_group = $(_that.config.el + ' .tootls_' + item.positon[1]); - if (tools_group.length) { - var tools_item = tools_group.find('.pull-' + item.positon[0]); - tools_item.append(template); - } else { - var tools_group_elment = '
                      ' + (item.positon[0] == 'left' ? template : '') + '
                      ' + (item.positon[0] == 'right' ? template : '') + '
                      '; - if (item.positon[1] === 'top') { - $(_that.config.el).append(tools_group_elment); - if ($(_that.config.el + ' .divtable').length === 0) $(_that.config.el).append('
                      '); - } else { - if ($(_that.config.el + ' .divtable').length === 0) $(_that.config.el).append('
                      '); - $(_that.config.el).append(tools_group_elment); - } - } - } - } - if (!this.init) this.$event_bind(event_list); - }, - - $clear_table_checkbox: function () { - $(this.config.el).find('.bt_table .cust—checkbox').removeClass('selected active'); - }, - /** - * @description 获取数据批量列表 - * @param {string} 需要获取的字段 - * @return {array} 当前需要批量列表 - */ - $get_data_batch_list: function (fid, data) { - var arry = []; - $.each(data || this.data, function (index, item) { - arry.push(item[fid]) - }); - return arry; - }, - - /** - * @description 渲染分页 - * @param {object} config 配置文件 - * @param {object} page 分页 - * @return void - */ - $reader_page: function (config, page) { - if (typeof page === 'number') { - page = this.$custom_page(page); - } - var _that = this, $page = $(page), template = '', eventList = {}; - $page.find('a').addClass('page_link_' + this.random); - template += $page.html(); - if (config.numberStatus) { - var className = 'page_select_' + this.random, number = bt.get_cookie('page_number'); - template += ''; - eventList[className] = {eventType: "change", type: 'page_select'}; - } - if (config.jump) { - var inputName = 'page_jump_input_' + this.random; - var btnName = 'page_jump_btn_' + this.random; - template += '
                      ' + lan['public'].jump_to_page + '
                      ' - eventList[inputName] = { - eventType: 'keyup', - type: 'page_jump_input' - }; - eventList[btnName] = { - type: 'page_jump_btn' - }; - } - eventList['page_link_' + this.random] = { - type: 'cut_page_number' - }; - _that.config.page.total = $page.length == 0 ? 0 : (typeof page == "number" ? page : parseInt($page.find('.Pcount').html().match(/([0-9]*)/g)[1])); - _that.$event_bind(eventList); - return '
                      ' + template + '
                      '; - }, - /** - * @description 渲染样式 - * @param {object|string} data 样式配置 - * @return {string} 样式 - */ - $reader_style: function (data) { - var style = ''; - if (typeof data === 'string') return data; - if (typeof data === 'undefined') return ''; - $.each(data, function (key, item) { - style += key + ':' + item + ';'; - }); - return style; - }, - /** - * @description 自定义分页 - * @param {} - */ - $custom_page: function (total) { - var html = '
                      ', - config = this.config.page, - page = Math.ceil(total / config.number), - tmpPageIndex = 0; - if (config.page > 1 && page > 1) { - html += '首页上一页'; - } - if (page <= 10) { - for (var i = 1; i <= page; i++) { - i == config.page ? html += '' + i + "" : html += '' + i + ""; - } - } else if (config.page < 10) { - for (var i = 1; i <= 10; i++) i == config.page ? html += '' + i + "" : html += '' + i + ""; - html += "..." - } else if (page - config.page < 7) { - page - 7 > 1 && (html += '1', html += "..."); - for (var i = page - 7; i <= page; i++) i == config.page ? html += '' + i + "" : (html += 1 == i ? "..." : '' + i + "") - } else { - 0 == tmpPageIndex && (tmpPageIndex = config.page), - (tmpPageIndex <= config.page - 5 || tmpPageIndex >= config.page + 5) && (tmpPageIndex = config.page), - html += '1', - html += "..."; - for (var i = tmpPageIndex - 3; i <= tmpPageIndex + 3; i++) i == config.page ? html += '' + i + "" : html += '' + i + ""; - html += "...", - html += '' + page + "" - } - return page > 1 && config.page < page && (html += '下一页尾页'), - html += '共' + total + "条
                      " - }, - - - /** - * @deprecated 动态处理合并行内,css样式 - * @param {object} rows 当前行数据 - * @return {stinrg} className class类名 - * @return void - */ - $dynamic_merge_style: function (column, index) { - var str = ''; - $.each(column, function (key, item) { - switch (key) { - case 'align': - str += 'text-align:' + item + ';'; - break; - case 'width': - str += 'width:' + (typeof item == 'string' ? item : item + 'px') + ';'; - break; - case 'style': - str += item; - break; - case 'minWidth': - str += 'min-width:' + (typeof item == 'string' ? item : item + 'px') + ';'; - break; - case 'maxWidth': - str += 'max-width:' + (typeof item == 'string' ? item : item + 'px') + ';'; - break; - } - }); - return { - index: index, - css: str - }; - }, - - /** - * @description 事件绑定 - * @param {array} eventList 事件列表 - * @return void - */ - $event_bind: function (eventList) { - var _that = this; - $.each(eventList, function (key, item) { - if (_that.event_list[key] && _that.event_list[key].eventType === item.eventType) return true; - _that.event_list[key] = item; - $(_that.config.el).on(item.eventType || 'click', '.' + key, function (ev) { - var index = $(this).parents('tr').index(), - data1 = $(this).data(), - arry = [], - column_data = _that.config.column[$(this).parents('td').index()]; - switch (item.type) { - case 'rows': - _that.event_rows_model = { - el: $(this), - model: column_data, - rows: _that.data[index], - index: index - } - arry = [_that.event_rows_model.rows, _that.event_rows_model.index, ev, key, _that]; - break; - case 'sort': - var model = _that.config.column[data1.index]; - if ($(this).hasClass('sort-active')) $('.sort_' + _that.random + ' .sort-active').data({ - 'sort': 'desc' - }); - $('.sort_' + _that.random).removeClass('sort-active').find('.glyphicon').removeClass('glyphicon-triangle-top').addClass('glyphicon-triangle-bottom'); - $(this).addClass('sort-active'); - if (data1.sort == 'asc') { - $(this).data({ - 'sort': 'desc' - }); - $(this).find('.glyphicon').removeClass('glyphicon-triangle-top').addClass('glyphicon-triangle-bottom'); - } else { - $(this).data({ - 'sort': 'asc' - }); - $(this).find('.glyphicon').removeClass('glyphicon-triangle-bottom').addClass('glyphicon-triangle-top'); - } - _that.config.sort = _that.config.sortParam({ - name: model.fid, - sort: data1.sort - }); - _that.$refresh_table_list(true); - break; - case 'checkbox': - var all = $(_that.config.el + ' [data-checkbox="all"]'), - checkbox_list = $(_that.config.el + ' tbody .checkbox_' + _that.random); - if (data1.checkbox == undefined) { - if (!$(this).hasClass('active')) { - $(this).addClass('active'); - _that.checkbox_list.push(index); - if (_that.data.length === _that.checkbox_list.length) { - all.addClass('active').removeClass('selected') - } else if (_that.checkbox_list.length > 0) { - all.addClass('selected'); - } - } else { - $(this).removeClass('active'); - _that.checkbox_list.splice(_that.checkbox_list.indexOf(index), 1); - if (_that.checkbox_list.length > 0) { - all.addClass('selected').removeClass('active'); - } else { - all.removeClass('selected active'); - } - } - } else { - if (_that.checkbox_list.length === _that.data.length) { - _that.checkbox_list = []; - checkbox_list.removeClass('active selected').next().prop('checked', 'checked') - all.removeClass('active'); - } else { - checkbox_list.each(function (index, item) { - if (!$(this).hasClass('active')) { - $(this).addClass('active').next().prop('checked', 'checked'); - _that.checkbox_list.push(index); - } - }); - all.removeClass('selected').addClass('active'); - } - } - _that.$set_batch_view(); - break; - case 'button': - arry.push(ev, _that); - break; - case 'search_focus': - var search_tips = $(_that.config.el + ' .bt_search_tips'); - if ($(_that.config.el + ' .bt_search_tips').length > 0) { - search_tips.remove(); - } - break; - case 'search_input': - if (ev.keyCode == 13) { - $(_that.config.el + ' .search_btn_' + _that.random).click(); - return false; - } - break; - case 'search_btn': - var _search = $(_that.config.el + ' .search_input'), - val = $(_that.config.el + ' .search_input').val(); - val = val.replace(/\s+/g, ""); - _search.val(val); - _that.config.search.value = val; - _search.append('
                      ' + val + '
                      '); - _that.$refresh_table_list(true); - break; - case 'page_select': - var limit = parseInt($(this).val()); - bt.set_cookie('page_number', limit); - _that.config.page.number = limit; - _that.config.page.page = 1; - _that.$refresh_table_list(true); - return false; - break; - case 'page_jump_input': - if (ev.keyCode === 13) { - $(_that.config.el + ' .page_jump_btn_' + _that.random).click(); - $(this).focus(); - } - return false; - break; - case 'page_jump_btn': - var jump_page = parseInt($(_that.config.el + ' .page_jump_input_' + _that.random).val()), - max_number = Math.ceil(_that.config.page.total / _that.config.page.number); - if (isNaN(jump_page)) jump_page = 1 - if (jump_page > max_number) jump_page = _that.config.page.page; - _that.config.page.page = jump_page; - _that.$refresh_table_list(true); - break; - case 'cut_page_number': - var page = parseInt($(this).attr('href').match(/([0-9]*)$/)[0]) - _that.config.page.page = page; - _that.$refresh_table_list(true); - return false; - break; - case 'eye_open_password': - if ($(this).hasClass('glyphicon-eye-open')) { - $(this).addClass('glyphicon-eye-close').removeClass('glyphicon-eye-open'); - $(this).prev().text(_that.data[index][column_data.fid]); - } else { - $(this).addClass('glyphicon-eye-open').removeClass('glyphicon-eye-close'); - $(this).prev().html('**********'); - } - return false; - break; - case 'copy_password': - bt.pub.copy_pass(_that.data[index][column_data.fid]); - return false; - break; - } - if (item.event) item.event.apply(this, arry); - }); - }); - }, - - /** - * @description 样式绑定 - * @param {array} style_list 样式列表 - * @return void - */ - $style_bind: function (style_list, status) { - var str = '', - _that = this; - $.each(style_list, function (index, item) { - if (item.css != '') { - if (!item.className) { - str += _that.config.el + ' thead th:nth-child(' + (item.index + 1) + '),' + _that.config.el + ' tbody tr td:nth-child' + (item.span ? ' span' : '') + '(' + (item.index + 1) + '){' + item.css + '}' - } else { - str += item.className + '{' + item.css + '}'; - } - } - }); - if ($('#bt_table_' + _that.random).length == 0) $(_that.config.el).append(''); - }, - - /** - * @deprecated 获取WIN高度或宽度 - * @return 返回当期的宽度和高度 - */ - $get_win_area: function () { - return [window.innerWidth, window.innerHeight]; - }, - - /** - * @description 请求数据, - * @param {object} param 参数和请求路径 - * @return void - */ - $http: function (success) { - var page_number = bt.get_cookie('page_number'), - that = this, - param = {}, - config = this.config, - _page = config.page, - _search = config.search, - _sort = config.sort || {}; - if (_page) { - if (page_number) _page.number = page_number - param[_page.numberParam] = _page.number, param[_page.pageParam] = _page.page; - bt.set_cookie('page_number', _page.number); - } - if (_search) param[_search.searchParam] = _search.value; - if (this.config.beforeRequest) { - config.param = this.config.beforeRequest($.extend(config.param, param, _sort)); - } else { - config.param = $.extend(config.param, param, _sort) - } - bt_tools.send({ - url: config.url, - data: config.param - }, function (res) { - if (typeof config.dataFilter != "undefined") { - var data = config.dataFilter(res, that); - if (typeof data.tootls != "undefined") data.tootls = parseInt(data.tootls); - if (success) success(data); - } else { - if (void 0 == res.data) { - success && success({ - data: res - }) - } else success && success({ - data: res.data, - page: res.page - }) - } - }); - } - } - return new ReaderTable(config); - }, - /** - * @description 渲染Form表单 - * @param {*} config - * @return 当前实例对象 - */ - form: function (config) { - var _that = this; - - function ReaderForm(config) { - this.config = config; - this.el = config.el - this.submit = config.submit - this.data = config.data || {}; - this.$load(); - } - - ReaderForm.prototype = { - element: null, - style_list: [], // 样式列表 - event_list: {}, // 事件列表,已绑定事件 - event_type: ['click', 'event', 'focus', 'keyup', 'blur', 'change', 'input'], - hide_list: [], - form_element: {}, - form_config: {}, - random: bt.get_random(5), - $load: function () { - var that = this; - if (this.el) { - $(this.el).html(this.$reader_content()) - this.$event_bind(); - } - }, - - /** - * @description 渲染Form内容 - * @param {Function} callback 回调函数 - */ - $reader_content: function (callback) { - var that = this, - html = '', - _content = ''; - $.each(that.config.form, function (index, item) { - if (item.separate) { - html += '
                      ' + item.separate + '
                      ' - } else { - html += that.$reader_content_row(index, item); - } - }); - that.element = $('
                      ' + html + '
                      '); - _content = $('
                      '); - _content.append(that.element); - if (callback) callback(); - return _content[0].outerHTML; - }, - - /** - * @description 渲染行内容 - * @param {object} data Form数据 - * @param {number} index 下标 - * @return {string} HTML结构 - */ - $reader_content_row: function (index, data) { - try { - var that = this, help = data.help || false, - labelWidth = data.formLabelWidth || this.config.formLabelWidth; - if (data.display === false) return ''; - return '
                      ' + - (typeof data.label !== "undefined" ? '' + data.label + '' : '') + - '
                      ' + - that.$reader_form_element(data.group, index) + - (help ? ('
                      ' + help.list.join('
                      ') + '
                      ') : '') + - '
                      ' + - '
                      '; - } catch (error) { - console.log(error) - } - }, - - /** - * @description 渲染form类型 - * @param {object} data 表单数据 - * @param {number} index 下标 - * @return {string} HTML结构 - */ - $reader_form_element: function (data, index) { - var that = this, html = ''; - if (!Array.isArray(data)) data = [data]; - $.each(data, function (key, item) { - item.find_index = index; - html += that.$reader_form_find(item); - that.form_config[item.name] = item; - }); - return html; - }, - /** - * @descripttion 渲染单个表单元素 - * @param {Object} item 配置 - * @return: viod - */ - $reader_form_find: function (item) { - var that = this, html = '', - style = that.$reader_style(item.style) + _that.$verify(item.width, 'width', 'style'), - attribute = that.$verify_group(item, ['name', 'placeholder', 'disabled', 'readonly', 'autofocus', 'autocomplete', 'min', 'max']), - event_group = that.$create_event_config(item), - eventName = '', index = item.find_index; - if (item.display === false) return html - html += item.label ? '' + item.label + '' : ''; - if (typeof item['name'] !== "undefined") { - that.$check_event_bind(item.name, event_group) - } - html += '
                      '; - var _value = typeof that.data[item.name] !== "undefined" && that.data[item.name] != '' ? that.data[item.name] : (item.value || '') - switch (item.type) { - case 'text': // 文本选择 - case 'checkbox': // 复选框 - case 'password': // 密码 - case 'radio': // 单选框 - case 'number': // 数字 - var _event = 'event_' + item.name + '_' + that.random; - switch (item.type) { - case 'checkbox': // 复选框 - html += ''; - that.$check_event_bind(_event + '_label', { - 'click': { - type: 'checkbox_icon', - config: item - } - }) - that.$check_event_bind(_event, { - 'input': { - type: 'checkbox', - config: item, - event: item.event - } - }) - break; - default: - html += ''; - break; - } - if (item.btn && !item.disabled) { - html += '' + item.btn.title + ''; - if (typeof item.btn.event !== 'undefined') { - that.$check_event_bind(item.name + '_btn', { - 'click': { - config: item, - event: item.btn.event - } - }) - } - } - if (item.icon) { - html += ''; - if (typeof item.icon.event !== 'undefined') { - that.$check_event_bind(item.name + '_icon', { - 'click': { - type: 'select_path', - select: item.icon.select || '', - config: item, - children: '.' + item.name + '_icon', - event: item.icon.event, - callback: item.icon.callback - } - }) - } - } - break; - case 'textarea': - html += ''; - $.each(['blur', 'focus', 'input'], function (index, items) { - if (item.tips) { - var added = null, event = {} - switch (items) { - case 'blur': - added = function (ev, item, element) { - if ($(this).val() === '') $(this).next().show(); - layer.close(item.tips.loadT); - $(ev.target).data('layer', ''); - } - break; - case 'focus': - added = function (ev, item) { - $(this).next().hide(); - item.tips.loadT = layer.tips(tips, $(this), { - tips: [1, '#20a53a'], - time: 0, - area: $(this).width() - }); - } - break; - } - } - that.event_list[item.name][items] ? (that.event_list[item.name][items]['added'] = added) : (that.event_list[item.name][items] = { - type: item.type, - cust: false, - event: item[items], - added: added - }); - }); - if (item.tips) { - var tips = ''; - if (typeof item.tips.list === "undefined") { - tips = item.tips.text; - } else { - tips = item.tips.list.join('
                      '); - } - html += '
                      ' + tips + '
                      '; - that.$check_event_bind(item.name + '_tips', { - 'click': { - type: 'textarea_tips', - config: item - } - }) - } - break; - case 'select': - html += that.$reader_select(item, style, attribute, index); - that.$check_event_bind('custom_select', { - 'click': { - type: 'custom_select', - children: '.bt_select_value' - } - }) - that.$check_event_bind('custom_select_item', { - 'click': { - type: 'custom_select_item', - children: 'li.item' - } - }) - break; - case 'link': - eventName = 'event_link_' + that.random + '_' + item.name; - html += '' + item.title + ''; - that.$check_event_bind(eventName, { - 'click': { - type: 'link_event', - event: item.event - } - }) - break; - case 'button': - html += '' - break; - case 'help': - var _html = ''; - $.each(item.list, function (index, items) { - _html += '
                    • ' + items + '
                    • '; - }) - html += '
                        ' + _html + '
                      '; - break; - } - html += item.unit ? '' + item.unit + '' : ''; - html += '
                      ' - return html; - }, - - /** - * @descripttion 检测检测名称 - * @param {string} eventName 配置 - * @param {object} config 事件配置 - */ - $check_event_bind: function (eventName, config) { - if (!this.event_list[eventName]) { - // console.log(eventName) - if (!this.event_list.hasOwnProperty(eventName)) { - // console.log('1') - this.event_list[eventName] = config - } - } - }, - /** - * @description 创建事件配置 - * @param {object} item 行内配置 - * @return {object} 配置信息 - */ - $create_event_config: function (item) { - var config = {}; - if (typeof item['name'] === "undefined") return {}; - $.each(this.event_type, function (key, items) { - if (item[items]) { - config[(items === 'event' ? 'click' : items)] = { - type: item.type, - event: item[items], - cust: (['select', 'checkbox', 'radio'].indexOf(item.type) > -1), - config: item - }; - } - }); - return config; - }, - /** - * @description 渲染样式 - * @param {object|string} data 样式配置 - * @return {string} 样式 - */ - $reader_style: function (data) { - var style = ''; - if (typeof data === 'string') return data; - if (typeof data === 'undefined') return ''; - $.each(data, function (key, item) { - style += key + ':' + item + ';'; - }); - return style; - }, - /** - * @descripttion 局部刷新form表单元素 - * @param {String} name 需要刷新的元素 - * @param {String} name 元素新数据 - * @return: viod - */ - $local_refresh: function (name, config) { - var formFind = this.element.find('[data-name=' + name + ']') - if (this.element.find('[data-name=' + name + ']').length === 0) formFind = this.element.find('[name=' + name + ']') - formFind.parent().replaceWith(this.$reader_form_find(config)) - }, - /** - * @description 渲染下拉,内容方法 - */ - $reader_select: function (item, style, attribute, index) { - var that = this, list = '', option = '', active = {}; - if (typeof item.list === 'function') { - var event = item.list; - event.call(this, this.config.form); - item.list = []; - } - if (!Array.isArray(item.list)) { - var config = item.list; - bt_tools.send({ - url: config.url, - data: config.param || config.data || {} - }, function (res) { - if (res.status !== false) { - var list = item.list.dataFilter ? item.list.dataFilter(res, that) : res; - if (item.list.success) item.list.success(res, that, that.config.form[index], list) - item.list = list - if (!item.list.length) { - item.disabled = true - layer.msg(item.placeholder || '数据获取为空', {icon: 2}) - } - that.$replace_render_content(index); - } else { - bt.msg(res); - } - }); - return false - } - if (typeof that.data[item.name] === "undefined") active = item.list[0] - $.each(item.list, function (key, items) { - if (items.value === item.value || items.value === that.data[item.name]) { - active = items - return false - } - }) - $.each(item.list, function (key, items) { - list += '
                    • ' + items.title + '
                    • '; - option += ''; - }); - var title = !Array.isArray(item.list) ? 'Getting data...' : (active ? active.title : item.placeholder) - return '
                      ' + - '' + (title || item.placeholder) + '' + - '
                        ' + (list || '') + '
                      ' + - '' + (option || '') + '' + - '
                      '; - }, - - /** - * @description 替换渲染内容 - */ - $replace_render_content: function (index) { - var that = this, config = this.config.form[index], html = that.$reader_content_row(index, config); - $('[data-form=' + that.random + ']').find('.line:eq(' + index + ')').replaceWith(html); - this.$event_bind() - }, - - /** - * @description 重新渲染内容 - * @param {object} formConfig 配置 - */ - $again_render_form: function (formConfig) { - var formElement = $('[data-form=' + this.random + ']'), that = this; - formConfig = formConfig || this.config.form - formElement.empty() - for (var i = 0; i < formConfig.length; i++) { - var config = formConfig[i] - if (config.display === false) continue - formElement.append(that.$reader_content_row(i, config)) - } - this.config.form = formConfig - this.$event_bind() - }, - - /** - * @description 事件绑定功能 - * @param {Object} eventList 事件列表 - * @param {Function} callback 回调函数 - * @return void - */ - $event_bind: function (eventList, callback) { - var that = this, _event = {}; - that.element = $(typeof eventList === 'object' ? that.element : ('[data-form=' + that.random + ']')); - _event = eventList - if (typeof eventList === 'undefined') _event = that.event_list; - $.each(_event, function (key, item) { - if ($.isEmptyObject(item)) return true; - $.each(item, function (keys, items) { - if (!!item.type) return false; - if (!items.hasOwnProperty('bind')) { - items.bind = true - } else { - return false - } - var childNode = ''; - if (typeof items.cust === "boolean") { - childNode = '[' + (items.cust ? 'data-' : '') + 'name=' + key + ']'; - } else { - childNode = '.' + key; - } - (function (items, key) { - if (items.onEvent === false) { - switch (items.type) { - case 'input_checked': - $(childNode).on(keys != 'event' ? keys : 'click', function (ev) { - items.event.apply(this, [ev, that]); - }); - break; - } - return true; - } else { - if (items.type === 'select') return true - that.element.on(keys !== 'event' ? keys : 'click', items.children ? items.children : childNode, function (ev) { - var form = that.$get_form_element(true), config = that.form_config[key]; - switch (items.type) { - case 'textarea_tips': - $(this).hide().prev().focus(); - break; - case 'custom_select': - if ($(this).parent().hasClass('bt-disabled')) return false; - var select_value = $(this).next(); - if (!select_value.hasClass('show')) { - var $target = $(ev.currentTarget); - var $layer = $target.parents('.layui-layer'); - var layerTop = $layer.length > 0 ? parseFloat($layer.css('top')) : 0 - var layerLeft = $layer.length > 0 ? parseFloat($layer.css('left')) : 0 - var offset = $target[0].getBoundingClientRect(); - var top = offset.top - layerTop + offset.height + 2 - var left = offset.left - layerLeft - $('.bt_select_list').css({ - position: 'fixed', - width: offset.width + 'px', - top: top + 'px', - left: left + 'px' - }) - $('.bt_select_list').removeClass('show'); - select_value.addClass('show'); - - } else { - select_value.removeClass('show'); - } - $(document).click(function () { - that.element.find('.bt_select_list').removeClass('show'); - $(this).unbind('click'); - return false; - }); - return false; - break; - case 'custom_select_item': - config = that.form_config[$(this).parents('.bt_select_updown').attr('data-name')] - var item_config = config.list[$(this).index()] - if ($(this).hasClass('disabled')) { - $(this).parent().removeClass('show'); - if (item_config.tips) layer.msg(item_config.tips, {icon: 2}); - return true; - } - if (!$(this).hasClass('active') && !$(this).hasClass('disabled')) { - var value = item_config.value.toString(); - $(this).parent().prev().find('.bt_select_content').text($(this).text()); - $(this).addClass('active').siblings().removeClass('active'); - $(this).parent().next().val(value) - $(this).parent().removeClass('show'); - } - that.data[config.name] = value - if (items.event) items.event = null - if (config.change) items.event = config.change - break; - case 'select_path': - bt.select_path('event_' + $(this).prev().attr('name') + '_' + that.random, items.select || "", !items.callback || items.callback.bind(that)); - break; - case 'checkbox': - var checked = $(this).is(':checked'); - if (checked) { - $(this).prev().addClass('active'); - } else { - $(this).prev().removeClass('active'); - } - break; - } - if (items.event) items.event.apply(this, [that.$get_form_value(), form, that, config, ev]); // 事件 - if (items.added) items.added.apply(this, [ev, config, form]); - }); - } - }(items, key)); - }); - }); - if (callback) callback(); - }, - - /** - * @description 获取表单数据 - * @return {object} 表单数据 - */ - $get_form_value: function () { - var form = {} - this.element.find('input,textarea[disabled="disabled"]').each(function (index, item) { - var val = $(this).val(); - if ($(this).attr('type') === 'checkbox') { - val = $(this).prop('checked') - } - form[$(this).attr('name')] = val - }) - return $.extend({}, this.element.serializeObject(), form) - }, - - /** - * @description 设置指定数据 - * - */ - $set_find_value: function (name, value) { - var config = {}, that = this; - typeof name != 'string' ? config = name : config[name] = value; - $.each(config, function (key, item) { - that.form_element[key].val(item); - }); - }, - - /** - * @description 获取Form,jquery节点 - * @param {Boolean} afresh 是否强制刷新 - * @return {object} - */ - $get_form_element: function (afresh) { - var form = {}, - that = this; - if (afresh || $.isEmptyObject(that.form_element)) { - this.element.find(':input').each(function (index) { - form[$(this).attr('name')] = $(this); - }); - that.form_element = form; - return form; - } else { - return that.form_element; - } - }, - - /** - * @description 验证值整个列表是否存在,存在则转换成属性字符串格式 - */ - $verify_group: function (config, group) { - var that = this, - str = ''; - $.each(group, function (index, item) { - if (typeof config[item] === "undefined") return true; - if (['disabled', 'readonly'].indexOf(item) > -1) { - str += ' ' + (config[item] ? (item + '="' + item + '"') : ''); - } else { - str += ' ' + item + '="' + config[item] + '"'; - } - }); - return str; - }, - - /** - * @description 验证绑定事件 - * @param {String} value - */ - $verify_bind_event: function (eventName, row, group) { - var event_list = {}; - $.each(group, function (index, items) { - var event_fun = row[items]; - if (event_fun) { - if (typeof event_list[eventName] === "object") { - if (!Array.isArray(event_list[eventName])) event_list[eventName] = [event_list[eventName]]; - event_list[eventName].push({ - event: event_fun, - eventType: items - }); - } else { - event_list[eventName] = { - event: event_fun, - eventType: items - }; - } - } - }); - return event_list; - }, - - /** - * @description 验证值是否存在 - * @param {String} value 内容/值 - * @param {String|Boolean} attr 属性 - * @param {String} type 属性 - */ - $verify: function (value, attr, type) { - if (!value) return ''; - if (type === true) return value ? ' ' + attr : ''; - if (type === 'style') return attr ? attr + ':' + value + ';' : value; - return attr ? ' ' + attr + '="' + value + '"' : ' ' + value; - }, - /** - * @description 验证form表单 - */ - $verify_form: function () { - var form_list = {}, form = this.config.form, form_value = this.$get_form_value(), - form_element = this.$get_form_element(true); - for (var key = 0; key < form.length; key++) { - var item = form[key]; - if (!Array.isArray(item.group)) item.group = [item.group]; - if (item.separate) continue - for (var i = 0; i < item.group.length; i++) { - var items = item.group[i], name = items.name; - if (items.type === 'help') continue; - if (typeof items.verify != "undefined") { - var value = items.verify(form_value[name], form_element[name], items, true); - if (value === false && form_value[name] !== false) return false; - form_list[name] = value; - } else { - form_list[name] = (typeof form_value[name] === "undefined" && items.disabled) ? $('[name="' + name + '"]').val() : form_value[name]; - } - } - } - return form_list; - }, - /** - * @description 提交内容,需要传入url - * @param {Object|Function} param 附加参数或回调函数 - * @param {Function} callback 回调 - */ - $submit: function (param, callback, tips) { - var form = this.$verify_form(); - if (typeof param === "function") tips = callback, callback = param, param = {}; - if (!form) return false; - form = $.extend(form, param); - if (typeof this.config.url == "undefined") { - bt_tools.msg('Request Submission address cannot be empty!', false); - return false; - } - bt_tools.send({ - url: this.config.url, - data: form - }, function (res) { - if (callback) { - callback(res, form); - } else { - bt_tools.msg(res); - } - }, (tips || 'Submit')); - } - } - return new ReaderForm(config); - }, - /** - * @description tab切换,支持三种模式 - * @param {object} config - * @return 当前实例对象 - */ - tab: function (config) { - var _that = this; - - function ReaderTab(config) { - this.config = config; - this.theme = this.config.theme || {}; - this.$load(); - } - - ReaderTab.prototype = { - type: 1, - theme_list: [{ - content: 'tab-body', - nav: 'tab-nav', - body: 'tab-con', - active: 'on' - }, - { - content: 'bt-w-body', - nav: 'bt-w-menu', - body: 'bt-w-con' - } - ], - random: bt.get_random(5), - $init: function () { - var that = this, - active = this.config.active, - config = that.config.list, - _theme = {}; - this.$event_bind(); - if (config[that.active].success) config[that.active].success(); - config[that.active]['init'] = true; - }, - $load: function () { - var that = this; - }, - $reader_content: function () { - var that = this, _list = that.config.list, _tab = '', _tab_con = '', _theme = that.theme, - config = that.config; - if (typeof that.active === "undefined") that.active = 0; - if (!$.isEmptyObject(config.theme)) { - _theme = this.theme_list[that.active]; - $.each(config.theme, function (key, item) { - if (_theme[key]) _theme[key] += ' ' + item; - }); - that.theme = _theme; - } - if (config.type && $.isEmptyObject(config.theme)) this.theme = this.theme_list[that.active]; - $.each(_list, function (index, item) { - var active = (that.active === index), - _active = _theme['active'] || 'active'; - _tab += '' + item.title + ''; - _tab_con += '
                      ' + (active ? item.content : '') + '
                      '; - }); - that.element = $('
                      ' + _tab + '
                      ' + _tab_con + '
                      '); - return that.element[0].outerHTML; - }, - /** - * @description 事件绑定 - * - */ - $event_bind: function () { - var that = this, _theme = that.theme, - active = _theme['active'] || 'active'; - if (!that.el) that.element = $('#tab_' + that.random); - that.element.on('click', ('.' + _theme['nav'].replace(/\s+/g, '.') + ' span'), function () { - var index = $(this).index(), - config = that.config.list[index]; - $(this).addClass(active).siblings().removeClass(active); - $('#tab_' + that.random + ' .' + _theme['body'] + '>div:eq(' + index + ')').addClass(active).siblings().removeClass(active); - that.active = index; - if (!config.init) { - // console.log(_theme) - var contentItem = $('#tab_' + that.random + ' .' + _theme['body'] + '>div:eq(' + index + ')') - contentItem.html(config.content); - if (config.success) config.success(contentItem); - config.init = true; - } - }); - } - } - return new ReaderTab(config); - }, - /** - * @description loading过渡 - * @param {*} title - * @param {*} is_icon - * @return void - */ - load: function (title) { - var random = bt.get_random(5), - layel = $('
                      ' + title + ',please wait...
                      '), - mask = '', loadT = ''; - $('body').append(layel); - var win = $(window), msak = $('.layer-loading-mask'), layel = $('#' + random); - layel.css({'top': ((win.height() - 64) / 2), 'left': ((win.width() - 320) / 2)}); - if (title === true) loadT = layer.load(); - return { - close: function () { - if (typeof loadT == "number") { - layer.close(loadT); - } else { - $('body').find('#' + random + ',#layer-mask-' + random).remove(); - } - } - } - }, - /** - * @description 弹窗方法,有默认的参数和重构的参数 - * @param {object} config 和layer参数一致 - * @require 当前关闭弹窗方法 - */ - open: function (config) { - var _config = {}, layerT = null, form = null; - _config = $.extend({type: 1, area: '640px', closeBtn: 2, btn: ['Yes', 'No']}, config); - if (typeof _config.content == "object") { - var param = _config.content; - form = bt_tools.form(param); - _config.success = function (layero, indexs) { - form.$event_bind(); - if (typeof config.success != "undefined") config.success(layero, indexs); - } - _config.yes = function (indexs, layero) { - var form_val = form.$verify_form(); - if (!form_val) return false; - if (typeof config.yes != "undefined") { - var yes = config.yes.apply(form, [form_val, indexs, layero]); - if (!yes) return false; - } - } - _config.content = form.$reader_content(); - } - layerT = layer.open(_config); - return { - close: function () { - layer.close(layerT); - }, - form: form - } - }, - /** - * @description 封装msg方法 - * @param {object|string} param1 配置参数,请求方法参数 - * @param {number} param2 图标ID - * @require 当前关闭弹窗方法 - */ - msg: function (param1, param2) { - var layerT = null, - msg = '', - config = {}; - if (typeof param1 === "object") { - if (typeof param1.status === "boolean") { - msg = param1.msg, config = {icon: param1.status ? 1 : 2}; - if (!param1.status) config = $.extend(config, {time: (!param2 ? 0 : 3000), closeBtn: 2, shade: .3}); - } - } - if (typeof param1 === "string") { - msg = param1, config = { - icon: typeof param2 !== 'undefined' ? param2 : 1 - } - } - layerT = layer.msg(msg, config); - return { - close: function () { - layer.close(layerT); - } - } - }, - /** - * @description 请求封装 - * @param {string|object} conifg ajax配置参数/请求地址 - * @param {function|object} callback 回调函数/请求参数 - * @param {function} callback1 回调函数/可为空 - * @returns void 无 - */ - send: function (param1, param2, param3, param4, param5, param6) { - var params = {}, - success = null, - error = null, - config = [], - param_one = ''; - $.each(arguments, function (index, items) { - config.push([items, typeof items]); - }); - - function diff_data(i) { - try { - success = config[i][1] == "function" ? config[i][0] : null; - error = config[(i + 1)][1] == "function" ? config[(i + 1)][0] : null; - } catch (error) { - } - } - - param_one = config[0]; - switch (param_one[1]) { - case "string": - $.each(config, function (index, items) { - var value = items[0], type = items[1]; - if (index > 1 && (type == "boolean" || type == "string" || type == "object")) { - var arry = param_one[0].split('/'); - params['url'] = '/' + arry[0] + '?action=' + arry[1]; - if (type == "object") { - params['load'] = value.load; - params['verify'] = value.verify; - if (value.plugin) params['url'] = '/plugin?action=a&name=' + arry[0] + '&s=' + arry[1]; - } else if (type == 'string') { - params['load'] = value; - } - return false; - } else { - params['url'] = param_one[0]; - } - }); - if (config[1][1] === "object") { - params['data'] = config[1][0]; - diff_data(2); - } else { - diff_data(1); - } - break; - case 'object': - params['url'] = param_one[0].url; - params['data'] = param_one[0].data || {}; - $.each(config, function (index, items) { - var value = items[0], type = items[1]; - if (index > 1 && (type == "boolean" || type == "string" || type == "object")) { - switch (type) { - case "object": - params['load'] = value.load; - params['verify'] = value.verify; - break; - case "string": - params['load'] = value; - break; - } - return true; - } - }); - if (config[1][1] === "object") { - params['data'] = config[1][0]; - diff_data(2); - } else { - diff_data(1); - } - break; - } - if (params.load) params.load = this.load(params.load); - $.ajax({ - type: params.type || "POST", - url: params.url, - data: params.data || {}, - dataType: params.dataType || "JSON", - complete: function (res) { - if (params.load) params.load.close(); - }, - success: function (res) { - if (typeof params.verify == "boolean" && !params.verify) { - if (success) success(res); - return false; - } - if (typeof res === "string") { - layer.msg(res, { - icon: 2, - time: 0, - closeBtn: 2 - }); - return false; - } - if (params.batch) { - if (success) success(res); - return false; - } - if (res.status === false && (res.hasOwnProperty('msg') || res.hasOwnProperty('error_msg'))) { - if (error) { - error(res) - } else { - bt_tools.msg({status: res.status, msg: !res.hasOwnProperty('msg') ? res.error_msg : res.msg}); - } - return false; - } - - if (params.tips) { - bt_tools.msg(res); - } - if (success) success(res); - } - }); - }, - - - /** - * @description 命令行输入 - */ - command_line_output: function (config) { - var _that = this, uuid = bt.get_random(15); - - /** - * @description 渲染 - * @param config - * @return {object} - * @constructor - */ - function ReaderCommand(config) { - var that = this; - for (var key in _that.commandConnectionPool) { - var item = _that.commandConnectionPool[key], element = $(item.config.el) - if (config.shell === item.config.shell && element.length) { - item.el = element - return item - } - } - if (typeof config === "undefined") config = {} - this.config = $.extend({route: '/sock_shell'}, config) - this.xterm_config = $.extend(this.xterm_config, this.config.xterm) - this.el = $(this.config.el); - this.open = config.open; - this.close = config.close; - this.message = config.message; - if (!this.config.hasOwnProperty('el')) { - _that.msg({msg: '请输入选择器element,不可为空', status: false}) - return false; - } - if (!this.config.hasOwnProperty('shell')) { - _that.msg({msg: '请输入命令,不可为空', status: false}) - return false; - } - if (this.config.hasOwnProperty('time')) { - setTimeout(function () { - that.close_connect() - }, this.config.time) - } - this.init() - } - - ReaderCommand.prototype = { - socket: null, //websocket 连接保持的对象 - socketToken: null, - timeout: 0, // 连接到期时间,为0代表永久有效 - monitor_interval: 2000, - element_detection: null, - uuid: uuid, - fragment: [], - error: 0, // 错误次数,用于监听元素内容是否还存在 - retry: 0, // 重试次数 - forceExit: false, // 强制断开连接 - /** - * @description 程序初始化 - */ - init: function () { - var oldUUID = bt.get_cookie('commandInputViewUUID'), that = this; - if (!this.el[0]) { - if (this.error > 10) return false; - setTimeout(function () { - that.init() - this.error++; - }, 2000) - return false; - } - this.error = 0 - if (this.el[0].localName !== 'pre') { - this.el.append('
                      ');
                      -                    this.el = this.el.find('pre');
                      -                    this.config.el = this.config.el + ' pre'
                      -                } else {
                      -                    this.el.addClass('command_output_pre');
                      -                }
                      -                if (Array.isArray(this.config.area)) {
                      -                    this.el.css({width: this.config.area[0], height: this.config.area[1]})
                      -                } else {
                      -                    this.el.css({width: '100%', height: '100%'})
                      -                }
                      -                if (oldUUID && typeof _that.commandConnectionPool[oldUUID] != "undefined") {
                      -                    _that.commandConnectionPool[oldUUID].close_connect();
                      -                    delete _that.commandConnectionPool[oldUUID];
                      -                }
                      -                bt.set_cookie('commandInputViewUUID', this.uuid);
                      -                this.element_detection = setInterval(function () {
                      -                    if (!$(that.config.el).length) {
                      -                        clearInterval(that.element_detection)
                      -                        that.forceExit = true;
                      -                        that.close_connect();
                      -                    }
                      -                }, 1 * 60 * 1000)
                      -                this.set_full_screen()
                      -                this.create_websocket_connect(this.config.route, this.config.shell)
                      -                this.monitor_element()
                      -            },
                      -            /**
                      -             * @description 创建websocket连接
                      -             * @param {string} url websocket连接地址
                      -             * @param {string} shell 需要传递的命令
                      -             */
                      -            create_websocket_connect: function (url, shell) {
                      -                var that = this;
                      -                this.socket = new WebSocket((location.protocol === 'http:' ? 'ws://' : 'wss://') + location.host + url)
                      -                this.socket.addEventListener('open', function (ev) {
                      -                    if (!this.socketToken) {
                      -                        var _token = document.getElementById('request_token_head').getAttribute('token');
                      -                        this.socketToken = {'x-http-token': _token}
                      -                    }
                      -                    this.send(JSON.stringify(this.socketToken))
                      -                    this.send(shell)
                      -                    if (that.open) that.open()
                      -                    that.retry = 0
                      -                });
                      -                this.socket.addEventListener('close', function (ev) {
                      -                    if (!that.forceExit) {
                      -                        if (ev.code !== 1000 && that.retry <= 10) {
                      -                            that.socket = that.create_websocket_connect(that.config.route, that.config.shell)
                      -                            that.retry++;
                      -                        }
                      -                        if (that.close) that.close(ev)
                      -                    }
                      -                });
                      -                this.socket.addEventListener('message', function (ws_event) {
                      -                    var result = ws_event.data
                      -                    if (!result) return;
                      -                    that.refresh_data(result)
                      -                    if (that.message) that.message(result)
                      -
                      -                })
                      -                return this.socket
                      -            },
                      -
                      -            /**
                      -             * @description 设置全屏视图
                      -             */
                      -            set_full_screen: function () {
                      -// 1
                      -            },
                      -
                      -            htmlEncodeByRegExp: function (str) {
                      -                if (str.length == 0) return "";
                      -                return str.replace(/&/g, "&")
                      -                    .replace(//g, ">")
                      -                    .replace(/ /g, " ")
                      -                    .replace(/\'/g, "'")
                      -                    .replace(/\"/g, """);
                      -            },
                      -
                      -            /**
                      -             * @description 刷新Pre数据
                      -             * @param {object} data 需要插入的数据
                      -             */
                      -            refresh_data: function (data) {
                      -                var data = this.htmlEncodeByRegExp(data)
                      -                this.fragment.push(data)
                      -                if (this.fragment.length >= 300) {
                      -                    this.fragment.splice(0, 150)
                      -                    this.el.html(this.fragment.join(''))
                      -                } else {
                      -                    this.el.append(data)
                      -                }
                      -								if (this.el.length > 0) {
                      -									this.el.scrollTop(this.el[0].scrollHeight)
                      +			/**
                      +			 * @description 渲染内容
                      +			 * @param {object} data 渲染的数据
                      +			 * @param {number} page 数据分页/总数
                      +			 * @return void
                      +			 */
                      +			$reader_content: function (data, page) {
                      +				var _that = this,
                      +					thead = '',
                      +					tbody = '',
                      +					i = 0,
                      +					column = this.config.column,
                      +					event_list = {},
                      +					checkbox = $(_that.config.el + ' .checkbox_' + _that.random);
                      +				data = data || [];
                      +				this.data = data;
                      +				if (checkbox.length) {
                      +					checkbox.removeClass('active selected');
                      +					_that.checkbox_list = [];
                      +					_that.$set_batch_view();
                      +				}
                      +				do {
                      +					var rows = data[i],
                      +						completion = 0;
                      +					if (data.length > 0) tbody += '';
                      +					for (var j = 0; j < column.length; j++) {
                      +						var item = column[j];
                      +						if ($.isEmptyObject(item)) {
                      +							completion++;
                      +							continue;
                      +						}
                      +						if (i === 0 && !this.init) {
                      +							if (!this.init) this.style_list.push(this.$dynamic_merge_style(item, j - completion));
                      +							var sortName = 'sort_' + this.random + '',
                      +								checkboxName = 'checkbox_' + this.random,
                      +								sortValue = item.sortValue || 'desc';
                      +							thead +=
                      +								'' +
                      +								(item.type == 'checkbox'
                      +									? ''
                      +									: '' + item.title + '') +
                      +								(item.sort ? '' : '') +
                      +								'';
                      +							if (i === 0) {
                      +								if (!event_list[sortName] && item.sort)
                      +									event_list[sortName] = {
                      +										event: this.config.sortEvent,
                      +										eventType: 'click',
                      +										type: 'sort',
                      +									};
                      +								if (!event_list[checkboxName])
                      +									event_list[checkboxName] = {
                      +										event: item.checked,
                      +										eventType: 'click',
                      +										type: 'checkbox',
                      +									};
                      +							}
                      +						}
                      +						if (rows !== undefined) {
                      +							var template = '',
                      +								className = 'event_' + item.fid + '_' + this.random;
                      +							if (item.template) {
                      +								template = _that.$custom_template_render(item, rows, j);
                      +							}
                      +							if (typeof template === 'undefined' || typeof item.template === 'undefined') {
                      +								template = this.$reader_column_type(item, rows);
                      +								event_list = $.extend(event_list, template[1]);
                      +								template = template[0];
                      +							}
                      +							var fixed = false;
                      +							if (typeof item.fixed != 'undefined' && item.fixed) {
                      +								if (typeof item.class != 'undefined') {
                      +									if (item.class.indexOf('fixed') === -1) item.class += ' fixed';
                      +								} else {
                      +									item.class = 'fixed';
                       								}
                      -            },
                      +								fixed = true;
                      +							}
                      +							tbody +=
                      +								'' +
                      +								template +
                      +								'';
                      +							if (i === 0) {
                      +								if (!event_list[className] && item.event)
                      +									event_list[className] = {
                      +										event: item.event,
                      +										eventType: 'click',
                      +										type: 'rows',
                      +									};
                      +							}
                      +						}
                      +					}
                      +					if (data.length > 0) tbody += '';
                      +					if (data.length == 0) tbody += '' + (this.config['default'] || lan['public'].empty) + '';
                      +					i++;
                      +				} while (i < data.length);
                      +				if (!this.init) this.$style_bind(this.style_list);
                      +				this.$event_bind(event_list);
                      +				if (!this.init) {
                      +					$(this.config.el + ' .divtable').append(
                      +						'' + thead + '' + tbody + '
                      ' + ); + } else { + $(this.config.el + ' .divtable tbody').html(tbody); + if (this.config.page) { + $(this.config.el + ' .page').replaceWith(this.$reader_page(this.config.page, page)); + } + } + this.init = true; + if (this.config.success) this.config.success(this); + }, + /** + * @description 自定模板渲染 + * @param {object} item 当前元素模型 + * @param {object} rows 当前元素数据 + * @param {number} j 当前模板index + * @return void + */ + $custom_template_render: function (item, rows, j) { + var className = 'event_' + item.fid + '_' + this.random, + _template = item.template(rows, j), + $template = $(_template); + if ($template.length > 0) { + template = $template.addClass(className)[0].outerHTML; + } else { + if (item.type === 'text') { + template = '' + _template + ''; + } else { + template = '' + _template + ''; + } + } + return template; + }, - /** - * @description 监听元素状态,判断是否移除当前的ws连接 - * - */ - monitor_element: function () { - var that = this; - this.monitor_interval = setInterval(function () { - if (!that.el.length) { - that.close_connect() - clearInterval(that.monitor_interval) - } - }, that.config.monitorTime || 2000) - }, + /** + * @description 替换table数据 + * @param {string} newValue 内容数据 + * @return void + */ + $modify_row_data: function (newValue) { + this.event_rows_model.rows = $.extend(this.event_rows_model.rows, newValue); + var row_model = this.event_rows_model, + template = null; + if (typeof row_model.model.template != 'undefined') { + template = $(this.$custom_template_render(row_model.model, row_model.rows, row_model.index)); + if (!template.length) template = $(this.$reader_column_type(row_model.model, row_model.rows)[0]); + } else { + template = $(this.$reader_column_type(row_model.model, row_model.rows)[0]); + } + if (row_model.model.type == 'group') { + $(row_model.el).parent().empty().append(template); + } else { + row_model.el.replaceWith(template); + } + row_model.el = template; + }, - /** - * @description 断开命令响应和websocket连接 - */ - close_connect: function () { - this.socket.send('') - this.socket.close() - delete _that.commandConnectionPool[this.uuid]; - } - } - this.commandConnectionPool[uuid] = new ReaderCommand(config) - return this.commandConnectionPool[uuid] - }, + /** + * @description 批量执行程序 + * @param {object} config 配置文件 + * @return void + */ + $batch_success_table: function (config) { + var _that = this, + length = $(config.html).length; + bt.open({ + type: 1, + title: config.title, + area: config.area || ['400px'], + shadeClose: false, + closeBtn: 2, + content: + config.content || + '
                      ' + + config.title + + ' ' + + lan['public'].success + + '
                      ' + + config.html + + '
                      ' + + config.th + + '' + + lan['public'].result + + '
                      ', + success: function () { + if (length > 4) _that.$fixed_table_thead('.fiexd_thead'); + }, + }); + }, + /** + * @description 固定表头 + * @param {string} el DOM选择器 + * @return void + */ + $fixed_table_thead: function (el) { + $(el).scroll(function () { + var scrollTop = this.scrollTop; + this.querySelector('thead').style.transform = 'translateY(' + (scrollTop - 1) + 'px)'; + }); + }, + /** + * @description 删除行内数据 + */ + $delete_table_row: function (index) { + this.data.splice(index, 1); + this.$reader_content(this.data); + }, + /** + * @description 设置批量操作显示 + * @return void 无 + */ + $set_batch_view: function () { + if (typeof this.config.batch != 'undefined') { + //判断是否存在批量操作 + var bt_select_btn = $(this.config.el + ' .set_batch_option'); + if (typeof this.config.batch.config != 'undefined') { + // 判断批量操作是多个还是单个 + if (this.checkbox_list.length > 0) { + bt_select_btn + .removeClass('bt-disabled btn-default') + .addClass('btn-success') + .text(lan['public'].please_choose + this.batch_active.title + '(' + lan['public'].selected + this.checkbox_list.length + ')'); + } else { + bt_select_btn + .addClass('bt-disabled btn-default') + .removeClass('btn-success') + .text(lan['public'].please_choose + this.batch_active.title); + } + } else { + var bt_select_val = $(this.config.el + ' .bt_table_select_group .bt_select_value'); + if (this.checkbox_list.length > 0) { + bt_select_btn.removeClass('bt-disabled btn-default').addClass('btn-success').prev().removeClass('bt-disabled'); + bt_select_val.find('em').html('(' + lan['public'].selected + this.checkbox_list.length + ')'); + } else { + bt_select_btn.addClass('bt-disabled btn-default').removeClass('btn-success').prev().addClass('bt-disabled'); + bt_select_val + .children() + .eq(0) + .html(lan['public'].please_choose + ''); + bt_select_val.next().find('li').removeClass('active'); + this.batch_active = {}; + } + } + } + }, - /** - * @description 清理验证提示样式 - * @param {object} element 元素节点 - */ - $clear_verify_tips: function (element) { - element.removeClass('bt-border-error bt-border-sucess'); - layer.close('tips'); - }, + /** + * @description 渲染指定类型列内容 + * @param {object} data 渲染的数据 + * @param {object} rows 渲染的模板 + * @return void + */ + $reader_column_type: function (item, rows) { + var value = rows[item.fid], + event_list = {}, + className = 'click_' + item.fid + '_' + this.random, + config = [], + _that = this; + switch (item.type) { + case 'text': //普通文本 + config = [value, event_list]; + break; + case 'checkbox': //单选内容 + config = ['', event_list]; + break; + case 'password': + var _copy = '', + _eye_open = '', + className = 'ico_' + _that.random + '_', + html = '**********'; + if (item.eye_open) { + html += ''; + if (!event_list[className + 'eye_open']) + event_list[className + 'eye_open'] = { + type: 'eye_open_password', + }; + } + if (item.copy) { + html += ''; + if (!event_list[className + 'copy']) + event_list[className + 'copy'] = { + type: 'copy_password', + }; + } + config = [html, event_list]; + break; + case 'link': //超链接类型 + className += '_' + item.fid; + if (!event_list[className] && item.event) + event_list[className] = { + event: item.event, + type: 'rows', + }; + config = [ + '' + + value + + '', + event_list, + ]; + break; + case 'input': //可编辑类型 + blurName = 'blur_' + item.fid + '_' + this.random; + keyupName = 'keyup_' + item.fid + '_' + this.random; + if (!event_list[blurName] && item.blur) + event_list[blurName] = { + event: item.blur, + eventType: 'blur', + type: 'rows', + }; + if (!event_list[keyupName] && item.keyup) + event_list[keyupName] = { + event: item.keyup, + eventType: 'keyup', + type: 'rows', + }; + config = ['', event_list]; + break; + case 'status': // 状态类型 + var active = ''; + $.each(item.config.list, function (index, items) { + if (items[0] === value) active = items; + }); + if (!event_list[className] && item.event) + event_list[className] = { + event: item.event, + type: 'rows', + }; + config = [ + '' + + active[1] + + '' + + (item.config.icon ? '' : '') + + '', + event_list, + ]; + break; + case 'switch': //开关类型 + var active = '', + _random = bt.get_random(5); + active = new Number(value) == true ? 'checked' : ''; + if (!event_list[className] && item.event) + event_list[className] = { + event: item.event, + type: 'rows', + }; + config = [ + '
                      ', + event_list, + ]; + break; + case 'group': + var _html = ''; + $.each(item.group, function (index, items) { + className = (item.fid ? item.fid : 'group') + '_' + index + '_' + _that.random; + var _hide = false; + if (items.template) { + var _template = items.template(rows, _that), + $template = $(_template); + if ($template.length > 0) { + _html += $template.addClass(className)[0].outerHTML; + } else { + _html += '' + _template + ''; + } + } else { + if (typeof items.hide != 'undefined') { + _hide = typeof items.hide === 'boolean' ? items.hide : items.hide(rows); + if (typeof _hide != 'boolean') return false; + } + _html += '' + items.title + ''; + } + //当前操作按钮长度等于当前所以值时不向后添加分割 + if (!_hide) { + if (items.template) { + var _template = items.template(rows, _that); + if (_template == '') { + _html += ''; + } else { + _html += item.group.length == index + 1 ? '' : ' | '; + } + } else { + _html += item.group.length == index + 1 ? '' : ' | '; + } + } + if (!event_list[className] && items.event) + event_list[className] = { + event: items.event, + type: 'rows', + }; + }); + config = [_html, event_list]; + break; + default: + config = [value, event_list]; + break; + } + return config; + }, + /** + * @description 批量执行程序 + * @param {object} config 配置文件 + * @return void + */ + $batch_success_table: function (config) { + that.$batch_success_table(config); + }, + /** + * @description 渲染工具条 + * @param {object} data 配置参数 + * @return void + */ + $reader_tootls: function (config) { + var _that = this, + event_list = {}; - /** - * @description 验证提示 - * @param {object} element 元素节点 - * @param {string} tips 警告提示 - * @return void - */ - $verify_tips: function (element, tips, is_error) { - if (typeof is_error === "undefined") is_error = true; - element.removeClass('bt-border-error bt-border-sucess').addClass(is_error ? 'bt-border-error' : 'bt-border-sucess'); - element.focus(); - layer.tips('' + tips + "", element, { - tips: [1, is_error ? 'red' : '#20a53a'], - time: 3000, - area: element.width() - }); - }, - /** - * @description 验证值是否存在 - * @param {String} value 内容/值 - * @param {String|Boolean} attr 属性 - * @param {String} type 属性 - */ - $verify: function (value, attr, type) { - if (!value) return ''; - if (type === true) return value ? ' ' + attr : ''; - if (type === 'style') return attr ? attr + ':' + value + ';' : value; - return attr ? ' ' + attr + '="' + value + '"' : ' ' + value; - }, + /** + * @description 请求方法 + * @param {Function} callback 回调函数 + * @returns void + */ + function request(active, check_list) { + var loadT = bt.load(active.title + lan.site.executing), + batch_config = {}, + list = _that.$get_data_batch_list(active.paramId, check_list); + if (!active.beforeRequest) { + batch_config[active.paramName] = list.join(','); + } else { + batch_config[active.paramName] = active.beforeRequest(check_list); + } + bt_tools.send( + { + url: active.url || _that.config.batch.url, + data: $.extend(active.param || {}, batch_config), + }, + function (res) { + loadT.close(); + if (res.status === false && typeof res.success === 'undefined') { + bt_tools.msg(res); + return false; + } + if (typeof active.tips === 'undefined' || active.tips) { + var html = ''; + $.each(res.error, function (key, item) { + html += + '' + + key + + '
                      ' + + item + + '
                      '; + }); + $.each(res.success, function (index, item) { + html += + '' + + item + + '
                      ' + + lan['public'].success + + '
                      '; + }); + _that.$batch_success_table({ + title: active.title, + th: active.theadName, + html: html, + }); + if (active.refresh) _that.$refresh_table_list(true); + } else { + if (!active.success) { + var html = ''; + $.each(check_list, function (index, item) { + html += + '' + + item.name + + '
                      ' + + ((typeof active.theadValue != 'undefined' ? active.theadValue[res.status ? 0 : 1] : null) || res.msg) + + '
                      '; + }); + _that.$batch_success_table({ + title: 'Batch' + active.title + 'Success', + th: active.theadName, + html: html, + }); + if (active.refresh) _that.$refresh_table_list(true); + } + } + if (active.success) { + active.success(res, check_list, _that); + } + } + ); + } - /** - * @description 批量操作的结果 - * @param {*} config - */ - $batch_success_table: function (config) { - var _that = this, length = $(config.html).length; - bt.open({ - type: 1, - title: config.title, - area: config.area || ['400px'], - shadeClose: false, - closeBtn: 2, - content: config.content || '
                      ' + config.title + ' ' + lan['public'].success + '
                      ' + config.html + '
                      ' + config.th + '' + lan['public'].result + '
                      ', - success: function () { - if (length > 4) _that.$fixed_table_thead('.fiexd_thead'); - } - }); - }, - /** - * @description 固定表头 - * @param {string} el DOM选择器 - * @return void - */ - $fixed_table_thead: function (el) { - $(el).scroll(function () { - var scrollTop = this.scrollTop; - this.querySelector('thead').style.transform = 'translateY(' + scrollTop + 'px)'; - }); - }, - /** - * @description 插件视图设置 - * @param {object|string} layid dom元素或layer_id - * @param {object} config 插件宽度高度或其他配置 - */ - $piugin_view_set: function (layid, config) { - var element = $(typeof layid === "string" ? ('#layui-layer' + layid) : layid).hide(), win = $(window); - setTimeout(function () { - var width = config.width || element.width(), height = config.height || element.height(); - element.css($.extend(config, { - left: ((win.width() - width) / 2), - top: ((win.height() - height) / 2) - })).addClass('custom_layer'); - }, 50); - setTimeout(function () { - element.show(); - }, 500) - } -}; -$.fn.serializeObject = function () { - var hasOwnProperty = Object.prototype.hasOwnProperty; - return this.serializeArray().reduce(function (data, pair) { - if (!hasOwnProperty.call(data, pair.name)) { - data[pair.name] = pair.value; - } - return data; - }, {}); + /** + * @description 执行批量,包含递归批量和自动化批量 + * @returns void + */ + function execute_batch(active, check_list, success) { + // if(active.recursion) 递归方式 + var bacth = { + loadT: 0, + config: {}, + check_list: check_list, + bacth_status: true, + start_batch: function (param, callback) { + var _this = this; + if (typeof param == 'undefined') param = {}; + if (typeof param == 'function') (callback = param), (param = {}); + if (active.load) + this.loadT = layer.msg( + lan['public'].executeing + active.title + ',' + lan['public'].schedule + ':0/' + this.check_list.length + ',' + lan['public'].please_wait, + { + icon: 16, + skin: 'batch_tips', + shade: 0.3, + time: 0, + area: '400px', + } + ); + this.config = { + param: param, + url: active.url, + }; + this.bacth(callback); + }, + /** + * + * @param {Number} index 递归批量程序 + * @param {Function} callback 回调函数 + * @return void(0) + */ + bacth: function (index, callback) { + var _this = this, + param = {}; + if (typeof index === 'function' || typeof index === 'undefined') (callback = index), (index = 0); + if (index < this.check_list.length) { + 'function' == typeof active.url ? (this.config.url = active.url(check_list[index])) : (this.config.url = active.url); + if (typeof active.param == 'function') { + param = active.param(check_list[index]); + } else { + param = active.param; + } + this.config.param = $.extend(this.config.param, param); + if (typeof active.paramId != 'undefined') _this.config.param[active.paramName || active.paramId] = _this.check_list[index][active.paramId]; + if (typeof active.beforeBacth != 'undefined') this.config.param = $.extend(this.config.param, active.beforeBacth(_this.check_list[index])); + if (this.config.param['bacth'] && index == this.check_list.length - 1) { + delete this.config.param['bacth']; + } + if (!_this.bacth_status) return false; + if (active.load) + $('#layui-layer' + _this.loadT) + .find('.layui-layer-content') + .html( + '' + + lan['public'].executeing + + active.title + + ',' + + lan['public'].schedule + + ':' + + index + + '/' + + _this.check_list.length + + ',' + + lan['public'].please_wait + + (active.clear ? 'cancel' : '') + ); + bt_tools.send( + { + url: this.config.url, + data: this.config.param, + bacth: true, + }, + function (res) { + $.extend( + _this.check_list[index], + { + request: { + status: typeof res.status === 'boolean' ? res.status : false, + msg: res.msg || lan['public'].request_error, + }, + }, + { requests: res } + ); + index++; + _this.bacth(index, callback); + } + ); + } else { + if (success) success(); + if (callback) { + callback(this.check_list); + } + if (active.automatic) { + var html = ''; + for (var i = 0; i < this.check_list.length; i++) { + var item = this.check_list[i]; + html += + '' + + (typeof item[active.paramThead] != 'undefined' ? item[active.paramThead] : item.name) + + '
                      ' + + item.request.msg + + '
                      '; + } + _that.$batch_success_table({ + title: 'Batch' + active.title, + th: active.theadName, + html: html, + }); + if (active.refresh) _that.$refresh_table_list(true); + _that.$clear_table_checkbox(); + } + layer.close(this.loadT); + } + }, + clear_bacth: function () { + this.bacth_status = false; + layer.close(this.loadT); + }, + }; + if (active.callback) { + active.callback(bacth); + } else { + if (!active.confirm || active.recursion) { + if (active.confirmVerify) { + bt.show_confirm('批量操作' + active.title + '已选中', '批量' + active.title + ',该操作可能会存在风险,是否继续?', function (index) { + layer.close(index); + if (!active.recursion) { + request(active, check_list); + } else { + bacth.start_batch(); + } + }); + } else { + bt.confirm( + { + title: 'Batch ' + active.title, + msg: 'Please be cautious, The selected item will be [ ' + active.title + ' ] after confirmation', + shadeClose: active.shadeClose ? active.shadeClose : false, + }, + function (index) { + layer.close(index); + if (!active.recursion) { + request(active, check_list); + } else { + bacth.start_batch(); + } + } + ); + } + } else { + request(active, check_list); + } + } + } + + for (var i = 0; i < config.length; i++) { + var template = ''; + var item = config[i]; + var positon = []; + switch (item.type) { + case 'group': + positon = item.positon || ['left', 'top']; + $.each(item.list, function (index, items) { + var _btn = item.type + '_' + _that.random + '_' + index, + html = ''; + if (items.type == 'division') { + template += ''; + } else { + if (!items.group) { + template += + ''; + } else { + template += + '
                      \ + \ + \ +
                      '; + if (item.list) { + $.each(item.list, function (index, items) { + html += '
                    • ' + items[item.key] + '
                    • '; + }); + } + if (items.init) + setTimeout(function () { + items.init(_btn); + }, 400); + } + } + if (!event_list[_btn]) + event_list[_btn] = { + event: items.event, + type: 'button', + }; + }); + break; + case 'search': + positon = item.positon || ['right', 'top']; + item.value = item.value || ''; + this.config.search = item; + var _input = 'search_input_' + this.random, + _focus = 'search_focus_' + this.random, + _btn = 'search_btn_' + this.random; + template = + ''; + if (!event_list[_input]) + event_list[_input] = { + eventType: 'keyup', + type: 'search_input', + }; + if (!event_list[_focus]) + event_list[_focus] = { + type: 'search_focus', + eventType: 'focus', + }; + if (!event_list[_btn]) + event_list[_btn] = { + type: 'search_btn', + }; + break; + case 'batch': + positon = item.positon || ['left', 'bottom']; + item.placeholder = item.placeholder || '请选择批量操作'; + item.buttonValue = item.buttonValue || '批量操作'; + this.config.batch = item; + var batch_list = [], + _html = '', + active = item.config; + if (typeof item.config != 'undefined') { + _that.batch_active = active; + $(_that.config.el).on('click', '.set_batch_option', function (e) { + var check_list = []; + for (var i = 0; i < _that.checkbox_list.length; i++) { + check_list.push(_that.data[_that.checkbox_list[i]]); + } + if ($(this).hasClass('bt-disabled')) { + layer.tips(_that.config.batch.disabledTips || 'Select batch operation', $(this), { + tips: [1, 'red'], + time: 2000, + }); + return false; + } + switch (typeof active.confirm) { + case 'function': + active.confirm(active, function (param, callback) { + active.param = $.extend(active.param, param); + execute_batch(active, check_list, callback); + }); + break; + case 'undefined': + execute_batch(active, check_list); + break; + case 'object': + var config = active.confirm; + bt.open({ + title: config.title || 'Batch execute', + area: config.area || '350px', + btn: config.btn || ['Confirm', 'Cancel'], + content: config.content, + success: function (layero, index) { + config.success(layero, index, active); + }, + yes: function (index, layero) { + config.yes(index, layero, function (param, callback) { + active.param = $.extend(active.param, param); + request(active, check_list); + }); + }, + }); + break; + } + }); + } else { + $.each(item.selectList, function (index, items) { + if (items.group) { + $.each(items.group, function (indexs, itemss) { + batch_list.push($.extend({}, items, itemss)); + _html += '
                    • ' + itemss.title + '
                    • '; + }); + delete items.group; + } else { + batch_list.push(items); + _html += '
                    • ' + items.title + '
                    • '; + } + }); + // 打开批量类型列表 + $(_that.config.el) + .unbind() + .on('click', '.bt_table_select_group .bt_select_value', function (e) { + var _this = this, + $parent = $(this).parent(), + bt_selects = $parent.find('.bt_selects'), + area = $parent.offset(), + _win_area = _that.$get_win_area(); + if ($parent.hasClass('bt-disabled')) { + layer.tips(_that.config.batch.disabledSelectValue, $parent, { + tips: [1, 'red'], + time: 2000, + }); + return false; + } + if ($parent.hasClass('active')) { + $parent.removeClass('active'); + } else { + $parent.addClass('active'); + } + if (bt_selects.height() > _win_area[1] - area.top) { + bt_selects.addClass('top'); + } else { + bt_selects.removeClass('top'); + } + $(document).one('click', function () { + $(_that.config.el).find('.bt_table_select_group').removeClass('active'); + return false; + }); + return false; + }); + // 选择批量的类型 + $(_that.config.el).on('click', '.bt_table_select_group .item', function (e) { + var _text = $(this).text(), + _index = $(this).index(); + $(this).addClass('active').siblings().removeClass('active'); + $(_that.config.el + ' .bt_select_tips').html('Batch execute ' + _text + '(' + lan.site.have_been_selected + _that.checkbox_list.length + ')'); + _that.batch_active = batch_list[_index]; + if (!_that.checked) $('.bt_table_select_group').removeClass('active'); + }); + // 执行批量操作 + $(_that.config.el).on('click', '.set_batch_option', function (e) { + var check_list = [], + active = _that.batch_active; + if ($(this).hasClass('bt-disabled')) { + layer.tips(_that.config.batch.disabledSelectValue, $(this), { + tips: [1, 'red'], + time: 2000, + }); + return false; + } + for (var i = 0; i < _that.checkbox_list.length; i++) { + check_list.push(_that.data[_that.checkbox_list[i]]); + } + if (JSON.stringify(active) === '{}') { + var bt_table_select_group = $(_that.config.el + ' .bt_table_select_group'); + layer.tips(lan['public'].select_opt_type, bt_table_select_group, { + tips: [1, 'red'], + time: 2000, + }); + bt_table_select_group.css('border', '1px solid red'); + setTimeout(function () { + bt_table_select_group.removeAttr('style'); + }, 2000); + return false; + } + switch (typeof active.confirm) { + case 'function': + active.confirm(active, function (param, callback) { + active.param = $.extend(active.param, param); + execute_batch(active, check_list, callback); + }); + break; + case 'undefined': + execute_batch(active, check_list); + break; + case 'object': + var config = active.confirm; + bt.open({ + type: 1, + title: config.title || lan['public'].bulk_opt, + area: config.area || '350px', + btn: config.btn || [lan['public'].confirm, lan['public'].cancel], + content: config.content, + success: function (layero, index) { + config.success(layero, index, active); + }, + yes: function (index, layero) { + config.yes(index, layero, function (param, callback) { + active.param = $.extend(active.param, param); + layer.close(index); + request(active, check_list); + }); + }, + }); + break; + } + }); + } + template = + '
                      ' + + (typeof item.config != 'undefined' + ? '' + : '
                      ' + + lan['public'].select_opt_type + + '
                        ' + + _html + + '
                      ') + + '
                      '; + break; + case 'page': + positon = item.positon || ['right', 'bottom']; + item.page = config.page || 1; + item.pageParam = item.pageParam || 'p'; + item.number = item.number || 20; + item.numberList = item.numberList || [10, 20, 50, 100, 200]; + item.numberParam = typeof item.numberParam === 'boolean' ? item.numberParam : item.numberParam || 'limit'; + this.config.page = item; + // var pageNumber = bt.get_cookie('page_number') + var pageNumber = this.$get_page_number(); + // if (this.config.cookiePrefix && pageNumber) this.config.page.number = pageNumber + if (pageNumber) this.config.page.number = pageNumber; + template = this.$reader_page(this.config.page, '
                      1Total 0
                      '); + break; + } + if (template) { + var tools_group = $(_that.config.el + ' .tootls_' + positon[1]); + if (tools_group.length) { + var tools_item = tools_group.find('.pull-' + positon[0]); + tools_item.append(template); + } else { + var tools_group_elment = + '
                      ' + + (positon[0] === 'left' ? template : '') + + '
                      ' + + (positon[0] === 'right' ? template : '') + + '
                      '; + if (positon[1] === 'top') { + $(_that.config.el).append(tools_group_elment); + if ($(_that.config.el + ' .divtable').length === 0) $(_that.config.el).append('
                      '); + } else { + if ($(_that.config.el + ' .divtable').length === 0) $(_that.config.el).append('
                      '); + $(_that.config.el).append(tools_group_elment); + } + } + } + } + if (!this.init) this.$event_bind(event_list); + }, + + $clear_table_checkbox: function () { + $(this.config.el).find('.bt_table .cust—checkbox').removeClass('selected active'); + }, + /** + * @description 获取数据批量列表 + * @param {string} 需要获取的字段 + * @return {array} 当前需要批量列表 + */ + $get_data_batch_list: function (fid, data) { + var arry = []; + $.each(data || this.data, function (index, item) { + arry.push(item[fid]); + }); + return arry; + }, + + /** + * @description 渲染分页 + * @param {object} config 配置文件 + * @param {object} page 分页 + * @return string + */ + $reader_page: function (config, page) { + var template = '', + eventList = {}, + _that = this, + $page = null; + + if (config.number && !page) { + template = + (config.page !== 1 ? 'Start' : '') + + (config.page !== 1 ? 'Prev' : '') + + (_that.data.length === config.number ? 'Next' : '') + + 'Page ' + + config.page + + ''; + eventList['page_link_' + this.random] = { type: 'cut_page_number' }; + } else { + if (typeof page === 'number') page = this.$custom_page(page); + $page = $(page); + $page.find('a').addClass('page_link_' + this.random); + template += $page.html(); + if (config.numberStatus) { + var className = 'page_select_' + this.random, + number = _that.$get_page_number(); + template += ''; + eventList[className] = { eventType: 'change', type: 'page_select' }; + } + if (config.jump) { + var inputName = 'page_jump_input_' + this.random; + var btnName = 'page_jump_btn_' + this.random; + template += + '
                      ' + + lan['public'].jump_to_page + + '
                      '; + eventList[inputName] = { + eventType: 'keyup', + type: 'page_jump_input', + }; + eventList[btnName] = { + type: 'page_jump_btn', + }; + } + eventList['page_link_' + this.random] = { + type: 'cut_page_number', + }; + _that.config.page.total = + $page.length === 0 + ? 0 + : typeof page == 'number' + ? page + : parseInt( + $page + .find('.Pcount') + .html() + .match(/([0-9]*)/g)[1] + ); + } + + _that.$event_bind(eventList); + return '
                      ' + template + '
                      '; + }, + /** + * @description 渲染样式 + * @param {object|string} data 样式配置 + * @return {string} 样式 + */ + $reader_style: function (data) { + var style = ''; + if (typeof data === 'string') return data; + if (typeof data === 'undefined') return ''; + $.each(data, function (key, item) { + style += key + ':' + item + ';'; + }); + return style; + }, + /** + * @description 自定义分页 + * @param {} + */ + $custom_page: function (total) { + var html = '
                      ', + config = this.config.page, + page = Math.ceil(total / config.number), + tmpPageIndex = 0; + if (config.page > 1 && page > 1) { + html += 'HomePrev'; + } + if (page <= 10) { + for (var i = 1; i <= page; i++) { + i == config.page ? (html += '' + i + '') : (html += '' + i + ''); + } + } else if (config.page < 10) { + for (var i = 1; i <= 10; i++) i == config.page ? (html += '' + i + '') : (html += '' + i + ''); + html += '...'; + } else if (page - config.page < 7) { + page - 7 > 1 && ((html += '1'), (html += '...')); + for (var i = page - 7; i <= page; i++) + i == config.page ? (html += '' + i + '') : (html += 1 == i ? '...' : '' + i + ''); + } else { + 0 == tmpPageIndex && (tmpPageIndex = config.page), + (tmpPageIndex <= config.page - 5 || tmpPageIndex >= config.page + 5) && (tmpPageIndex = config.page), + (html += '1'), + (html += '...'); + for (var i = tmpPageIndex - 3; i <= tmpPageIndex + 3; i++) + i == config.page ? (html += '' + i + '') : (html += '' + i + ''); + (html += '...'), (html += '' + page + ''); + } + return ( + page > 1 && config.page < page && (html += 'NextLast'), + (html += 'Total ' + total + '
                      ') + ); + }, + + /** + * @deprecated 动态处理合并行内,css样式 + * @param {object} rows 当前行数据 + * @return {stinrg} className class类名 + * @return void + */ + $dynamic_merge_style: function (column, index) { + var str = ''; + $.each(column, function (key, item) { + switch (key) { + case 'align': + str += 'text-align:' + item + ';'; + break; + case 'width': + str += 'width:' + (typeof item == 'string' ? item : item + 'px') + ';'; + break; + case 'style': + str += item; + break; + case 'minWidth': + str += 'min-width:' + (typeof item == 'string' ? item : item + 'px') + ';'; + break; + case 'maxWidth': + str += 'max-width:' + (typeof item == 'string' ? item : item + 'px') + ';'; + break; + } + }); + return { + index: index, + css: str, + }; + }, + + /** + * @description 事件绑定 + * @param {array} eventList 事件列表 + * @return void + */ + $event_bind: function (eventList) { + var _that = this; + $.each(eventList, function (key, item) { + if (_that.event_list[key] && _that.event_list[key].eventType === item.eventType) return true; + _that.event_list[key] = item; + $(_that.config.el).on(item.eventType || 'click', '.' + key, function (ev) { + var index = $(this).parents('tr').index(), + data1 = $(this).data(), + arry = [], + column_data = _that.config.column[$(this).parents('td').index()]; + switch (item.type) { + case 'rows': + _that.event_rows_model = { + el: $(this), + model: column_data, + rows: _that.data[index], + index: index, + }; + arry = [_that.event_rows_model.rows, _that.event_rows_model.index, ev, key, _that]; + break; + case 'sort': + var model = _that.config.column[data1.index]; + if ($(this).hasClass('sort-active')) + $('.sort_' + _that.random + ' .sort-active').data({ + sort: 'desc', + }); + $('.sort_' + _that.random) + .removeClass('sort-active') + .find('.glyphicon') + .removeClass('glyphicon-triangle-top') + .addClass('glyphicon-triangle-bottom'); + $(this).addClass('sort-active'); + if (data1.sort == 'asc') { + $(this).data({ + sort: 'desc', + }); + $(this).find('.glyphicon').removeClass('glyphicon-triangle-top').addClass('glyphicon-triangle-bottom'); + } else { + $(this).data({ + sort: 'asc', + }); + $(this).find('.glyphicon').removeClass('glyphicon-triangle-bottom').addClass('glyphicon-triangle-top'); + } + _that.config.sort = _that.config.sortParam({ + name: model.fid, + sort: data1.sort, + }); + _that.$refresh_table_list(true); + break; + case 'checkbox': + var all = $(_that.config.el + ' [data-checkbox="all"]'), + checkbox_list = $(_that.config.el + ' tbody .checkbox_' + _that.random); + if (data1.checkbox == undefined) { + if (!$(this).hasClass('active')) { + $(this).addClass('active'); + _that.checkbox_list.push(index); + if (_that.data.length === _that.checkbox_list.length) { + all.addClass('active').removeClass('selected'); + } else if (_that.checkbox_list.length > 0) { + all.addClass('selected'); + } + } else { + $(this).removeClass('active'); + _that.checkbox_list.splice(_that.checkbox_list.indexOf(index), 1); + if (_that.checkbox_list.length > 0) { + all.addClass('selected').removeClass('active'); + } else { + all.removeClass('selected active'); + } + } + } else { + if (_that.checkbox_list.length === _that.data.length) { + _that.checkbox_list = []; + checkbox_list.removeClass('active selected').next().prop('checked', 'checked'); + all.removeClass('active'); + } else { + checkbox_list.each(function (index, item) { + if (!$(this).hasClass('active')) { + $(this).addClass('active').next().prop('checked', 'checked'); + _that.checkbox_list.push(index); + } + }); + all.removeClass('selected').addClass('active'); + } + } + _that.$set_batch_view(); + break; + case 'button': + arry.push(ev, _that); + break; + case 'search_focus': + var search_tips = $(_that.config.el + ' .bt_search_tips'); + if ($(_that.config.el + ' .bt_search_tips').length > 0) { + search_tips.remove(); + } + break; + case 'search_input': + if (ev.keyCode == 13) { + $(_that.config.el + ' .search_btn_' + _that.random).click(); + return false; + } + break; + case 'search_btn': + var _search = $(_that.config.el + ' .search_input'), + val = $(_that.config.el + ' .search_input').val(), + _filterBox = $('
                      ').text(val), + _filterText = _filterBox.html(); + + val = _filterText; //过滤xss + val = val.replace(/(^\s*)|(\s*$)/g, ''); + _search.text(val); + _that.config.search.value = val; + if (_that.config.page) _that.config.page.page = 1; + _search.append('
                      ' + val + '
                      '); + _that.$refresh_table_list(true); + break; + case 'page_select': + var limit = parseInt($(this).val()); + _that.$set_page_number(limit); + _that.config.page.number = limit; + _that.config.page.page = 1; + _that.$refresh_table_list(true); + return false; + break; + case 'page_jump_input': + if (ev.keyCode === 13) { + $(_that.config.el + ' .page_jump_btn_' + _that.random).click(); + $(this).focus(); + } + return false; + break; + case 'page_jump_btn': + var jump_page = parseInt($(_that.config.el + ' .page_jump_input_' + _that.random).val()), + max_number = Math.ceil(_that.config.page.total / _that.config.page.number); + if (isNaN(jump_page)) jump_page = 1; + if (jump_page > max_number) jump_page = _that.config.page.page; + _that.config.page.page = jump_page; + _that.$refresh_table_list(true); + break; + case 'cut_page_number': + var page = + $(this).data('page') || + parseInt( + $(this) + .attr('href') + .match(/([0-9]*)$/)[0] + ); + _that.config.page.page = page; + _that.$refresh_table_list(true); + return false; + break; + case 'eye_open_password': + if ($(this).hasClass('glyphicon-eye-open')) { + $(this).addClass('glyphicon-eye-close').removeClass('glyphicon-eye-open'); + $(this).prev().text(_that.data[index][column_data.fid]); + } else { + $(this).addClass('glyphicon-eye-open').removeClass('glyphicon-eye-close'); + $(this).prev().html('**********'); + } + return false; + break; + case 'copy_password': + bt.pub.copy_pass(_that.data[index][column_data.fid]); + return false; + break; + } + if (item.event) item.event.apply(this, arry); + }); + }); + }, + + /** + * @description 样式绑定 + * @param {array} style_list 样式列表 + * @return void + */ + $style_bind: function (style_list, status) { + var str = '', + _that = this; + $.each(style_list, function (index, item) { + if (item.css != '') { + if (!item.className) { + str += + _that.config.el + + ' thead th:nth-child(' + + (item.index + 1) + + '),' + + _that.config.el + + ' tbody tr td:nth-child' + + (item.span ? ' span' : '') + + '(' + + (item.index + 1) + + '){' + + item.css + + '}'; + } else { + str += item.className + '{' + item.css + '}'; + } + } + }); + if ($('#bt_table_' + _that.random).length == 0) $(_that.config.el).append(''); + }, + + /** + * @deprecated 获取WIN高度或宽度 + * @return 返回当期的宽度和高度 + */ + $get_win_area: function () { + return [window.innerWidth, window.innerHeight]; + }, + + /** + * @description 获取分页条数 + * @return 返回分页条数 + */ + $get_page_number: function () { + var name = this.config.pageName; + if (name) { + return bt.get_cookie(name + '_page_number'); + } + }, + + /** + * @description 设置分页条数 + * @param {object} limit 分页条数 + * @return void + */ + $set_page_number: function (limit) { + var name = this.config.pageName; + if (name) bt.set_cookie(name + '_page_number', limit); + }, + /** + * @description 请求数据, + * @param {object} param 参数和请求路径 + * @return void + */ + $http: function (load, success) { + var page_number = this.$get_page_number(), + that = this, + param = {}, + config = this.config, + _page = config.page, + _search = config.search, + _sort = config.sort || {}; + if (_page) { + if (page_number && !_page.number) _page.number = page_number; + if (_page.defaultNumber) _page.number = _page.defaultNumber; + + if (_page.numberParam) param[_page.numberParam] = _page.number; + param[_page.pageParam] = _page.page; + } + + if (_search) param[_search.searchParam] = _search.value; + var params = $.extend(config.param, param, _sort); + if (this.config.beforeRequest) { + if (this.config.beforeRequest === 'model') { + config.param = (function () { + if (params.hasOwnProperty('data') && typeof params.data === 'string') { + var oldParams = JSON.parse(params['data']); + delete params['data']; + return { data: JSON.stringify($.extend(oldParams, params)) }; + } + return { data: JSON.stringify(params) }; + })(); + } else { + config.param = this.config.beforeRequest(params); + } + } else { + config.param = params; + } + + bt_tools.send( + { + url: config.url, + data: config.param, + }, + function (res) { + if (typeof config.dataFilter != 'undefined') { + var data = config.dataFilter(res, that); + if (typeof data.tootls != 'undefined') data.tootls = parseInt(data.tootls); + if (success) success(data); + } else { + if (void 0 === res.data) { + success && + success({ + data: res, + }); + } else + success && + success({ + data: res.data, + page: res.page, + }); + } + }, + { load: load ? 'Getting Data' : false, verify: typeof config.dataVerify === 'undefined' ? true : !!config.dataVerify } + ); + }, + }; + var example = new ReaderTable(config); + $(config.el).data('table', example); + return example; + }, + /** + * @description 验证表单 + * @param {object} el 节点 + * @param {object} config 验证配置 + * @param {function} callback 验证成功回调 + */ + verifyForm: function (el, config, callback) { + var verify = false, + formValue = this.getFormValue(el, []); + for (var i = 0; i < config.length; i++) { + var item = config[i]; + verify = item.validator.apply(this, [formValue[item.name], formValue]); + if (typeof verify === 'string') { + this.error(verify); + return false; + } + } + callback && callback(typeof verify !== 'string', formValue); + }, + /** + * @description 获取表单值 + * @param {String} el 表单元素 + * @param {Array} filter 过滤列表 + * @returns {Object} 表单值 + */ + getFormValue: function (el, filter) { + var form = $(el).serializeObject(); + filter = filter && []; + for (var key in form) { + if (filter.indexOf(key) > -1) delete form[key]; + } + return form; + }, + + /** + * @description 设置layer定位 + * @param {object} el 节点 + */ + setLayerArea: function (el) { + var $el = $(el), + width = $el.width(), + height = $el.height(), + winWidth = $(window).width(), + winHeight = $(window).height(); + $el.css({ left: (winWidth - width) / 2, top: (winHeight - height) / 2 }); + }, + + /** + * @description 渲染表单行内容 + * @param {object} config 配置参数 + */ + line: function (config) { + var $line = $( + '
                      ' + + ((typeof config.must !== 'undefined' && config.must != '' ? '' + config.must + '' : '') + config.label || '') + + '
                      ' + ); + var $form = this.renderLineForm(config); + $form.data({ line: $line }); + $line.find('.info-r').append($form); + return { + $line: $line, + $form: $form, + }; + }, + + /** + * @description 帮助提示 + * @param {object} config 配置参数 + */ + help: function (config) { + var $help = ''; + for (var i = 0; i < config.list.length; i++) { + var item = config.list[i]; + $help += '
                    • ' + item + '
                    • '; + } + return $('
                        ' + $help + '
                      '); + }, + + /** + * @description 渲染表单行内容 + * @param {object} config 配置参数 + * @returns {jQuery|HTMLElement|*} + */ + renderLineForm: function (config) { + config.type = config.type || 'text'; + var lineFilter = ['label', 'labelWidth', 'group', 'on', 'width', 'options', 'type']; // 排除渲染这些属性 + var $form = null; + var props = (function () { + var attrs = {}; + for (var key in config) { + if (lineFilter.indexOf(key) === -1) { + attrs[key] = config[key]; + } + } + return attrs; + })(); + var width = config.width ? 'style="width:' + config.width + '"' : ''; + switch (config.type) { + case 'textarea': + $form = ''; + break; + case 'select': + var options = config.options, + optionsHtml = ''; + for (var i = 0; i < options.length; i++) { + var item = options[i], + newItem = item; + if (typeof item === 'string') newItem = { label: item, value: item }; + optionsHtml += ''; + } + $form = ''; + break; + case 'text': + $form = ''; + break; + } + $form = $($form); + $form.width(config.width || '100%').attr(props); + if (!config.on) config.on = {}; + for (var onKey in config.on) { + (function (onKey) { + $form.on(onKey, function (ev) { + config.on[onKey].apply(this, [ev, $(this).val()]); + }); + })(onKey); + } + return $form; + }, + + /** + * @description 渲染表单行组 + * @param {object} el 配置参数 + * @param {object} config 配置参数 + * @param {object|undefined} formData 表单数据 + */ + fromGroup: function (el, config, formData) { + var $el = $(el), + lineList = {}; + for (var i = 0; i < config.length; i++) { + var item = config[i]; + if (item.type === 'tips') { + $el.append(this.help(item)); + } else { + var line = this.line(item); + if (typeof formData != 'undefined') line.$form.val(formData[item.name] || ''); + lineList[line.$form.attr('name')] = line; + $el.append(line.$line); + } + } + return lineList; + }, + + /** + * @description 渲染Form表单 + * @param {*} config + * @return 当前实例对象 + */ + form: function (config) { + var _that = this; + + function ReaderForm(config) { + this.config = config; + this.el = config.el; + this.submit = config.submit; + this.data = config.data || {}; + this.$load(); + } + + ReaderForm.prototype = { + element: null, + style_list: [], // 样式列表 + event_list: {}, // 事件列表,已绑定事件 + event_type: ['click', 'event', 'focus', 'keyup', 'blur', 'change', 'input'], + hide_list: [], + form_element: {}, + form_config: {}, + random: bt.get_random(5), + $load: function () { + var that = this; + if (this.el) { + $(this.el).html(this.$reader_content()); + this.$event_bind(); + } + }, + + /** + * @description 渲染Form内容 + * @param {Function} callback 回调函数 + */ + $reader_content: function (callback) { + var that = this, + html = '', + _content = ''; + $.each(that.config.form, function (index, item) { + if (item.separate) { + html += '
                      ' + item.separate + '
                      '; + } else { + html += that.$reader_content_row(index, item); + } + }); + that.element = $('
                      ' + html + '
                      '); + _content = $('
                      '); + _content.append(that.element); + if (callback) callback(); + return _content[0].outerHTML; + }, + + /** + * @description 渲染行内容 + * @param {object} data Form数据 + * @param {number} index 下标 + * @return {string} HTML结构 + */ + $reader_content_row: function (index, data) { + try { + var that = this, + help = data.help || false, + labelWidth = data.formLabelWidth || this.config.formLabelWidth; + if (data.display === false) return ''; + return ( + '
                      ' + + (typeof data.label !== 'undefined' + ? '' + + (typeof data.must !== 'undefined' && data.must != '' ? '' + data.must + '' : '') + + data.label + + '' + : '') + + '
                      ' + + that.$reader_form_element(data.group, index) + + (help ? '
                      ' + help.list.join('
                      ') + '
                      ' : '') + + '
                      ' + + '
                      ' + ); + } catch (error) { + console.log(error); + } + }, + + /** + * @description 渲染form类型 + * @param {object} data 表单数据 + * @param {number} index 下标 + * @return {string} HTML结构 + */ + $reader_form_element: function (data, index) { + var that = this, + html = ''; + if (!Array.isArray(data)) data = [data]; + $.each(data, function (key, item) { + item.find_index = index; + html += that.$reader_form_find(item); + that.form_config[item.name] = item; + }); + return html; + }, + /** + * @descripttion 渲染单个表单元素 + * @param {Object} item 配置 + * @return: viod + */ + $reader_form_find: function (item) { + var that = this, + html = '', + style = that.$reader_style(item.style) + _that.$verify(item.width, 'width', 'style'), + attribute = that.$verify_group(item, ['name', 'placeholder', 'disabled', 'readonly', 'autofocus', 'autocomplete', 'min', 'max']), + event_group = that.$create_event_config(item), + eventName = '', + index = item.find_index; + if (item.display === false) return html; + html += item.label ? '' + item.label + '' : ''; + if (typeof item['name'] !== 'undefined') { + that.$check_event_bind(item.name, event_group); + } + html += '
                      '; + var _value = typeof that.data[item.name] !== 'undefined' && that.data[item.name] != '' ? that.data[item.name] : item.value || ''; + switch (item.type) { + case 'text': // 文本选择 + case 'checkbox': // 复选框 + case 'password': // 密码 + case 'radio': // 单选框 + case 'number': // 数字 + var _event = 'event_' + item.name + '_' + that.random; + switch (item.type) { + case 'checkbox': // 复选框 + html += + ''; + if (!(typeof item.disabled != 'undefined' && item.disabled)) { + that.$check_event_bind(_event, { + input: { + type: 'checkbox', + config: item, + event: item.event, + }, + }); + } + break; + default: + html += + ''; + break; + } + if (item.btn && !item.disabled) { + html += '' + item.btn.title + ''; + if (typeof item.btn.event !== 'undefined') { + that.$check_event_bind(item.name + '_btn', { + click: { + config: item, + event: item.btn.event, + }, + }); + } + } + if (item.icon) { + html += + ''; + if (typeof item.icon.event !== 'undefined') { + that.$check_event_bind(item.name + '_icon', { + click: { + type: 'select_path', + select: item.icon.select || '', + config: item, + children: '.' + item.name + '_icon', + event: item.icon.event, + callback: item.icon.callback, + }, + }); + } + } + break; + case 'textarea': + html += ''; + $.each(['blur', 'focus', 'input'], function (index, items) { + if (item.tips) { + var added = null, + event = {}; + switch (items) { + case 'blur': + added = function (ev, item, element) { + if ($(this).val() === '') $(this).next().show(); + layer.close(item.tips.loadT); + $(ev.target).data('layer', ''); + }; + break; + case 'focus': + added = function (ev, item) { + $(this).next().hide(); + item.tips.loadT = layer.tips(tips, $(this), { + tips: [1, '#20a53a'], + time: 0, + area: $(this).width(), + }); + }; + break; + } + } + that.event_list[item.name][items] + ? (that.event_list[item.name][items]['added'] = added) + : (that.event_list[item.name][items] = { + type: item.type, + cust: false, + event: item[items], + added: added, + }); + }); + if (item.tips) { + var tips = ''; + if (typeof item.tips.list === 'undefined') { + tips = item.tips.text; + } else { + tips = item.tips.list.join('
                      '); + } + html += '
                      ' + tips + '
                      '; + that.$check_event_bind(item.name + '_tips', { + click: { + type: 'textarea_tips', + config: item, + }, + }); + } + break; + case 'select': + html += that.$reader_select(item, style, attribute, index); + that.$check_event_bind('custom_select', { + click: { + type: 'custom_select', + children: '.bt_select_value', + }, + }); + that.$check_event_bind('custom_select_item', { + click: { + type: 'custom_select_item', + children: 'li.item', + }, + }); + break; + case 'link': + eventName = 'event_link_' + that.random + '_' + item.name; + html += '' + item.title + ''; + that.$check_event_bind(eventName, { + click: { + type: 'link_event', + event: item.event, + }, + }); + break; + case 'button': + html += + // ''; + break; + case 'help': + var _html = ''; + $.each(item.list, function (index, items) { + _html += '
                    • ' + items + '
                    • '; + }); + html += '
                        ' + _html + '
                      '; + break; + case 'other': + html += item.boxcontent; + } + html += item.unit ? '' + item.unit + '' : ''; + html += '
                      '; + return html; + }, + + /** + * @descripttion 检测检测名称 + * @param {string} eventName 配置 + * @param {object} config 事件配置 + */ + $check_event_bind: function (eventName, config) { + if (!this.event_list[eventName]) { + if (!this.event_list.hasOwnProperty(eventName)) { + this.event_list[eventName] = config; + } + } + }, + /** + * @description 创建事件配置 + * @param {object} item 行内配置 + * @return {object} 配置信息 + */ + $create_event_config: function (item) { + var config = {}; + if (typeof item['name'] === 'undefined') return {}; + $.each(this.event_type, function (key, items) { + if (item[items]) { + config[items === 'event' ? 'click' : items] = { + type: item.type, + event: item[items], + cust: ['select', 'checkbox', 'radio'].indexOf(item.type) > -1, + config: item, + }; + } + }); + return config; + }, + /** + * @description 渲染样式 + * @param {object|string} data 样式配置 + * @return {string} 样式 + */ + $reader_style: function (data) { + var style = ''; + if (typeof data === 'string') return data; + if (typeof data === 'undefined') return ''; + $.each(data, function (key, item) { + style += key + ':' + item + ';'; + }); + return style; + }, + /** + * @descripttion 局部刷新form表单元素 + * @param {String} name 需要刷新的元素 + * @param {String} name 元素新数据 + * @return: viod + */ + $local_refresh: function (name, config) { + var formFind = this.element.find('[data-name=' + name + ']'); + if (this.element.find('[data-name=' + name + ']').length === 0) formFind = this.element.find('[name=' + name + ']'); + formFind.parent().replaceWith(this.$reader_form_find(config)); + }, + /** + * @description 渲染下拉,内容方法 + */ + $reader_select: function (item, style, attribute, index) { + var that = this, + list = '', + option = '', + active = {}; + if (typeof item.list === 'function') { + var event = item.list; + event.call(this, this.config.form); + item.list = []; + } + if (!Array.isArray(item.list)) { + var config = item.list; + bt_tools.send( + { + url: config.url, + data: config.param || config.data || {}, + }, + function (res) { + if (res.status !== false) { + var list = item.list.dataFilter ? item.list.dataFilter(res, that) : res; + if (item.list.success) item.list.success(res, that, that.config.form[index], list); + item.list = list; + if (!item.list.length) { + item.disabled = true; + layer.msg(item.placeholder || '数据获取为空', { icon: 2 }); + } + that.$replace_render_content(index); + } else { + bt.msg(res); + } + } + ); + return false; + } + if (typeof that.data[item.name] === 'undefined') active = item.list[0]; + $.each(item.list, function (key, items) { + if (items.value === item.value || items.value === that.data[item.name]) { + active = items; + return false; + } + }); + $.each(item.list, function (key, items) { + list += '
                    • ' + items.title + '
                    • '; + option += ''; + }); + var title = !Array.isArray(item.list) ? 'Getting data...' : active ? active.title : item.placeholder; + return ( + '
                      ' + + '' + + (title || item.placeholder) + + '' + + '
                        ' + + (list || '') + + '
                      ' + + '' + + (option || '') + + '' + + '
                      ' + ); + }, + + /** + * @description 替换渲染内容 + */ + $replace_render_content: function (index) { + var that = this, + config = this.config.form[index], + html = that.$reader_content_row(index, config); + $('[data-form=' + that.random + ']') + .find('.line:eq(' + index + ')') + .replaceWith(html); + this.$event_bind(); + }, + + /** + * @description 重新渲染内容 + * @param {object} formConfig 配置 + */ + $again_render_form: function (formConfig) { + var formElement = $('[data-form=' + this.random + ']'), + that = this; + formConfig = formConfig || this.config.form; + formElement.empty(); + for (var i = 0; i < formConfig.length; i++) { + var config = formConfig[i]; + if (config.display === false) continue; + formElement.append(that.$reader_content_row(i, config)); + } + this.config.form = formConfig; + this.$event_bind(); + }, + + /** + * @description 事件绑定功能 + * @param {Object} eventList 事件列表 + * @param {Function} callback 回调函数 + * @return void + */ + $event_bind: function (eventList, callback) { + var that = this, + _event = {}; + that.element = $(typeof eventList === 'object' ? that.element : '[data-form=' + that.random + ']'); + _event = eventList; + if (typeof eventList === 'undefined') _event = that.event_list; + $.each(_event, function (key, item) { + if ($.isEmptyObject(item)) return true; + $.each(item, function (keys, items) { + if (!!item.type) return false; + if (!items.hasOwnProperty('bind')) { + items.bind = true; + } else { + return false; + } + var childNode = ''; + if (typeof items.cust === 'boolean') { + childNode = '[' + (items.cust ? 'data-' : '') + 'name=' + key + ']'; + } else { + childNode = '.' + key; + } + (function (items, key) { + if (items.onEvent === false) { + switch (items.type) { + case 'input_checked': + $(childNode).on(keys != 'event' ? keys : 'click', function (ev) { + items.event.apply(this, [ev, that]); + }); + break; + } + return true; + } else { + if (items.type === 'select') return true; + that.element.on(keys !== 'event' ? keys : 'click', items.children ? items.children : childNode, function (ev) { + var form = that.$get_form_element(true), + config = that.form_config[key]; + switch (items.type) { + case 'textarea_tips': + $(this).hide().prev().focus(); + break; + case 'custom_select': + if ($(this).parent().hasClass('bt-disabled')) return false; + var select_value = $(this).next(); + if (!select_value.hasClass('show')) { + var $target = $(ev.currentTarget); + var $layer = $target.parents('.layui-layer'); + var layerTop = $layer.length > 0 ? parseFloat($layer.css('top')) : 0; + var layerLeft = $layer.length > 0 ? parseFloat($layer.css('left')) : 0; + var offset = $target[0].getBoundingClientRect(); + var top = offset.top - layerTop + offset.height + 2; + var left = offset.left - layerLeft; + $('.bt_select_list').css({ + position: 'fixed', + width: offset.width + 'px', + top: top + 'px', + left: left + 'px', + }); + $('.bt_select_list').removeClass('show'); + select_value.addClass('show'); + } else { + select_value.removeClass('show'); + } + $(document).click(function () { + that.element.find('.bt_select_list').removeClass('show'); + $(this).unbind('click'); + return false; + }); + return false; + break; + case 'custom_select_item': + config = that.form_config[$(this).parents('.bt_select_updown').attr('data-name')]; + var item_config = config.list[$(this).index()]; + if ($(this).hasClass('disabled')) { + $(this).parent().removeClass('show'); + if (item_config.tips) layer.msg(item_config.tips, { icon: 2 }); + return true; + } + if (!$(this).hasClass('active') && !$(this).hasClass('disabled')) { + var value = item_config.value.toString(); + $(this).parent().prev().find('.bt_select_content').text($(this).text()); + $(this).addClass('active').siblings().removeClass('active'); + $(this).parent().next().val(value); + $(this).parent().removeClass('show'); + } + that.data[config.name] = value; + if (items.event) items.event = null; + if (config.change) items.event = config.change; + break; + case 'select_path': + bt.select_path('event_' + $(this).prev().attr('name') + '_' + that.random, items.select || '', !items.callback || items.callback.bind(that)); + break; + case 'checkbox': + var checked = $(this).is(':checked'); + if (checked) { + $(this).prev().addClass('active'); + } else { + $(this).prev().removeClass('active'); + } + break; + } + if (items.event) items.event.apply(this, [that.$get_form_value(), form, that, config, ev]); // 事件 + if (items.added) items.added.apply(this, [ev, config, form]); + }); + } + })(items, key); + }); + }); + if (callback) callback(); + }, + + /** + * @description 获取表单数据 + * @return {object} 表单数据 + */ + $get_form_value: function () { + var form = {}; + this.element.find('input,textarea[disabled="disabled"]').each(function (index, item) { + var val = $(this).val(); + if ($(this).attr('type') === 'checkbox') { + val = $(this).prop('checked'); + } + form[$(this).attr('name')] = val; + }); + return $.extend({}, this.element.serializeObject(), form); + }, + + /** + * @description 设置指定数据 + * + */ + $set_find_value: function (name, value) { + var config = {}, + that = this; + typeof name != 'string' ? (config = name) : (config[name] = value); + $.each(config, function (key, item) { + that.form_element[key].val(item); + }); + }, + + /** + * @description 获取Form,jquery节点 + * @param {Boolean} afresh 是否强制刷新 + * @return {object} + */ + $get_form_element: function (afresh) { + var form = {}, + that = this; + if (afresh || $.isEmptyObject(that.form_element)) { + this.element.find(':input').each(function (index) { + form[$(this).attr('name')] = $(this); + }); + that.form_element = form; + return form; + } else { + return that.form_element; + } + }, + + /** + * @description 验证值整个列表是否存在,存在则转换成属性字符串格式 + */ + $verify_group: function (config, group) { + var that = this, + str = ''; + $.each(group, function (index, item) { + if (typeof config[item] === 'undefined') return true; + if (['disabled', 'readonly'].indexOf(item) > -1) { + str += ' ' + (config[item] ? item + '="' + item + '"' : ''); + } else { + str += ' ' + item + '="' + config[item] + '"'; + } + }); + return str; + }, + + /** + * @description 验证绑定事件 + * @param {String} value + */ + $verify_bind_event: function (eventName, row, group) { + var event_list = {}; + $.each(group, function (index, items) { + var event_fun = row[items]; + if (event_fun) { + if (typeof event_list[eventName] === 'object') { + if (!Array.isArray(event_list[eventName])) event_list[eventName] = [event_list[eventName]]; + event_list[eventName].push({ + event: event_fun, + eventType: items, + }); + } else { + event_list[eventName] = { + event: event_fun, + eventType: items, + }; + } + } + }); + return event_list; + }, + + /** + * @description 验证值是否存在 + * @param {String} value 内容/值 + * @param {String|Boolean} attr 属性 + * @param {String} type 属性 + */ + $verify: function (value, attr, type) { + if (!value) return ''; + if (type === true) return value ? ' ' + attr : ''; + if (type === 'style') return attr ? attr + ':' + value + ';' : value; + return attr ? ' ' + attr + '="' + value + '"' : ' ' + value; + }, + /** + * @description 验证form表单 + */ + $verify_form: function () { + var form_list = {}, + form = this.config.form, + form_value = this.$get_form_value(), + form_element = this.$get_form_element(true); + for (var key = 0; key < form.length; key++) { + var item = form[key]; + if (!Array.isArray(item.group)) item.group = [item.group]; + if (item.separate) continue; + for (var i = 0; i < item.group.length; i++) { + var items = item.group[i], + name = items.name; + if (items.type === 'help') continue; + if (typeof items.verify != 'undefined') { + var value = items.verify(form_value[name], form_element[name], items, true); + if (value === false && form_value[name] !== false) return false; + form_list[name] = value; + } else { + form_list[name] = typeof form_value[name] === 'undefined' && items.disabled ? $('[name="' + name + '"]').val() : form_value[name]; + } + } + } + return form_list; + }, + /** + * @description 提交内容,需要传入url + * @param {Object|Function} param 附加参数或回调函数 + * @param {Function} callback 回调 + */ + $submit: function (param, callback, tips) { + var form = this.$verify_form(); + if (typeof param === 'function') (tips = callback), (callback = param), (param = {}); + if (!form) return false; + form = $.extend(form, param); + if (typeof this.config.url == 'undefined') { + bt_tools.msg('Request Submission address cannot be empty!', false); + return false; + } + bt_tools.send( + { + url: this.config.url, + data: form, + }, + function (res) { + if (callback) { + callback(res, form); + } else { + bt_tools.msg(res); + } + }, + tips || 'Submit' + ); + }, + }; + return new ReaderForm(config); + }, + /** + * @description tab切换,支持三种模式 + * @param {object} config + * @return 当前实例对象 + */ + tab: function (config) { + var _that = this; + + function ReaderTab(config) { + this.config = config; + this.theme = this.config.theme || {}; + this.$load(); + } + + ReaderTab.prototype = { + type: 1, + theme_list: [ + { + content: 'tab-body', + nav: 'tab-nav', + body: 'tab-con', + active: 'on', + }, + { + content: 'bt-w-body', + nav: 'bt-w-menu', + body: 'bt-w-con', + }, + ], + random: bt.get_random(5), + $init: function () { + var that = this, + active = this.config.active, + config = that.config.list, + _theme = {}; + this.$event_bind(); + if (config[that.active].success) config[that.active].success(); + config[that.active]['init'] = true; + }, + $load: function () { + var that = this; + }, + $reader_content: function () { + var that = this, + _list = that.config.list, + _tab = '', + _tab_con = '', + _theme = that.theme, + config = that.config; + if (typeof that.active === 'undefined') that.active = 0; + if (!$.isEmptyObject(config.theme)) { + _theme = this.theme_list[that.active]; + $.each(config.theme, function (key, item) { + if (_theme[key]) _theme[key] += ' ' + item; + }); + that.theme = _theme; + } + if (config.type && $.isEmptyObject(config.theme)) this.theme = this.theme_list[that.active]; + $.each(_list, function (index, item) { + var active = that.active === index, + _active = _theme['active'] || 'active'; + _tab += '' + item.title + ''; + _tab_con += '
                      ' + (active ? item.content : '') + '
                      '; + }); + that.element = $( + '
                      ' + + _tab + + '
                      ' + + _tab_con + + '
                      ' + ); + return that.element[0].outerHTML; + }, + /** + * @description 事件绑定 + * + */ + $event_bind: function () { + var that = this, + _theme = that.theme, + active = _theme['active'] || 'active'; + if (!that.el) that.element = $('#tab_' + that.random); + that.element.on('click', '.' + _theme['nav'].replace(/\s+/g, '.') + ' span', function () { + var index = $(this).index(), + config = that.config.list[index]; + $(this).addClass(active).siblings().removeClass(active); + $('#tab_' + that.random + ' .' + _theme['body'] + '>div:eq(' + index + ')') + .addClass(active) + .siblings() + .removeClass(active); + that.active = index; + if (!config.init) { + // console.log(_theme) + var contentItem = $('#tab_' + that.random + ' .' + _theme['body'] + '>div:eq(' + index + ')'); + contentItem.html(config.content); + if (config.success) config.success(contentItem); + config.init = true; + } + }); + }, + }; + return new ReaderTab(config); + }, + /** + * @description loading过渡 + * @param {*} title + * @param {*} is_icon + * @return void + */ + load: function (title) { + var random = bt.get_random(5), + layel = $( + '
                      ' + + title + + ',please wait...
                      ' + ), + mask = '', + loadT = ''; + $('body').append(layel); + var win = $(window), + msak = $('.layer-loading-mask'), + layel = $('#' + random); + layel.css({ top: (win.height() - 64) / 2, left: (win.width() - 320) / 2 }); + if (title === true) loadT = layer.load(); + return { + close: function () { + if (typeof loadT == 'number') { + layer.close(loadT); + } else { + $('body') + .find('#' + random + ',#layer-mask-' + random) + .remove(); + } + }, + }; + }, + /** + * @description 弹窗方法,有默认的参数和重构的参数 + * @param {object} config 和layer参数一致 + * @require 当前关闭弹窗方法 + */ + open: function (config) { + var _config = {}, + layerT = null, + form = null; + _config = $.extend({ type: 1, area: '640px', closeBtn: 2, btn: ['Yes', 'No'] }, config); + if (typeof _config.content == 'object') { + var param = _config.content; + form = bt_tools.form(param); + _config.success = function (layero, indexs) { + form.$event_bind(); + if (typeof config.success != 'undefined') config.success(layero, indexs); + }; + _config.yes = function (indexs, layero) { + var form_val = form.$verify_form(); + if (!form_val) return false; + if (typeof config.yes != 'undefined') { + var yes = config.yes.apply(form, [form_val, indexs, layero]); + if (!yes) return false; + } + }; + _config.content = form.$reader_content(); + } + layerT = layer.open(_config); + return { + close: function () { + layer.close(layerT); + }, + form: form, + }; + }, + /** + * @description 封装msg方法 + * @param {object|string} param1 配置参数,请求方法参数 + * @param {number} param2 图标ID + * @require 当前关闭弹窗方法 + */ + msg: function (param1, param2) { + var layerT = null, + msg = '', + config = {}; + if (typeof param1 === 'object') { + if (typeof param1.status === 'boolean') { + (msg = param1.msg), (config = { icon: param1.status ? 1 : 2 }); + if (!param1.status) config = $.extend(config, { time: !param2 ? 0 : 3000, closeBtn: 2, shade: 0.3 }); + } + } + if (typeof param1 === 'string') { + (msg = param1), + (config = { + icon: typeof param2 !== 'undefined' ? param2 : 1, + }); + } + layerT = layer.msg(msg, config); + return { + close: function () { + layer.close(layerT); + }, + }; + }, + /** + * @description 成功提示 + * @param {string} msg 信息 + */ + success: function (msg) { + this.msg({ msg: msg, status: true }); + }, + + /** + * @description 错误提示 + * @param {string} msg 信息 + */ + error: function (msg) { + this.msg({ msg: msg, status: false }); + }, + /** + * @description 请求封装 + * @param {string|object} conifg ajax配置参数/请求地址 + * @param {function|object} callback 回调函数/请求参数 + * @param {function} callback1 回调函数/可为空 + * @returns void 无 + */ + send: function (param1, param2, param3, param4, param5, param6) { + var params = {}, + success = null, + error = null, + config = [], + param_one = ''; + $.each(arguments, function (index, items) { + config.push([items, typeof items]); + }); + function diff_data(i) { + try { + success = config[i][1] == 'function' ? config[i][0] : null; + error = config[i + 1][1] == 'function' ? config[i + 1][0] : null; + } catch (error) {} + } + param_one = config[0]; + switch (param_one[1]) { + case 'string': + $.each(config, function (index, items) { + var value = items[0], + type = items[1]; + if (index > 1 && (type == 'boolean' || type == 'string' || type == 'object')) { + var arry = param_one[0].split('/'); + params['url'] = '/' + arry[0] + '?action=' + arry[1]; + if (type == 'object') { + params['load'] = value.load; + params['verify'] = value.verify; + if (value.plugin) params['url'] = '/plugin?action=a&name=' + arry[0] + '&s=' + arry[1]; + } else if (type == 'string') { + params['load'] = value; + } + return false; + } else { + params['url'] = param_one[0]; + } + }); + if (config[1][1] === 'object') { + params['data'] = config[1][0]; + diff_data(2); + } else { + diff_data(1); + } + break; + case 'object': + params['url'] = param_one[0].url; + params['data'] = param_one[0].data || {}; + $.each(config, function (index, items) { + var value = items[0], + type = items[1]; + if (index > 1 && (type == 'boolean' || type == 'string' || type == 'object')) { + switch (type) { + case 'object': + params['load'] = value.load; + params['verify'] = value.verify; + break; + case 'string': + params['load'] = value; + break; + } + return true; + } + }); + if (config[1][1] === 'object') { + params['data'] = config[1][0]; + diff_data(2); + } else { + diff_data(1); + } + break; + } + if (params.load) params.load = this.load(params.load); + $.ajax({ + type: params.type || 'POST', + url: params.url, + data: params.data || {}, + dataType: params.dataType || 'JSON', + complete: function (res) { + if (params.load) params.load.close(); + }, + success: function (res) { + if (typeof params.verify == 'boolean' && !params.verify) { + if (success) success(res); + return false; + } + if (typeof res === 'string') { + layer.msg(res, { + icon: 2, + time: 0, + closeBtn: 2, + }); + return false; + } + if (params.batch) { + if (success) success(res); + return false; + } + if (res.status === false && (res.hasOwnProperty('msg') || res.hasOwnProperty('error_msg'))) { + if (error) { + error(res); + } else { + bt_tools.msg({ status: res.status, msg: !res.hasOwnProperty('msg') ? res.error_msg : res.msg }); + } + return false; + } + + if (params.tips) { + bt_tools.msg(res); + } + if (success) success(res); + }, + }); + }, + + /** + * @description 命令行输入 + */ + command_line_output: function (config) { + var _that = this, + uuid = bt.get_random(15); + + /** + * @description 渲染 + * @param config + * @return {object} + * @constructor + */ + function ReaderCommand(config) { + var that = this; + for (var key in _that.commandConnectionPool) { + var item = _that.commandConnectionPool[key], + element = $(item.config.el); + if (config.shell === item.config.shell && element.length) { + item.el = element; + return item; + } + } + if (typeof config === 'undefined') config = {}; + this.config = $.extend({ route: '/sock_shell' }, config); + this.xterm_config = $.extend(this.xterm_config, this.config.xterm); + this.el = $(this.config.el); + this.open = config.open; + this.close = config.close; + this.message = config.message; + if (!this.config.hasOwnProperty('el')) { + _that.msg({ msg: '请输入选择器element,不可为空', status: false }); + return false; + } + if (!this.config.hasOwnProperty('shell')) { + _that.msg({ msg: '请输入命令,不可为空', status: false }); + return false; + } + if (this.config.hasOwnProperty('time')) { + setTimeout(function () { + that.close_connect(); + }, this.config.time); + } + this.init(); + } + + ReaderCommand.prototype = { + socket: null, //websocket 连接保持的对象 + socketToken: null, + timeout: 0, // 连接到期时间,为0代表永久有效 + monitor_interval: 2000, + element_detection: null, + uuid: uuid, + fragment: [], + error: 0, // 错误次数,用于监听元素内容是否还存在 + retry: 0, // 重试次数 + forceExit: false, // 强制断开连接 + /** + * @description 程序初始化 + */ + init: function () { + var oldUUID = bt.get_cookie('commandInputViewUUID'), + that = this; + if (!this.el[0]) { + if (this.error > 10) return false; + setTimeout(function () { + that.init(); + this.error++; + }, 2000); + return false; + } + this.error = 0; + if (this.el[0].localName !== 'pre') { + this.el.append('
                      ');
                      +					this.el = this.el.find('pre');
                      +					this.config.el = this.config.el + ' pre';
                      +				} else {
                      +					this.el.addClass('command_output_pre');
                      +				}
                      +				if (Array.isArray(this.config.area)) {
                      +					this.el.css({ width: this.config.area[0], height: this.config.area[1] });
                      +				} else {
                      +					this.el.css({ width: '100%', height: '100%' });
                      +				}
                      +				if (oldUUID && typeof _that.commandConnectionPool[oldUUID] != 'undefined') {
                      +					_that.commandConnectionPool[oldUUID].close_connect();
                      +					delete _that.commandConnectionPool[oldUUID];
                      +				}
                      +				bt.set_cookie('commandInputViewUUID', this.uuid);
                      +				this.element_detection = setInterval(function () {
                      +					if (!$(that.config.el).length) {
                      +						clearInterval(that.element_detection);
                      +						that.forceExit = true;
                      +						that.close_connect();
                      +					}
                      +				}, 1 * 60 * 1000);
                      +				this.set_full_screen();
                      +				this.create_websocket_connect(this.config.route, this.config.shell);
                      +				this.monitor_element();
                      +			},
                      +			/**
                      +			 * @description 创建websocket连接
                      +			 * @param {string} url websocket连接地址
                      +			 * @param {string} shell 需要传递的命令
                      +			 */
                      +			create_websocket_connect: function (url, shell) {
                      +				var that = this;
                      +				this.socket = new WebSocket((location.protocol === 'http:' ? 'ws://' : 'wss://') + location.host + url);
                      +				this.socket.addEventListener('open', function (ev) {
                      +					if (!this.socketToken) {
                      +						var _token = document.getElementById('request_token_head').getAttribute('token');
                      +						this.socketToken = { 'x-http-token': _token };
                      +					}
                      +					this.send(JSON.stringify(this.socketToken));
                      +					this.send(shell);
                      +					if (that.open) that.open();
                      +					that.retry = 0;
                      +				});
                      +				this.socket.addEventListener('close', function (ev) {
                      +					if (!that.forceExit) {
                      +						if (ev.code !== 1000 && that.retry <= 10) {
                      +							that.socket = that.create_websocket_connect(that.config.route, that.config.shell);
                      +							that.retry++;
                      +						}
                      +						if (that.close) that.close(ev);
                      +					}
                      +				});
                      +				this.socket.addEventListener('message', function (ws_event) {
                      +					var result = ws_event.data;
                      +					if (!result) return;
                      +					that.refresh_data(result);
                      +					if (that.message) that.message(result);
                      +				});
                      +				return this.socket;
                      +			},
                      +
                      +			/**
                      +			 * @description 设置全屏视图
                      +			 */
                      +			set_full_screen: function () {
                      +				// 1
                      +			},
                      +
                      +			htmlEncodeByRegExp: function (str) {
                      +				if (str.length == 0) return '';
                      +				return str.replace(/&/g, '&').replace(//g, '>').replace(/ /g, ' ').replace(/\'/g, ''').replace(/\"/g, '"');
                      +			},
                      +
                      +			/**
                      +			 * @description 刷新Pre数据
                      +			 * @param {object} data 需要插入的数据
                      +			 */
                      +			refresh_data: function (data) {
                      +				var data = this.htmlEncodeByRegExp(data);
                      +				this.fragment.push(data);
                      +				if (this.fragment.length >= 300) {
                      +					this.fragment.splice(0, 150);
                      +					this.el.html(this.fragment.join(''));
                      +				} else {
                      +					this.el.append(data);
                      +				}
                      +				if (this.el.length > 0) {
                      +					this.el.scrollTop(this.el[0].scrollHeight);
                      +				}
                      +			},
                      +
                      +			/**
                      +			 * @description 监听元素状态,判断是否移除当前的ws连接
                      +			 *
                      +			 */
                      +			monitor_element: function () {
                      +				var that = this;
                      +				this.monitor_interval = setInterval(function () {
                      +					if (!that.el.length) {
                      +						that.close_connect();
                      +						clearInterval(that.monitor_interval);
                      +					}
                      +				}, that.config.monitorTime || 2000);
                      +			},
                      +
                      +			/**
                      +			 * @description 断开命令响应和websocket连接
                      +			 */
                      +			close_connect: function () {
                      +				this.socket.send('');
                      +				this.socket.close();
                      +				delete _that.commandConnectionPool[this.uuid];
                      +			},
                      +		};
                      +		this.commandConnectionPool[uuid] = new ReaderCommand(config);
                      +		return this.commandConnectionPool[uuid];
                      +	},
                      +
                      +	/**
                      +	 * @description 清理验证提示样式
                      +	 * @param {object} element  元素节点
                      +	 */
                      +	$clear_verify_tips: function (element) {
                      +		element.removeClass('bt-border-error bt-border-sucess');
                      +		layer.close('tips');
                      +	},
                      +
                      +	/**
                      +	 * @description 验证提示
                      +	 * @param {object} element  元素节点
                      +	 * @param {string} tips 警告提示
                      +	 * @return void
                      +	 */
                      +	$verify_tips: function (element, tips, is_error) {
                      +		if (typeof is_error === 'undefined') is_error = true;
                      +		element.removeClass('bt-border-error bt-border-sucess').addClass(is_error ? 'bt-border-error' : 'bt-border-sucess');
                      +		element.focus();
                      +		layer.tips('' + tips + '', element, {
                      +			tips: [1, is_error ? 'red' : '#20a53a'],
                      +			time: 3000,
                      +			area: element.width(),
                      +		});
                      +	},
                      +	/**
                      +	 * @description 验证值是否存在
                      +	 * @param {String} value 内容/值
                      +	 * @param {String|Boolean} attr 属性
                      +	 * @param {String} type 属性
                      +	 */
                      +	$verify: function (value, attr, type) {
                      +		if (!value) return '';
                      +		if (type === true) return value ? ' ' + attr : '';
                      +		if (type === 'style') return attr ? attr + ':' + value + ';' : value;
                      +		return attr ? ' ' + attr + '="' + value + '"' : ' ' + value;
                      +	},
                      +
                      +	/**
                      +	 * @description 批量操作的结果
                      +	 * @param {*} config
                      +	 */
                      +	$batch_success_table: function (config) {
                      +		var _that = this,
                      +			length = $(config.html).length;
                      +		bt.open({
                      +			type: 1,
                      +			title: config.title,
                      +			area: config.area || ['400px'],
                      +			shadeClose: false,
                      +			closeBtn: 2,
                      +			content:
                      +				config.content ||
                      +				'
                      ' + + config.title + + ' ' + + lan['public'].success + + '
                      ' + + config.html + + '
                      ' + + config.th + + '' + + lan['public'].result + + '
                      ', + success: function () { + if (length > 4) _that.$fixed_table_thead('.fiexd_thead'); + }, + }); + }, + /** + * @description 固定表头 + * @param {string} el DOM选择器 + * @return void + */ + $fixed_table_thead: function (el) { + $(el).scroll(function () { + var scrollTop = this.scrollTop; + this.querySelector('thead').style.transform = 'translateY(' + scrollTop + 'px)'; + }); + }, + /** + * @description 插件视图设置 + * @param {object|string} layid dom元素或layer_id + * @param {object} config 插件宽度高度或其他配置 + */ + $piugin_view_set: function (layid, config) { + var element = $(typeof layid === 'string' ? '#layui-layer' + layid : layid).hide(), + win = $(window); + setTimeout(function () { + var width = config.width || element.width(), + height = config.height || element.height(); + element + .css( + $.extend(config, { + left: (win.width() - width) / 2, + top: (win.height() - height) / 2, + }) + ) + .addClass('custom_layer'); + }, 50); + setTimeout(function () { + element.show(); + }, 500); + }, }; +setTimeout(function () { + $.fn.serializeObject = function () { + var hasOwnProperty = Object.prototype.hasOwnProperty; + return this.serializeArray().reduce(function (data, pair) { + if (!hasOwnProperty.call(data, pair.name)) { + data[pair.name] = pair.value; + } + return data; + }, {}); + }; +}, 300); + function arryCopy(arrys) { - var list = arrys.concat(), arry = [] - for (var i = 0; i < list.length; i++) { - arry.push($.extend(true, {}, list[i])) - } - return arry -} \ No newline at end of file + var list = arrys.concat(), + arry = []; + for (var i = 0; i < list.length; i++) { + arry.push($.extend(true, {}, list[i])); + } + return arry; +} diff --git a/BTPanel/static/js/upload-drog.js b/BTPanel/static/js/upload-drog.js new file mode 100644 index 00000000..2de67a8d --- /dev/null +++ b/BTPanel/static/js/upload-drog.js @@ -0,0 +1,907 @@ +'use strict'; + +/* + * @Description: 上传文件,三合一组件 + * @Version: 1.0 + * @Autor: chudong + * @Date: 2021-10-11 15:54:00 + * @LastEditors: chudong + * @LastEditTime: 2021-11-04 17:12:51 + */ +function UploadFile() { + this.uploadPath = ''; // 上传文件位置 + this.init = false; // 是否初始化 + this.compatible = true; // 是否兼容当前系统,默认全部兼容 + this.uploadElement = null; // 更新视图 + this.isUpload = true; // 是否可上传 + this.isGetFiles = false; // 是否可获取文件,如果当前拦截判断已经触发,则无法继续获取文件 + this.limit = { + size: 30 * 1024 * 1024 * 1024, + number: 1000 + }; + this.init_data(); // 初始化数据 + this.initialize_view(); // 初始化视图 + this.event_bind(); // 事件绑定 +} + +var uploadListhtml = '
                      • File nameFile sizeFile status
                        '; + +// 是否显示内容 +function is_show(el, show) { + el.style.display = show ? 'block' : 'none'; +} + +UploadFile.prototype = { + /** + * @description 创建节点 + */ + createEl: function createEl(name) { + return document.createElement(name); + }, + + + /** + * @description 获取节点 + */ + queryEl: function queryEl(el) { + return document.querySelector(el); + }, + + /** + * @description 获取所有节点 + */ + queryElAll: function queryElAll(el) { + return document.querySelectorAll(el); + }, + + + /** + * @description 绑定事件 + */ + bind: function bind(el, type, fn) { + if (typeof el === 'string') el = this.queryElAll(el); + if (typeof el.length !== 'number') el = [el]; + if (typeof type === "function") fn = type, type = "click"; + for (var i = 0; i < el.length; i++) { + var item = el[i]; + (function (item) { + item.addEventListener(type || 'click', function (ev) { + var index = [].indexOf.call(el, item); + fn.call(item, ev, index); + }, false); + })(item); + } + }, + + + /** + * @description 初始化数据 + */ + init_data: function init_data() { + + this.uploadStatus = 0; // 上传状态 0:等待上传 1:上传成功 2:上传中 + this.uploadLimitSize = 1024 * 1024 * 2; // 上传限制字节 + this.uploadList = []; // 上传列表 + this.isUpload = true; + this.uploadTime = { + endTime: 0, + startTime: 0 + }; + this.uploadInfo = { // 提示信息,用于通知当前上传状态 + estimatedTime: 0, // 上传预计耗时,时间戳 + uploadedSize: 0, // 已上传文件大小 + speedInterval: null, // 平局速度定时器 + speedAverage: 0, //平均速度 + uploadTime: 0, // 上传总耗时 + fileSize: 0, // 文件上传字节 + startTime: 0, // 文件上传开始时间 + endTime: 0 // 文件上传结束时间 + }; + + this.fileList = []; // 文件列表 + this.fileTotalSize = 0; // 全部文件大小 + this.fileTotalNumber = 0; //全部文件数量 + + this.uploadInterval = null; + this.uploadCycleSize = []; // 上传周期的字段 + + this.speedLastTime = 0; + this.timerSpeed = 0; + + this.uploadError = 0; + }, + + /** + * @description 初始化上传路径 + */ + init_upload_path: function (path) { + this.uploadPath = path || bt.get_cookie('Path'); // 上传目录 + }, + + /** + * @description 视图初始化 + */ + initialize_view: function () { + var title = this.createEl('span'); + this.uploadElement = this.createEl('div'); + this.uploadElement.setAttribute('style', 'position:fixed;top:0;left:0;right:0;bottom:0; background:rgba(255,255,255,0.6);border:3px #ccc dashed;z-index:99999999;color:#999;font-size:40px;text-align:center;overflow:hidden;'); + this.uploadElement.id = 'uploadView'; + is_show(this.uploadElement, false); + title.setAttribute('style', 'position: fixed;top: 50%;left: 50%;margin-left: -200px;margin-top: -40px;z-index:99999998'); + title.innerText = 'Upload files to the current directory'; + this.uploadElement.appendChild(title); + document.querySelector('body').appendChild(this.uploadElement); + }, + + + /** + * @description 绑定事件 + */ + event_bind: function event_bind() { + var _this = this; + + // 进入目标 + this.bind(document, 'dragenter', function (ev) { + _this.file_drag_hover(ev); + }); + + // 在放置目标上 + this.bind(this.uploadElement, 'dragover', function (ev) { + _this.file_drag_hover(ev); + }); + + // 离开放置目录 + this.bind(this.uploadElement, 'dragleave', function (ev) { + if (ev.path[0].id == 'uploadView') { + if (ev.screenX == 0 || ev.screenY == 0) { + ev.path[0].style.display = 'none'; + } + return false + } + // _this.file_drag_hover(ev); + }); + + // 放置目标 + this.bind(this.uploadElement, 'drop', function (ev) { + _this.isGetFiles = true; + if (_this.uploadStatus === 2) { + layer.msg('Uploading files, please wait...', { + icon: 0 + }); + _this.file_drag_hover(ev); + return false; + } + var path = $('#fileInputPath').attr('data-path'); + $('.againUpload').click(); + _this.init_upload_path(path); + _this.upload_layer(); + _this.isUpload = true; + _this.file_select_handler(ev); + }); + }, + + + /** + * @description 文件拖拽悬浮状态 + */ + file_drag_hover: function file_drag_hover(event) { + try { + if (event.dataTransfer.items[0].kind == 'string') return false; + } catch (error) {} + is_show(this.uploadElement, !(event.type === 'dragleave' || event.type === 'drop')); + event.preventDefault(); + event.stopPropagation(); + }, + + + /** + * @description 上传弹窗 + */ + upload_layer: function (list) { + var _this2 = this; + + if (typeof list === 'undefined') list = []; + if (this.layer) return false; + var layerMax = null, + layerShade = null, + uploadPath = this.uploadPath || bt.get_cookie('Path'); + this.layer = layer.open({ + type: 1, + closeBtn: 1, + maxmin: true, + area: ['650px', '605px'], + title: 'Upload files to [' + uploadPath + '] --- Support breakpoint renewal', + skin: 'file_dir_uploads', + content: '
                        \n
                        \n
                        \n \n \n \n
                        \n
                        \n
                        \n Total process , uploading ,\n Upload fail \n Speed Getting\n Expect time Getting\n \n
                        \n
                        \n
                        ' + (list.length > 0 ? uploadListhtml : 'Please drag the file here') + '
                        \n
                        \n
                        \n \n \n
                        ', + success: function success(layers, indexs) { + layerMax = _this2.queryEl('.file_dir_uploads').querySelector('.layui-layer-max'); + layerShade = document.querySelector('.layui-layer-shade'); + layerMax.style.display = 'none'; + var cancelUpload = _this2.queryEl('.cancelUpload'), + startUpload = _this2.queryEl('.startUpload'), + uploadFileBtn = _this2.queryEl('.upload_file_btn'), + dropdownItem = _this2.queryElAll('.dropdown-menu li'); + // 下拉选项 + _this2.bind(dropdownItem, function (ev) { + var type = ev.target.dataset.type; + if (type === 'file') { + _this2.queryEl('.upload_file_input').removeAttribute('webkitdirectory'); + } else if (type === 'dir') { + _this2.queryEl('.upload_file_input').setAttribute('webkitdirectory', ''); + } + _this2.queryEl('.upload_file_input').click(); + }); + + _this2.bind('.empty-record', function (ev) { + var $li = _this2.queryElAll('.dropUpLoadFile li'); + if ($li.length <= 0) { + layer.msg('Please select file!', {icon: 0}); + } else { + layer.confirm('Do you want to clear the upload list?', { + btn: ['Confirm', 'Cancel'], + title: 'clear the upload list', + icon: 0 + }, function (indexs) { + _this2.empty_upload_list(); + layer.close(indexs); + }); + } + }); + + function create_upload_input() { + // 选择文件或文件夹 + var uploadFileInput = _this2.createEl('input'), + uploadBtnGroud = _this2.queryEl('.upload_btn_groud'); + uploadFileInput.setAttribute('type', 'file'); + uploadFileInput.setAttribute('multiple', 'multiple'); + uploadFileInput.style.display = 'none'; + uploadFileInput.classList.add('upload_file_input'); + uploadBtnGroud.appendChild(uploadFileInput); + _this2.bind(uploadFileInput, 'change', function (ev) { + _this2.isUpload = true; + _this2.isGetFiles = true; + var files = ev.target.files; + // console.log(files) + for (var i = 0; i < files.length; i++) { + if (!_this2.file_upload_limit(files[i])) return false; + } + if (!_this2.isGetFiles) return false; + _this2.render_file_list(_this2.fileList); + uploadBtnGroud.removeChild(uploadFileInput); + create_upload_input(); + }); + } + + create_upload_input(); + + + // 点击上传文件按钮 + _this2.bind(uploadFileBtn, function (ev) { + _this2.queryEl('.upload_file_input').click(); + }); + + // 关闭文件视图 + _this2.bind(cancelUpload, function (ev) { + _this2.cancel_upload(ev); + }); + // 开始上传 + _this2.bind(startUpload, function (e) { + var btn = e.target; + if (btn.classList.contains('againUpload')) { + $('.ico-tips-close').click() + btn.innerText = 'Upload' + btn.classList.remove('againUpload') + btn.classList.add('startUpload') + } else { + if (_this2.fileList.length === 0) { + layer.msg('Please select file!', {icon: 0}); + return false + } + _this2.upload_file(); + } + }); + }, + min: function () { + layerMax.style.display = ''; + layerShade.style.display = 'none'; + }, + restore: function () { + layerMax.style.display = 'none'; + layerShade.style.display = ''; + }, + cancel: function () { + _this2.cancel_upload(); + return false; + } + }); + }, + + // 清空上传列表 + empty_upload_list: function () { + var dropUpLoadFile = this.queryEl('.dropUpLoadFile'); + var $li = this.queryElAll('.dropUpLoadFile li'); + for (var i = 0; i < $li.length; i++) { + dropUpLoadFile.removeChild($li[i]); + } + this.init_data(); + var $head = this.queryEl('.dropUpLoadFileHead'); + if ($head) $head.removeAttribute('style'); + }, + + /** + * @description 获取实时时间 + */ + get_time_real: function get_time_real() { + return new Date().getTime(); + }, + + /** + * @description 上传前检查文件是否存在 + */ + upload_file_exists: function (config) { + var _this = this; + var filename = config.path + config.name; + var files = this.uploaded_files; + if (!files) { + this.uploaded_files = []; + files = []; + } + var data = { + filename: filename + }; + // 判断是否上传过该文件名 + var isUploaded = false; + for (var i = 0; i < files.length; i++) { + if (files[i] === config.name) { + isUploaded = true; + break; + } + } + // 上传过就直接跳过 + if (isUploaded) { + config.success(); + return; + } + this.uploaded_files.push(config.name); + bt.send('upload_file_exists', 'files/upload_file_exists', data, function (res) { + if (res.status) { + var is_open = _this.is_open_cover_layer; + if (is_open === 0) { + bt.open({ + type: 1, + area: '400px', + title: 'Upload file to [' + config.path.substr(0, config.path.length - 1) + ']', + btn: ['Confirm', 'Skip'], + content: '\ +
                        \ +
                        \ + \ +
                        A file with the same name [' + config.name + '] is detected, do you want to overwrite it?
                        \ +
                        \ +
                        \ +
                        \ + \ + \ +
                        \ +
                        \ +
                        \ + ', + success: function (layero) { + var fileList = _this.fileList; + if (fileList.length <= 1) { + layero.find('.details').remove(); + } + }, + cancel: function () { + config.error(); + }, + yes: function (index) { + var checked = $('#all_operation').is(':checked'); + if (checked) { + _this.is_open_cover_layer = 1; + } + config.success(); + layer.close(index); + }, + btn2: function (index) { + var checked = $('#all_operation').is(':checked'); + if (checked) { + _this.is_open_cover_layer = 2; + } + config.error(); + layer.close(index); + } + }); + } else if (is_open === 1) { + config.success(); + } else { + config.error(); + } + } else { + config.success(); + } + }); + }, + + /** + * @description 上传文件 + */ + upload_file: function (fileStart, index) { + var _this3 = this; + this.uploadPath = this.uploadPath || bt.get_cookie('Path'); + if(this.fileList.length === 0) return false; + // 开始上传 + if (fileStart == undefined && this.uploadList.length == 0) { + fileStart = 0, index = 0; + this.is_open_cover_layer = 0; + this.uploadStatus = 2; + this.uploaded_files = []; // 上传过的文件 + this.uploadCycleSize = []; // 上传速度匹配 + this.uploadTime.startTime = this.get_time_real(); // 设置上传开始时间 + var startUpload = this.queryEl('.startUpload'); + startUpload.setAttribute('disabled','disabled') + startUpload.innerText = 'Uploading'; + } + // 结束上传 + if (this.fileList.length === index) { + clearTimeout(this.uploadInterval); + this.uploadStatus = 1; + this.uploadTime.endTime = this.get_time_real(); // 设置上传开始时间 + this.set_upload_view(); + this.init_data(); + bt_file.reader_file_list({ path: this.uploadPath }); + return false; + } + + // 创建文件对象和切割文件 + var item = this.fileList[index], + fileEnd = ''; + if (item == undefined) return false; + + // 检测文件是否存在 + var f_path = this.uploadPath + item.path + '/'; + f_path = f_path.replace(/\/\//g, '/'); + this.upload_file_exists({ + name: item.name, + path: f_path, + error: function () { + $('.dropUpLoadFile li').eq(index).find('.fileStatus .upload_info').html('File already exists'); + _this3.upload_file(0, ++index); + }, + success: function () { + // 设置切割文件时间段 + var uploadedSize = _this3.uploadInfo.uploadedSize; + _this3.uploadInterval = setInterval(function () { + if (_this3.uploadCycleSize.length === 4) _this3.uploadCycleSize.splice(0, 1); + _this3.uploadCycleSize.push(Math.abs(_this3.uploadInfo.uploadedSize - uploadedSize)); + }, 1000); + + // 渲染上传时间和上传进度 + _this3.uploadInfo.endTime = _this3.get_time_real(); + _this3.reander_timer_speed(); + _this3.uploadInfo.startTime = _this3.get_time_real(); + + // 获取上传速度 + var speed = _this3.get_update_speed(), + // 获取上传速度 + limitSize = _this3.uploadLimitSize; + // 判断速度是否操作阈值,超过阀值后,采用倍速的方案,最大只能支持4,8MB + var maxDouble = Math.floor(speed / _this3.uploadLimitSize); + if (maxDouble && index > 1) limitSize = (maxDouble > 4 ? 4 : maxDouble) * limitSize; + + // 实时反馈 + if (fileStart == 0) { + _this3.uploadInfo.startTime = _this3.get_time_real(); + item = $.extend(item, { + percent: '0%', + upload: 2, + upload_size: '0B' + }); + } + _this3.set_upload_view(index, item); + + fileEnd = Math.min(item.file.size, (fileStart + limitSize)); + _this3.uploadInfo.fileSize = fileEnd - fileStart; + + var form = new FormData(); + form.append("f_path", f_path); + form.append("f_name", item.name); + form.append("f_size", item.file.size); + form.append("f_start", fileStart); + form.append("blob", item.file.slice(fileStart, fileEnd)); + + // 发送请求 + $.ajax({ + url: '/files?action=upload', + type: "POST", + data: form, + async: true, + processData: false, + contentType: false, + success: function success(rdata) { + // 判断是否为数字 + if (typeof rdata === "number") { + _this3.set_upload_view(index, $.extend(item, { + percent: (rdata / item.file.size * 100).toFixed(2) + '%', + upload: 2, + upload_size: bt.format_size(rdata) + })); + + // 判断是否为文件结束,已上传文件大小 + if (fileEnd != rdata) { + _this3.uploadInfo.uploadedSize += rdata; + } else { + _this3.uploadInfo.uploadedSize += parseInt(fileEnd - fileStart); + } + + // console.log(rdata, index); + + // 继续上传文件 + _this3.upload_file(rdata, index); + } else { + // 请求状态,判断文件是否上传成功 + if (rdata.status) { + _this3.uploadInfo.endTime = _this3.get_time_real(); + _this3.uploadInfo.uploadedSize += parseInt(fileEnd - fileStart); + _this3.set_upload_view(index, $.extend(item, { + upload: 1, + upload_size: item.size + })); + } else { + _this3.set_upload_view(index, $.extend(item, { + upload: -1, + errorMsg: rdata.msg + })); + _this3.uploadError++; + } + _this3.upload_file(0, ++index); + } + // 实时更新文件上传状态 + }, + error: function (e) { + if (_this3.fileList[index].req_error === undefined) _this3.fileList[index].req_error = 1; + if (_this3.fileList[index].req_error > 2) { + _this3.set_upload_view(index, $.extend(_this3.fileList[index], { + upload: -1, + errorMsg: e.statusText == 'error' ? lan.public.network_err : e.statusText + })); + _this3.uploadError++; + _this3.upload_file(fileStart, index += 1); + return false; + } + _this3.fileList[index].req_error += 1; + _this3.upload_file(fileStart, index); + } + }); + } + }); + }, + + + /** + * @description 设置上传视图 + */ + set_upload_view: function set_upload_view(index, config) { + var _this4 = this; + if (typeof index === 'undefined') { + var file_upload_info = this.queryEl('.file_upload_info'), + time = this.get_time_real(), + s_peed = this.to_size(this.uploadInfo.uploadedSize / ((time - this.uploadTime.startTime) / 1000)); + file_upload_info.innerHTML = 'Uploading ' + this.uploadList.length + ' file(s), ' + (this.uploadError ? 'Fail ' + this.uploadError + ' file(s), ' : '') + 'time: ' + this.diff_time(this.uploadTime.startTime, time) + ', speed: ' + s_peed + '/s'; + this.bind(file_upload_info.querySelector('.ico-tips-close'), function (ev) { + var parent = this.parentNode.parentNode; + parent.querySelector('.btn-group').classList.remove('hide'); + parent.querySelector('.file_upload_info').classList.add('hide'); + _this4.empty_upload_list(); + }); + var startUpload = this.queryEl('.startUpload') + startUpload.removeAttribute('disabled') + startUpload.innerText = 'Upload again' + startUpload.classList.remove('startUpload') + startUpload.classList.add('againUpload') + _this4.init_data(); + return false; + } + try { + var item = document.querySelectorAll('.dropUpLoadFile li')[index]; + var file_info = this.queryEl('.file_upload_info'); + + if (file_info.querySelectorAll('.uploadProgress').length === 0) { + file_info.innerHTML = '\n Total process ,\n uploading , \n Upload fail \n Speed Getting\n Expect time Getting'; + } + + var file_info_parent = file_info.parentElement; + file_info_parent.querySelector('.btn-group').classList.add('hide'); + file_info_parent.querySelector('.file_upload_info').classList.remove('hide'); + + var file_info_error = file_info.querySelector('.uploadError'); + file_info_error.innerText = '(' + this.uploadError + '份)'; + if (this.uploadError > 0) file_info_error.parentElement.style.display = 'block'; + + if (config.upload === 1 || config.upload === -1) { + this.fileList[index].is_upload = true; + this.uploadList.push(this.fileList[index]); + item.querySelector('.fileLoading').setAttribute('style', 'width:100%;opacity:.5;background:' + (config.upload == -1 ? '#ffadad' : '#20a53a21')); + item.querySelector('.filesize').innerText = config.size; + item.querySelector('.fileStatus').innerHTML = this.is_upload_status(config.upload, config.upload === 1 ? '(time:' + this.diff_time(this.uploadTime.startTime, this.uploadTime.endTime) + ')' : config.errorMsg); + var dropUpLoadFile = this.queryEl('.dropUpLoadFile'); + if (this.uploadList.length === 1) dropUpLoadFile.scrollTop = 0 + if (this.uploadList.length > 1) dropUpLoadFile.scrollTop += 45.5 + + } else { + item.querySelector('.fileLoading').setAttribute('style', 'width:' + config.percent); + item.querySelector('.filesize').innerText = config.upload_size + '/' + config.size; + item.querySelector('.fileStatus').innerHTML = this.is_upload_status(config.upload, '(' + config.percent + ')'); + } + + file_info.querySelector('.uploadNumber').innerText = '(' + this.uploadList.length + '/' + this.fileList.length + ')'; + file_info.querySelector('.uploadProgress').innerText = ((this.uploadInfo.uploadedSize / this.fileTotalSize) * 100).toFixed(2) + '%'; + } catch (e) { + console.log(e) + } + + }, + + + /** + * @description 上传状态 + * @param {*} status + * @param {*} val + * @returns + */ + is_upload_status: function is_upload_status(status, val) { + if (val === undefined) val = ''; + switch (status) { + case -1: + return 'Fail' + (val != '' ? ', ' + val : '') + ''; + case 0: + return 'Waiting to upload'; + case 1: + return 'Uploaded'; + case 2: + return 'Uploading ' + val + ''; + case 3: + return 'Stoped'; + } + }, + + /** + * @description 取10秒内上传平均值 + */ + get_update_speed: function get_update_speed() { + var sum = 0; + for (var i = 0; i < this.uploadCycleSize.length; i++) { + sum += this.uploadCycleSize[i]; + } + var content = sum / this.uploadCycleSize.length; + return isNaN(content) ? 0 : content; + }, + + + // 渲染上传速度 + reander_timer_speed: function reander_timer_speed() { + var done_time = new Date().getTime(); + if (done_time - this.speedLastTime > 1000) { + var s_time = (this.uploadInfo.endTime - this.uploadInfo.startTime) / 1000; + this.timerSpeed = (this.uploadInfo.fileSize / s_time).toFixed(2); + if (this.timerSpeed < 2) return; + this.queryEl('.file_upload_info').querySelector('.uploadSpeed').innerText = bt.format_size(isNaN(this.timerSpeed) ? 0 : this.timerSpeed) + '/s'; + var estimateTime = this.time(parseInt((this.fileTotalSize - this.uploadInfo.uploadedSize) / this.timerSpeed * 1000)); + if (!isNaN(this.timerSpeed)) this.queryEl('.file_upload_info').querySelector('.uploadEstimate').innerText = estimateTime.indexOf('NaN') == -1 ? estimateTime : '0 sec'; + this.speedLastTime = done_time; + } + }, + to_size: function to_size(a) { + var d = [" B", " KB", " MB", " GB", " TB", " PB"]; + var e = 1024; + for (var b = 0; b < d.length; b += 1) { + if (a < e) { + var num = a.toFixed(2) + d[b]; + return !isNaN(a.toFixed(2)) && typeof num != 'undefined' ? num : '0B'; + } + a /= e; + } + }, + time: function time(date) { + var hours = Math.floor(date / (60 * 60 * 1000)); + var minutes = Math.floor(date / (60 * 1000)); + var seconds = parseInt(date % (60 * 1000) / 1000); + var result = seconds + 'sec'; + if (minutes > 0) { + result = minutes + "min" + seconds + 'sec'; + } + if (hours > 0) { + result = hours + 'hour' + Math.floor((date - hours * (60 * 60 * 1000)) / (60 * 1000)) + "min"; + } + return result; + }, + diff_time: function diff_time(start_date, end_date) { + if (typeof start_date !== "number") start_date = start_date.getTime(); + if (typeof end_date !== "number") end_date = end_date.getTime(); + var diff = end_date - start_date, + minutes = Math.floor(diff / (60 * 1000)), + leave3 = diff % (60 * 1000), + seconds = leave3 / 1000, + result = seconds.toFixed(minutes > 0 ? 0 : 2) + 'sec'; + if (minutes > 0) { + result = minutes + "min" + seconds.toFixed(0) + 'sec'; + } + return result; + }, + + /** + * @description 取消上传 + */ + cancel_upload: function cancel_upload(index) { + var _this4 = this; + if (this.uploadStatus === 2) { + layer.confirm('Do you want to cancel the upload of files? It need to delete the uploaded files manually. Continue?', { + title: 'Cancel file upload', + icon: 0 + }, function (indexs) { + _this4.init_data(); + _this4.cancel_upload_layer(); + layer.close(indexs); + }); + } else { + _this4.init_data(); + _this4.cancel_upload_layer(); + } + }, + + + /** + * @description 关闭上传弹窗 + */ + cancel_upload_layer: function cancel_upload_layer() { + layer.close(this.layer); + this.layer = false; + this.init_data(); + }, + + + /** + * @description 渲染列表 + * + */ + render_file_list: function (list) { + var _this5 = this; + var html = ''; + for (var i = 0; i < list.length; i++) { + var item = list[i], name = ((item.path || '/') + '/' + item.name).replace(/\/\//g, '/'); + html += '
                      • ' + name + '\n ' + item.size + '\n Waiting to upload\n
                        \n
                      • '; + this.uploadInfo.fileSize += item.file.size; + } + var upload_file_body = this.queryEl('.upload_file_body'); + upload_file_body.className = 'upload_file_body'; + upload_file_body.innerHTML = uploadListhtml; + this.queryEl('.upload_file_gourp').className = 'upload_file_gourp'; + this.queryEl('.dropUpLoadFile').innerHTML = html; + var dropUpLoadFileHead = this.queryEl('.dropUpLoadFileHead'); + if (list.length <= 10) { + dropUpLoadFileHead.removeAttribute('style'); + } else { + dropUpLoadFileHead.style.paddingRight = bt_file.upload_file_body_width + 'px'; + dropUpLoadFileHead.style.boxShadow = '0 5px 2px -3px #ececec'; + } + var cancelBtn = this.queryElAll('.cancel-btn'); + this.bind(cancelBtn, function (ev, index) { + _this5.fileTotalSize = _this5.fileTotalSize - _this5.fileList[index].file.size; + _this5.fileTotalNumber = _this5.fileTotalNumber - 1; + _this5.fileList.splice(index, 1); + _this5.queryElAll('.dropUpLoadFile li')[index].remove(); + }); + }, + + + /** + * @description 文件上传限制 + * @param {Object} e 文件对象 + */ + file_upload_limit: function (e, path) { + if (!this.isGetFiles) return false + var extName = e.name.split('.'); + path = path || e.webkitRelativePath + var paths = path.split('/'); + path = ('/' + paths.slice(0, paths.length - 1).join('/')).replace('//', '/'); + this.fileList.push({ + file: e, + path: path, + name: e.name, + size: bt.format_size(e.size), + type: extName.length > 1 ? extName[extName.length - 1] : 'txt', + status: 0 + }); + this.fileTotalSize += e.size; + this.fileTotalNumber++; + if (this.fileTotalNumber >= this.limit.number) { + layer.msg('The number of files has exceeded the file upload limit ' + this.limit.number + ', please zip the folder and try again!'); + this.init_data(); + this.isGetFiles = false; // 停止文件内容获取 + this.empty_upload_list(); + return false; + } + if (this.fileTotalSize >= this.limit.size) { + layer.msg('The file size has exceeded the file upload' + bt.format_size(e.size) + ' limit, please use tools such as SFTP/FTP to upload the file!'); + this.init_data(); + this.isGetFiles = false; // 停止文件内容获取 + this.empty_upload_list(); + return false; + } + return true; + }, + + + /** + * @description 文件夹文件内容递归 + * @param {object} item 文件对象 + */ + traverse_file_tree: function (item) { + var _this6 = this; + + var path = item.fullPath || ''; + if (item.isFile) { + item.file(function (e) { + _this6.file_upload_limit(e, path); + }); + clearTimeout(this.timeNumber); + this.timeNumber = setTimeout(function () { + _this6.load.close(); + if (_this6.isUpload && _this6.isGetFiles) { + _this6.render_file_list(_this6.fileList); + } else { + var layers = _this6.layer; + _this6.init_data(); + _this6.layers = layers; + } + }, 10); + } else if (item.isDirectory) { + var dirReader = item.createReader(); + var fnReadEntries = function (entries) { + [].forEach.call(entries,function (e) { + if (!_this6.isUpload) return false; + _this6.traverse_file_tree(e); + }); + if (entries.length > 0) { + dirReader.readEntries(fnReadEntries); + } + }; + dirReader.readEntries(fnReadEntries) + setTimeout(function () { + if (_this6.fileList.length === 0 && _this6.isGetFiles) { + layer.msg('Drag and drop upload folder content is empty') + } + }, 500) + } + }, + + + /** + * @description 文件选择处理程序 + * @param {object} ev 事件 + */ + file_select_handler: function (ev) { + var _this7 = this; + this.file_drag_hover(ev); + this.load = bt.load('Getting file information, please wait...'); + this.timeNumber = 0; + if (ev.target.files) { + var items = ev.target.files; + [].forEach.call(items, function (item) { + _this7.traverse_file_tree(item); + }); + } else if (ev.dataTransfer.items) { + var items = ev.dataTransfer.items; + [].forEach.call(items, function (ev) { + var getAsEntry = ev.webkitGetAsEntry || ev.getAsEntry; + var item = getAsEntry.call(ev); + if (item) { + if (!_this7.isUpload) return false; + _this7.traverse_file_tree(item); + } + }); + } + } +}; + +var uploadFiles = new UploadFile(); diff --git a/BTPanel/static/jsonTree/jsonTree.css b/BTPanel/static/jsonTree/jsonTree.css new file mode 100644 index 00000000..38124402 --- /dev/null +++ b/BTPanel/static/jsonTree/jsonTree.css @@ -0,0 +1,107 @@ +/* + * JSON Tree Viewer + * http://github.com/summerstyle/jsonTreeViewer + * + * Copyright 2017 Vera Lobacheva (http://iamvera.com) + * Released under the MIT license (LICENSE.txt) + */ + +/* Background for the tree. May use for element */ +.jsontree_bg { + background: #FFF; +} + +/* Styles for the container of the tree (e.g. fonts, margins etc.) */ +.jsontree_tree { + margin-left: 30px; + font-family: 'PT Mono', monospace; + font-size: 14px; +} + +/* Styles for a list of child nodes */ +.jsontree_child-nodes { + display: none; + margin-left: 35px; + margin-bottom: 5px; + line-height: 2; +} +.jsontree_node_expanded > .jsontree_value-wrapper > .jsontree_value > .jsontree_child-nodes { + display: block; +} + +/* Styles for labels */ +.jsontree_label-wrapper { + float: left; + margin-right: 8px; +} +.jsontree_label { + font-weight: normal; + vertical-align: top; + color: #000; + position: relative; + padding: 1px; + border-radius: 4px; + cursor: default; +} +.jsontree_node_marked > .jsontree_label-wrapper > .jsontree_label { + background: #fff2aa; +} + +/* Styles for values */ +.jsontree_value-wrapper { + display: block; + overflow: hidden; +} +.jsontree_node_complex > .jsontree_value-wrapper { + overflow: inherit; +} +.jsontree_value { + vertical-align: top; + display: inline; +} +.jsontree_value_null { + color: #777; + font-weight: bold; +} +.jsontree_value_string { + color: #025900; + font-weight: bold; +} +.jsontree_value_number { + color: #000E59; + font-weight: bold; +} +.jsontree_value_boolean { + color: #600100; + font-weight: bold; +} + +/* Styles for active elements */ +.jsontree_expand-button { + position: absolute; + top: 3px; + left: -15px; + display: block; + width: 11px; + height: 11px; + background-image: url('icons.svg'); +} +.jsontree_node_expanded > .jsontree_label-wrapper > .jsontree_label > .jsontree_expand-button { + background-position: 0 -11px; +} +.jsontree_show-more { + cursor: pointer; +} +.jsontree_node_expanded > .jsontree_value-wrapper > .jsontree_value > .jsontree_show-more { + display: none; +} +.jsontree_node_empty > .jsontree_label-wrapper > .jsontree_label > .jsontree_expand-button, +.jsontree_node_empty > .jsontree_value-wrapper > .jsontree_value > .jsontree_show-more { + display: none !important; +} +.jsontree_node_complex > .jsontree_label-wrapper > .jsontree_label { + cursor: pointer; +} +.jsontree_node_empty > .jsontree_label-wrapper > .jsontree_label { + cursor: default !important; +} diff --git a/BTPanel/static/jsonTree/jsonTree.js b/BTPanel/static/jsonTree/jsonTree.js new file mode 100644 index 00000000..51bbf014 --- /dev/null +++ b/BTPanel/static/jsonTree/jsonTree.js @@ -0,0 +1,819 @@ +/** + * JSON Tree library (a part of jsonTreeViewer) + * http://github.com/summerstyle/jsonTreeViewer + * + * Copyright 2017 Vera Lobacheva (http://iamvera.com) + * Released under the MIT license (LICENSE.txt) + */ + +var jsonTree = (function() { + + /* ---------- Utilities ---------- */ + var utils = { + + /* + * Returns js-"class" of value + * + * @param val {any type} - value + * @returns {string} - for example, "[object Function]" + */ + getClass : function(val) { + return Object.prototype.toString.call(val); + }, + + /** + * Checks for a type of value (for valid JSON data types). + * In other cases - throws an exception + * + * @param val {any type} - the value for new node + * @returns {string} ("object" | "array" | "null" | "boolean" | "number" | "string") + */ + getType : function(val) { + if (val === null) { + return 'null'; + } + + switch (typeof val) { + case 'number': + return 'number'; + + case 'string': + return 'string'; + + case 'boolean': + return 'boolean'; + } + + switch(utils.getClass(val)) { + case '[object Array]': + return 'array'; + + case '[object Object]': + return 'object'; + } + + throw new Error('Bad type: ' + utils.getClass(val)); + }, + + /** + * Applies for each item of list some function + * and checks for last element of the list + * + * @param obj {Object | Array} - a list or a dict with child nodes + * @param func {Function} - the function for each item + */ + forEachNode : function(obj, func) { + var type = utils.getType(obj), + isLast; + + switch (type) { + case 'array': + isLast = obj.length - 1; + + obj.forEach(function(item, i) { + func(i, item, i === isLast); + }); + + break; + + case 'object': + var keys = Object.keys(obj).sort(); + + isLast = keys.length - 1; + + keys.forEach(function(item, i) { + func(item, obj[item], i === isLast); + }); + + break; + } + + }, + + /** + * Implements the kind of an inheritance by + * using parent prototype and + * creating intermediate constructor + * + * @param Child {Function} - a child constructor + * @param Parent {Function} - a parent constructor + */ + inherits : (function() { + var F = function() {}; + + return function(Child, Parent) { + F.prototype = Parent.prototype; + Child.prototype = new F(); + Child.prototype.constructor = Child; + }; + })(), + + /* + * Checks for a valid type of root node* + * + * @param {any type} jsonObj - a value for root node + * @returns {boolean} - true for an object or an array, false otherwise + */ + isValidRoot : function(jsonObj) { + switch (utils.getType(jsonObj)) { + case 'object': + case 'array': + return true; + default: + return false; + } + }, + + /** + * Extends some object + */ + extend : function(targetObj, sourceObj) { + for (var prop in sourceObj) { + if (sourceObj.hasOwnProperty(prop)) { + targetObj[prop] = sourceObj[prop]; + } + } + } + }; + + + /* ---------- Node constructors ---------- */ + + /** + * The factory for creating nodes of defined type. + * + * ~~~ Node ~~~ is a structure element of an onject or an array + * with own label (a key of an object or an index of an array) + * and value of any json data type. The root object or array + * is a node without label. + * {... + * [+] "label": value, + * ...} + * + * Markup: + *
                      • + * + * + * + * "label" + * + * : + * + * <(div|span) class="jsontree_value jsontree_value_(object|array|boolean|null|number|string)"> + * ... + * + *
                      • + * + * @param label {string} - key name + * @param val {Object | Array | string | number | boolean | null} - a value of node + * @param isLast {boolean} - true if node is last in list of siblings + * + * @return {Node} + */ + function Node(label, val, isLast) { + var nodeType = utils.getType(val); + + if (nodeType in Node.CONSTRUCTORS) { + return new Node.CONSTRUCTORS[nodeType](label, val, isLast); + } else { + throw new Error('Bad type: ' + utils.getClass(val)); + } + } + + Node.CONSTRUCTORS = { + 'boolean' : NodeBoolean, + 'number' : NodeNumber, + 'string' : NodeString, + 'null' : NodeNull, + 'object' : NodeObject, + 'array' : NodeArray + }; + + + /* + * The constructor for simple types (string, number, boolean, null) + * {... + * [+] "label": value, + * ...} + * value = string || number || boolean || null + * + * Markup: + *
                      • + * + * "age" + * : + * + * 25 + * , + *
                      • + * + * @abstract + * @param label {string} - key name + * @param val {string | number | boolean | null} - a value of simple types + * @param isLast {boolean} - true if node is last in list of parent childNodes + */ + function _NodeSimple(label, val, isLast) { + if (this.constructor === _NodeSimple) { + throw new Error('This is abstract class'); + } + + var self = this, + el = document.createElement('li'), + labelEl, + template = function(label, val) { + var str = '\ + \ + "' + + label + + '" : \ + \ + \ + ' + + val + + '' + + (!isLast ? ',' : '') + + ''; + + return str; + }; + + self.label = label; + self.isComplex = false; + + el.classList.add('jsontree_node'); + el.innerHTML = template(label, val); + + self.el = el; + + labelEl = el.querySelector('.jsontree_label'); + + labelEl.addEventListener('click', function(e) { + if (e.altKey) { + self.toggleMarked(); + return; + } + + if (e.shiftKey) { + document.getSelection().removeAllRanges(); + alert(self.getJSONPath()); + return; + } + }, false); + } + + _NodeSimple.prototype = { + constructor : _NodeSimple, + + /** + * Mark node + */ + mark : function() { + this.el.classList.add('jsontree_node_marked'); + }, + + /** + * Unmark node + */ + unmark : function() { + this.el.classList.remove('jsontree_node_marked'); + }, + + /** + * Mark or unmark node + */ + toggleMarked : function() { + this.el.classList.toggle('jsontree_node_marked'); + }, + + /** + * Expands parent node of this node + * + * @param isRecursive {boolean} - if true, expands all parent nodes + * (from node to root) + */ + expandParent : function(isRecursive) { + if (!this.parent) { + return; + } + + this.parent.expand(); + this.parent.expandParent(isRecursive); + }, + + /** + * Returns JSON-path of this + * + * @param isInDotNotation {boolean} - kind of notation for returned json-path + * (by default, in bracket notation) + * @returns {string} + */ + getJSONPath : function(isInDotNotation) { + if (this.isRoot) { + return "$"; + } + + var currentPath; + + if (this.parent.type === 'array') { + currentPath = "[" + this.label + "]"; + } else { + currentPath = isInDotNotation ? "." + this.label : "['" + this.label + "']"; + } + + return this.parent.getJSONPath(isInDotNotation) + currentPath; + } + }; + + + /* + * The constructor for boolean values + * {... + * [+] "label": boolean, + * ...} + * boolean = true || false + * + * @constructor + * @param label {string} - key name + * @param val {boolean} - value of boolean type, true or false + * @param isLast {boolean} - true if node is last in list of parent childNodes + */ + function NodeBoolean(label, val, isLast) { + this.type = "boolean"; + + _NodeSimple.call(this, label, val, isLast); + } + utils.inherits(NodeBoolean,_NodeSimple); + + + /* + * The constructor for number values + * {... + * [+] "label": number, + * ...} + * number = 123 + * + * @constructor + * @param label {string} - key name + * @param val {number} - value of number type, for example 123 + * @param isLast {boolean} - true if node is last in list of parent childNodes + */ + function NodeNumber(label, val, isLast) { + this.type = "number"; + + _NodeSimple.call(this, label, val, isLast); + } + utils.inherits(NodeNumber,_NodeSimple); + + + /* + * The constructor for string values + * {... + * [+] "label": string, + * ...} + * string = "abc" + * + * @constructor + * @param label {string} - key name + * @param val {string} - value of string type, for example "abc" + * @param isLast {boolean} - true if node is last in list of parent childNodes + */ + function NodeString(label, val, isLast) { + this.type = "string"; + + _NodeSimple.call(this, label, '"' + val + '"', isLast); + } + utils.inherits(NodeString,_NodeSimple); + + + /* + * The constructor for null values + * {... + * [+] "label": null, + * ...} + * + * @constructor + * @param label {string} - key name + * @param val {null} - value (only null) + * @param isLast {boolean} - true if node is last in list of parent childNodes + */ + function NodeNull(label, val, isLast) { + this.type = "null"; + + _NodeSimple.call(this, label, val, isLast); + } + utils.inherits(NodeNull,_NodeSimple); + + + /* + * The constructor for complex types (object, array) + * {... + * [+] "label": value, + * ...} + * value = object || array + * + * Markup: + *
                      • + * + * + * + * "label" + * + * : + * + *
                        + * { + *
                          + * } + * , + *
                        + *
                      • + * + * @abstract + * @param label {string} - key name + * @param val {Object | Array} - a value of complex types, object or array + * @param isLast {boolean} - true if node is last in list of parent childNodes + */ + function _NodeComplex(label, val, isLast) { + if (this.constructor === _NodeComplex) { + throw new Error('This is abstract class'); + } + + var self = this, + el = document.createElement('li'), + template = function(label, sym) { + var comma = (!isLast) ? ',' : '', + str = '\ +
                        \ +
                        \ + ' + sym[0] + '\ + \ +
                          \ + ' + sym[1] + '' + + '
                          ' + comma + + '
                          '; + + if (label !== null) { + str = '\ + \ + ' + + '' + + '"' + label + + '" : \ + ' + str; + } + + return str; + }, + childNodesUl, + labelEl, + moreContentEl, + childNodes = []; + + self.label = label; + self.isComplex = true; + + el.classList.add('jsontree_node'); + el.classList.add('jsontree_node_complex'); + el.innerHTML = template(label, self.sym); + + childNodesUl = el.querySelector('.jsontree_child-nodes'); + + if (label !== null) { + labelEl = el.querySelector('.jsontree_label'); + moreContentEl = el.querySelector('.jsontree_show-more'); + + labelEl.addEventListener('click', function(e) { + if (e.altKey) { + self.toggleMarked(); + return; + } + + if (e.shiftKey) { + document.getSelection().removeAllRanges(); + alert(self.getJSONPath()); + return; + } + + self.toggle(e.ctrlKey || e.metaKey); + }, false); + + moreContentEl.addEventListener('click', function(e) { + self.toggle(e.ctrlKey || e.metaKey); + }, false); + + self.isRoot = false; + } else { + self.isRoot = true; + self.parent = null; + + el.classList.add('jsontree_node_expanded'); + } + + self.el = el; + self.childNodes = childNodes; + self.childNodesUl = childNodesUl; + + utils.forEachNode(val, function(label, node, isLast) { + self.addChild(new Node(label, node, isLast)); + }); + + self.isEmpty = !Boolean(childNodes.length); + if (self.isEmpty) { + el.classList.add('jsontree_node_empty'); + } + } + + utils.inherits(_NodeComplex, _NodeSimple); + + utils.extend(_NodeComplex.prototype, { + constructor : _NodeComplex, + + /* + * Add child node to list of child nodes + * + * @param child {Node} - child node + */ + addChild : function(child) { + this.childNodes.push(child); + this.childNodesUl.appendChild(child.el); + child.parent = this; + }, + + /* + * Expands this list of node child nodes + * + * @param isRecursive {boolean} - if true, expands all child nodes + */ + expand : function(isRecursive){ + if (this.isEmpty) { + return; + } + + if (!this.isRoot) { + this.el.classList.add('jsontree_node_expanded'); + } + + if (isRecursive) { + this.childNodes.forEach(function(item, i) { + if (item.isComplex) { + item.expand(isRecursive); + } + }); + } + }, + + /* + * Collapses this list of node child nodes + * + * @param isRecursive {boolean} - if true, collapses all child nodes + */ + collapse : function(isRecursive) { + if (this.isEmpty) { + return; + } + + if (!this.isRoot) { + this.el.classList.remove('jsontree_node_expanded'); + } + + if (isRecursive) { + this.childNodes.forEach(function(item, i) { + if (item.isComplex) { + item.collapse(isRecursive); + } + }); + } + }, + + /* + * Expands collapsed or collapses expanded node + * + * @param {boolean} isRecursive - Expand all child nodes if this node is expanded + * and collapse it otherwise + */ + toggle : function(isRecursive) { + if (this.isEmpty) { + return; + } + + this.el.classList.toggle('jsontree_node_expanded'); + + if (isRecursive) { + var isExpanded = this.el.classList.contains('jsontree_node_expanded'); + + this.childNodes.forEach(function(item, i) { + if (item.isComplex) { + item[isExpanded ? 'expand' : 'collapse'](isRecursive); + } + }); + } + }, + + /** + * Find child nodes that match some conditions and handle it + * + * @param {Function} matcher + * @param {Function} handler + * @param {boolean} isRecursive + */ + findChildren : function(matcher, handler, isRecursive) { + if (this.isEmpty) { + return; + } + + this.childNodes.forEach(function(item, i) { + if (matcher(item)) { + handler(item); + } + + if (item.isComplex && isRecursive) { + item.findChildren(matcher, handler, isRecursive); + } + }); + } + }); + + + /* + * The constructor for object values + * {... + * [+] "label": object, + * ...} + * object = {"abc": "def"} + * + * @constructor + * @param label {string} - key name + * @param val {Object} - value of object type, {"abc": "def"} + * @param isLast {boolean} - true if node is last in list of siblings + */ + function NodeObject(label, val, isLast) { + this.sym = ['{', '}']; + this.type = "object"; + + _NodeComplex.call(this, label, val, isLast); + } + utils.inherits(NodeObject,_NodeComplex); + + + /* + * The constructor for array values + * {... + * [+] "label": array, + * ...} + * array = [1,2,3] + * + * @constructor + * @param label {string} - key name + * @param val {Array} - value of array type, [1,2,3] + * @param isLast {boolean} - true if node is last in list of siblings + */ + function NodeArray(label, val, isLast) { + this.sym = ['[', ']']; + this.type = "array"; + + _NodeComplex.call(this, label, val, isLast); + } + utils.inherits(NodeArray, _NodeComplex); + + + /* ---------- The tree constructor ---------- */ + + /* + * The constructor for json tree. + * It contains only one Node (Array or Object), without property name. + * CSS-styles of .tree define main tree styles like font-family, + * font-size and own margins. + * + * Markup: + *
                            + * {Node} + *
                          + * + * @constructor + * @param jsonObj {Object | Array} - data for tree + * @param domEl {DOMElement} - DOM-element, wrapper for tree + */ + function Tree(jsonObj, domEl) { + this.wrapper = document.createElement('ul'); + this.wrapper.className = 'jsontree_tree clearfix'; + + this.rootNode = null; + + this.sourceJSONObj = jsonObj; + + this.loadData(jsonObj); + this.appendTo(domEl); + } + + Tree.prototype = { + constructor : Tree, + + /** + * Fill new data in current json tree + * + * @param {Object | Array} jsonObj - json-data + */ + loadData : function(jsonObj) { + if (!utils.isValidRoot(jsonObj)) { + alert('The root should be an object or an array'); + return; + } + + this.sourceJSONObj = jsonObj; + + this.rootNode = new Node(null, jsonObj, 'last'); + this.wrapper.innerHTML = ''; + this.wrapper.appendChild(this.rootNode.el); + }, + + /** + * Appends tree to DOM-element (or move it to new place) + * + * @param {DOMElement} domEl + */ + appendTo : function(domEl) { + domEl.appendChild(this.wrapper); + }, + + /** + * Expands all tree nodes (objects or arrays) recursively + * + * @param {Function} filterFunc - 'true' if this node should be expanded + */ + expand : function(filterFunc) { + if (this.rootNode.isComplex) { + if (typeof filterFunc == 'function') { + this.rootNode.childNodes.forEach(function(item, i) { + if (item.isComplex && filterFunc(item)) { + item.expand(); + } + }); + } else { + this.rootNode.expand('recursive'); + } + } + }, + + /** + * Collapses all tree nodes (objects or arrays) recursively + */ + collapse : function() { + if (typeof this.rootNode.collapse === 'function') { + this.rootNode.collapse('recursive'); + } + }, + + /** + * Returns the source json-string (pretty-printed) + * + * @param {boolean} isPrettyPrinted - 'true' for pretty-printed string + * @returns {string} - for exemple, '{"a":2,"b":3}' + */ + toSourceJSON : function(isPrettyPrinted) { + if (!isPrettyPrinted) { + return JSON.stringify(this.sourceJSONObj); + } + + var DELIMETER = "[%^$#$%^%]", + jsonStr = JSON.stringify(this.sourceJSONObj, null, DELIMETER); + + jsonStr = jsonStr.split("\n").join("
                          "); + jsonStr = jsonStr.split(DELIMETER).join("    "); + + return jsonStr; + }, + + /** + * Find all nodes that match some conditions and handle it + */ + findAndHandle : function(matcher, handler) { + this.rootNode.findChildren(matcher, handler, 'isRecursive'); + }, + + /** + * Unmark all nodes + */ + unmarkAll : function() { + this.rootNode.findChildren(function(node) { + return true; + }, function(node) { + node.unmark(); + }, 'isRecursive'); + } + }; + + + /* ---------- Public methods ---------- */ + return { + /** + * Creates new tree by data and appends it to the DOM-element + * + * @param jsonObj {Object | Array} - json-data + * @param domEl {DOMElement} - the wrapper element + * @returns {Tree} + */ + create : function(jsonObj, domEl) { + return new Tree(jsonObj, domEl); + } + }; +})(); diff --git a/BTPanel/static/language/English/lan.js b/BTPanel/static/language/English/lan.js index 9d9b6c5a..aa7d18e1 100644 --- a/BTPanel/static/language/English/lan.js +++ b/BTPanel/static/language/English/lan.js @@ -56,6 +56,7 @@ var lan = { "unit":"Unit", "net_font":"宋体", "update_go":"Update now", + "ignore_update":"Ignore updates", "update_get":"Getting version information...", "update_check":"Check for updates", "update_to":"Update to", @@ -130,7 +131,7 @@ var lan = { "test_version":"Beta", "final_version":"Stable ", "update_version":"Version update", - "last_version_now":"Congratulations, it is currently the latest version", + "last_version_now":"It is currently the latest version", "this_version":"Current version: ", "check_this_version_log":"View current version log", "bt_linux":"aaPanel Linux", @@ -149,8 +150,8 @@ var lan = { "apply_linux_test_version":"Apply for Linux Beta version", "apply_most_know":"Instructions for Beta Testers", "linux_test_version_update_log":"Linux Beta update log", - "already_read":"I have already checked", - "apply_most_know1":"“'Instructions for Beta Testers'”", + "already_read":"I have already checked ", + "apply_most_know1":"\"Instructions for Beta Testers\"", "second_left_of_click":"{1} second(s) wait to click", "update_test_version":"Update to Linux Beta version", "check_test_version_detail":"Please read Instructions for Beta Testers carefully. Are you sure to update to Linux Beta version?", @@ -285,8 +286,17 @@ var lan = { "m15":"15 min", "resource_usage":"Resource usage %", "load_detail":"Load details", - "disk_rw_count": "r/w times", - "disk_rw_time": "r/w wait" + "disk_rw_times": "r/w times", + "disk_rw_wait": "r/w wait", + "process_name": 'Process name', + "cpu_usage": 'CPU usage', + "memory_usage": 'Memory usage', + "disk_usage": 'Disk usage', + "startup_user": 'Startup user', + 'date': 'Date', + 'all': 'All', + 'read': 'Read', + 'write': 'Write' }, "crontab":{ "task_log_title": "Cron Job Running Log", @@ -417,7 +427,28 @@ var lan = { "operate":"Operation", "operate_type":"Operation type", "detail":"Details", - "operate_time":"Operation time" + "operate_time":"Operation time", + "port_use_load": "Obtaining details about the port usage process", + "port_use_title": "Process details", + "process_name": "Process name", + "process_pid": "Process PID", + "start_command": "Start command", + "batch_disabled_tips": function (name) { + return "Select " + name + " to execute!" + }, + "batch_del_btn": function (name) { + return " Delete " + name + }, + "batch_del_title": function (name) { + return "Batch delete " + name + }, + "batch_del_msg": function (name) { + return "Do you continue to operate in batches to delete the selected " + name + "?" + }, + "batch_del_msg_ip": "Delete the selected IP rules in batches. The selected IP will use the default release method to continue operation?", + "batch_del_ip_name": "Domain/IP", + "batch_del_msg_port_forward": "Delete the selected port forwarding in batches. The selected source port will stop forwarding to the target port. Do you continue to operate?", + "batch_del_msg_area_rule": "Delete the selected regional rules in batches. The selected rules are shielded, and the port will resume normal access. Do you continue to operate?", }, "upload":{ "upload":"Upload", @@ -438,6 +469,7 @@ var lan = { }, "bt":{ "empty":"empty", + "file":"Select file", "dir":"Select directory", "path":"Current path", "comp":"Computer", @@ -770,6 +802,7 @@ var lan = { "copy_pass": "Copy password", "input": "Import", "input_title": "Import Database", + "type": "Database type", "admin": "Manager", "admin_title": "Database Manager", "auth": "Permission", @@ -797,10 +830,21 @@ var lan = { "edit_pass_confirm": "Are you sure to change password?", "backup_re": "Repair", "backup_name": "File name", + "backup_path": "File path", "backup_size": "File size", "backup_time": "Backup time", "backup_title": "Database Backup Details", + "backup_location": "Backup location", + "backup_re_confirm_tit": "Overwrite the data", + "backup_re_confirm_cont1": "Data will be overwritten using [", + "backup_re_confirm_cont2": "]. Do you want to continue?", + "restore_data": "Recovering data", + "del_backup": "Delete backup", + "del_backup_load": "Deleting the Backup", + "del_backup_cont1": "Whether to delete the [", + "del_backup_cont2": "] backup", "backup": "Backup", + "backup_btn1": "Backup immediately", "position": "Position", "input_confirm": "Database will be overwritten, continue?", "input_the": "Importing, please wait...", @@ -827,7 +871,7 @@ var lan = { "tools":"Tools", "set_db_auth":"Set database permissions", "del":"Del", - "get_data":"Getting data, please wait...", + "get_data":"Getting data", "optimization":"Optimize", "change":"Convert to ", "size":"Size", @@ -868,9 +912,41 @@ var lan = { "add_server_tips": "Add at least one remote server or install a local database", "select_position": "Select database location", "cloud_database": "Remote database", - "get_cloud_list_tips": "Fetching remote server list, please wait...", + "get_cloud_list_tips": "Fetching remote server list", "del_cloud_server_tips": "Only delete management information and database records in the panel, not delete remote databases", - "del_cloud_database_tips": "The remote database does not support the database recycle bin. After deletion, it cannot be recovered. Please operate with caution!" + "del_cloud_database_tips": "The remote database does not support the database recycle bin. After deletion, it cannot be recovered. Please operate with caution!", + "safety_auth": 'Security authentication', + "safety_auth_tips1": 'Security authentication: After this function is enabled, an account and password are required to access data', + "safety_auth_req1": 'Set the password access status', + "safety_auth_warn1": 'Please enable security authentication first!', + "term_of_validity": 'Term of validity', + "term_of_validity_input": 'If it is empty, it never expires', + "key_input": 'Please enter the key', + "value_input": 'Please enter the value', + "key_input_tips": 'The key cannot be empty', + "value_input_tips": 'The value cannot be empty', + "redis_form_req1": 'Adding Redis data', + "redis_form_req2": 'Saving Redis data', + "data_type": 'Data type', + "data_len": 'Data length', + "edit_data": 'Edit the data', + "del_data": 'Delete the data', + "del_key_value": 'Delete the key value', + "del_key_value_tips": 'Do you really want to delete', + "search_key": 'Search key', + "clear_redis_tit1": 'Example Clear the ', + "clear_redis_tit2": ' database', + "select_database": 'Select the database', + "all_select": 'All selected', + "clear_redis_tips1": 'Select the database that you want to delete!', + "clear_redis_confirm_tit": 'Clear database', + "clear_redis_confirm_cont": 'Data cannot be restored after being cleared. Do you want to continue?', + "backup_list": 'Backup list', + "backup_list_empty": 'The backup list is empty', + "add_cloud_btn": 'Add Remote DB', + "cloud_not_config1": 'No local or remote server is installed', + "cloud_not_config2": 'The remote server is not configured', + "admin_password": "Admin Password" }, "soft":{ "php_main1":"PHP service", @@ -1059,7 +1135,7 @@ var lan = { "mysql_status_ps4":"If too low, increase innodb_buffer_pool_size", "mysql_status_ps5":"If too low, increase query_cache_size", "mysql_status_ps6":"If too high, increase tmp_table_size", - "mysql_status_ps7":"If too high, increase table_cache_size", + "mysql_status_ps7":"If too high, increase table_open_cache", "mysql_status_ps8":"If not 0, please check index of database table", "mysql_status_ps9":"If not 0, please check index of database table", "mysql_status_ps10":"If too high, increase sort_buffer_size", @@ -1183,6 +1259,10 @@ var lan = { }, "site":{ "website": "Website", + "website_name": "Website name: ", + "rename": "Rename", + "copy": "Copy", + "website_edit_tips": "Click the editing content, press Enter or lose the focus and automatically save", "executing":"is being executed, please wait...", "click_edit":"Click to edit content", "have_been_selected":"Selected ", @@ -1358,6 +1438,9 @@ var lan = { "ssl_help_3":"If you have your own SSL, please switch to [other certificate] tab to add", "ssl_key":"Private key (KEY)", "ssl_crt":"Certificate (CRT/PEM)", +"ssl_save":"Save and enable SSL", + "ssl_renewal":"Renewal SSL", + "ssl_download":"Download SSL", "ssl_close":"Disable SSL", "bt_bind_no":"Not bound to aaPanel account, please register and bind. After binding aaPanel account (non-forum account), you can deploy SSL with one click", "bt_user":"aaPanel Account", @@ -1376,7 +1459,7 @@ var lan = { "bt_ssl_help_7":"Valid for 1 year, renewal is not supported, reapplication is required after expiration.", "bt_ssl_help_8":"The certificate is valid for 3 months, supports wildcard domain. Auto-renew by default.", "bt_ssl_help_9":"If you uses CDN or redirect, you may not be able to apply and renew through file verification.", - "bt_ssl_help_10":"Paste you KEY and CRT content, and then save it[HELP]。", + "bt_ssl_help_10":"Paste you KEY and CRT content, and then save it.", "phone_input":"Enter mobile phone number", "ssl_apply_1":"Submitting order,please wait..", "ssl_apply_2":"Verifying domain,please wait..", @@ -1478,6 +1561,8 @@ var lan = { "ssl_tips4": "It is recommended to use a domain name with a secondary domain name of www to apply for a certificate, so that the system will give away the top-level domain name as an optional name by default", "ssl_tips5": "When you do not specify a SSL default site, if you use HTTPS to access a site that does not have SSL enabled, you will directly access a site that has SSL enabled", "ssl_tips6": "99% of users can easily deploy themselves, if you don't understand, aaPanel provides certificate deployment service 50 yuan Once", +"ssl_tips7": "When no SSL default site is specified, a site without SSL will use HTTPS to access the site with SSL enabled", + "ssl_tips8": "If you cannot access HTTPS after enabling it, please check whether the security group has properly released port 443", "checking_mode": "Verification mode", "file_check": "File verification", "dns_check_tips1": "In DNS validation, we provide three automated DNS API, and provide manual mode", @@ -1566,9 +1651,17 @@ var lan = { "set_php_cli_cmd": "Set the PHP-CLI (command line) version", "deploy_success_cret": "Remind: ", "try_renew_cret": "The SSL will be auto renewed 1 month before the expiration date", - "cert_brand": "Brand: ", - "expire_time": "Expire date: ", - "auth_domain": "Certified domain(s): ", + "other_cert": "Other cert", + "cert_class": "Cert category:", + "cert_brand": "Brand:", + "expire_time": "Expire date:", + "expire_time_tip1": function (time, day) { + return time + ', ' + day + ' days remaining' + }, + "expire_time_tip2": "expired", + "auth_domain": "Cert domain(s):", + "force_https": "Force HTTPS:", + "expire_reminders": "Expire reminders:", "ssl_renew": "Renew", "deploy_success_tips": "Successfully deployed: Please replace the new certificate before the certificate expires", "not_deploy_and_save": "Currently not deployed: Click the [Save] button to complete the deployment of this certificate", @@ -1641,6 +1734,228 @@ var lan = { "batch_add_site":"Batch add site", "site_name":"Site name", "opt_result":"Opt result" +}, + "set_ssl": { + "tips1": "Tips: The site lacks SSL certificate, accessing may be risky.", + "apply": "Apply SSL", + "tips2": function (domain, isExpired) { + return "Tips: Certificate for [ " + domain + " ] " + (isExpired ? 'has expired' : 'is about to expire') + ", Please update promptly!" + }, + "renewal": "Renewal", + "menu1": "Curr, other Certs", + "menu2": "Business Certificate", + "menu3": "Let's Encrypt", + "menu4": "Certificate holder", + "deployed": "Deployed", + "not_deployed": "Not deployed", + "cert_type": "Certificate type:", + "cert_type1": "Other Certificate", + "cert_type2": "Let's Encrypt", + "cert_type3": "宝塔SSL", + "cert_type4": "Business Certificate", + "other_cert": "Other Certificate", + "cert_brand": "Brand:", + "auth_domain": "Certificate domain(s):", + "expire_time": "Expire date:", + "expired": "Expired", + "expire_time_text": function (time, day) { + return time + ', ' + day + ' days remaining' + }, + "force_https": "Force HTTPS:", + "expire_reminder": "Expire reminder", + "ssl_key": "Private key (KEY)", + "ssl_crt": "Certificate (CRT/PEM)", + "save_btn": "Save", + "save_enable_btn": "Save and enable SSL", + "renewal_btn": "Renewal SSL", + "download_btn": "Download SSL", + "close_btn": "Disable SSL", + "save_ssl_tips1": "Paste you KEY and CRT content, and then save it.", + "save_ssl_tips2": "When no SSL default site is specified, a site without SSL will use HTTPS to access the site with SSL enabled", + "save_ssl_tips3": "If you cannot access HTTPS after enabling it, please check whether the security group has properly released port 443", + "set_alarm_mode_tips": "Enable certificate expiration alerts. Upon certificate expiration, automatic notifications will be sent.", + "expire_reminder_title": "Expire reminder config", + "site": "Site", + "force_https_confirm":"After disabling forced HTTPS, you need to clear the browser cache to see the effect. Would you like to proceed", + "remaining_days":"Remaining days", + "number_ransmissions":"Send times", + "no_more":"No more sending for the day, resumes tomorrow", + "notification_mode":"Alarm mode", + "application_config":"Application config", + "apply_all":"Apply the current configuration to all", + "no_config_site":"the site has not been configured", + "save_config":"Save configuration", + "enterprise_certificate":"Enterprise certificate", + "exceptional_application":"Exceptional application", + "anti_hijackingTampering":"Anti-hijacking/tampering", + "increase_seo":"Increase SEO weight", + "indemnity_guarantee":"Indemnity guarantee", + "refund_failure":"Refund for failure", + "official_use":"Official recommendation (aapanel.com is also used)", + "apply_certificate":"Application certificate", + "certificate_type":"Certificate type", + "expire_date":"Expire date", + "get_certificate_list":"Please wait while obtaining the certificate list", + "bus_tip1":"If your site uses CDN, high-defence IP, reverse proxy, 301 redirect, etc., it may lead to validation failure", + "bus_tip2":"Certificates can be purchased for many years, and can only be issued once a year (valid for one year), and need to be renewed within 30 days before expiration (domain verification is not required for renewal)", + "bus_tip3":"Apply for www.bt.cn certificate with www as the secondary domain name, binding and resolving the top-level domain (bt.cn) is required, otherwise the verification will fail", + "bus_tip4":"Compared with ordinary certificates, commercial certificates have higher security, compensation protection and support for wildcard and multi-domain names how to validate the commercial certificate?", + "no_cert":"No certificate", + "expire_date_text":function (day) { + return day + ' days remaining' + }, + "order_complate":"Order fulfill", + "troubleshooting_method":"Help", + "check_oneself":"Check by oneself", + "check_self_tip":"In illustrated form, this step-by-step guide teaches you to verify and deploy commercial SSL", + "how_verify":"How do I verify commercial certificates", + "data_com":"Incomplete", + "in_verify":"In Verif", + "cancelled":"Cancelled", + "app_fail":"Application failure", + "to_verified":"To be verified", + "no_pay":"Non-payment", + "renew_cert":"Renewal certificate", + "complete_data":"Improve data", + "deploy":"Deploy", + "download":"Download", + "verify":"Verify", + "no_action":"no-operation", + "detail":"Detail", + "verification_result":"Verification result", + "bus_cert_tip":"Sites that contain fraud, gambling, pornography, Trojan, virus and other illegal business information are prohibited from applying for SSL certificates. If there is any violation, the application will be revoked and the account will be suspended", + "domain_num":"Domain Count", + "select_domain_num":"Please select the number of domain names contained in the current certificate", + "cert_class":"Cert Type", + "ov_cert":"OV certificate", + "dv_cert":"DV certificate", + "ev_cert":"EV certificate", + "recom_enterprise":"Recommended for enterprise use", + "recom_pseson":"Recommended for personal, test use", + "recom_large":"Recommended for large government and enterprise use, high security", + "cert_brand":"Certificate brand", + "cert_type":"Certificate type", + "one_domain":"Single domain", + "more_domain":"Universal domain", + "pur_period":"Purchase period", + "num_year_test":function (num) { + return num + ' year' + }, + "deploy_service":"Deploy Service", + "no_necess":"It isn't necessary", + "service_secret":"Deployment Service (State Secret)", + "goods_include":"Goods included", + "total_cost":"Total cost", + "in_service":"Include deployment services", + "buy_now":"Buy now", + "wechat_pay":"Wechat Pay", + "Alipay_pay":"Alipay Pay", + "total":"total", + "tar_name":"Trade name", + "order_time":"Order time", + "wechat_swipe":"Pay with a swipe on wechat", + "pay_sus":"Payment success", + "com_price":"Commodity price", + "com_info":"Complete certificate information", + "return_list":"Return list", + "buy_cert_tip1":"After successful payment, please click \"Complete certificate Information\" to continue to apply for the certificate", + "no_bind":"If no account is bound, register the binding. Binding an account enables one-click SSL deployment", + "register_ac":"Register account", + "bind_tip1":"Compared with ordinary certificates, commercial certificates have higher security, compensation protection and support for wildcard and multi-domain names", + "bind_tip2":"Existing account, please log in to bind", + "click_view":"Click to view", + "deploy_cost":"Deployment service cost", + "default_over":function(num){ + return 'The default contains '+ num +' domain names, exceeding the number per domain name ' + }, + "or_price":"Original price", + "default_domain":function(num){ + return 'The default contains '+ num +' domain ' + }, + "over_domain":function(num){ + return ',over '+ num +' additional domain names' + }, + "dis_tip":"The current certificate brand does not support wildcard certificates. Please select another brand certificate", + "single_tip1":"Only one secondary domain or subdomain is supported, e.g. bt.com, cloud.bt.com, or dnspod.cloud.bt.com.", + "single_tip2":"If you need to bind all subdomains of a peer, e.g. *.bt.com, purchase a universal domain certificate.", + "more_tip1":"Domain names with wildcards, such as *.bt.com and *.cloud.bt.com, are universal domain names that contain all subdomain names of the same level.", + "more_tip2":"Note that universal domain names do not support cross-tiers, e.g. *.bt.com does not include *.cloud.bt.com support", + "buy_cert":"Purchase of business certificate", + "get_apply_cert":"Please wait while obtaining certificate information", + "cust_domain":"Customize the domain name", + "cust_place":"single domain, e.g. www.bt.cn", + "cust_tip1":"Before applying, please ensure that the domain name has been resolved, if it is not resolved, the review will fail (including the root domain name).", + "cust_tip2":"To apply for the certificate that uses www as the second-level domain name www.bt.cn, you need to bind and resolve the top-level domain name (bt.cn); otherwise, the verification fails", + "cust_tip3":"Optional name gift rules for SSL certificates:", + "cust_tip4":"Apply for a root domain name (e.g.bt.cn) and give away a www domain name (e.g. www.bt.cn)", + "cust_tip5":"Apply for a domain name whose host is www (e.g. : www.bt.cn), and give away a domain name of the upper level (e.g. : bt.cn).", + "cust_tip6":"Apply for another second-level domain name (e.g.app.bt.cn), and give away a domain name with the next level www (e.g. www.app.bt.cn).", + "sing_domain_err":"Single domain name format is incorrect, please re-enter", + "sing_domain_more":"The current certificate is a single domain name certificate, and wildcard application is not supported", + "select_domain":"Select site", + "sup_fuzzy":"Field fuzzy search is supported", + "domain_name":"Domain name", + "domain_name_pl":"Please enter domain name", + "domain_name_pla":"Please add domain name", + "man_dns":"Manages DNS authentication interfaces", + "del_api_confirm":"Delete the authentication interface and decide whether to continue the operation", + "add_dns":"Adding DNS Authentication", + "select_dns":"DNS Interface", + "select_parse":"Selective parsing mode", + "auto_parse":"Automatic resolution (DNS interface)", + "manual_parse":"Manual analysis", + "parse_tip":"Manual resolution Add the resolution by yourself. Add the resolution at the DNS resolver. Automatic resolution is recommended.", + "dns_api_config":"DNS interface Configuration", + "auto_more_domain":"Automatic combination of universal domain names", + "auto_more_tip":"To apply for a wildcard domain name, select this item and do not select *.xxx.com in the domain name list below", + "add_dns_ver":"Adding Dns Authentication", + "ps_pl":"Description a maximum of 35 characters", + "ver_type":"Validation type", + "ps_pls":"Please enter description", + "as_domain":"Associated domain name", + "more_domain_pl":"Please enter the domain name under the account, if you need to fill in more than one domain name, please fill in the line", + "renew_cert_load":"The certificate is being renewed, it may take a long time, please wait...", + "req_free_cert":"Request a free pagoda SSL certificate", + "cert_info":"Cert Info", + "per_name":"Name of person/company", + "per_name_pl":"Please enter personal/company name, required field", + "lo_area":"Local area", + "province_pl":"Please enter your province, required field", + "city_pl":"Please enter your city/county, required field", + "address":"Address", + "address_pl":"Please enter personal/company address, required field", + "phone_pl":"Please enter mobile phone number, required field", + "pos_code":"Postal code", + "pos_code_pl":"Please enter postal code, required field", + "section":"Section", + "g_a":"General affairs", + "add_tips":"Sites that contain illegal business information such as fraud, gambling, pornography, Trojan horses, and viruses are prohibited from applying for SSL certificates. If there is any violation, the application will be revoked and the account will be disabled", + "sub_info":"Submit information", + "phone_ver":"The mobile phone number format is incorrect", + "postal_ver":"The postal number format is incorrect", + "no_root_tip":function(domain,root){ + return 'You requested a certificate for the domain name [' + domain + '], but the program detected that you did not bind and resolve its root domain name [' + root + '] to the site, which will cause the certificate to fail to be issued!' + }, + "sub_cert":"Please wait while submitting certificate information...", + "open_ssl_comfirm":"To enable mandatory https, you need to enable ssl(save and enable the certificate) first. If ssl is disabled, do you want to enable it with one click?", + "edit_cert_comfirm":"If the current certificate content changes, the certificate information will be updated. Continue?", + "more_cert_tip1":function(num){ + return 'Multi-domain certificate currently supports '+ num +' domain names, if you need to add, please contact customer service!' + }, + "more_cert_tip2":function(num){ + return 'The current multi-domain certificate (currently supports '+ num +' domain name) requires at least 2 domain names or multiple domain names!' + }, + "ver_file":function(type){ + return type? 'Verify domain name - File verification':'Verify domain name - DNS verification' + }, + "file_ver_tip":"
                        • File verification (HTTP) : To ensure that the website can be accessed through http
                        • File verification (HTTPS) : To ensure that https is enabled on the website and that the website can be accessed through https
                        • DNS authentication: Need to manually parse the DNS record value
                        • Note: Only one replacement is allowed within 20 minutes, frequent replacement will prolong the application time
                        • ", + "more_cert_pl1":function(num){ + return 'Multi-domain wildcard certificate, one domain name per line, support '+ num +' domain names, mandatory fields, such as \r*.bt.cn\r*.btest.cn' + }, + "more_cert_pl2":function(num){ + return 'Multiple domain name certificate, one domain name per row, supports '+ num +' domain names, for example, \rwww.bt.cn\rwww.bttest.cn' + }, + "inpro_cert_info":"Improve business certificate information", } }, "public":{ @@ -1859,7 +2174,9 @@ var lan = { "modify_path_quota": "Setting directory quota, please wait...", "modify_mysql_quota": "Setting MySql quota, please wait...", "setup_success": "Setup successfully!", - "setup_fail": "Setup Failed!" + "setup_fail": "Setup Failed!", + "adding": "Adding", + "editing": "Editing" }, "public_backup":{ "login_expire":"Your login status has expired, please log in again!", @@ -1909,6 +2226,7 @@ var lan = { "server_disk":"Server disk", "get_cert":"Obtaining certificate information", "key":"Key", + "value":"Value", "cret_format":"Certificate (PEM format)", "save":"Save", "cret_help":"Paste your *.key and *.pem content and save", @@ -3002,5 +3320,297 @@ var lan = { 'setup': { } + }, + 'security': { + 'firewall': { + 'switchTit1': ' System Firewall', + 'switchTit2': 'Enable', + 'switchTit3': 'Disable', + 'switchMsg1': 'If the firewall is disabled, the server loses security protection. Do you want to continue?', + 'switchMsg2': 'You are advised to enable the firewall function. After the firewall function is enabled, the current server security can be better protected. Do you want to continue?', + 'switchMsg3': 'Setting firewall status', + 'clearTit1': 'Clearing Web Logs', + 'clearMsg1': 'After Web logs are cleared, website access data is deleted. This operation is irreversible. Determine whether to continue?', + 'import_tit': 'Import rules', + 'import_file': 'Please select a file', + 'import_btn': 'Select file', + 'import_file_tips': 'Please select the file to import!', + 'import_req': 'Importing rules', + 'export_req': 'Exporting rules', + 'add_btn': 'Add Rule', + 'import_btn': 'Import rules', + 'export_btn': 'Export rules', + 'protocol': 'Protocol', + 'ports': 'Port', + 'status': 'Status', + 'strategy': 'Strategy', + 'source_ip': 'Source IP', + 'all': 'All', + 'specify_ip': 'Specify IP', + 'specify_port': 'Specify port', + 'specify_port_input': 'Please select the specify port', + 'specify_port_val1': 'The specified port cannot be empty', + 'remarks': 'Remarks', + 'add_time': 'Add Time', + 'allow': 'Allow', + 'deny': 'Deny', + 'block': 'Block', + 'release': 'Release', + 'ip_home': 'IP home place', + 'source_port': 'Source port', + 'source_port_input': 'Please enter the source port', + 'source_port_val1': 'The source port cannot be empty', + 'source_port_val2': 'The format of the source port is incorrect. The available port ranges from 1 to 65535', + 'target_ip': 'Target IP', + 'target_ip_input': 'Please enter the target IP', + 'target_port': 'Target port', + 'target_port_input': 'Please enter the target port', + 'target_port_val1': 'The target port cannot be empty', + 'target_port_val2': 'The format of the target port is incorrect. The available port ranges from 1 to 65535', + 'areas': 'Area', + 'get_firewall_info': 'Getting system firewall status', + 'port': { + 'load': 'Getting the port rule list', + 'default': 'The port rule list is empty', + 'search': 'Please enter the port', + 'th3_click': 'Click for instructions', + 'form_title': ' Port rule', + 'form_port': 'Please enter the port', + 'form_specify_ip': 'Please enter the specified IP here', + 'form_port_empty': 'The port cannot be empty', + 'form_address_empty': 'The specified IP cannot be empty', + 'form_tips1': 'Support adding multiple ports, such as: 80, 88', + 'form_tips2': 'Support adding range ports, such as: 90-99', + 'del_tit': 'Delete Port rule ', + 'del_msg': 'Do you want to delete the current rule and continue?', + 'del_req': 'Deleting Port rules', + 'modify_strategy_req': 'Modifying Port strategy', + 'modify_strategy_tit': 'Modify Port strategy', + 'modify_strategy_msg1': 'After the port policy is set to Permit, access to the port is restored. Do you want to continue?', + 'modify_strategy_msg2': 'If the port policy is set to Deny, the port will deny external access. Do you want to continue?', + }, + 'ip': { + 'load': 'Getting the IP rule list', + 'default': 'The IP rule list is empty', + 'search': 'Please enter the IP or remarks', + 'form_title': ' IP rule', + 'form_tips1': 'If adding multiple IPs, please use "," to separate', + 'form_tips2': 'If you add an IP segment, such as: 192.168.0.0/24', + 'form_tips3': 'If adding a range of IPs, please enter 192.168.1.xx-192.168.1.xx', + 'form_ip': 'IP cannot be empty', + 'modify_strategy_req': 'Modifying IP strategy', + 'modify_strategy_tit': 'Modify IP strategy', + 'modify_strategy_msg1': 'Change the IP address policy to Permit. After the IP address is set, normal access is restored. Do you want to continue?', + 'modify_strategy_msg2': 'Change the IP address policy to Mask. After the IP address is set, server access is prohibited. Do you want to continue?', + 'del_tit': 'Delete Port rule ', + 'del_msg': 'The current rule is being deleted. Do you want to continue?', + 'del_req': 'Deleting IP rules', + }, + 'forward': { + 'load': 'Getting the port forwarding list', + 'default': 'The port forwarding list is empty', + 'search': 'Please enter forwarding port', + 'add_btn': 'Add port forward', + 'form_title': ' IP rule', + 'form_tips1': 'If it is local port forwarding, the target IP is: 127.0.0.1', + 'form_tips2': 'If the target IP is not filled in, it will be forwarded to the local port by default!', + 'form_ip': 'IP cannot be empty', + 'del_tit': 'Delete Port forward rule', + 'del_msg': 'Delete After a rule is selected, the source port stops forwarding the rule to the target port. Do you want to continue?', + 'del_req': 'Deleting rules', + }, + 'area': { + 'load': 'Getting the area rule list', + 'default': 'The area rule list is empty', + 'search': 'Please enter area', + 'add_btn': 'Add area rule', + 'get_area': 'Getting a list of country regions', + 'form_title': ' area rule', + 'form_tips1': 'Only a single Area name is currently supported!', + 'form_tips2': 'Please note: If this area is blocked, this area cannot be access your server!', + 'form_tips3': 'You can enter a single port or multiple ports. Multiple ports are separated by commas (,).', + 'del_tit': 'Delete area rule', + 'del_msg': 'Delete After a rule is selected, access to the region masked by the rule is restored. Do you want to continue?', + 'del_req': 'Deleting rules', + } + }, + 'ssh': { + 'port_empty': 'The port cannot be empty!', + 'port_error1': 'Incorrect port format, available range: 1-65535, ', + 'port_error2': 'Please avoid using the following ports', + 'set_root_req': 'Setting SSH Settings', + 'set_paw_req': 'Setting the SSH password login status', + 'set_pubkey_req': 'Disabling SSH key login', + 'set_alarm_req': 'Setting SSH login alarms', + 'download_key_tips': 'Please restart SSH key login and download the key!', + 'all': 'All', + 'success': 'Success', + 'fail': 'Failure', + 'get_ssh_info': 'Getting SSH configuration information', + 'get_jian': 'Getting the login alarm status', + 'get_config': 'Getting SSH Advanced configuration information', + 'get_login_send': 'Getting SSH login alarm configuration', + 'configured': 'Configured', + 'not_configured': 'Not configured', + 'logs': 'logs', + 's_logs': 'success log', + 'f_logs': 'failure log', + 'refresh': 'Refresh', + 'login_search': 'Please enter IP/User', + 'get_ssh_list1': 'The SSH login ', + 'get_ssh_list2': ' is empty', + 'ip_port': 'IP: port', + 'place': 'Place of attribution', + 'user': 'User', + 'status': 'Status', + 'o_time': 'Operation time', + 'l_success': 'Login success', + 'l_fail': 'Login failure', + 'key_title': 'Enable SSH key login', + 'key_login': 'SSH Password login', + 'key_mode': 'Key encryption mode', + 'enable': 'Enable', + 'disable': 'Disable', + 'recommend': 'Recommend', + 'set_sshkey': 'Enableing SSH key login', + 'key_view_title': 'SSH login key', + 'key_view_msg': 'Please enable the SSH key to log in again and view the key again!', + 'get_key': 'Regenerating the key', + 'get_key_req': 'Getting the SSH login key', + 'get_key_msg': 'Regenerating key successful!', + 'copy': 'Copy', + 'download': 'Download', + 'regenerate': 'Regenerate', + 'alarm_title': 'SSH login alarm', + 'alarm_set': 'Alarm settings', + 'ip_white': 'IP whitelist', + 'login_info': 'Login info', + 'time': 'Time', + 'ip_white_input': 'Please enter IP', + 'ip_white_tips': 'Only ipv4 whitelists can be set', + 'return_ip_default': 'The SSH login whitelist is empty.', + 'del_return_ip': 'Deleting the IP address whitelist', + 'get_logs': 'Please wait while obtaining the login log...', + 'add_return_ip': 'Adding whitelist', + 'get_msg_push_list': 'Getting the alarm configuration for SSH login', + 'login_send': 'Configuring alarm notification.' + }, + 'intrusion': { + 'user': 'User', + 'total': 'Total', + 'today': 'Today', + 'protection': 'Protection', + 'log': 'Log', + 'remark': 'Remark', + 'logs': 'Logs', + 'process_whitelist': 'Process whitelist', + 'intercept_content': 'Intercept content', + 'trigger_time': 'Trigger time', + 'date': 'Date', + 'switch_req': 'Setting the intrusion prevention status', + 'overview_req': 'Getting the Intrusion Prevention list', + 'overview_default': 'The intrusion prevention list is empty', + 'protection_req': 'Setting the intrusion prevention status', + 'log_req': 'Setting log status', + 'no_logs': 'Data empty', + 'logs_title': 'Command logs', + 'select_date': 'Select date', + 'logs_req': 'Getting the command logs', + 'logs_default': 'The command logs is empty', + 'run_path': 'Run path', + 'command_executed': 'Command executed', + 'command_path': 'Command path', + 'time': 'Time', + 'whitelist_req': 'Getting the process whitelist list', + 'whitelist_default': 'The process whitelist is empty. Procedure', + 'add_whitelist': 'Add process whitelist', + 'process_name': 'Process name', + 'process_name_input': 'e.g:/bin/bash', + 'add_whitelist_tips': 'The process needs to fill in the absolute path e.g: /usr/bin/curl', + 'del_whitelist_title': 'Delete process whitelist', + 'del_whitelist_msg': 'After you delete the selected process, it will no longer receive protection. Do you want to continue?', + 'intercept_logs_req': 'Getting the intercept logs', + 'intercept_logs_default': 'The intercept logs is empty', + 'operation_logs_req': 'Getting the operation logs', + 'operation_logs_default': 'The operation logs is empty', + }, + 'system': { + 'switch_req': 'Saving configuration', + 'add_ip_val1': 'Please enter the IP address', + 'add_ip_val2': 'The IP address format is incorrect!', + 'add_ip_req': 'IP address being submitted', + 'protection_req': 'Getting the system hardening configuration', + 'protection_default': 'The system hardening configuration is empty', + 'name': 'Name', + 'desc': 'Desc', + 'status': 'Status', + 'date': 'Date', + 'ip_list_default': 'The blocked IP address list is empty.', + 'ip': 'IP address', + 'unblock_time': 'Unblock time', + 'manually_unblock': 'Manually unblock', + 'unblock_now': 'Unblock now', + 'unblock_now_req': 'Decapsulating the IP address', + 'operate_logs_default': 'The operation logs is empty', + 'detail': 'Detail', + 'change_status_req': 'Saving configuration', + 'config': 'Configuration', + 'config_tips1': '[Read-only] Files and directories cannot be modified, created, or deleted', + 'config_tips2': '[Append] You can only add content, not delete or modify the original content', + 'config_tips3': '[Permissions] Set the permissions of a file or directory in a protected state, and auto restore it after turn off', + 'config_tips4': '[How to set] Please fill in the Linux Permissions code, such as: 644, 755, etc.', + 'config_tips5': 'After the above strategy is triggered, the client IP will be blocked for a period of time', + 'config_tips6': 'Please check the blocking record in the panel log or operation log', + 'config_tips7': 'Please check the record of successful SSH login in the panel log or operation log', + 'config_tips8': '[Process name] Please fill in the complete process name, such as: mysqld', + 'config_tips9': '[Explanation] Processes in the whitelist will no longer be detected', + 'append': "Append", + 'read': "Read", + 'config_defualt': 'The system hardening configuration is empty', + 'path': 'Path', + 'path_input': 'The full path of the protected file or dir', + 'path_val1': 'Please select the path', + 'model': 'Model', + 'model_val1': 'Please select mode', + 'permissions': 'Permissions', + 'permissions_input': 'Please enter permission', + 'protected': 'Protected', + 'unprotected': 'Unprotected', + 'del_config_req': 'Deleting object', + 'add_config_btn': 'Add protected file/directory', + 'add_config_req': 'Adding object', + 'ssh_view1': 'Login error', + 'ssh_view2': 'times within', + 'ssh_view3': 'seconds, blocked for', + 'ssh_view4': 'secondes', + 'ssh_view5': 'Please enter the detection period', + 'ssh_view6': 'Please enter a detection threshold', + 'ssh_view7': 'Please enter the lockout time', + 'ssh_view8': 'Saving configuration', + 'process_name': 'Process name', + 'process_name_input': 'Please enter the full process name', + 'del_process_req': 'Deleting object', + 'add_process_btn': 'Add process' + }, + 'logs': { + 'get_logfiles': 'Getting the log audit type', + 'get_sys_logs': 'Getting the list of log audit types', + 'logs_default': 'The log list is empty', + 'refresh': 'Refresh', + 'search': 'Please enter source/port/role/event', + 'refresh': 'Refresh', + 'clear': 'Clear', + 'operate_default': 'The panel operation log is empty', + 'operate_search': 'Please enter description', + 'user': 'User', + 'type': 'Operation type', + 'details': 'Details', + 'time': 'Operation time', + 'no_logs': 'The log is empty', + 'get_logs_req': 'Getting the panel run logs', + 'clear_logs_title': 'Clear panel run logs', + 'clear_logs_msg': 'After the log is cleared, errors caused by the running of the panel cannot be cleared. Do you want to continue?', + 'clear_logs_req': 'Clearing logs', + } } } \ No newline at end of file diff --git a/BTPanel/static/language/English/public.json b/BTPanel/static/language/English/public.json index 2d349578..d66af8e1 100644 --- a/BTPanel/static/language/English/public.json +++ b/BTPanel/static/language/English/public.json @@ -562,12 +562,12 @@ "CHANGE_PANEL_PASS": "Change panel password", "CANCEL_DOMAIN_BIND": "Cancel domain binding limit", "CHANGE_PANEL_USER": "Change panel username", - "CANCEL_IP_LIMIT": "Cacel IP access limit", + "CANCEL_IP_LIMIT": "Cancel IP access limit", "CHANGE_MYSQL_PASS_FORCE": "Forcibly change MySQL root password", "GET_PANEL_DEFAULT_MSG": "View panel default info", "CANCEL": "Cacel", "CLEAR_SYS_RUBBISH": "Clear system rubbish", - "CANCELLED": "Cacelled!", + "CANCELLED": "Cancelled!", "EXECUTING": "Executing ({1})...", "INPUT_CMD_NUM": "Pls enter command number:", "INPUT_NEW_PASS": "Pls enter new password: ", diff --git a/BTPanel/static/language/English/template.json b/BTPanel/static/language/English/template.json index 5cb2237c..b6bca9ac 100644 --- a/BTPanel/static/language/English/template.json +++ b/BTPanel/static/language/English/template.json @@ -93,6 +93,11 @@ "database":{ "H1":"Dashboard", "H2":"Database Manager", + "H3": "MySQL", + "H4": "SQLServer", + "H5": "MongoDB", + "H6": "Redis", + "H7": "PgSQL", "SEARCH":"Database search", "BTN1":"Add database", "BTN2":"root password", @@ -106,19 +111,19 @@ "TH2":"User", "TH3":"Password", "TH4":"Backup", - "TH5": "Notes", - "TH6": "Action", - "SP1": "Sync", - "SP2": "Sync all", - "SP3": "Obtaining information from server", - "TP1": "Sync selected database information to server", - "TP2": "Sync all database information to server", - "TP3": "Obtaining database list from server", - "JS1": "Pls install MySQL first!", - "JS2": "Install", - "RECYCLE_BIN": "Recycle bin", - "NOT_INSTALL_DATABASE_DESC": "未安装本地数据库,已隐藏无法使用的功能!" - }, + "TH5": "Notes", + "TH6": "Action", + "SP1": "Sync", + "SP2": "Sync all", + "SP3": "Obtaining information from server", + "TP1": "Sync selected database information to server", + "TP2": "Sync all database information to server", + "TP3": "Obtaining database list from server", + "JS1": "Pls install MySQL first!", + "JS2": "Install", + "RECYCLE_BIN": "Recycle bin", + "NOT_INSTALL_DATABASE_DESC": "未安装本地数据库,已隐藏无法使用的功能!" + }, "config":{ "H1":"Dashboard", @@ -203,11 +208,15 @@ "GOOGLE_AUTH_DESC": "A dynamic verification code is required to log in to the panel", "STRONG_PASS_DESC": "Enable strong password for the panel, rules: ", "STRONG_PASS_DESC1": "Length 8, upper and lower case letters, numbers and characters exist", - "EMAIL_NOT_SET": "Email is not set", + "EMAIL_NOT_SET": "Not configured", "TG_NOT_SET": "Telegram is not set", "NOTIFY_DESC": "After setting, abnormal message can be pushed", "LOGIN_ALARM": "Login panel notification", - "LOGIN_ALARM_DESC": "Every time you log in the panel will push a message to your receiver" + "LOGIN_ALARM_DESC": "Every time you log in the panel will push a message to your receiver", + "ALARM": "Alarm", + "ALARM_LIST": "Alarm List", + "ALARM_SETTING": "Alarm Settings", + "ALARM_LOG": "Alarm Log" }, "close":{ @@ -247,7 +256,9 @@ "G1":"StartTime:", "G2":"EndTime:", "G3":"Submit", - "LOAD_BALANCE":"Load Average" + "LOAD_BALANCE":"Load Average", + "UNIT": "Unit: ", + "ALL": "All" }, "crontab":{ @@ -315,24 +326,27 @@ }, "firewall":{ - "H1":"Dashboard", - "H2":"System Security", - "H3":"Firewall", - "H4":"Panel execution logs", - "SEARCH":"Search Logs", - "BTN1":"Turn on SSH", - "BTN2":"SSH Port:", - "BTN3":"Change", - "BTN4":"Turn on to Block ICMP", - "BTN5":"Clean", - "S1":"Site Logs:", - "F1":"Accept Port", - "F2":"Block IP", - "F3":"Port", - "F4":"Notes/Description", - "F5":"Open", - "F6":"Description: Supported Range of Port,Ex: 3000:3500", - "F7":"Click Check Description", + "H1": "Firewall", + "H2": "SSH", + "H3": "Anti Intrusion", + "H4": "System Hardening", + "H5": "Logs Audit", + "H6": "Panel Logs", + "PF": " prevention features", + "TURN1": "Turn on to Firewall", + "TURN2": "Turn on to Block ICMP", + "TURN3": "Turn on SSH", + "BTN1": "Clean", + "BTN2": "SSH Port", + "BTN3": "Change", + "BTN5": "Clean", + "BTN6": "Install", + "BTN7": "Buy Pro", + "S1":"Site Logs: ", + "F1": "Port rule", + "F2": "IP rules", + "F3": "Port forward", + "F4": "Area rules", "TH1":"No.", "TH2":"Action", "TH3":"Status", @@ -345,7 +359,68 @@ "LTH4":"Time of Operation", "PANEL_LOG":"Panel log", "LOG_EMPTY":"Log empty", - "UNABLE_RETRIEVE_LOG":"Unable to retrieve log information" + "UNABLE_RETRIEVE_LOG":"Unable to retrieve log information", + "AI1": "Master switch", + "AI2": "Intrusion interception times: ", + "AI3": "Protection days: ", + "AI4": "Overview", + "AI5": "Process whitelist", + "AI6": "Intercept logs", + "AI7": "Operation logs", + "AI8": "After turn on, the system will restrict user operation commands and record tracking", + "AI9": "When turn off the system, only record and track the commands that the user has operated", + "AI10": "At present, the default is only for intrusion problems caused by user www, redis, mysql operations.", + "AI12": "Prevents the program from hanging", + "AI13": "Stop the mining virus", + "AI14": "Webshell rights", + "AI15": "Overview", + "AI16": "Process whitelist", + "AI17": "Intercept logs", + "AI18": "Operation logs", + "SH1": "System hardening", + "SH2": "Protection", + "SH3": "Block IP", + "SH4": "Operation logs", + "SH5": "[Abnormal process] and [SSH hardening] will take up a certain amount of server overhead", + "SH6": "After enabling the system hardening, some software installation or sensitive operations will be prohibited", + "SH7": "After enabling [SSH hardening], if you log in to SSH for multiple consecutive login failures, the IP will be blocked", + "SH8": "[Note] If you need to install software or plug-ins, please turn off the system hardening first!", + "SH9": "IP Address", + "SH10": "Add", + "SH11": "[Block IP] The blocked IP here is only for the SSH service, that is, the blocked IP will not be able to connect to SSH", + "SH12": "[Add] IP block added manually can only be unblocked manually!", + "SH14": "Prevents the system from being implanted with a Trojan", + "SH15": "Harden the system security configuration", + "SH16": "Protection", + "SH17": "Block IP", + "SH18": "Operation logs", + "L1": "Operation logs", + "L2": "Run logs", + "L3": "Collect, analyze, and store the logs of the current service", + "L4": "Analyze and parse common logs", + "L5": "Logs list", + "S2": "Basic setup", + "S3": "SSH login logs", + "S4": "SSH Login Details", + "S5": "Success", + "S6": "Failure", + "S7": "SSH login logs", + "S8": "Record and view SSH login logs", + "SS1": "SSH port", + "SS2": "Save", + "SS3": "Port used by the SSH protocol. The default value is 22", + "SS4": "Root login Settings", + "SS5": "Getting", + "SS6": "SSH Password login", + "SS7": "Default login mode of SSH", + "SS8": "SSH key login", + "SS9": "Key View", + "SS10": "Download", + "SS11": "You are advised to use a key to log in and disable the password for higher security", + "SS12": "SSH login alarm", + "SS13": "Not configured", + "SS14": "Set", + "SS15": "Set SSH login alarms. When an abnormal login occurs, an alarm message is pushed to an email address in real time" }, "soft":{ @@ -428,6 +503,7 @@ "M11":"Logout", "HELP":"For Support|Suggestions, please visit the aaPanel Forum" }, + "layout":{ "tips1":"The current IE browser version is too low to display some features, please use another browser. Or if you use a browser developed by a Chinese company, please switch to Extreme Mode!" } diff --git a/BTPanel/static/language/en/LC_MESSAGES/en.mo b/BTPanel/static/language/en/LC_MESSAGES/en.mo new file mode 100644 index 0000000000000000000000000000000000000000..11caecfa283cd640b9b4b4da85f9e69ffa0fb1d0 GIT binary patch literal 154785 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 V6^bVDMm*QC`_az^S88m-, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: 2022-01-05 10:15+0800\n" +"PO-Revision-Date: 2022-01-05 10:16+0800\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Generated-By: pygettext.py 1.5\n" +"X-Generator: Poedit 3.0.1\n" + +msgid "Failed to delete file!" +msgstr "Failed to delete file!" + +msgid "The softlink file was created successfully" +msgstr "The softlink file was created successfully" + +msgid "Whether to turn on pathinfo" +msgstr "Whether to turn on pathinfo" + +msgid "Successfully added mapping [{}]" +msgstr "Successfully added mapping [{}]" + +msgid "This is not a directory" +msgstr "This is not a directory" + +msgid "Verification error!" +msgstr "Verification error!" + +msgid "Successfully changed" +msgstr "Successfully changed" + +msgid "Check ERROR" +msgstr "Check ERROR" + +msgid "System critical directory cannot be used as FTP directory!" +msgstr "System critical directory cannot be used as FTP directory!" + +msgid "|-Get CA verification results [{}]..." +msgstr "|-Get CA verification results [{}]..." + +msgid "Path format is incorrect, the format is /xxx" +msgstr "Path format is incorrect, the format is /xxx" + +msgid "Successfully deleted directory!" +msgstr "Successfully deleted directory!" + +msgid "Successfully created directory!" +msgstr "Successfully created directory!" + +msgid "Site [{}] subdirectory [{}] bound to [{}]" +msgstr "Site [{}] subdirectory [{}] bound to [{}]" + +msgid "Already installed" +msgstr "Already installed" + +msgid "Set URL rewrite" +msgstr "Set URL rewrite" + +msgid "Specific parameters are invalid!" +msgstr "Specific parameters are invalid!" + +msgid "Please enter your vaild email" +msgstr "Please enter your vaild email" + +msgid "|-All domain names are verified and CSR is being sent..." +msgstr "|-All domain names are verified and CSR is being sent..." + +msgid "Batch setting permission successful!" +msgstr "Batch setting permission successful!" + +msgid "|-Check CA verification results [{}]..." +msgstr "|-Check CA verification results [{}]..." + +msgid "Migration successful" +msgstr "Migration successful" + +msgid "Specified category name already exists!" +msgstr "Specified category name already exists!" + +msgid "|-Getting verification information.." +msgstr "|-Getting verification information.." + +msgid "The composer.json configuration file was not found in the specified directory!" +msgstr "The composer.json configuration file was not found in the specified directory!" + +msgid "Your input is illegal and the modification failed" +msgstr "Your input is illegal and the modification failed" + +msgid "Failed to set database permission [{}] => {}" +msgstr "Failed to set database permission [{}] => {}" + +msgid "ASP tag support" +msgstr "ASP tag support" + +msgid "Return type ERROR" +msgstr "Return type ERROR" + +msgid "Unbound user" +msgstr "Unbound user" + +msgid "Password is incorrect, Username:{}, Password:{}, Login IP:{}" +msgstr "Password is incorrect, Username:{}, Password:{}, Login IP:{}" + +msgid "Successfully set, the site will stop automatically when expires!" +msgstr "Successfully set, the site will stop automatically when expires!" + +msgid "The specified order does not exist!" +msgstr "The specified order does not exist!" + +msgid "Software list updated!" +msgstr "Software list updated!" + +msgid "The target URL format is incorrect {}" +msgstr "The target URL format is incorrect {}" + +msgid "Get Site run path false" +msgstr "Get Site run path false" + +msgid "File has parmanently deleted from recycle bin {}!" +msgstr "File has parmanently deleted from recycle bin {}!" + +msgid "Change panel password" +msgstr "Change panel password" + +msgid "Failed to get, please try again later!" +msgstr "Failed to get, please try again later!" + +msgid "File upload failed, skip this backup!" +msgstr "File upload failed, skip this backup!" + +msgid "User [{}] exists!" +msgstr "User [{}] exists!" + +msgid "Backup to {}, a total of {} {}, and failures {}." +msgstr "Backup to {}, a total of {} {}, and failures {}." + +msgid "Please enter the host domain name" +msgstr "Please enter the host domain name" + +msgid "Install" +msgstr "Install" + +msgid "The specified website profile does not exist" +msgstr "The specified website profile does not exist" + +msgid "Modified access port to {} for phpMyAdmin!" +msgstr "Modified access port to {} for phpMyAdmin!" + +msgid "The domain already exists" +msgstr "The domain already exists" + +msgid "Failed to get php version!" +msgstr "Failed to get php version!" + +msgid "Successfully unmounted, some directories may need to restart the server to take effect!" +msgstr "Successfully unmounted, some directories may need to restart the server to take effect!" + +msgid "Operation succeeded" +msgstr "Operation succeeded" + +msgid "The specified username not exists!" +msgstr "The specified username not exists!" + +msgid "Tomcat mapping closed!" +msgstr "Tomcat mapping closed!" + +msgid "Current txt record expired, please re-acquire" +msgstr "Current txt record expired, please re-acquire" + +msgid "Successfully changed pgsql user access authority" +msgstr "Successfully changed pgsql user access authority" + +msgid "Wrong parameter length!" +msgstr "Wrong parameter length!" + +msgid "Failed to obtain authorization: {}" +msgstr "Failed to obtain authorization: {}" + +msgid "The same as the current storage directory, file cannot be moved!" +msgstr "The same as the current storage directory, file cannot be moved!" + +msgid "Response resources should use URI path or HTTP status code, such as: /test.png or 404" +msgstr "Response resources should use URI path or HTTP status code, such as: /test.png or 404" + +msgid "The specified command name already exists" +msgstr "The specified command name already exists" + +msgid "|-Error: {}, exit the application process." +msgstr "|-Error: {}, exit the application process." + +msgid "Successfully saved" +msgstr "Successfully saved" + +msgid "PHP load status acquisition failed!" +msgstr "PHP load status acquisition failed!" + +msgid "Batch operating succeeded [{}], failed [{}]" +msgstr "Batch operating succeeded [{}], failed [{}]" + +msgid "There was an error setting, please try again." +msgstr "There was an error setting, please try again." + +msgid "Stop" +msgstr "Stop" + +msgid "Set site [{}] to password authentication required!" +msgstr "Set site [{}] to password authentication required!" + +msgid "ERROR: API service is NOT enabled!" +msgstr "ERROR: API service is NOT enabled!" + +msgid "Cannot upload files to the system document root!" +msgstr "Cannot upload files to the system document root!" + +msgid "Uncompression failed!" +msgstr "Uncompression failed!" + +msgid "Unable to complete the automatic authentication, please add 127.0.0.1 to the server list and set the authentication method to [password authentication]" +msgstr "Unable to complete the automatic authentication, please add 127.0.0.1 to the server list and set the authentication method to [password authentication]" + +msgid "There are currently no certificates to renew!" +msgstr "There are currently no certificates to renew!" + +msgid "Sort saved" +msgstr "Sort saved" + +msgid "|-{} Query verification results.." +msgstr "|-{} Query verification results.." + +msgid "When applying using dnsapi, specify the dnsapi key in the --dns_key parameter!" +msgstr "When applying using dnsapi, specify the dnsapi key in the --dns_key parameter!" + +msgid "Successfully mounted" +msgstr "Successfully mounted" + +msgid "Edit notes" +msgstr "Edit notes" + +msgid "Expired backup files have been cleaned from disk: {}" +msgstr "Expired backup files have been cleaned from disk: {}" + +msgid "|-ERROR, password cannot be less than 8 characters" +msgstr "|-ERROR, password cannot be less than 8 characters" + +msgid "Have not installed the mail server before, please feel free to install" +msgstr "Have not installed the mail server before, please feel free to install" + +msgid "The authentication is successful and the session channel is being constructed" +msgstr "The authentication is successful and the session channel is being constructed" + +msgid "Please enter the content to be replaced" +msgstr "Please enter the content to be replaced" + +msgid "Test Database" +msgstr "Test Database" + +msgid "System database, cannot be deleted" +msgstr "System database, cannot be deleted" + +msgid "Please bind your account first!" +msgstr "Please bind your account first!" + +msgid "Successful to update to {}" +msgstr "Successful to update to {}" + +msgid "File moved to recycle bin!" +msgstr "File moved to recycle bin!" + +msgid "Number of databases" +msgstr "Number of databases" + +msgid "This domain name does not exist under this dnspod account, adding resolution failed!" +msgstr "This domain name does not exist under this dnspod account, adding resolution failed!" + +msgid "Successfully repaired!" +msgstr "Successfully repaired!" + +msgid "Failed to uninstall Python, please try again" +msgstr "Failed to uninstall Python, please try again" + +msgid "Specify max security depth of the server's execution stack. Default value is 2MB" +msgstr "Specify max security depth of the server's execution stack. Default value is 2MB" + +msgid "Size of used page table" +msgstr "Size of used page table" + +msgid "Failed to change" +msgstr "Failed to change" + +msgid "Request timeout" +msgstr "Request timeout" + +msgid "Temporary user has been forcibly logged out:{}" +msgstr "Temporary user has been forcibly logged out:{}" + +msgid "Incorrect email address! [{}]" +msgstr "Incorrect email address! [{}]" + +msgid "The email does not exist, please add it to the mailbox" +msgstr "The email does not exist, please add it to the mailbox" + +msgid "Get worker IdleWorkers False" +msgstr "Get worker IdleWorkers False" + +msgid "You cannot login now because login failed too many times!" +msgstr "You cannot login now because login failed too many times!" + +msgid "FTP manager" +msgstr "FTP manager" + +msgid "Per Day" +msgstr "Per Day" + +msgid "The site you tried to add already exists!" +msgstr "The site you tried to add already exists!" + +msgid "The panel version is too low, please update to the latest version" +msgstr "The panel version is too low, please update to the latest version" + +msgid "Directory moved to recycle bin!" +msgstr "Directory moved to recycle bin!" + +msgid "Configuration file mismatch caused by reinstalling Nginx fixed" +msgstr "Configuration file mismatch caused by reinstalling Nginx fixed" + +msgid "Next" +msgstr "Next" + +msgid "[Force HTTPS] is enabled on the current website, please turn off this function before applying for an SSL certificate!" +msgstr "[Force HTTPS] is enabled on the current website, please turn off this function before applying for an SSL certificate!" + +msgid "File does not exist!" +msgstr "File does not exist!" + +msgid "Please enter the domain name" +msgstr "Please enter the domain name" + +msgid "Clearing IP info" +msgstr "Clearing IP info" + +msgid "The file name contains more than 128 bytes" +msgstr "" + +msgid "This entrance has been used by the panel, please set another entrances!" +msgstr "This entrance has been used by the panel, please set another entrances!" + +msgid "URL suffix cannot be empty" +msgstr "URL suffix cannot be empty" + +msgid "Please enter the correct IP address" +msgstr "Please enter the correct IP address" + +msgid "The format of the parameter passed to the script is incorrect" +msgstr "The format of the parameter passed to the script is incorrect" + +msgid "Username cannot be empty" +msgstr "Username cannot be empty" + +msgid "Failed to send notification" +msgstr "Failed to send notification" + +msgid "Depends on the following software, please install [{}] first" +msgstr "Depends on the following software, please install [{}] first" + +msgid "Specified redirect name already exists" +msgstr "Specified redirect name already exists" + +msgid "Failed to optimize or already optimized" +msgstr "Failed to optimize or already optimized" + +msgid "Limit on the number of connections that an individual child server will handle during its life" +msgstr "Limit on the number of connections that an individual child server will handle during its life" + +msgid "Limit of upload size cannot be less than 2 MB" +msgstr "Limit of upload size cannot be less than 2 MB" + +msgid "Failed to get, there is no default document in the configuration file" +msgstr "Failed to get, there is no default document in the configuration file" + +msgid "Missing requests component, please try to repair the panel!" +msgstr "Missing requests component, please try to repair the panel!" + +msgid "Max connections" +msgstr "Max connections" + +msgid "Verification failed" +msgstr "Verification failed" + +msgid "The DNS of the server is faulty and the domain name cannot be resolved. Please use the Linux toolbox to check the DNS configuration" +msgstr "The DNS of the server is faulty and the domain name cannot be resolved. Please use the Linux toolbox to check the DNS configuration" + +msgid "It is not allowed to mount to a mounted subdirectory" +msgstr "It is not allowed to mount to a mounted subdirectory" + +msgid "ERROR, the specified configuration value does NOT exist!" +msgstr "ERROR, the specified configuration value does NOT exist!" + +msgid "Cancelled!" +msgstr "Cancelled!" + +msgid "Waiting for renewal" +msgstr "Waiting for renewal" + +msgid "Failed to import database!" +msgstr "Failed to import database!" + +msgid "|-Cleared [{}], deleted [{}] files, freed disk space [{}]" +msgstr "|-Cleared [{}], deleted [{}] files, freed disk space [{}]" + +msgid "Every {}, run at {} Hour {} Min" +msgstr "Every {}, run at {} Hour {} Min" + +msgid "Panel settings" +msgstr "Panel settings" + +msgid "No certificate found for the specified order!" +msgstr "No certificate found for the specified order!" + +msgid "There is a problem with Tomcat {} environment, please check if it is normal" +msgstr "There is a problem with Tomcat {} environment, please check if it is normal" + +msgid "Tomcat external port" +msgstr "Tomcat external port" + +msgid "'Successfully modified cron job [{}]'" +msgstr "'Successfully modified cron job [{}]'" + +msgid "Email sending failed, please check if the STMP password or host is correct!" +msgstr "Email sending failed, please check if the STMP password or host is correct!" + +msgid "FTP port" +msgstr "FTP port" + +msgid "Successfully uncompressed file from [{}] to [{}]!" +msgstr "Successfully uncompressed file from [{}] to [{}]!" + +msgid "Your current IP is[{}],please use correct IP to access!" +msgstr "Your current IP is[{}],please use correct IP to access!" + +msgid "Please uninstall [{}] first" +msgstr "Please uninstall [{}] first" + +msgid "|-Certificate obtained successfully!" +msgstr "|-Certificate obtained successfully!" + +msgid "Connection failure: {}" +msgstr "Connection failure: {}" + +msgid "Successfully synced server time!" +msgstr "Successfully synced server time!" + +msgid "You cannot have extra parameters" +msgstr "You cannot have extra parameters" + +msgid "Keep the latest number of backups: {} copies" +msgstr "Keep the latest number of backups: {} copies" + +msgid "Open successfully, please manually release phpmyadmin ssl port" +msgstr "Open successfully, please manually release phpmyadmin ssl port" + +msgid "Restart panel" +msgstr "Restart panel" + +msgid "Unable to initialize ACME client" +msgstr "Unable to initialize ACME client" + +msgid "Name must contain more than 3 and less than 15 characters" +msgstr "Name must contain more than 3 and less than 15 characters" + +msgid "Database has been backed up to: {}" +msgstr "Database has been backed up to: {}" + +msgid "Software manager" +msgstr "Software manager" + +msgid "User Management" +msgstr "User Management" + +msgid "Directory size: {}" +msgstr "Directory size: {}" + +msgid "Get help" +msgstr "Get help" + +msgid "Failed to add" +msgstr "Failed to add" + +msgid "Hotlink Protection for site [{}] enabled!" +msgstr "Hotlink Protection for site [{}] enabled!" + +msgid "Format of primary domain is incorrect" +msgstr "Format of primary domain is incorrect" + +msgid "Turn off access limit: rm -f /www/server/panel/data/limitip.conf" +msgstr "Turn off access limit: rm -f /www/server/panel/data/limitip.conf" + +msgid "Data recovery failed!" +msgstr "Data recovery failed!" + +msgid "Backup error!" +msgstr "" + +msgid "Old proxy" +msgstr "Old proxy" + +msgid "Username or Password incorrect: {}" +msgstr "Username or Password incorrect: {}" + +msgid "DNS server connection failed, please check if the key is correct." +msgstr "DNS server connection failed, please check if the key is correct." + +msgid "Can NOT get target URL" +msgstr "Can NOT get target URL" + +msgid "WebShell behavior" +msgstr "WebShell behavior" + +msgid "Delete [ {} ] dir auth successfully" +msgstr "Delete [ {} ] dir auth successfully" + +msgid "Short tag support" +msgstr "Short tag support" + +msgid "Site [{}], document root [{}] does NOT exist, recreated!" +msgstr "Site [{}], document root [{}] does NOT exist, recreated!" + +msgid "Added trojan scan task for directory [{}]!" +msgstr "Added trojan scan task for directory [{}]!" + +msgid "Binding success" +msgstr "Binding success" + +msgid "Project already stopped" +msgstr "Project already stopped" + +msgid "No recipient, set the basic information of the mail first please." +msgstr "No recipient, set the basic information of the mail first please." + +msgid "This favorite object could not be found!" +msgstr "This favorite object could not be found!" + +msgid "Unable to write to file, please check if system hardening is enabled!" +msgstr "Unable to write to file, please check if system hardening is enabled!" + +msgid "No drafts available!" +msgstr "No drafts available!" + +msgid "Size of physical memory that the table process has locked" +msgstr "Size of physical memory that the table process has locked" + +msgid "Recovery failed!" +msgstr "Recovery failed!" + +msgid "Execution failed: {}" +msgstr "Execution failed: {}" + +msgid "Password must be at least [{}] characters" +msgstr "Password must be at least [{}] characters" + +msgid "Successfully cancelled" +msgstr "Successfully cancelled" + +msgid "Size of library used by process" +msgstr "Size of library used by process" + +msgid "|-Verified, content [{}]..." +msgstr "|-Verified, content [{}]..." + +msgid "#referenced redirect rule, if commented, the configured redirect rule will be invalid" +msgstr "#referenced redirect rule, if commented, the configured redirect rule will be invalid" + +msgid "Registration for ACME account failed: {}" +msgstr "Registration for ACME account failed: {}" + +msgid "Hazardous file operation vulnerabilities" +msgstr "Hazardous file operation vulnerabilities" + +msgid "Successfully deleted file [{}]!" +msgstr "Successfully deleted file [{}]!" + +msgid "System critical directory cannot be used as site directory" +msgstr "System critical directory cannot be used as site directory" + +msgid "GET/POST exploitable vulnerabilities" +msgstr "GET/POST exploitable vulnerabilities" + +msgid "aaPanel Alert Test Email" +msgstr "aaPanel Alert Test Email" + +msgid "How many dirty pages are written in one cycle" +msgstr "How many dirty pages are written in one cycle" + +msgid "Key verification failed" +msgstr "Key verification failed" + +msgid "|-New username: {}" +msgstr "|-New username: {}" + +msgid "Empty successfully" +msgstr "Empty successfully" + +msgid "The send type is not supported" +msgstr "" + +msgid "Successfully created file [{}]!" +msgstr "" + +msgid "Editing this directory may cause service exceptions!" +msgstr "" + +msgid "The configuration content cannot be converted to json format!\n{}" +msgstr "" + +msgid "Setup successfully!" +msgstr "Setup successfully!" + +msgid "ERROR: System critical directory is not writable!
                          1. If [BT System Hardening] is installed, please turn it off

                          2. If Yunsuo is installed, please turn off [System Hardening] feature
                          3. If Safedog is installed, please turn off [System Protection] feature
                          4. If other security software is used, please uninstall it
                          " +msgstr "ERROR: System critical directory is not writable!
                          1. If [BT System Hardening] is installed, please turn it off

                          2. If Yunsuo is installed, please turn off [System Hardening] feature
                          3. If Safedog is installed, please turn off [System Protection] feature
                          4. If other security software is used, please uninstall it
                          " + +msgid "Unsafe path" +msgstr "Unsafe path" + +msgid "Run Every {} Minutes" +msgstr "Run Every {} Minutes" + +msgid "Issuing failed, the current server IP has reached the limit of creating up to 10 accounts every 3 hours." +msgstr "Issuing failed, the current server IP has reached the limit of creating up to 10 accounts every 3 hours." + +msgid "SSL is NOT currently enabled" +msgstr "SSL is NOT currently enabled" + +msgid "Parmanently deleted {} from recycle bin!" +msgstr "Parmanently deleted {} from recycle bin!" + +msgid "Certificate revoked!" +msgstr "Certificate revoked!" + +msgid "Renewed successfully!" +msgstr "Renewed successfully!" + +msgid "Failed to delete database [{}]!, {}" +msgstr "Failed to delete database [{}]!, {}" + +msgid "Database export failed!" +msgstr "Database export failed!" + +msgid "Add the SSH information of HOST: {}" +msgstr "Add the SSH information of HOST: {}" + +msgid "Verification code length error!" +msgstr "Verification code length error!" + +msgid "Please enter the correct domain" +msgstr "Please enter the correct domain" + +msgid "Set the BasicAuth status to: {}" +msgstr "Set the BasicAuth status to: {}" + +msgid "Backup completed" +msgstr "Backup completed" + +msgid "Download file {}" +msgstr "Download file {}" + +msgid "|-Turning off redirection {}" +msgstr "|-Turning off redirection {}" + +msgid "Successfully accepted port [{}]!" +msgstr "Successfully accepted port [{}]!" + +msgid "User Manual" +msgstr "User Manual" + +msgid "Username or password cannot be less than 3 digits!" +msgstr "Username or password cannot be less than 3 digits!" + +msgid "Max size of POST data" +msgstr "Max size of POST data" + +msgid "Ready to apply for SSL, domain name {}" +msgstr "Ready to apply for SSL, domain name {}" + +msgid "|-Error: {}, exited the application process." +msgstr "|-Error: {}, exited the application process." + +msgid "The page you requested was interrupted by an exception!" +msgstr "The page you requested was interrupted by an exception!" + +msgid "Currently only supports restoring local, Google storage and AWS S3 backups" +msgstr "" + +msgid "Restore Successful" +msgstr "" + +msgid "Panel does not find the backup file: {}" +msgstr "" + +msgid "Invalid login key" +msgstr "" + +msgid "The specified key does not exist or has expired" +msgstr "" + +msgid "Scan code successfully, log in!" +msgstr "" + +msgid "The current QR code has expired, please refresh the page and rescan the code!" +msgstr "" + +msgid "This server is bound to a maximum of {} devices, which has reached the limit!" +msgstr "" +msgid "Failed verification!" +msgstr "" +msgid "A server allows up to {} device bindings!" +msgstr "" +msgid "Bind successfully!" +msgstr "" +msgid "Cannot configure API through API interface" +msgstr "" +msgid "{} API interface" +msgstr "" +msgid "Change IP limit to [{}]" +msgstr "" +msgid "Temporary keys can only be obtained through the API interface" +msgstr "" +msgid "Syncing information, please try again!\n {}" +msgstr "" +msgid "Activate successfully" +msgstr "" +msgid "Activate failed" +msgstr "" +msgid "Renew Failed" +msgstr "" +msgid "Renew successfully" +msgstr "" +msgid "Apply Failed" +msgstr "" +msgid "Apply successfully" +msgstr "" +msgid "CA can't verify your domain name, please check if the domain name resolution is correct, or wait 5-10 minutes and try again." +msgstr "" +msgid "The CA server connection timed out, please try again later." +msgstr "" +msgid "The domain name does not belong to this DNS service provider. Please ensure that the domain name is filled in correctly." +msgstr "" +msgid "'The DNS server connection failed. Please check if the key is correct.'" +msgstr "" +msgid "The signing failed, the domain name exact set of domains: (.+): {} exceeded the weekly number of repeated issuances!" +msgstr "" +msgid "The signing failed, the current server IP has reached the limit of creating up to 10 accounts every 3 hours.." +msgstr "" +msgid "The verification failed, the domain name was not resolved, or the resolution did not take effect.!" +msgstr "" +msgid "Authentication failed, domain name resolution error or verification URL could not be accessed!" +msgstr "" +msgid "Failed to connect to CA server, please try again later." +msgstr "" +msgid "Unsupported domain name {}, please check if the domain name is correct!" +msgstr "" +msgid "The domain name {} did not find a resolution record. Please check if the domain name is resolved.!" +msgstr "" +msgid "If a valid TXT resolution record is not found in the domain name {}, please check if the TXT record is correctly parsed. If it is applied by DNSAPI, please try again in 10 minutes.!" +msgstr "" +msgid "Found the wrong TXT record on {}: {}, please check if the TXT resolution is correct. If it is applied by DNSAPI, please try again in 10 minutes.!" +msgstr "" +msgid "This domain name does not exist under this dnspod account. Adding parsing failed.!" +msgstr "" +msgid "Connection timed out, CA server could not access your website!" +msgstr "" +msgid "The domain name {} is currently required to verify the CAA record. Please manually resolve the CAA record, or try again after 1 hour.!" +msgstr "" +msgid "Verification timeout, please check whether the domain name is correctly resolved. If dns is resolved, the connection between the server and Let'sEncrypt may be abnormal. Please try again later!" +msgstr "" +msgid "Order creation failed, please try again later!" +msgstr "" +msgid "More than 5 verification failures in 1 hour, application is temporarily banned, please try again later!" +msgstr "" +msgid "CA server denied access, please try again later!" +msgstr "" +msgid "Depend on the following software, please install first [{}]" +msgstr "" +msgid "ERROR: System critical directory is not writable!
                          1. If [BT System Hardening] is installed, please turn it off

                          2. If Yunsuo is installed, please turn off [System Hardening] feature
                          3. If Safedog is installed, please turn off [System Protection] feature
                          4. If other security software is used, please uninstall it
                          " +msgstr "" +msgid "Please specify the software name!" +msgstr "" +msgid "Sorry, currently OLS official does not support php8.1" +msgstr "" +msgid "You did not purchase [ {} ] or the authorization has expired" +msgstr "" +msgid "The specified run directory {} does not exist!" +msgstr "" +msgid "The startup item name format is incorrect, support: [a-zA-Z0-9_]!" +msgstr "" +msgid "Launch configuration already exists!" +msgstr "" +msgid "Create startup item [{}] successful!" +msgstr "" +msgid "Modify startup item [{}] successful!" +msgstr "" +msgid "Delete startup item [{}] successful!" +msgstr "" +msgid "Setting startup item [{}] status succeeded!" +msgstr "" +msgid "launch configuration does not exist!" +msgstr "" +msgid "Close startup item [{}] successful!" +msgstr "" +msgid "Not run" +msgstr "" +msgid "Unable to get process information" +msgstr "" +msgid "Startup {} successful, PID:{}" +msgstr "" +msgid "Search content cannot be empty" +msgstr "" +msgid "The content to be replaced cannot be empty" +msgstr "" +msgid "The suffix cannot be empty; please enter [ *.* ] to search all files" +msgstr "" +msgid "The directory cannot be empty or /" +msgstr "" +msgid "Directory does not exist" +msgstr "" +msgid "Site [{}] turned off SSL successfully!" +msgstr "" +msgid "Site [{}] started!" +msgstr "" +msgid "The PHP connection configuration cannot be empty when customizing the version!" +msgstr "" +msgid "The PHP connection configuration format is incorrect, please refer to the example!" +msgstr "" +msgid "The specified unix socket [{}] does not exist!" +msgstr "" +msgid "Unable to connect to [{}], please check whether the machine can connect to the target server" +msgstr "" +msgid "Invalid username or email or password! please check and try again!" +msgstr "" +msgid "Failed to connect server!" +msgstr "" +msgid "The request failed, please try again later!" +msgstr "" +msgid "Apply for [{}] certificate to verify [{}] Please bind [{}] and resolve to the site!" +msgstr "" +msgid "Cannot create [{}]" +msgstr "" +msgid "Failed to set \n{}" +msgstr "" +msgid "You need to bind the domain name to the panel before you can apply for the Lets Encrypt certificate." +msgstr "" +msgid "Failed to apply for a certificate, please try to manually apply for a certificate for the panel domain name on the site management page" +msgstr "" +msgid "Certificate error, please check!" +msgstr "" +msgid "The certificate has been saved!" +msgstr "" +msgid "Please enter an account or password" +msgstr "" +msgid "Please enter the directory to be protected" +msgstr "" +msgid "Please enter the Name" +msgstr "" +msgid "Site password protection has been set, please cancel and then set. Site directory --> Password access" +msgstr "" +msgid "Directory has been protected" +msgstr "" +msgid "The website does not exist in the configuration:{}" +msgstr "" +msgid "|-Upgrading [{}]..." +msgstr "" +msgid "Scan QRCORE successfully" +msgstr "" +msgid "Login failed 1" +msgstr "" +msgid "API is not turned on" +msgstr "" +msgid "Unbound phone" +msgstr "" +msgid "Waiting for APP scan code login 1" +msgstr "" +msgid "Waiting for APP scan code login 2" +msgstr "" +msgid "Waiting for APP scan code login" +msgstr "" +msgid "APP scan code login, account: {}, login IP: {}" +msgstr "" +msgid "login successful!" +msgstr "" +msgid "Login failed 2" +msgstr "" + +msgid "Install the necessary PHP extensions" +msgstr "Install the necessary PHP extensions" + +msgid "Please specify verification type" +msgstr "Please specify verification type" + +msgid "The key does not exist. Please turn on and try again." +msgstr "The key does not exist. Please turn on and try again." + +msgid "Nginx is not install" +msgstr "Nginx is not install" + +msgid "Wrong connection address" +msgstr "Wrong connection address" + +msgid "Directory names cannot contain special characters!" +msgstr "Directory names cannot contain special characters!" + +msgid "

                          Issue failed, current txt record expired, please re-acquire!

                          " +msgstr "

                          Issue failed, current txt record expired, please re-acquire!

                          " + +msgid "This domain does NOT exist in the currently bound BT Cloud DNS account, failed to add resolution!" +msgstr "This domain does NOT exist in the currently bound BT Cloud DNS account, failed to add resolution!" + +msgid "The renewal task added to the queue!" +msgstr "The renewal task added to the queue!" + +msgid "No valid DNSAPI key information found" +msgstr "No valid DNSAPI key information found" + +msgid "Error reading PHP configuration file, please try to reinstall this PHP!" +msgstr "" + +msgid "Compression succeeded!" +msgstr "Compression succeeded!" + +msgid "Sorry, Program Error" +msgstr "Sorry, Program Error" + +msgid "Configuration is successfully modified, please restart the project manually" +msgstr "Configuration is successfully modified, please restart the project manually" + +msgid "Max time of input" +msgstr "Max time of input" + +msgid "Beta tester profile" +msgstr "Beta tester profile" + +msgid "Site [{}] added domain [{}] successfully!" +msgstr "Site [{}] added domain [{}] successfully!" + +msgid "Uninstallation succeeded" +msgstr "Uninstallation succeeded" + +msgid "Expired" +msgstr "Expired" + +msgid "Loading..." +msgstr "Loading..." + +msgid "Email does not exist!" +msgstr "Email does not exist!" + +msgid "Start exporting database: {}" +msgstr "Start exporting database: {}" + +msgid "Failed to move file [{}] to recycle bin!" +msgstr "Failed to move file [{}] to recycle bin!" + +msgid "It is not recommended to use [ . ] at the end of the directory, because there may be safety risks" +msgstr "It is not recommended to use [ . ] at the end of the directory, because there may be safety risks" + +msgid "#referenced redirect rule" +msgstr "#referenced redirect rule" + +msgid "Worker processes" +msgstr "Worker processes" + +msgid "Cacel" +msgstr "Cacel" + +msgid "Not installed" +msgstr "Not installed" + +msgid "Root password cannot be empty" +msgstr "Root password cannot be empty" + +msgid "Max value of simultaneously upload file" +msgstr "Max value of simultaneously upload file" + +msgid "Downloading:" +msgstr "Downloading:" + +msgid "NOT exist" +msgstr "NOT exist" + +msgid "Successfully imported database [{}]" +msgstr "Successfully imported database [{}]" + +msgid "Failed to set" +msgstr "Failed to set" + +msgid "Name of task cannot be empty!" +msgstr "Name of task cannot be empty!" + +msgid "Clear panel cache" +msgstr "Clear panel cache" + +msgid "Your plugin list is already the latest version {}!" +msgstr "Your plugin list is already the latest version {}!" + +msgid "Failed to stop" +msgstr "Failed to stop" + +msgid "Open successfully, take effect after manually restarting the database" +msgstr "Open successfully, take effect after manually restarting the database" + +msgid "This domain does NOT exist in this Aliyun account, failed to add resolution" +msgstr "This domain does NOT exist in this Aliyun account, failed to add resolution" + +msgid "Cloud verification failed!" +msgstr "Cloud verification failed!" + +msgid "Delete users [{}]" +msgstr "Delete users [{}]" + +msgid "Recycle bin feature turned on!" +msgstr "Recycle bin feature turned on!" + +msgid "Domain name {} is the same as the target domain name, please deselect it" +msgstr "Domain name {} is the same as the target domain name, please deselect it" + +msgid "The port exists, no need to repeat the release!" +msgstr "The port exists, no need to repeat the release!" + +msgid "Data validation failed and the CA was unable to get the correct captcha from the authenticated connection." +msgstr "Data validation failed and the CA was unable to get the correct captcha from the authenticated connection." + +msgid "Renewal failed. The number of failed attempts to apply for a certificate has reached the limit!" +msgstr "Renewal failed. The number of failed attempts to apply for a certificate has reached the limit!" + +msgid "|-ERROR, username cannot be less than 5 characters" +msgstr "|-ERROR, username cannot be less than 5 characters" + +msgid "Certificate expiration time: {}" +msgstr "Certificate expiration time: {}" + +msgid "{} Developer mode (DeBug)" +msgstr "{} Developer mode (DeBug)" + +msgid "Failed, disk space is not enough, currently available space:" +msgstr "Failed, disk space is not enough, currently available space:" + +msgid "Failed to move file!" +msgstr "Failed to move file!" + +msgid "|-Renewal success:{}" +msgstr "|-Renewal success:{}" + +msgid "Current" +msgstr "Current" + +msgid "Execution failed, attempted auto repair, please try again later!" +msgstr "Execution failed, attempted auto repair, please try again later!" + +msgid "|-ERROR, specified port is already in use" +msgstr "|-ERROR, specified port is already in use" + +msgid "Get Key {} False" +msgstr "Get Key {} False" + +msgid "Successfully restored database {}!" +msgstr "Successfully restored database {}!" + +msgid "Cannot get the correct device name" +msgstr "Cannot get the correct device name" + +msgid "Successfully added site!" +msgstr "Successfully added site!" + +msgid "Clearing log info" +msgstr "Clearing log info" + +msgid "The data directory length cannot exceed 32 bits" +msgstr "The data directory length cannot exceed 32 bits" + +msgid "Please go to the software store to install [Cloud Resolution] and complete the domain name NS binding." +msgstr "Please go to the software store to install [Cloud Resolution] and complete the domain name NS binding." + +msgid "Successfully {} FTP user [{}]!" +msgstr "Successfully {} FTP user [{}]!" + +msgid "Backup failed" +msgstr "Backup failed" + +msgid "Channel is built" +msgstr "Channel is built" + +msgid "Database [{}] does NOT exist!" +msgstr "Database [{}] does NOT exist!" + +msgid "Panel configuration" +msgstr "Panel configuration" + +msgid "Set the unauthorized response status to:{}" +msgstr "" + +msgid "Successfully restored database" +msgstr "Successfully restored database" + +msgid "|-ERROR, cannot use too simple username" +msgstr "|-ERROR, cannot use too simple username" + +msgid "The specified order number does not exist and cannot be renewed!" +msgstr "The specified order number does not exist and cannot be renewed!" + +msgid "Project failed to start, please check the project log" +msgstr "Project failed to start, please check the project log" + +msgid "Certificate ERROR" +msgstr "Certificate ERROR" + +msgid "Failed to uninstall" +msgstr "Failed to uninstall" + +msgid "Please enter a note" +msgstr "Please enter a note" + +msgid "Temporary login URL has been generated" +msgstr "Temporary login URL has been generated" + +msgid "Backup succeeded" +msgstr "Backup succeeded" + +msgid "Clearing system history" +msgstr "Clearing system history" + +msgid "Saved!" +msgstr "Saved!" + +msgid "Clear login limit" +msgstr "Clear login limit" + +msgid "Socket over time" +msgstr "Socket over time" + +msgid "Requested file does NOT exist!" +msgstr "Requested file does NOT exist!" + +msgid "Domain cannot be empty!" +msgstr "Domain cannot be empty!" + +msgid "Retry connection failed, {}" +msgstr "Retry connection failed, {}" + +msgid "Softlink file creation failed" +msgstr "Softlink file creation failed" + +msgid "|-Verifying domain name.." +msgstr "|-Verifying domain name.." + +msgid "Successfully deleted directory [{}]!" +msgstr "Successfully deleted directory [{}]!" + +msgid "Delete user failed!" +msgstr "Delete user failed!" + +msgid "|-Getting verification information..." +msgstr "|-Getting verification information..." + +msgid "All" +msgstr "All" + +msgid "The panel is packaged successfully. Please do NOT log in to the panel to do any other operations!" +msgstr "The panel is packaged successfully. Please do NOT log in to the panel to do any other operations!" + +msgid "Trying to automatically install ACME failed, please try to install manually by the following command

                          Installation command" +msgstr "Trying to automatically install ACME failed, please try to install manually by the following command

                          Installation command" + +msgid "Enable website [{}] successfully" +msgstr "Enable website [{}] successfully" + +msgid "Mysql root or user password is incorrect, please try to reset!" +msgstr "Mysql root or user password is incorrect, please try to reset!" + +msgid "Requested method [{}] does not exist!" +msgstr "Requested method [{}] does not exist!" + +msgid "The SSH protocol handshake timed out, and the network quality with the target server is too bad" +msgstr "The SSH protocol handshake timed out, and the network quality with the target server is too bad" + +msgid "The username already exists!" +msgstr "The username already exists!" + +msgid "Function does NOT exist" +msgstr "Function does NOT exist" + +msgid "#SECURITY-START Hotlink protection configuration" +msgstr "#SECURITY-START Hotlink protection configuration" + +msgid "Security Entrance cannot be less than 6 characters!" +msgstr "Security Entrance cannot be less than 6 characters!" + +msgid "The specified username already exists!" +msgstr "The specified username already exists!" + +msgid "Please enter the operation mode" +msgstr "Please enter the operation mode" + +msgid "Forcibly change MySQL root password" +msgstr "Forcibly change MySQL root password" + +msgid "Delete users[{}]" +msgstr "Delete users[{}]" + +msgid "Panel turned off successful!" +msgstr "Panel turned off successful!" + +msgid "Authorization Error: Your server submitted too many invalid requests!" +msgstr "Authorization Error: Your server submitted too many invalid requests!" + +msgid "At least [{}MB] memory is required to install" +msgstr "At least [{}MB] memory is required to install" + +msgid "

                          TXT record verification failed, no TXT record added, or added incorrectly!

                          " +msgstr "

                          TXT record verification failed, no TXT record added, or added incorrectly!

                          " + +msgid "Parameter ERROR!" +msgstr "Parameter ERROR!" + +msgid "Overstepping one authority!" +msgstr "Overstepping one authority!" + +msgid "Timeout cannot be less than [{}] seconds" +msgstr "Timeout cannot be less than [{}] seconds" + +msgid "Failed to get the list, please check if the [AK/SK/Storage] setting is correct!" +msgstr "Failed to get the list, please check if the [AK/SK/Storage] setting is correct!" + +msgid "Database moved to recycle bin!" +msgstr "Database moved to recycle bin!" + +msgid "Order deleted successfully!" +msgstr "Order deleted successfully!" + +msgid "No valid TXT resolution record was found in the domain name {}, please check whether the TXT record is parsed correctly. If it is applied by DNSAPI, please try again in 10 minutes!" +msgstr "No valid TXT resolution record was found in the domain name {}, please check whether the TXT record is parsed correctly. If it is applied by DNSAPI, please try again in 10 minutes!" + +msgid "Scan Task has in the queue!" +msgstr "Scan Task has in the queue!" + +msgid "fail to get!" +msgstr "fail to get!" + +msgid "No need to update" +msgstr "No need to update" + +msgid "Pls enter new MySQL root password:" +msgstr "Pls enter new MySQL root password:" + +msgid "Please enter an integer for the port" +msgstr "Please enter an integer for the port" + +msgid "API configuration" +msgstr "API configuration" + +msgid "Clear system rubbish" +msgstr "Clear system rubbish" + +msgid "Binding IP (modification of bound IP may be a security risk)" +msgstr "Binding IP (modification of bound IP may be a security risk)" + +msgid "All plugins successfully updated to 6.0 compatible!" +msgstr "All plugins successfully updated to 6.0 compatible!" + +msgid "Failed to save" +msgstr "Failed to save" + +msgid "Remove custom compilation parameters: {}:{}" +msgstr "Remove custom compilation parameters: {}:{}" + +msgid "Wednesday" +msgstr "Wednesday" + +msgid "Successfully uploaded file [{}] to [{}]!" +msgstr "Successfully uploaded file [{}] to [{}]!" + +msgid "Site Traffic Control only supports Nginx Web Server!" +msgstr "Site Traffic Control only supports Nginx Web Server!" + +msgid "The usernames entered twice are inconsistent, plesea try again!" +msgstr "The usernames entered twice are inconsistent, plesea try again!" + +msgid "Email already exists" +msgstr "Email already exists" + +msgid "Certificate ERROR, please paste the correct certificate in pem format!" +msgstr "Certificate ERROR, please paste the correct certificate in pem format!" + +msgid "#Persistent connection related configuration" +msgstr "#Persistent connection related configuration" + +msgid "Failed to modify FTP port! => {}" +msgstr "Failed to modify FTP port! => {}" + +msgid "Account or Password incorrect: {}" +msgstr "Account or Password incorrect: {}" + +msgid "Never Expires" +msgstr "Never Expires" + +msgid "Get worker RAM False" +msgstr "Get worker RAM False" + +msgid "Specified IP address already exists" +msgstr "Specified IP address already exists" + +msgid "|-A total of \\033[36m{}\\033[0m domain name records need to be resolved." +msgstr "|-A total of \\033[36m{}\\033[0m domain name records need to be resolved." + +msgid "Successfully logged in to the SSH server [{}:{}]" +msgstr "Successfully logged in to the SSH server [{}:{}]" + +msgid "Panel operation logs emptied!" +msgstr "Panel operation logs emptied!" + +msgid "Get worker Uptime False" +msgstr "Get worker Uptime False" + +msgid "Did not find the {} configuration file, please try to close the ssl port settings before opening" +msgstr "Did not find the {} configuration file, please try to close the ssl port settings before opening" + +msgid "Successfully initialize the API!" +msgstr "Successfully initialize the API!" + +msgid "Validation failed, domain name was not resolved, or resolution did not take effect!" +msgstr "Validation failed, domain name was not resolved, or resolution did not take effect!" + +msgid "|-Panel port changed to:{}" +msgstr "|-Panel port changed to:{}" + +msgid "The verification timed out. Please check if the domain name is resolved correctly. If it is resolved correctly, the connection between the server and Let'sEncrypt may be abnormal. Please try again later!" +msgstr "The verification timed out. Please check if the domain name is resolved correctly. If it is resolved correctly, the connection between the server and Let'sEncrypt may be abnormal. Please try again later!" + +msgid "ERROR requesting a certificate" +msgstr "ERROR requesting a certificate" + +msgid "Database [{}] backup failed!" +msgstr "Database [{}] backup failed!" + +msgid "phpMyAdmin already {}!" +msgstr "phpMyAdmin already {}!" + +msgid "Max time of running script" +msgstr "Max time of running script" + +msgid "File download failed, please try again or update manually!" +msgstr "File download failed, please try again or update manually!" + +msgid "SSH Server" +msgstr "SSH Server" + +msgid "Get worker date False" +msgstr "Get worker date False" + +msgid "Concurrency restrictions, IP restrictions, traffic restrictions must be greater than 0" +msgstr "Concurrency restrictions, IP restrictions, traffic restrictions must be greater than 0" + +msgid "Backup database [{}] succeed!" +msgstr "Backup database [{}] succeed!" + +msgid "Database name cannot contain special characters!" +msgstr "Database name cannot contain special characters!" + +msgid "Database password cannot contain special characters!" +msgstr "" + +msgid "Database already exists" +msgstr "Database already exists" + +msgid "Database recovered!" +msgstr "Database recovered!" + +msgid "Shortcut Bar only display up to 5 software!" +msgstr "Shortcut Bar only display up to 5 software!" + +msgid "Successfully uploaded!" +msgstr "Successfully uploaded!" + +msgid "The dependency file requirements.txt was NOT found in the working directory, please add it before creating" +msgstr "The dependency file requirements.txt was NOT found in the working directory, please add it before creating" + +msgid "The specified plugin does NOT support public access!" +msgstr "The specified plugin does NOT support public access!" + +msgid "Disable successfully" +msgstr "Disable successfully" + +msgid "Danger" +msgstr "Danger" + +msgid "Backup site: {}" +msgstr "Backup site: {}" + +msgid "Friday" +msgstr "Friday" + +msgid "Database space" +msgstr "Database space" + +msgid "# Forbidden files or directories" +msgstr "# Forbidden files or directories" + +msgid "Verification code does NOT exist!" +msgstr "Verification code does NOT exist!" + +msgid "Create new user {}" +msgstr "Create new user {}" + +msgid "Weekly" +msgstr "Weekly" + +msgid "The length of the extracted password cannot be less than 4 digits" +msgstr "The length of the extracted password cannot be less than 4 digits" + +msgid "PHP version cannot be empty" +msgstr "PHP version cannot be empty" + +msgid "Bind port" +msgstr "Bind port" + +msgid "SSH service turned off" +msgstr "SSH service turned off" + +msgid "Last domain cannot be deleted!" +msgstr "Last domain cannot be deleted!" + +msgid "Verifying package..." +msgstr "Verifying package..." + +msgid "Pls install WebHook plugin first!" +msgstr "Pls install WebHook plugin first!" + +msgid "'Issue failed, we can not verify your domain:

                          1. check if the domain name is bound to the corresponding site

                          2. check if the domain name is correctly resolved to the server, or the resolution has NOT fully taken effect

                          3. If your site has a reverse proxy set up, or if you are using a CDN, please turn it off first

                          4. If your site has a 301 redirect, please turn it off first

                          5. If the above checks confirm that there is no problem, please try to change the DNS service provider

                          '" +msgstr "'Issue failed, we can not verify your domain:

                          1. check if the domain name is bound to the corresponding site

                          2. check if the domain name is correctly resolved to the server, or the resolution has NOT fully taken effect

                          3. If your site has a reverse proxy set up, or if you are using a CDN, please turn it off first

                          4. If your site has a 301 redirect, please turn it off first

                          5. If the above checks confirm that there is no problem, please try to change the DNS service provider

                          '" + +msgid "Successfully unintalled [{}-{}]" +msgstr "Successfully unintalled [{}-{}]" + +msgid "Max keep-alive requests per connection" +msgstr "Max keep-alive requests per connection" + +msgid "Please stop the project before deleting" +msgstr "Please stop the project before deleting" + +msgid "Apache rule configuration error:
                          {}" +msgstr "Apache rule configuration error:
                          {}" + +msgid "Subnet mask is invalid" +msgstr "Subnet mask is invalid" + +msgid "Set maximum time of script to [{} second] for PHP-{}!" +msgstr "Set maximum time of script to [{} second] for PHP-{}!" + +msgid "Start compressing files: {}" +msgstr "Start compressing files: {}" + +msgid "Cannot modify history copy directly!" +msgstr "Cannot modify history copy directly!" + +msgid "Successfully deleted backup [{}] of site [{}]!" +msgstr "Successfully deleted backup [{}] of site [{}]!" + +msgid "Installation task added to queue" +msgstr "Installation task added to queue" + +msgid "Command has been sent!" +msgstr "Command has been sent!" + +msgid "Delete domain ({}) cached record in session successfully" +msgstr "Delete domain ({}) cached record in session successfully" + +msgid "Notification has been sent" +msgstr "Notification has been sent" + +msgid "Please set this API first" +msgstr "Please set this API first" + +msgid "Cancel domain binding limit" +msgstr "Cancel domain binding limit" + +msgid "Successfully deleted database" +msgstr "Successfully deleted database" + +msgid "Set the PHP-CLI version to: {}" +msgstr "Set the PHP-CLI version to: {}" + +msgid "Nginx rule configuration error:
                          {}" +msgstr "Nginx rule configuration error:
                          {}" + +msgid "Successfully uninstalled pgsql" +msgstr "Successfully uninstalled pgsql" + +msgid "Site [{}] backup failed!" +msgstr "Site [{}] backup failed!" + +msgid "Port [{}] is in use!" +msgstr "Port [{}] is in use!" + +msgid "Renewing" +msgstr "Renewing" + +msgid "Successfully deleted file!" +msgstr "Successfully deleted file!" + +msgid "Pls enter new username(>5 characters): " +msgstr "Pls enter new username(>5 characters): " + +msgid "Failed to detect A record" +msgstr "Failed to detect A record" + +msgid "Connection failure!" +msgstr "Connection failure!" + +msgid "Failed to get PHP version!" +msgstr "Failed to get PHP version!" + +msgid "|-ERROR, new port is the same as current panel port, no need to change" +msgstr "|-ERROR, new port is the same as current panel port, no need to change" + +msgid "|-Verify the dir:{}" +msgstr "|-Verify the dir:{}" + +msgid "Start panel" +msgstr "Start panel" + +msgid "{}-{} The task was executed successfully" +msgstr "{}-{} The task was executed successfully" + +msgid "

                          Issue failed, 请安装openssl!

                          " +msgstr "

                          Issue failed, 请安装openssl!

                          " + +msgid "Specified plugin has no file download function!" +msgstr "Specified plugin has no file download function!" + +msgid "Total" +msgstr "Total" + +msgid "Current version is stable version and already latest. Update cycle of stable version is generally 2 months,while developer version will update every Wednesday!" +msgstr "Current version is stable version and already latest. Update cycle of stable version is generally 2 months,while developer version will update every Wednesday!" + +msgid "404 Not Found" +msgstr "404 Not Found" + +msgid "Delete hostname {} cached record in session successfully" +msgstr "Delete hostname {} cached record in session successfully" + +msgid "|-Writing verification file [{}]..." +msgstr "|-Writing verification file [{}]..." + +msgid "Failed to add mapping [{}]" +msgstr "Failed to add mapping [{}]" + +msgid "The user name cannot be empty!" +msgstr "The user name cannot be empty!" + +msgid "SSH service turned on" +msgstr "SSH service turned on" + +msgid "The database directory does not exist!" +msgstr "The database directory does not exist!" + +msgid "Current version is up-to-date!" +msgstr "Current version is up-to-date!" + +msgid "Cacel IP access limit" +msgstr "Cacel IP access limit" + +msgid "|-Renewing certificate number of {},domain: {}.." +msgstr "|-Renewing certificate number of {},domain: {}.." + +msgid "The specified account does not exist" +msgstr "The specified account does not exist" + +msgid "Meaningless operation" +msgstr "Meaningless operation" + +msgid "Path is incorrect {}" +msgstr "Path is incorrect {}" + +msgid "Open" +msgstr "Open" + +msgid "Create new user {} success!" +msgstr "Create new user {} success!" + +msgid "ERROR, the specified configuration value already exists!" +msgstr "ERROR, the specified configuration value already exists!" + +msgid "Clearing task history" +msgstr "Clearing task history" + +msgid "IP address is invalid" +msgstr "IP address is invalid" + +msgid "Log file does NOT exist!" +msgstr "Log file does NOT exist!" + +msgid "The file cannot be read correctly due to incompatible file encoding!'{}" +msgstr "The file cannot be read correctly due to incompatible file encoding!'{}" + +msgid "Keep alive" +msgstr "Keep alive" + +msgid "renew certificate" +msgstr "renew certificate" + +msgid "Minimum file to compress" +msgstr "Minimum file to compress" + +msgid "Error: Sending CSR: Response status {} Response value: {}" +msgstr "Error: Sending CSR: Response status {} Response value: {}" + +msgid "|-Turn on http to https" +msgstr "|-Turn on http to https" + +msgid "Revoke certificate" +msgstr "Revoke certificate" + +msgid "Entrance address format is incorrect, e.g. /my_panel" +msgstr "Entrance address format is incorrect, e.g. /my_panel" + +msgid "Get worker Restart Time False" +msgstr "Get worker Restart Time False" + +msgid "Derectory [{}] backup succeed, in [{}] seconds" +msgstr "Derectory [{}] backup succeed, in [{}] seconds" + +msgid "Unblocked IP [{}]!" +msgstr "Unblocked IP [{}]!" + +msgid "Successfully turned on API!" +msgstr "Successfully turned on API!" + +msgid "|-PHP session cleared, deleted [{}] files, freed disk space [{}]" +msgstr "|-PHP session cleared, deleted [{}] files, freed disk space [{}]" + +msgid "Panel" +msgstr "Panel" + +msgid "{} execution succeeded" +msgstr "{} execution succeeded" + +msgid "QR code expired" +msgstr "QR code expired" + +msgid "Modify common commands [{}]" +msgstr "Modify common commands [{}]" + +msgid "Configuration file ERROR" +msgstr "Configuration file ERROR" + +msgid "Did not open Google authentication" +msgstr "Did not open Google authentication" + +msgid "Specified category does NOT exist!" +msgstr "Specified category does NOT exist!" + +msgid "Sunday" +msgstr "Sunday" + +msgid "Get worker TotalAccesses False" +msgstr "Get worker TotalAccesses False" + +msgid "For Support|Suggestions, please visit the aaPanel Forum" +msgstr "For Support|Suggestions, please visit the aaPanel Forum" + +msgid "Task has been executed!" +msgstr "Task has been executed!" + +msgid "Worker connections" +msgstr "Worker connections" + +msgid "Partition {} available disk space is: {}, available Inode is: {}" +msgstr "Partition {} available disk space is: {}, available Inode is: {}" + +msgid "The delivery type is not supported" +msgstr "The delivery type is not supported" + +msgid "Number of threads created by each child process" +msgstr "Number of threads created by each child process" + +msgid "SSL turned on!" +msgstr "SSL turned on!" + +msgid "Upgrade composer from {} to {}" +msgstr "Upgrade composer from {} to {}" + +msgid "Renewal failed. Please try to turn off SSL and re-apply for this domain certificate using File Authentication or DNS Authentication!" +msgstr "Renewal failed. Please try to turn off SSL and re-apply for this domain certificate using File Authentication or DNS Authentication!" + +msgid "File encoding is not compatible and cannot be read correctly!" +msgstr "File encoding is not compatible and cannot be read correctly!" + +msgid "Installation failed!" +msgstr "Installation failed!" + +msgid "The IP address cannot be empty!" +msgstr "The IP address cannot be empty!" + +msgid "Delete user {} success!" +msgstr "Delete user {} success!" + +msgid "Please fill in the value between 30 and 86400!" +msgstr "Please fill in the value between 30 and 86400!" + +msgid "From" +msgstr "From" + +msgid "Expired Token" +msgstr "Expired Token" + +msgid "The project has no logs" +msgstr "The project has no logs" + +msgid "|-There are currently no certificates to renew." +msgstr "|-There are currently no certificates to renew." + +msgid "Per Hour" +msgstr "Per Hour" + +msgid "Delete [{}] subdirectory binding successfully" +msgstr "Delete [{}] subdirectory binding successfully" + +msgid "Please pass in the [sort_list] field" +msgstr "Please pass in the [sort_list] field" + +msgid "Please uninstall the MySQL master-slave plugin before closing the binary log!" +msgstr "Please uninstall the MySQL master-slave plugin before closing the binary log!" + +msgid "Google authentication has been turned on" +msgstr "Google authentication has been turned on" + +msgid "Failed to modify" +msgstr "Failed to modify" + +msgid "Old configuration" +msgstr "Old configuration" + +msgid "The specified database already exists in MySQL, please change the name!" +msgstr "The specified database already exists in MySQL, please change the name!" + +msgid "The user name already exists. For security reasons, we do not allow one database user to manage multiple databases" +msgstr "The user name already exists. For security reasons, we do not allow one database user to manage multiple databases" + +msgid "Backup database:{}" +msgstr "Backup database:{}" + +msgid "Successfully deleted!" +msgstr "Successfully deleted!" + +msgid "Current version of Nginx does NOT support WAF, please reinstall Nginx!" +msgstr "Current version of Nginx does NOT support WAF, please reinstall Nginx!" + +msgid "Error sending CSR" +msgstr "Error sending CSR" + +msgid "Successfully copied directory [{}] to [{}]!" +msgstr "Successfully copied directory [{}] to [{}]!" + +msgid "Successfully stopped" +msgstr "Successfully stopped" + +msgid "Task queue" +msgstr "Task queue" + +msgid "0 means not limited" +msgstr "0 means not limited" + +msgid "Nginx configuration file does not exist!" +msgstr "Nginx configuration file does not exist!" + +msgid "Compression failed!" +msgstr "Compression failed!" + +msgid "Login failed, error reason [{}]" +msgstr "Login failed, error reason [{}]" + +msgid "Notification" +msgstr "Notification" + +msgid "Sent successfully" +msgstr "Sent successfully" + +msgid "Pan domain names cannot apply for a certificate using [File Verification]!" +msgstr "Pan domain names cannot apply for a certificate using [File Verification]!" + +msgid "Database PID" +msgstr "Database PID" + +msgid "Domain [{}] already exists!" +msgstr "Domain [{}] already exists!" + +msgid "Site [{}] deleted domain [{}] successfully!" +msgstr "Site [{}] deleted domain [{}] successfully!" + +msgid "Exclusion setting: {}" +msgstr "Exclusion setting: {}" + +msgid "Login succeed, Username: {}, Login IP: {}" +msgstr "Login succeed, Username: {}, Login IP: {}" + +msgid "No script need to execute!" +msgstr "No script need to execute!" + +msgid "A wrong TXT record was found on {}: {}, please check whether the TXT resolution is correct, if it is applied by DNSAPI, please try again in 10 minutes!" +msgstr "A wrong TXT record was found on {}: {}, please check whether the TXT resolution is correct, if it is applied by DNSAPI, please try again in 10 minutes!" + +msgid "Recycle bin emptied!" +msgstr "Recycle bin emptied!" + +msgid "Edit user{}" +msgstr "Edit user{}" + +msgid "Recipients cannot be parsed into a list" +msgstr "Recipients cannot be parsed into a list" + +msgid "SSL is turned on, plesea use https protocol to access the panel!" +msgstr "SSL is turned on, plesea use https protocol to access the panel!" + +msgid "Failed to delete!" +msgstr "Failed to delete!" + +msgid "The specified user is not currently logged in!" +msgstr "The specified user is not currently logged in!" + +msgid "Updated successfully!" +msgstr "Updated successfully!" + +msgid "mpm_event_module conf not found or /www/server/apache/conf/extra/httpd-mpm.conf is empty" +msgstr "mpm_event_module conf not found or /www/server/apache/conf/extra/httpd-mpm.conf is empty" + +msgid "Plugin manager" +msgstr "Plugin manager" + +msgid "Database name is illegal!" +msgstr "Database name is illegal!" + +msgid "Failed to get software list ({})" +msgstr "Failed to get software list ({})" + +msgid "Please specify DNSAPI" +msgstr "Please specify DNSAPI" + +msgid "Get Info" +msgstr "Get Info" + +msgid "Record_ID of the domain NOT found: " +msgstr "Record_ID of the domain NOT found: " + +msgid "Clear file notes [{}]" +msgstr "Clear file notes [{}]" + +msgid "Session is lost, please login panel again!\r\n" +msgstr "Session is lost, please login panel again!\r\n" + +msgid "Turn off" +msgstr "Turn off" + +msgid "

                          Issue failed, and the number of failed attempts to apply for a certificate has reached the limit!

                          " +msgstr "

                          Issue failed, and the number of failed attempts to apply for a certificate has reached the limit!

                          " + +msgid "Certified Domain Name: {}" +msgstr "Certified Domain Name: {}" + +msgid "User name must be at least 2 characters" +msgstr "User name must be at least 2 characters" + +msgid "Set expired date to [{}] for site[{}]!" +msgstr "Set expired date to [{}] for site[{}]!" + +msgid "Set the file name [{}], notes: {}" +msgstr "Set the file name [{}], notes: {}" + +msgid "Successfully modified API configuration!" +msgstr "Successfully modified API configuration!" + +msgid "Invalid username or password. You have [{}] times left to try!" +msgstr "Invalid username or password. You have [{}] times left to try!" + +msgid "

                          Issue failed, ::wildcard domain and subdomain cannot apply for a certificate together!

                          " +msgstr "

                          Issue failed, ::wildcard domain and subdomain cannot apply for a certificate together!

                          " + +msgid "PostgreSQL interacts with the kernel and disk through shared_buffers, usually set to 10% of real memory." +msgstr "PostgreSQL interacts with the kernel and disk through shared_buffers, usually set to 10% of real memory." + +msgid "Site started" +msgstr "Site started" + +msgid "Flush status success" +msgstr "Flush status success" + +msgid "Successfully copied file [{}] to [{}]!" +msgstr "Successfully copied file [{}] to [{}]!" + +msgid "Check completed = {}. Max check allowed = {}. Interval between checks = {} seconds." +msgstr "Check completed = {}. Max check allowed = {}. Interval between checks = {} seconds." + +msgid "Please do NOT use the usual port as the phpMyAdmin port!" +msgstr "Please do NOT use the usual port as the phpMyAdmin port!" + +msgid "The format of the webname parameter is incorrect, it should be a parseable JSON string" +msgstr "The format of the webname parameter is incorrect, it should be a parseable JSON string" + +msgid "Certificate updated!" +msgstr "Certificate updated!" + +msgid "Successfully saved file [{}]!" +msgstr "Successfully saved file [{}]!" + +msgid "|---File name:" +msgstr "|---File name:" + +msgid "Failed to move database data to the recycle bin!" +msgstr "Failed to move database data to the recycle bin!" + +msgid "Site [{}] stopped!" +msgstr "Site [{}] stopped!" + +msgid "Category name cannot be empty" +msgstr "Category name cannot be empty" + +msgid "|-Entrance limit cancelled" +msgstr "|-Entrance limit cancelled" + +msgid "Successfully deleted backup [{}] for database [{}]!" +msgstr "Successfully deleted backup [{}] for database [{}]!" + +msgid "Successfully modified password for database [{}]!" +msgstr "Successfully modified password for database [{}]!" + +msgid "Total connections" +msgstr "Total connections" + +msgid "Specific domain already bound!" +msgstr "Specific domain already bound!" + +msgid "Requested port is common port, pls use another one!" +msgstr "Requested port is common port, pls use another one!" + +msgid "Database name cannot be more than 16 characters!" +msgstr "Database name cannot be more than 16 characters!" + +msgid "Successfully run" +msgstr "Successfully run" + +msgid "Closed successfully" +msgstr "Closed successfully" + +msgid "Please do NOT repeat adding" +msgstr "Please do NOT repeat adding" + +msgid "Please choose a domain name" +msgstr "Please choose a domain name" + +msgid "Compression task added to the message queue!" +msgstr "Compression task added to the message queue!" + +msgid "Password or private key cannot both be empty: {}:{}" +msgstr "Password or private key cannot both be empty: {}:{}" + +msgid "Enable IPv6 compatibility of the panel!" +msgstr "Enable IPv6 compatibility of the panel!" + +msgid "|-Adding resolution record, domain name [{}], record value [{}]..." +msgstr "|-Adding resolution record, domain name [{}], record value [{}]..." + +msgid "Uploading to {}, please wait ..." +msgstr "Uploading to {}, please wait ..." + +msgid "File manager" +msgstr "File manager" + +msgid "500 Internal Server Error" +msgstr "500 Internal Server Error" + +msgid "Get worker time detail False" +msgstr "Get worker time detail False" + +msgid "Successfully deleted FTP user[{}]!" +msgstr "Successfully deleted FTP user[{}]!" + +msgid "Please enter an absolute path" +msgstr "Please enter an absolute path" + +msgid "Login succeeded, loading..." +msgstr "Login succeeded, loading..." + +msgid "The above debugging information is displayed only in developer mode" +msgstr "The above debugging information is displayed only in developer mode" + +msgid "Username is modified from [{}] to [{}]" +msgstr "Username is modified from [{}] to [{}]" + +msgid "Configuration file ERROR: {}" +msgstr "Configuration file ERROR: {}" + +msgid "SSL is not enabled in the database, please open it in the Mysql manager first" +msgstr "SSL is not enabled in the database, please open it in the Mysql manager first" + +msgid "Turn on" +msgstr "Turn on" + +msgid "File hash verification failed, stop installation!" +msgstr "File hash verification failed, stop installation!" + +msgid "Did not detect the port that apache phpmyadmin listens, please confirm whether the file has been manually modified." +msgstr "Did not detect the port that apache phpmyadmin listens, please confirm whether the file has been manually modified." + +msgid "If the access permission is [Specified IP], you need to enter the IP address!" +msgstr "If the access permission is [Specified IP], you need to enter the IP address!" + +msgid "Request error!" +msgstr "Request error!" + +msgid "Download task added to queue!" +msgstr "Download task added to queue!" + +msgid "Get Value {} False" +msgstr "Get Value {} False" + +msgid "Certificate does NOT exist!" +msgstr "Certificate does NOT exist!" + +msgid "There was an error deleting, please try again." +msgstr "There was an error deleting, please try again." + +msgid "PIP cannot be uninstalled" +msgstr "PIP cannot be uninstalled" + +msgid "{} d {} hrs {} min" +msgstr "{} d {} hrs {} min" + +msgid "Failed to copy file!" +msgstr "Failed to copy file!" + +msgid "Specified site does NOT exist" +msgstr "Specified site does NOT exist" + +msgid "Failed to delete directory!" +msgstr "Failed to delete directory!" + +msgid "View IP authorized: cat /www/server/panel/data/limitip.conf" +msgstr "View IP authorized: cat /www/server/panel/data/limitip.conf" + +msgid "The IP format is incorrect, and the subnet segment writing is not supported" +msgstr "The IP format is incorrect, and the subnet segment writing is not supported" + +msgid "|-User submits verification request..." +msgstr "|-User submits verification request..." + +msgid "Invalid site directory, please check if the specified site exists!" +msgstr "Invalid site directory, please check if the specified site exists!" + +msgid "Only the [{}] system is supported" +msgstr "Only the [{}] system is supported" + +msgid "The signing failed, we were unable to verify your domain name:

                          1. Check if the domain name is bound to the corresponding site.

                          2. Check if the domain name is correctly resolved to the server, or the resolution is not fully effective.

                          3. If your site has a reverse proxy set up, or if you are using a CDN, please turn it off first.

                          4. If your site has a 301 redirect, please turn it off first

                          5. If the above checks confirm that there is no problem, please try to change the DNS service provider.

                          '" +msgstr "The signing failed, we were unable to verify your domain name:

                          1. Check if the domain name is bound to the corresponding site.

                          2. Check if the domain name is correctly resolved to the server, or the resolution is not fully effective.

                          3. If your site has a reverse proxy set up, or if you are using a CDN, please turn it off first.

                          4. If your site has a 301 redirect, please turn it off first

                          5. If the above checks confirm that there is no problem, please try to change the DNS service provider.

                          '" + +msgid "Successfully initialized NIC" +msgstr "Successfully initialized NIC" + +msgid "This version of Python already installed {}" +msgstr "This version of Python already installed {}" + +msgid "The specified historical copy does not exist!" +msgstr "The specified historical copy does not exist!" + +msgid "Format of domain is invalid!" +msgstr "Format of domain is invalid!" + +msgid "Unsupported domain name {}, please check the domain name is correct!" +msgstr "Unsupported domain name {}, please check the domain name is correct!" + +msgid "Decompression task added to the message queue!" +msgstr "Decompression task added to the message queue!" + +msgid "Specified PHP version not installed" +msgstr "Specified PHP version not installed" + +msgid "Sent mail successfully" +msgstr "Sent mail successfully" + +msgid "Task deleted" +msgstr "Task deleted" + +msgid "Do NOT use common default port!" +msgstr "Do NOT use common default port!" + +msgid "Certificate ERROR, please check!" +msgstr "Certificate ERROR, please check!" + +msgid "Operation failed" +msgstr "Operation failed" + +msgid "Nonsupport mysql5.1!" +msgstr "Nonsupport mysql5.1!" + +msgid "It is not recommended to use [.] at the end of the file because there may be security risks" +msgstr "It is not recommended to use [.] at the end of the file because there may be security risks" + +msgid "Max processes" +msgstr "Max processes" + +msgid "Save ERROR! {}" +msgstr "Save ERROR! {}" + +msgid "Dangerous upload vulnerabilities" +msgstr "Dangerous upload vulnerabilities" + +msgid "{} installing, please wait..." +msgstr "{} installing, please wait..." + +msgid "Please go to the software store to install [cloud analysis], and complete the domain name NS binding." +msgstr "Please go to the software store to install [cloud analysis], and complete the domain name NS binding." + +msgid "The specified directory {} does not exist!" +msgstr "The specified directory {} does not exist!" + +msgid "ERROR, the value set is illegal!" +msgstr "ERROR, the value set is illegal!" + +msgid "Port range must be between 22 and 65535!" +msgstr "Port range must be between 22 and 65535!" + +msgid "Failed to obtain file content, format is not supported!" +msgstr "Failed to obtain file content, format is not supported!" + +msgid "Connection failure: {}:{}" +msgstr "Connection failure: {}:{}" + +msgid "Demons" +msgstr "Demons" + +msgid "Pls enter new password: " +msgstr "Pls enter new password: " + +msgid "Requested file exists!" +msgstr "Requested file exists!" + +msgid "The protocol header response timed out" +msgstr "The protocol header response timed out" + +msgid "Successfully uninstalled plugin [{}]" +msgstr "Successfully uninstalled plugin [{}]" + +msgid "Site [{}] traffic control turned off!" +msgstr "Site [{}] traffic control turned off!" + +msgid "# Copyright (C) YEAR ORGANIZATION" +msgstr "# Copyright (C) YEAR ORGANIZATION" + +msgid "Regenerate API-Token" +msgstr "Regenerate API-Token" + +msgid "Dangerous reference" +msgstr "Dangerous reference" + +msgid "Please enter the index of the order to be revoked in the --index parameter" +msgstr "Please enter the index of the order to be revoked in the --index parameter" + +msgid "Monthly, run on {}Day {} Hour {}Min" +msgstr "Monthly, run on {}Day {} Hour {}Min" + +msgid "You do NOT have permission to access the current plugin!" +msgstr "You do NOT have permission to access the current plugin!" + +msgid "ERROR registering" +msgstr "ERROR registering" + +msgid "connection succeeded" +msgstr "connection succeeded" + +msgid "MySQLdb component is missing!
                          Please enter SSH and run the command: pip install mysql-python" +msgstr "MySQLdb component is missing!
                          Please enter SSH and run the command: pip install mysql-python" + +msgid "There is no certificate that can be renewed on the current website.." +msgstr "There is no certificate that can be renewed on the current website.." + +msgid "Has been open" +msgstr "Has been open" + +msgid "Failed to get mail, error reason [{}]" +msgstr "Failed to get mail, error reason [{}]" + +msgid "System rubbish cleared, totally deleted [{}] files, freed disk space [{}]" +msgstr "System rubbish cleared, totally deleted [{}] files, freed disk space [{}]" + +msgid "Per Day, run at {} Hour {} Min" +msgstr "Per Day, run at {} Hour {} Min" + +msgid "Proxy directory cannot have the following special characters {}" +msgstr "Proxy directory cannot have the following special characters {}" + +msgid "A generic domain name cannot be used to apply for a certificate using [File Validation]!" +msgstr "A generic domain name cannot be used to apply for a certificate using [File Validation]!" + +msgid "The change failed, directory does NOT exist" +msgstr "The change failed, directory does NOT exist" + +msgid "Task manager" +msgstr "Task manager" + +msgid "File names can NOT contain special characters!" +msgstr "File names can NOT contain special characters!" + +msgid "Already {} API service!" +msgstr "Already {} API service!" + +msgid "Site [{}] backup to FTP succeed, in [{}] seconds" +msgstr "Site [{}] backup to FTP succeed, in [{}] seconds" + +msgid "Closed" +msgstr "Closed" + +msgid "Successfully moved file [{}] to recycle bin!" +msgstr "Successfully moved file [{}] to recycle bin!" + +msgid "|-ERROR, pls do NOT use the common port as panel port" +msgstr "|-ERROR, pls do NOT use the common port as panel port" + +msgid "Command sent successfully!" +msgstr "Command sent successfully!" + +msgid "This plugin does NOT have template!" +msgstr "This plugin does NOT have template!" + +msgid "Export failed, please check permissions!" +msgstr "Export failed, please check permissions!" + +msgid " Successfully deleted database [{}]!" +msgstr " Successfully deleted database [{}]!" + +msgid "Unable to initialize client" +msgstr "Unable to initialize client" + +msgid "Defualt document of site [{}] is [{}]" +msgstr "Defualt document of site [{}] is [{}]" + +msgid "Failed to delete backup [{}] for database [{}]! => {}" +msgstr "Failed to delete backup [{}] for database [{}]! => {}" + +msgid "Warning, turning off the security entrance will directly expose your back-end to the public network, which is very dangerous. At least one of the following security measures must be turned on to turn off the security entrance:
                          1. Binding access domain
                          2. Binding authorized IP
                          " +msgstr "Warning, turning off the security entrance will directly expose your back-end to the public network, which is very dangerous. At least one of the following security measures must be turned on to turn off the security entrance:
                          1. Binding access domain
                          2. Binding authorized IP
                          " + +msgid "Redirected domain already exists {}" +msgstr "Redirected domain already exists {}" + +msgid "Number of current pending signals" +msgstr "Number of current pending signals" + +msgid "Compression completed, took {} seconds, compressed package size: {}" +msgstr "Compression completed, took {} seconds, compressed package size: {}" + +msgid "[{}] renamed to [{}]" +msgstr "[{}] renamed to [{}]" + +msgid "Select sql/gz/zip file!" +msgstr "Select sql/gz/zip file!" + +msgid "API key ERROR, failed to add resolution" +msgstr "API key ERROR, failed to add resolution" + +msgid "WeChat scan QR code login" +msgstr "WeChat scan QR code login" + +msgid "Python startup mode has no configuration file to modify" +msgstr "Python startup mode has no configuration file to modify" + +msgid "Please complete the information!" +msgstr "Please complete the information!" + +msgid "The IP exists in block list, no need to repeat processing!" +msgstr "The IP exists in block list, no need to repeat processing!" + +msgid "Hotlink Protection for site [{}] disabled!" +msgstr "Hotlink Protection for site [{}] disabled!" + +msgid "PHP reference configuration, allowed to be commented, deleted or modified" +msgstr "PHP reference configuration, allowed to be commented, deleted or modified" + +msgid "Turned off monitory service!" +msgstr "Turned off monitory service!" + +msgid "{} API" +msgstr "{} API" + +msgid "This JDK is NOT installed" +msgstr "This JDK is NOT installed" + +msgid "Certificate error, please paste the correct PEM format certificate!" +msgstr "Certificate error, please paste the correct PEM format certificate!" + +msgid "Set PATH_INFO module to [{}] for PHP-{}!" +msgstr "Set PATH_INFO module to [{}] for PHP-{}!" + +msgid "Clearing CPU monitoring records" +msgstr "Clearing CPU monitoring records" + +msgid "|-The \\033[36m{}\\033[0m domain names are: {}, please resolve the following information: " +msgstr "|-The \\033[36m{}\\033[0m domain names are: {}, please resolve the following information: " + +msgid "Domain format ERROR {}" +msgstr "Domain format ERROR {}" + +msgid "SSL related configuration, do NOT delete or modify the next line of commented-out 404 rules" +msgstr "SSL related configuration, do NOT delete or modify the next line of commented-out 404 rules" + +msgid "Directory already has files, please change another directory" +msgstr "Directory already has files, please change another directory" + +msgid "No resolution record was found for domain name {}, please check if the domain name resolution takes effect!" +msgstr "No resolution record was found for domain name {}, please check if the domain name resolution takes effect!" + +msgid "The specified address does not exist!" +msgstr "The specified address does not exist!" + +msgid "Cannot delete non-empty directory!" +msgstr "Cannot delete non-empty directory!" + +msgid "Failed to get from the cloud" +msgstr "Failed to get from the cloud" + +msgid "This domain does NOT exist in this CloudXNS account, failed to add resolution" +msgstr "This domain does NOT exist in this CloudXNS account, failed to add resolution" + +msgid "Verification code length is wrong!" +msgstr "Verification code length is wrong!" + +msgid "CA server connection timed out, please try again later." +msgstr "CA server connection timed out, please try again later." + +msgid "Delete domain [{}] successfully" +msgstr "Delete domain [{}] successfully" + +msgid "Error, cannot end task processes!" +msgstr "Error, cannot end task processes!" + +msgid "Create the website [ {} ] successfully" +msgstr "Create the website [ {} ] successfully" + +msgid "No available PHP version found!" +msgstr "No available PHP version found!" + +msgid "TXT record has expired, please re-acquire" +msgstr "TXT record has expired, please re-acquire" + +msgid "NIC NOT initialized" +msgstr "NIC NOT initialized" + +msgid "The specified SSH information does not exist!" +msgstr "The specified SSH information does not exist!" + +msgid "Executed successfully!" +msgstr "Executed successfully!" + +msgid "Get worker BusyWorkers False" +msgstr "Get worker BusyWorkers False" + +msgid "Sorry, something went wrong" +msgstr "Sorry, something went wrong" + +msgid "Error: Attempted verification {} times. The maximum number of verifications is {}. The verification interval is {} seconds." +msgstr "Error: Attempted verification {} times. The maximum number of verifications is {}. The verification interval is {} seconds." + +msgid "|-Record type: CAA Record name: \\033[41m{}\\033[0m Record value: \\033[41m{}\\033[0m [Optional]" +msgstr "|-Record type: CAA Record name: \\033[41m{}\\033[0m Record value: \\033[41m{}\\033[0m [Optional]" + +msgid "Service shutdown or internal error due to maintenance, check [ https://letsencrypt.status.io ]see for more details. " +msgstr "Service shutdown or internal error due to maintenance, check [ https://letsencrypt.status.io ]see for more details. " + +msgid "This IP cannot be deleted" +msgstr "This IP cannot be deleted" + +msgid "Please select redirected domain" +msgstr "Please select redirected domain" + +msgid "Update Succeeded!" +msgstr "Update Succeeded!" + +msgid "Same as original path, no need to change!" +msgstr "" + +msgid "The file cannot be read correctly due to incompatible file encoding!{}" +msgstr "The file cannot be read correctly due to incompatible file encoding!{}" + +msgid "At least [{}] CPU cores are required to install" +msgstr "At least [{}] CPU cores are required to install" + +msgid "Project already started" +msgstr "Project already started" + +msgid "API" +msgstr "API" + +msgid "Every {} Hours" +msgstr "Every {} Hours" + +msgid "No composer available!" +msgstr "No composer available!" + +msgid "Clearing network monitoring records" +msgstr "Clearing network monitoring records" + +msgid "Failed to modify password for database [{}]! => {}" +msgstr "Failed to modify password for database [{}]! => {}" + +msgid "Sorry, You do NOT Have Permission to Access." +msgstr "Sorry, You do NOT Have Permission to Access." + +msgid "Successfully compressed file [{}] to [{}]!" +msgstr "Successfully compressed file [{}] to [{}]!" + +msgid "No virtual environment created, please recreate the project" +msgstr "No virtual environment created, please recreate the project" + +msgid "|-Request CA to verify domain name [{}]..." +msgstr "|-Request CA to verify domain name [{}]..." + +msgid "Please specify the correct authentication type in the --type parameter, supporting dns and http" +msgstr "Please specify the correct authentication type in the --type parameter, supporting dns and http" + +msgid "Auto means automatic" +msgstr "Auto means automatic" + +msgid "|-{} Waiting for renewal [{}]." +msgstr "|-{} Waiting for renewal [{}]." + +msgid "Expired backup files have been cleaned from {}: {}" +msgstr "Expired backup files have been cleaned from {}: {}" + +msgid "Successfully deleted cron job [{}]!" +msgstr "Successfully deleted cron job [{}]!" + +msgid "Cancel entrance limit" +msgstr "Cancel entrance limit" + +msgid "Succeeded, please test JSP program!" +msgstr "Succeeded, please test JSP program!" + +msgid "aaPanel alarm test" +msgstr "aaPanel alarm test" + +msgid "Mapping site for Python project [{}]" +msgstr "Mapping site for Python project [{}]" + +msgid "Size of swap used by process" +msgstr "Size of swap used by process" + +msgid "An error occurred while writing data to the buffer: {}" +msgstr "An error occurred while writing data to the buffer: {}" + +msgid "Ended processes[{}][{}] Successfully!" +msgstr "Ended processes[{}][{}] Successfully!" + +msgid "Successfully saved certificate!" +msgstr "Successfully saved certificate!" + +msgid "Failed to copy directory!" +msgstr "Failed to copy directory!" + +msgid "Modified PHP runtime version to PHP-{} for phpMyAdmin!" +msgstr "Modified PHP runtime version to PHP-{} for phpMyAdmin!" + +msgid "Connection to CA server failed, please try again later." +msgstr "Connection to CA server failed, please try again later." + +msgid "|-Clearing resolve history [{}]" +msgstr "|-Clearing resolve history [{}]" + +msgid "Create new user failed!" +msgstr "Create new user failed!" + +msgid "Database memory" +msgstr "Database memory" + +msgid "Database [{}] backup succeed, in [{}] seconds" +msgstr "Database [{}] backup succeed, in [{}] seconds" + +msgid "Command sent" +msgstr "Command sent" + +msgid "Authenticating private key" +msgstr "Authenticating private key" + +msgid "Execute composer [{}] in the directory: [{}]" +msgstr "Execute composer [{}] in the directory: [{}]" + +msgid "Mapping site for Tomcat [{}]" +msgstr "Mapping site for Tomcat [{}]" + +msgid "|-Manual order submission is successful, please resolve DNS records according to the following tips: " +msgstr "|-Manual order submission is successful, please resolve DNS records according to the following tips: " + +msgid "{} Offline mode" +msgstr "{} Offline mode" + +msgid "Nginx 1.8.1 is too old, no longer available, please choose another version!" +msgstr "Nginx 1.8.1 is too old, no longer available, please choose another version!" + +msgid "The protocol header response timed out, and the network quality with the target server was too bad: {}" +msgstr "The protocol header response timed out, and the network quality with the target server was too bad: {}" + +msgid "Set [{}]'s permission to [{}] and authorized user to [{}]" +msgstr "Set [{}]'s permission to [{}] and authorized user to [{}]" + +msgid "ERROR to connect database, pls check database status!" +msgstr "ERROR to connect database, pls check database status!" + +msgid "Unpacking the package..." +msgstr "Unpacking the package..." + +msgid "No Data" +msgstr "No Data" + +msgid "Please enter number" +msgstr "Please enter number" + +msgid "Failed to change password FTP user[{}]! => {}" +msgstr "Failed to change password FTP user[{}]! => {}" + +msgid "The specified package does not exist." +msgstr "The specified package does not exist." + +msgid "Turned on Tomcat supporting for site [{}]!" +msgstr "Turned on Tomcat supporting for site [{}]!" + +msgid "Please enter the correct port range 1 < port < 65535" +msgstr "Please enter the correct port range 1 < port < 65535" + +msgid "|-Clearing up temporary files and site logs..." +msgstr "|-Clearing up temporary files and site logs..." + +msgid "#Clear cache" +msgstr "#Clear cache" + +msgid "Did not detect the port that nginx phpmyadmin listens, please confirm whether the file has been manually modified." +msgstr "Did not detect the port that nginx phpmyadmin listens, please confirm whether the file has been manually modified." + +msgid "Tuesday" +msgstr "Tuesday" + +msgid "Failed to generate temporary login URL" +msgstr "Failed to generate temporary login URL" + +msgid "The SSH protocol handshake timed out" +msgstr "The SSH protocol handshake timed out" + +msgid "Successfully moved file or directory [{}] to [{}]!" +msgstr "Successfully moved file or directory [{}] to [{}]!" + +msgid "The E-Mail format is illegal" +msgstr "The E-Mail format is illegal" + +msgid "New domain success! {}" +msgstr "New domain success! {}" + +msgid "Wrong parameter format!" +msgstr "Wrong parameter format!" + +msgid "Monday" +msgstr "Monday" + +msgid "Verification code is incorrect, Username:{}, Verification Code:{}, Login IP:{}" +msgstr "Verification code is incorrect, Username:{}, Verification Code:{}, Login IP:{}" + +msgid "Successfully created site!" +msgstr "Successfully created site!" + +msgid "Failed to repair!" +msgstr "Failed to repair!" + +msgid "Your site has 301 Redirect on,Please turn it off first!" +msgstr "Your site has 301 Redirect on,Please turn it off first!" + +msgid "10 consecutive authentication failures are prohibited for 1 hour" +msgstr "10 consecutive authentication failures are prohibited for 1 hour" + +msgid "Backup error {} " +msgstr "Backup error {} " + +msgid "Set the max number of temporary buffers used by each database session. Default value is 8MB" +msgstr "Set the max number of temporary buffers used by each database session. Default value is 8MB" + +msgid "The connection timed out and the CA server was unable to access your website!" +msgstr "The connection timed out and the CA server was unable to access your website!" + +msgid "Client header buffer size" +msgstr "Client header buffer size" + +msgid "Special symbols cannot be included in the database path" +msgstr "Special symbols cannot be included in the database path" + +msgid "Site [{}] traffic control turned on!" +msgstr "Site [{}] traffic control turned on!" + +msgid "ERROR, primary domain cannot be IP address!" +msgstr "ERROR, primary domain cannot be IP address!" + +msgid "Open File" +msgstr "Open File" + +msgid "{} FTP user failed!" +msgstr "{} FTP user failed!" + +msgid "Configuration has been saved" +msgstr "Configuration has been saved" + +msgid "|-ERROR, no valid port entered" +msgstr "|-ERROR, no valid port entered" + +msgid "No QR code data, please re-open" +msgstr "No QR code data, please re-open" + +msgid "The end of the website directory cannot be \".\"" +msgstr "The end of the website directory cannot be \".\"" + +msgid "Recovery succeeded!" +msgstr "Recovery succeeded!" + +msgid "Import database" +msgstr "Import database" + +msgid "The specified template does NOT exist" +msgstr "The specified template does NOT exist" + +msgid "|-Saving certificate.." +msgstr "|-Saving certificate.." + +msgid "|-{} Total [{}] renewal of visa tasks" +msgstr "|-{} Total [{}] renewal of visa tasks" + +msgid "Requested panel info does NOT exist!" +msgstr "Requested panel info does NOT exist!" + +msgid "First" +msgstr "First" + +msgid "PHP-{} processing exception detected and automatically fixed!" +msgstr "PHP-{} processing exception detected and automatically fixed!" + +msgid "Max size of upload file" +msgstr "Max size of upload file" + +msgid "|---Expired backup file cleaned up:" +msgstr "|---Expired backup file cleaned up:" + +msgid "Certificate saved!" +msgstr "Certificate saved!" + +msgid "Saturday" +msgstr "Saturday" + +msgid "Project already exists" +msgstr "Project already exists" + +msgid "Please choose a port" +msgstr "Please choose a port" + +msgid "DNS error,or NOT yet in effect!
                        • {}
                        • " +msgstr "DNS error,or NOT yet in effect!
                        • {}
                        • " + +msgid "Successfully deleted database [{}]!" +msgstr "Successfully deleted database [{}]!" + +msgid "The database name cannot be empty" +msgstr "The database name cannot be empty" + +msgid "The database user name cannot be empty" +msgstr "The database user name cannot be empty" + +msgid "Username cannot be less than 3 characters" +msgstr "Username cannot be less than 3 characters" + +msgid "Username or password cannot be less than 3 characters" +msgstr "" + +msgid "Category name cannot exceed 6 Chinese characters or 18 letters" +msgstr "Category name cannot exceed 6 Chinese characters or 18 letters" + +msgid "Site stopped" +msgstr "Site stopped" + +msgid "Reload panel" +msgstr "Reload panel" + +msgid "# Directory verification related settings for one-click application for SSL certificate" +msgstr "# Directory verification related settings for one-click application for SSL certificate" + +msgid "The operation failed, please re-operate the copy or cut process" +msgstr "The operation failed, please re-operate the copy or cut process" + +msgid "Configuration ERROR or service NOT installed" +msgstr "Configuration ERROR or service NOT installed" + +msgid "Limit of script memory" +msgstr "Limit of script memory" + +msgid "Failed to modify password for database [{}]!" +msgstr "Failed to modify password for database [{}]!" + +msgid "Failed to unmount" +msgstr "Failed to unmount" + +msgid "|-Creating order.." +msgstr "|-Creating order.." + +msgid "Cannot configure API through API" +msgstr "Cannot configure API through API" + +msgid "# SOME DESCRIPTIVE TITLE." +msgstr "# SOME DESCRIPTIVE TITLE." + +msgid "The extract password length cannot be less than 4 bits" +msgstr "The extract password length cannot be less than 4 bits" + +msgid "Please wait 2-3 minutes after completing the resolution and enter Y and press Enter to continue verifying the domain name: " +msgstr "Please wait 2-3 minutes after completing the resolution and enter Y and press Enter to continue verifying the domain name: " + +msgid "Linux Panel" +msgstr "Linux Panel" + +msgid "|-[{}] Not expired or the site does not use the Let\\'s Encrypt certificate." +msgstr "|-[{}] Not expired or the site does not use the Let\\'s Encrypt certificate." + +msgid "Type ERROR" +msgstr "Type ERROR" + +msgid "Saved" +msgstr "Saved" + +msgid "Failed to save certificate!" +msgstr "Failed to save certificate!" + +msgid "Cron job" +msgstr "Cron job" + +msgid "Successfully deleted site!" +msgstr "Successfully deleted site!" + +msgid "Failed to obtain Let's Encrypt Certificate. Authentication Server cannot access your site!" +msgstr "Failed to obtain Let's Encrypt Certificate. Authentication Server cannot access your site!" + +msgid "Successfully added database [{}]!" +msgstr "Successfully added database [{}]!" + +msgid "Network restarted" +msgstr "Network restarted" + +msgid "New phpMyAdmin Port" +msgstr "New phpMyAdmin Port" + +msgid "Specified protocol does NOT exist!" +msgstr "Specified protocol does NOT exist!" + +msgid "Cannot access verification file correctly" +msgstr "Cannot access verification file correctly" + +msgid "Sites with reverse proxy turned on cannot apply for SSL!" +msgstr "Sites with reverse proxy turned on cannot apply for SSL!" + +msgid "Channel disconnected" +msgstr "Channel disconnected" + +msgid "Writing verification file failed: {}" +msgstr "Writing verification file failed: {}" + +msgid "Please enter the email content" +msgstr "Please enter the email content" + +msgid "The specified method does NOT exist" +msgstr "The specified method does NOT exist" + +msgid "Title and hook scripts cannot be empty" +msgstr "Title and hook scripts cannot be empty" + +msgid "Successfully changed SSH port to [{}]!" +msgstr "Successfully changed SSH port to [{}]!" + +msgid "Set up website [{}] PHP version successfully" +msgstr "Set up website [{}] PHP version successfully" + +msgid "Please pass in the plug-in name!" +msgstr "Please pass in the plug-in name!" + +msgid "The operation failed, please re-copy the copy or cut process" +msgstr "The operation failed, please re-copy the copy or cut process" + +msgid "Please fill in the email title" +msgstr "Please fill in the email title" + +msgid "The target file name already exists!" +msgstr "The target file name already exists!" + +msgid "|-ERROR, password cannot be empty" +msgstr "|-ERROR, password cannot be empty" + +msgid "There are currently no tasks executing in the queue{}!" +msgstr "There are currently no tasks executing in the queue{}!" + +msgid "Disable website [{}] successfully" +msgstr "Disable website [{}] successfully" + +msgid "This version of Python is NOT installed" +msgstr "This version of Python is NOT installed" + +msgid "Delete the SSH information of HOST: {}" +msgstr "Delete the SSH information of HOST: {}" + +msgid "The panel certificate does not exist. Please apply for the panel certificate and try again." +msgstr "The panel certificate does not exist. Please apply for the panel certificate and try again." + +msgid "Every {} Hours, run at {} Min" +msgstr "Every {} Hours, run at {} Min" + +msgid "Not enough disk space" +msgstr "" + +msgid "No special characters can be included in the file name!" +msgstr "No special characters can be included in the file name!" + +msgid "Dashboard only display up to 12 software!" +msgstr "Dashboard only display up to 12 software!" + +msgid "Failed to recover [{}] from recycle bin!" +msgstr "Failed to recover [{}] from recycle bin!" + +msgid "The specified module does not exist!" +msgstr "The specified module does not exist!" + +msgid "Successfully changed directory of site [{}]!" +msgstr "Successfully changed directory of site [{}]!" + +msgid "Size of process code" +msgstr "Size of process code" + +msgid "The list of applied domain names cannot be empty." +msgstr "The list of applied domain names cannot be empty." + +msgid "This feature cannot be used in offline mode!" +msgstr "This feature cannot be used in offline mode!" + +msgid "Successfully modify the panel menu display list" +msgstr "Successfully modify the panel menu display list" + +msgid "Error getting ACME endpoint" +msgstr "Error getting ACME endpoint" + +msgid "Currently renewal tasks in progress!" +msgstr "Currently renewal tasks in progress!" + +msgid "The domain name does not belong to this DNS service provider, please make sure the domain name is filled in correctly." +msgstr "The domain name does not belong to this DNS service provider, please make sure the domain name is filled in correctly." + +msgid "Max num of connections" +msgstr "Max num of connections" + +msgid "Successfully renamed!" +msgstr "Successfully renamed!" + +msgid "Login success" +msgstr "Login success" + +msgid "PHP configuration" +msgstr "PHP configuration" + +msgid "Backup site [{}] succeed!" +msgstr "Backup site [{}] succeed!" + +msgid "Hash table size of server name" +msgstr "Hash table size of server name" + +msgid "Unknown" +msgstr "Unknown" + +msgid "Wildcard domain and subdomain cannot apply for a certificate together" +msgstr "Wildcard domain and subdomain cannot apply for a certificate together" + +msgid "In MySQL configuration file detected and auto fixed an error, which may cause mysqld service unable to start!" +msgstr "In MySQL configuration file detected and auto fixed an error, which may cause mysqld service unable to start!" + +msgid "Failed to connect to SSH service!\r\n" +msgstr "Failed to connect to SSH service!\r\n" + +msgid "Site [{}] does NOT exist!" +msgstr "Site [{}] does NOT exist!" + +msgid "User deletion failed!" +msgstr "User deletion failed!" + +msgid "Successfully cleared {} tasks!" +msgstr "Successfully cleared {} tasks!" + +msgid "Failed to clean expired backup, error: {}" +msgstr "Failed to clean expired backup, error: {}" + +msgid "Updating plugin..." +msgstr "Updating plugin..." + +msgid "Task queue activated" +msgstr "Task queue activated" + +msgid "Required parameters: --domain list of domain names, multiple separated by commas!" +msgstr "Required parameters: --domain list of domain names, multiple separated by commas!" + +msgid "Successfully created file!" +msgstr "Successfully created file!" + +msgid "Current DNS is NOT available" +msgstr "Current DNS is NOT available" + +msgid "Primary domain cannot be wildcard DNS record" +msgstr "Primary domain cannot be wildcard DNS record" + +msgid "Batch copied from [{}] to [{}]" +msgstr "Batch copied from [{}] to [{}]" + +msgid "The number of panel threads should be between 1-1024" +msgstr "The number of panel threads should be between 1-1024" + +msgid "Successfully imported database!" +msgstr "Successfully imported database!" + +msgid "ENABLE successfully" +msgstr "ENABLE successfully" + +msgid "The specified custom compilation parameters do not exist!" +msgstr "The specified custom compilation parameters do not exist!" + +msgid "Modify the SSH information of HOST: {}" +msgstr "Modify the SSH information of HOST: {}" + +msgid "Login success\n" +msgstr "Login success\n" + +msgid "The mail server already exists, please uninstall before reinstalling" +msgstr "The mail server already exists, please uninstall before reinstalling" + +msgid "Please fill in the email content!" +msgstr "Please fill in the email content!" + +msgid "The database list is not empty. For your data security, please backup and delete the existing database.
                          Forced uninstall command: rm -rf /www/server/mysql" +msgstr "The database list is not empty. For your data security, please backup and delete the existing database.
                          Forced uninstall command: rm -rf /www/server/mysql" + +msgid "|-ERROR, password cannot contain special characters" +msgstr "|-ERROR, password cannot contain special characters" + +msgid "Failed to send" +msgstr "Failed to send" + +msgid "Currently not bound WeChat account" +msgstr "Currently not bound WeChat account" + +msgid "|-The DNS verification failed. Please check if the key is correct." +msgstr "|-The DNS verification failed. Please check if the key is correct." + +msgid "No plugin info found in the archive, please check the plugin package!" +msgstr "No plugin info found in the archive, please check the plugin package!" + +msgid "Configuration" +msgstr "Configuration" + +msgid "After configuring Force HTTPS, you cannot use [File Verification] to apply for a certificate!" +msgstr "After configuring Force HTTPS, you cannot use [File Verification] to apply for a certificate!" + +msgid "Temporary file does NOT exist, please re-upload!" +msgstr "Temporary file does NOT exist, please re-upload!" + +msgid "Every {} Minutes" +msgstr "Every {} Minutes" + +msgid "Invalid order, this order is currently in a verification failure state!" +msgstr "Invalid order, this order is currently in a verification failure state!" + +msgid "1. The resolution is not correct, or the resolution is not effective [Please resolve the domain name correctly, or wait for the resolution to take effect and try again]" +msgstr "1. The resolution is not correct, or the resolution is not effective [Please resolve the domain name correctly, or wait for the resolution to take effect and try again]" + +msgid "Successfully modified root password!" +msgstr "Successfully modified root password!" + +msgid "The specified plugin does not exist!" +msgstr "The specified plugin does not exist!" + +msgid "Force logout of temporary users:{}" +msgstr "Force logout of temporary users:{}" + +msgid "|-Renewed successfully!" +msgstr "|-Renewed successfully!" + +msgid "|-Renewal failed:" +msgstr "|-Renewal failed:" + +msgid "Error, unable to auto install pyOpenSSL!

                          Plesea try to manually install: pip install pyOpenSSL

                          " +msgstr "Error, unable to auto install pyOpenSSL!

                          Plesea try to manually install: pip install pyOpenSSL

                          " + +msgid "Turn off access limit: rm -f /www/server/panel/data/domain.conf" +msgstr "Turn off access limit: rm -f /www/server/panel/data/domain.conf" + +msgid "Delete temporary login URL" +msgstr "Delete temporary login URL" + +msgid "Installed third-party plugin [{}]" +msgstr "Installed third-party plugin [{}]" + +msgid "Get successful, please manually resolve the domain name" +msgstr "Get successful, please manually resolve the domain name" + +msgid "Failed to get!" +msgstr "Failed to get!" + +msgid "Secret key verification failed" +msgstr "Secret key verification failed" + +msgid "Logs emptied" +msgstr "Logs emptied" + +msgid "log is empty" +msgstr "" + +msgid "No log file" +msgstr "" + +msgid "Start scan successful" +msgstr "" + +msgid "The directory was not scanned" +msgstr "" + +msgid "Type mismatch" +msgstr "" + +msgid "Record does not exist" +msgstr "" + +msgid "The password has expired, please change it!" +msgstr "" + +msgid "The log file is too large!" +msgstr "" + +msgid "Safe mode" +msgstr "Safe mode" + +msgid "Email does not exist" +msgstr "Email does not exist" + +msgid "Secret Key is incorrect" +msgstr "Secret Key is incorrect" + +msgid "|-If your server provider is [Alibaba Cloud] [Tencent Cloud] [Huawei Cloud] or other servers with [Security Group] enabled, please go to the security group release [{}] port to access the panel" +msgstr "|-If your server provider is [Alibaba Cloud] [Tencent Cloud] [Huawei Cloud] or other servers with [Security Group] enabled, please go to the security group release [{}] port to access the panel" + +msgid "The username does not exist. Please turn on and try again." +msgstr "The username does not exist. Please turn on and try again." + +msgid "Add up to 10 categories!" +msgstr "Add up to 10 categories!" + +msgid "Execution failed, check if Apache installed" +msgstr "Execution failed, check if Apache installed" + +msgid "The current IE browser version is too low to display some features, please use another browser. Or if you use a browser developed by a Chinese company, please switch to Extreme Mode!" +msgstr "The current IE browser version is too low to display some features, please use another browser. Or if you use a browser developed by a Chinese company, please switch to Extreme Mode!" + +msgid "Successfully reloaded" +msgstr "Successfully reloaded" + +msgid "There was an error creating, please try again." +msgstr "There was an error creating, please try again." + +msgid "Please don't refresh verification code too frequently!" +msgstr "Please don't refresh verification code too frequently!" + +msgid "Create softlink: {} -> {}" +msgstr "Create softlink: {} -> {}" + +msgid "Size of process data segment" +msgstr "Size of process data segment" + +msgid "The file format does not support online editing!" +msgstr "The file format does not support online editing!" + +msgid "The domain you tried to add already exists!" +msgstr "The domain you tried to add already exists!" + +msgid "Port already exists!" +msgstr "Port already exists!" + +msgid "Database [{}] already at the recycle bin, please recover from the recycle bin!" +msgstr "Database [{}] already at the recycle bin, please recover from the recycle bin!" + +msgid "Please login with account first" +msgstr "Please login with account first" + +msgid "Change panel username" +msgstr "Change panel username" + +msgid "Failed to read file!" +msgstr "Failed to read file!" + +msgid "IP verification failed, your access IP is" +msgstr "IP verification failed, your access IP is" + +msgid "unknown error: {}" +msgstr "unknown error: {}" + +msgid "Website document root: {}" +msgstr "Website document root: {}" + +msgid "Cannot issue a certificate for {}, cannot apply for a wildcard certificate with a domain name suffix directly!" +msgstr "Cannot issue a certificate for {}, cannot apply for a wildcard certificate with a domain name suffix directly!" + +msgid "ERROR: Unable to connect to the {} server, please check if the [AK/SK/Storage] setting is correct!" +msgstr "ERROR: Unable to connect to the {} server, please check if the [AK/SK/Storage] setting is correct!" + +msgid "Database configuration file failed to get checked, please check if MySQL configuration file exists [/etc/my.cnf]" +msgstr "Database configuration file failed to get checked, please check if MySQL configuration file exists [/etc/my.cnf]" + +msgid "Static" +msgstr "Static" + +msgid "[Composer.json] configuration file is not found in the specified directory!" +msgstr "[Composer.json] configuration file is not found in the specified directory!" + +msgid " Successfully deleted directory!" +msgstr " Successfully deleted directory!" + +msgid "Successfully changed password for FTP user[{}]!" +msgstr "Successfully changed password for FTP user[{}]!" + +msgid "STMP information was not found, please re-add custom mail STMP in the settings" +msgstr "STMP information was not found, please re-add custom mail STMP in the settings" + +msgid "Set plugin ['{}'] AS!" +msgstr "Set plugin ['{}'] AS!" + +msgid "Successfully uploaded to {}" +msgstr "Successfully uploaded to {}" + +msgid "Delete user {} successfully!" +msgstr "Delete user {} successfully!" + +msgid "No changes submitted" +msgstr "No changes submitted" + +msgid "Cleared!" +msgstr "Cleared!" + +msgid "Uncompression succeeded!" +msgstr "Uncompression succeeded!" + +msgid "MySQL password ERROR!" +msgstr "MySQL password ERROR!" + +msgid "|-Verification succeeded!" +msgstr "|-Verification succeeded!" + +msgid "|-Sending CSR.." +msgstr "|-Sending CSR.." + +msgid "Root password changed for database!" +msgstr "Root password changed for database!" + +msgid "Did not find the apache phpmyadmin ssl configuration file, please try to close the ssl port settings before opening" +msgstr "Did not find the apache phpmyadmin ssl configuration file, please try to close the ssl port settings before opening" + +msgid "Password cannot be less than 5 characters!" +msgstr "Password cannot be less than 5 characters!" + +msgid "Directory has been backed up to: {}" +msgstr "Directory has been backed up to: {}" + +msgid "Checking..." +msgstr "Checking..." + +msgid "Certificate deleted!" +msgstr "Certificate deleted!" + +msgid "

                          Current TXT record expired, please re-acquire!

                          " +msgstr "

                          Current TXT record expired, please re-acquire!

                          " + +msgid "Currently no certificates to renew" +msgstr "Currently no certificates to renew" + +msgid "Please install the {} extension first." +msgstr "Please install the {} extension first." + +msgid "Panel initialization address" +msgstr "Panel initialization address" + +msgid "Failed to send mail, error reason [{}]" +msgstr "Failed to send mail, error reason [{}]" + +msgid "Add custom compilation parameters: {}:{}" +msgstr "Add custom compilation parameters: {}:{}" + +msgid "|-IP access limit cancelled" +msgstr "|-IP access limit cancelled" + +msgid "|-The user abandons the application and exits the program!" +msgstr "|-The user abandons the application and exits the program!" + +msgid "aaPanel CLI" +msgstr "aaPanel CLI" + +msgid "Start backup" +msgstr "Start backup" + +msgid "The operation failed, please re-operate" +msgstr "The operation failed, please re-operate" + +msgid "Certificate read failed, directory does not exist!" +msgstr "Certificate read failed, directory does not exist!" + +msgid "Redirection suspended" +msgstr "Redirection suspended" + +msgid "Please specify the website document root" +msgstr "Please specify the website document root" + +msgid "Authenticating password" +msgstr "Authenticating password" + +msgid "Batch deleting successful!" +msgstr "Batch deleting successful!" + +msgid "Specify the order index" +msgstr "Specify the order index" + +msgid "File download failed!" +msgstr "File download failed!" + +msgid "Site Logs emptied!" +msgstr "Site Logs emptied!" + +msgid "Delete common commands [{}]" +msgstr "Delete common commands [{}]" + +msgid "Certificate read failed!" +msgstr "Certificate read failed!" + +msgid "Please enter an integer for the RDB parameter" +msgstr "Please enter an integer for the RDB parameter" + +msgid "Close" +msgstr "Close" + +msgid "Apache2.2 does NOT support MultiPHP!" +msgstr "Apache2.2 does NOT support MultiPHP!" + +msgid "A global reverse proxy already exists in the rewrite/nginx master configuration/vhost file" +msgstr "A global reverse proxy already exists in the rewrite/nginx master configuration/vhost file" + +msgid "Old redirection cleaned" +msgstr "Old redirection cleaned" + +msgid "|-Return the verification information to the front end, wait for the user to manually resolve the domain name and complete the verification..." +msgstr "|-Return the verification information to the front end, wait for the user to manually resolve the domain name and complete the verification..." + +msgid "Pgsql listening address" +msgstr "Pgsql listening address" + +msgid "The available disk space of the target partition is less than {}, and the backup cannot be completed. Please increase the disk capacity or change the default backup directory on the settings page!" +msgstr "The available disk space of the target partition is less than {}, and the backup cannot be completed. Please increase the disk capacity or change the default backup directory on the settings page!" + +msgid "[ {} ] The certificate renewal was successful." +msgstr "[ {} ] The certificate renewal was successful." + +msgid "Successfully copied directory!" +msgstr "Successfully copied directory!" + +msgid "Successfully deleted backup files" +msgstr "Successfully deleted backup files" + +msgid "Access Denied" +msgstr "Access Denied" + +msgid "Failed to move file or directory!" +msgstr "Failed to move file or directory!" + +msgid "Possible reason:" +msgstr "Possible reason:" + +msgid "Error getting certificate" +msgstr "Error getting certificate" + +msgid "Please enter the data you need to send" +msgstr "Please enter the data you need to send" + +msgid "|-Number of verifications: {}, value: {}" +msgstr "|-Number of verifications: {}, value: {}" + +msgid "Test data returned by the backend" +msgstr "Test data returned by the backend" + +msgid "The specified site root does not exist, please check: {}" +msgstr "The specified site root does not exist, please check: {}" + +msgid "URL rewrite rule reference, any modification will invalidate the rewrite rules set by the panel" +msgstr "URL rewrite rule reference, any modification will invalidate the rewrite rules set by the panel" + +msgid "Local backup has been kept" +msgstr "Local backup has been kept" + +msgid "Failed to get databases" +msgstr "Failed to get databases" + +msgid "Error reading tty buffer data, {}" +msgstr "Error reading tty buffer data, {}" + +msgid "Certificate of current domains is not expired,and a duplicate request is not allowed,Pls try to combine with other domains!" +msgstr "Certificate of current domains is not expired,and a duplicate request is not allowed,Pls try to combine with other domains!" + +msgid "GET/POST/COOKIE exploitable vulnerabilities" +msgstr "GET/POST/COOKIE exploitable vulnerabilities" + +msgid "Domain [{}] format ERROR!" +msgstr "Domain [{}] format ERROR!" + +msgid "Set {} Please enter an integer" +msgstr "Set {} Please enter an integer" + +msgid "Failed to empty task logs!" +msgstr "Failed to empty task logs!" + +msgid "Username is illegal, cannot be less than 3 characters!" +msgstr "Username is illegal, cannot be less than 3 characters!" + +msgid "Compression level" +msgstr "Compression level" + +msgid "Account binding has expired, please re-bind on the [Settings] page!" +msgstr "Account binding has expired, please re-bind on the [Settings] page!" + +msgid "There is a db with the same name in the db list. To ensure data security, stop recovery!" +msgstr "There is a db with the same name in the db list. To ensure data security, stop recovery!" + +msgid "Directory cannot be empty" +msgstr "Directory cannot be empty" + +msgid "Please Select Domain (NOT including IP address or Wildcard domain)" +msgstr "Please Select Domain (NOT including IP address or Wildcard domain)" + +msgid "Execute extra SHELL" +msgstr "Execute extra SHELL" + +msgid "Download task added into the queue!" +msgstr "Download task added into the queue!" + +msgid "DNSPod API key ERROR, failed to add resolution" +msgstr "DNSPod API key ERROR, failed to add resolution" + +msgid "Every {} Days" +msgstr "Every {} Days" + +msgid "Data acquisition failed!" +msgstr "Data acquisition failed!" + +msgid "|-Temporary files and site logs cleared, deleted [{}] files, freed disk space [{}]" +msgstr "|-Temporary files and site logs cleared, deleted [{}] files, freed disk space [{}]" + +msgid "MB, max RAM usage, 0 means no limit" +msgstr "MB, max RAM usage, 0 means no limit" + +msgid "Username cannot be less than 3 characters!" +msgstr "Username cannot be less than 3 characters!" + +msgid "|-The application is successful and it is being automatically deployed to the website!" +msgstr "|-The application is successful and it is being automatically deployed to the website!" + +msgid "Pls enter command number:" +msgstr "Pls enter command number:" + +msgid "ERROR, cannot find file openssl.cnf, please install openssl" +msgstr "ERROR, cannot find file openssl.cnf, please install openssl" + +msgid "Log is empty" +msgstr "Log is empty" + +msgid "The permissions you entered are invalid and the addition failed!" +msgstr "The permissions you entered are invalid and the addition failed!" + +msgid "Database username is illegal!" +msgstr "Database username is illegal!" + +msgid "Do not add it repeatedly!" +msgstr "Do not add it repeatedly!" + +msgid "|-After the task is completed, a total of renewals are required.[{}], renewal success [%s], renewal failed [{}]. " +msgstr "|-After the task is completed, a total of renewals are required.[{}], renewal success [%s], renewal failed [{}]. " + +msgid "Failed to write in file!" +msgstr "Failed to write in file!" + +msgid "An error occurred while reading data from websocket. Retrying" +msgstr "An error occurred while reading data from websocket. Retrying" + +msgid "|-Requesting CA to verify domain name [{}]..." +msgstr "|-Requesting CA to verify domain name [{}]..." + +msgid "Target URL cannot have the following special characters {}" +msgstr "Target URL cannot have the following special characters {}" + +msgid "Delete redirects [{}] successfully" +msgstr "Delete redirects [{}] successfully" + +msgid "Failed to delete" +msgstr "Failed to delete" + +msgid "Email address already exists!" +msgstr "Email address already exists!" + +msgid "Please install the [CloudDNS] plugin first." +msgstr "Please install the [CloudDNS] plugin first." + +msgid "Start" +msgstr "Start" + +msgid "Maximum number of connections that will be processed simultaneously" +msgstr "Maximum number of connections that will be processed simultaneously" + +msgid "No deployment tasks now" +msgstr "No deployment tasks now" + +msgid "Password must be at least 8 characters" +msgstr "Password must be at least 8 characters" + +msgid "Disable IPv6 compatibility of the panel!" +msgstr "Disable IPv6 compatibility of the panel!" + +msgid "Please bind your account!" +msgstr "Please bind your account!" + +msgid "The specified host address has been added to other SSH information!" +msgstr "The specified host address has been added to other SSH information!" + +msgid "Failed to add, write configuraton ERROR!" +msgstr "Failed to add, write configuraton ERROR!" + +msgid "Failed to create file!" +msgstr "Failed to create file!" + +msgid "Not Edit" +msgstr "Not Edit" + +msgid "Failed to import database [{}], => {}" +msgstr "Failed to import database [{}], => {}" + +msgid "Failed to add database [{}]!, {}" +msgstr "Failed to add database [{}]!, {}" + +msgid "Data cleared successfully!" +msgstr "Data cleared successfully!" + +msgid "Get worker TotalKBytes False" +msgstr "Get worker TotalKBytes False" + +msgid "Max allocated physical memory to database" +msgstr "Max allocated physical memory to database" + +msgid "Batch delete succeeded!" +msgstr "Batch delete succeeded!" + +msgid "Level of error" +msgstr "Level of error" + +msgid "Successfully uninstalled software [{}]" +msgstr "Successfully uninstalled software [{}]" + +msgid "aaPanel terminal" +msgstr "aaPanel terminal" + +msgid "Number of saving days is illegal!" +msgstr "Number of saving days is illegal!" + +msgid "Reload failed!" +msgstr "Reload failed!" + +msgid "Minimum number of idle threads available to handle request spikes" +msgstr "Minimum number of idle threads available to handle request spikes" + +msgid "Set max upload size to [{} MB] for PHP-{}!" +msgstr "Set max upload size to [{} MB] for PHP-{}!" + +msgid "|-Turn on redirect" +msgstr "|-Turn on redirect" + +msgid "[Composer.lock] file exists in the specified directory, please delete it before executing" +msgstr "[Composer.lock] file exists in the specified directory, please delete it before executing" + +msgid "Error page configuration, allowed to be commented, deleted or modified" +msgstr "Error page configuration, allowed to be commented, deleted or modified" + +msgid "Whether to enable compressed transmission" +msgstr "Whether to enable compressed transmission" + +msgid "Sanic framework project please use Gunicorn or Python to start" +msgstr "Sanic framework project please use Gunicorn or Python to start" + +msgid "Modify the mailbox user success {}" +msgstr "Modify the mailbox user success {}" + +msgid "|-Local authentication failed!" +msgstr "|-Local authentication failed!" + +msgid "Please turn on anti-theft first!" +msgstr "Please turn on anti-theft first!" + +msgid "The passwords entered twice are inconsistent, please try again!" +msgstr "The passwords entered twice are inconsistent, please try again!" + +msgid "Max capacity of the memory disk cannot exceed 50% of physical memory!" +msgstr "Max capacity of the memory disk cannot exceed 50% of physical memory!" + +msgid "PHP is not installed" +msgstr "PHP is not installed" + +msgid "Cannot delete initial default user!" +msgstr "Cannot delete initial default user!" + +msgid "Delete domain successfully {}" +msgstr "Delete domain successfully {}" + +msgid "|-Turn on proxy" +msgstr "|-Turn on proxy" + +msgid "Issuing failed, the domain {} has exceeded the limit of weekly reissues!" +msgstr "Issuing failed, the domain {} has exceeded the limit of weekly reissues!" + +msgid "Email sending failed, please check if the STMP password is correct or the hosts are correct" +msgstr "Email sending failed, please check if the STMP password is correct or the hosts are correct" + +msgid "Failed to create site document root, {}" +msgstr "Failed to create site document root, {}" + +msgid "Successfully uninstall Python" +msgstr "Successfully uninstall Python" + +msgid "TXT record verification ERROR, the current TXT record invalid or expired" +msgstr "TXT record verification ERROR, the current TXT record invalid or expired" + +msgid "Set the run directory" +msgstr "Set the run directory" + +msgid "Delete mailbox user successfully {}" +msgstr "Delete mailbox user successfully {}" + +msgid "Last" +msgstr "Last" + +msgid "Backup Succeeded!" +msgstr "Backup Succeeded!" + +msgid "Change panel port" +msgstr "Change panel port" + +msgid "Nginx load status acquisition failed:{}" +msgstr "Nginx load status acquisition failed:{}" + +msgid "|-Successful verification, domain name [{}], record type [{}], record value [{}]!" +msgstr "|-Successful verification, domain name [{}], record type [{}], record value [{}]!" + +msgid "When applying using dnsapi, specify the secret of dnsapi in the --dns_secret parameter!" +msgstr "When applying using dnsapi, specify the secret of dnsapi in the --dns_secret parameter!" + +msgid "Add common commands [{}]" +msgstr "Add common commands [{}]" + +msgid "Successfully created database" +msgstr "Successfully created database" + +msgid "Timeout cannot be less than 300 seconds" +msgstr "Timeout cannot be less than 300 seconds" + +msgid "

                          Issue failed, domain resolution ERROR, or NOT valid, or the domain name is NOT filed by MIIT!

                          " +msgstr "

                          Issue failed, domain resolution ERROR, or NOT valid, or the domain name is NOT filed by MIIT!

                          " + +msgid "Please complete the information" +msgstr "Please complete the information" + +msgid "Modified disabled function to [{}] for PHP-{}" +msgstr "Modified disabled function to [{}] for PHP-{}" + +msgid "Cannot set both directory and global proxies" +msgstr "Cannot set both directory and global proxies" + +msgid "Failed to {} FTP user [{}]! => {}" +msgstr "Failed to {} FTP user [{}]! => {}" + +msgid "Failed to add FTP user[{}]! => {}" +msgstr "Failed to add FTP user[{}]! => {}" + +msgid "The softlink file name must be an absolute path (full path)" +msgstr "The softlink file name must be an absolute path (full path)" + +msgid "Successfully got, please manually resolve the domain name" +msgstr "Successfully got, please manually resolve the domain name" + +msgid "innodb_log_buffer_size cannot be less than 8MB" +msgstr "innodb_log_buffer_size cannot be less than 8MB" + +msgid "Sites that have reverse proxy turned on cannot request SSL!" +msgstr "Sites that have reverse proxy turned on cannot request SSL!" + +msgid "Database manager" +msgstr "Database manager" + +msgid "Prev" +msgstr "Prev" + +msgid "it is not allowed to uncompress file in critical directory, which will cause the permission to be replaced." +msgstr "it is not allowed to uncompress file in critical directory, which will cause the permission to be replaced." + +msgid "The renewal failed and the certificate directory does not exist." +msgstr "The renewal failed and the certificate directory does not exist." + +msgid "Please enter an integer for the max memory number" +msgstr "Please enter an integer for the max memory number" + +msgid "aaPanel" +msgstr "aaPanel" + +msgid "Failed to modify, database user does not exist!" +msgstr "Failed to modify, database user does not exist!" + +msgid "Certificate information acquisition failed!" +msgstr "Certificate information acquisition failed!" + +msgid "Successfully added FTP user [{}]!" +msgstr "Successfully added FTP user [{}]!" + +msgid "Setup software: Custom compilation parameters for {} are configured as: {}" +msgstr "Setup software: Custom compilation parameters for {} are configured as: {}" + +msgid "Per Hour, run at {} Min" +msgstr "Per Hour, run at {} Min" + +msgid "Please specify DNSAPI key" +msgstr "Please specify DNSAPI key" + +msgid "Specified hook does NOT exist" +msgstr "Specified hook does NOT exist" + +msgid "Get worker reqpersec False" +msgstr "Get worker reqpersec False" + +msgid "DNS ERROR or NOT effective:{}" +msgstr "DNS ERROR or NOT effective:{}" + +msgid "Already shared!" +msgstr "Already shared!" + +msgid "This version is used by a project, please delete the project before uninstalling" +msgstr "This version is used by a project, please delete the project before uninstalling" + +msgid "Setup failed, no enable-php-xx related configuration items were found in the website configuration file!" +msgstr "Setup failed, no enable-php-xx related configuration items were found in the website configuration file!" + +msgid "The client has actively disconnected" +msgstr "The client has actively disconnected" + +msgid "Set the max number of transactions that can be in the prepared state at the same time" +msgstr "Set the max number of transactions that can be in the prepared state at the same time" + +msgid "Successfully added site [{}]!" +msgstr "Successfully added site [{}]!" + +msgid "

                          Issue failed, TXT record verification failed, domain resolution ERROR, or NOT valid!

                          " +msgstr "

                          Issue failed, TXT record verification failed, domain resolution ERROR, or NOT valid!

                          " + +msgid "Set panel port [{}], domain [{}], default backup directory [{}], default site directory [{}], server IP [{}], authorized IP [{}]!" +msgstr "Set panel port [{}], domain [{}], default backup directory [{}], default site directory [{}], server IP [{}], authorized IP [{}]!" + +msgid "Soft link already exists" +msgstr "Soft link already exists" + +msgid "Login" +msgstr "Login" + +msgid "The specified command does not exist" +msgstr "The specified command does not exist" + +msgid "It is not recommended to use [.] at the end of the directory, because there may be safety risks" +msgstr "It is not recommended to use [.] at the end of the directory, because there may be safety risks" + +msgid "Failed to download certificate: {}" +msgstr "Failed to download certificate: {}" + +msgid "Automatically saved successfully!" +msgstr "Automatically saved successfully!" + +msgid "Modified cron job [{}] status to [{}]" +msgstr "Modified cron job [{}] status to [{}]" + +msgid "Network request timeout with Let's Encrypt" +msgstr "Network request timeout with Let's Encrypt" + +msgid "File format is incorrect" +msgstr "File format is incorrect" + +msgid "Successfully modifyied password for database [{}]!" +msgstr "Successfully modifyied password for database [{}]!" + +msgid "The specify rule name is not exists! [ {} ]" +msgstr "The specify rule name is not exists! [ {} ]" + +msgid "|-Detected that the certificate under {} overlaps with the certificate of this application and has an earlier expiration time, and has been replaced with a new certificate!" +msgstr "|-Detected that the certificate under {} overlaps with the certificate of this application and has an earlier expiration time, and has been replaced with a new certificate!" + +msgid "Failed to generate key or username. Please check if the hard disk space is insufficient or the directory cannot be written.[ {} ]" +msgstr "Failed to generate key or username. Please check if the hard disk space is insufficient or the directory cannot be written.[ {} ]" + +msgid "Disk inode has been exhausted, the panel has attempted to release the inode. Please try again ..." +msgstr "Disk inode has been exhausted, the panel has attempted to release the inode. Please try again ..." + +msgid "The specified database [ {} ] has no data!" +msgstr "The specified database [ {} ] has no data!" + +msgid "Installation succeeded!" +msgstr "Installation succeeded!" + +msgid "SSL turned off,Please use http protocol to access the panel!" +msgstr "SSL turned off,Please use http protocol to access the panel!" + +msgid "Directory cannot be empty!" +msgstr "Directory cannot be empty!" + +msgid "Obtain {} database(s) from server!" +msgstr "Obtain {} database(s) from server!" + +msgid "Add failed, please check if the URL is correct" +msgstr "Add failed, please check if the URL is correct" + +msgid "Timezone" +msgstr "Timezone" + +msgid "Invalid Token!" +msgstr "Invalid Token!" + +msgid "Size of process stack segment" +msgstr "Size of process stack segment" + +msgid "Application successful." +msgstr "Application successful." + +msgid "Project has no ports and cannot be mapped. The uwsgi mode does NOT support sock file mode mapping at this stage." +msgstr "Project has no ports and cannot be mapped. The uwsgi mode does NOT support sock file mode mapping at this stage." + +msgid "This extension is the default extension of OLS and cannot be uninstalled" +msgstr "This extension is the default extension of OLS and cannot be uninstalled" + +msgid "Wrong file content, please save again!" +msgstr "Wrong file content, please save again!" + +msgid "Failed to create directory!" +msgstr "Failed to create directory!" + +msgid "Successfully created directory [{}]!" +msgstr "Successfully created directory [{}]!" + +msgid "Sorry, Your IP is NOT Authorized" +msgstr "Sorry, Your IP is NOT Authorized" + +msgid "API has been disabled" +msgstr "API has been disabled" + +msgid "Successfully modified cron job [{}]" +msgstr "Successfully modified cron job [{}]" + +msgid "Successfully added intallation task [{}-{}]" +msgstr "Successfully added intallation task [{}-{}]" + +msgid "Successfully saved!" +msgstr "Successfully saved!" + +msgid "Maximum number of idle threads" +msgstr "Maximum number of idle threads" + +msgid "Failed to create" +msgstr "Failed to create" + +msgid "Start time" +msgstr "Start time" + +msgid "|-Initializing ACME protocol..." +msgstr "|-Initializing ACME protocol..." + +msgid "The database connection is abnormal. Please check whether the root user authority or database configuration parameters are correct." +msgstr "The database connection is abnormal. Please check whether the root user authority or database configuration parameters are correct." + +msgid "Successfully modified password for user [{}]!" +msgstr "Successfully modified password for user [{}]!" + +msgid "The password only supports a combination of uppercase and lowercase letters and numbers" +msgstr "The password only supports a combination of uppercase and lowercase letters and numbers" + +msgid "Default processes" +msgstr "Default processes" + +msgid "Batch setting permissions succeeded!" +msgstr "Batch setting permissions succeeded!" + +msgid "Backup directory: {}" +msgstr "Backup directory: {}" + +msgid "Please check the domain!" +msgstr "Please check the domain!" + +msgid "Current PostgreSQL related processes" +msgstr "Current PostgreSQL related processes" + +msgid "CA cannot verify your domain name, please check if the domain name resolution is correct, or wait 5-10 minutes and try again." +msgstr "CA cannot verify your domain name, please check if the domain name resolution is correct, or wait 5-10 minutes and try again." + +msgid "|-The website has been suspended, skip certificate renewal!" +msgstr "|-The website has been suspended, skip certificate renewal!" + +msgid "Specified reverse proxy name or proxy folder already exists" +msgstr "Specified reverse proxy name or proxy folder already exists" + +msgid "Application successful!" +msgstr "Application successful!" + +msgid "Database [{}] password cannot be empty" +msgstr "Database [{}] password cannot be empty" + +msgid "Never trouble troubles till troubles trouble you!" +msgstr "Never trouble troubles till troubles trouble you!" + +msgid "Specified compression format is not supported!" +msgstr "Specified compression format is not supported!" + +msgid "Cleared password authentication for site [{}]!" +msgstr "Cleared password authentication for site [{}]!" + +msgid "Requested PHP version does NOT exist!" +msgstr "Requested PHP version does NOT exist!" + +msgid "Firewall manager" +msgstr "Firewall manager" + +msgid "Failed to receive mail, error reason [{}]" +msgstr "Failed to receive mail, error reason [{}]" + +msgid "[File verification] method cannot apply for a wildcard domain name" +msgstr "[File verification] method cannot apply for a wildcard domain name" + +msgid "Turned on monitory service, save for [{}] day!" +msgstr "Turned on monitory service, save for [{}] day!" + +msgid "Please set the API interface parameters of [{}] first." +msgstr "Please set the API interface parameters of [{}] first." + +msgid "Edit user {}" +msgstr "Edit user {}" + +msgid "File suffix cannot be empty" +msgstr "File suffix cannot be empty" + +msgid "User name must be at least [{}] characters" +msgstr "User name must be at least [{}] characters" + +msgid "Configuration file not exist" +msgstr "Configuration file not exist" + +msgid "The directory you submitted is invalid and the migration failed" +msgstr "The directory you submitted is invalid and the migration failed" + +msgid "Downloaded file [{}] to [{}]" +msgstr "Downloaded file [{}] to [{}]" + +msgid "View panel default info" +msgstr "View panel default info" + +msgid "Idle connection timeout, 0 means not disconnected" +msgstr "Idle connection timeout, 0 means not disconnected" + +msgid "Wildcard domain cannot use the method of [file verification] to apply for a certificate!" +msgstr "Wildcard domain cannot use the method of [file verification] to apply for a certificate!" + +msgid "Client body buffer" +msgstr "Client body buffer" + +msgid "Connection timeout" +msgstr "Connection timeout" + +msgid "Set concurrency of PHP-{}, max_children={}, start_servers={}, min_spare_servers={}, max_spare_servers={}" +msgstr "Set concurrency of PHP-{}, max_children={}, start_servers={}, min_spare_servers={}, max_spare_servers={}" + +msgid "|-Skip the domain name this time: {}, this certificate will not be renewed due to failure to renew 3 times in a row, (The number of errors will be reset after manual renewal and success)" +msgstr "|-Skip the domain name this time: {}, this certificate will not be renewed due to failure to renew 3 times in a row, (The number of errors will be reset after manual renewal and success)" + +msgid "Whether to output detailed error info" +msgstr "Whether to output detailed error info" + +msgid "Turned off Tomcat supporting for site [{}]!" +msgstr "Turned off Tomcat supporting for site [{}]!" + +msgid "Already exist" +msgstr "Already exist" + +msgid "Thursday" +msgstr "Thursday" + +msgid "Successfully deleted accepted port [{}] on firewall!" +msgstr "Successfully deleted accepted port [{}] on firewall!" + +msgid "Successful installation" +msgstr "Successful installation" + +msgid "There is a problem with the current Java project configuration file, please rebuild" +msgstr "There is a problem with the current Java project configuration file, please rebuild" + +msgid "No available PHP version was found, or the specified PHP version was not installed!" +msgstr "No available PHP version was found, or the specified PHP version was not installed!" + +msgid "Sent successfully!" +msgstr "Sent successfully!" + +msgid "No compatible PHP version found, please install first" +msgstr "No compatible PHP version found, please install first" + +msgid "|-Record Type: TXT Record Name: \\033[41m{}\\033[0m Record Value: \\033[41m{}\\033 [0m [Required]" +msgstr "|-Record Type: TXT Record Name: \\033[41m{}\\033[0m Record Value: \\033[41m{}\\033 [0m [Required]" + +msgid "Delete website [{}] successfully" +msgstr "Delete website [{}] successfully" + +msgid "Domain mapped or already exists. Please delete it before replacing it." +msgstr "Domain mapped or already exists. Please delete it before replacing it." + +msgid "Database moved!" +msgstr "Database moved!" + +msgid "Certificate parsing failed" +msgstr "Certificate parsing failed" + +msgid "Successfully moved file or directory!" +msgstr "Successfully moved file or directory!" + +msgid "|-An error occurred, try again [{}]" +msgstr "|-An error occurred, try again [{}]" + +msgid "The configuration information of the nails you configured was not found, please add in the settings" +msgstr "The configuration information of the nails you configured was not found, please add in the settings" + +msgid "Add a mailbox user successfully {}" +msgstr "Add a mailbox user successfully {}" + +msgid "This domain name does NOT exist in Tomcat" +msgstr "This domain name does NOT exist in Tomcat" + +msgid "Successfully killed task [{}] [{}]!" +msgstr "Successfully killed task [{}] [{}]!" + +msgid "NOT opened" +msgstr "NOT opened" + +msgid "Requested directory does not exist" +msgstr "Requested directory does not exist" + +msgid "Non-compliant names can only be numbers, letters, underscores" +msgstr "Non-compliant names can only be numbers, letters, underscores" + +msgid "Input name of plugin!" +msgstr "Input name of plugin!" + +msgid "Please specify DNSAPI secret" +msgstr "Please specify DNSAPI secret" + +msgid "Configuration ERROR" +msgstr "Configuration ERROR" + +msgid "Please input your email" +msgstr "Please input your email" + +msgid "The target server actively refused the connection" +msgstr "The target server actively refused the connection" + +msgid "|-Exited the application process!" +msgstr "|-Exited the application process!" + +msgid "Port range is incorrect! should be between 100-65535" +msgstr "Port range is incorrect! should be between 100-65535" + +msgid "There is a database with the same name in the current database. To ensure data security, stop recovery!" +msgstr "" + +msgid "An error was detected in the configuration file. Please solve it before proceeding" +msgstr "An error was detected in the configuration file. Please solve it before proceeding" + +msgid "The database data does not exist!" +msgstr "The database data does not exist!" + +msgid "Session interrupted" +msgstr "Session interrupted" + +msgid "Deleted site [{}] subdirectory [{}] binding" +msgstr "Deleted site [{}] subdirectory [{}] binding" + +msgid "User already exists" +msgstr "User already exists" + +msgid "URL address is invalid!" +msgstr "URL address is invalid!" + +msgid "Notes or panel address duplicate!" +msgstr "Notes or panel address duplicate!" + +msgid "Successfully created" +msgstr "Successfully created" + +msgid "More than 5 verification failures in 1 hour, the application is temporarily banned, please try again later!" +msgstr "More than 5 verification failures in 1 hour, the application is temporarily banned, please try again later!" + +msgid "Task logs emptied!" +msgstr "Task logs emptied!" + +msgid "Max cache that pgsql can use, for example, if there is 4GB of memory, it can be set to 3GB." +msgstr "Max cache that pgsql can use, for example, if there is 4GB of memory, it can be set to 3GB." + +msgid "# FIRST AUTHOR , YEAR." +msgstr "# FIRST AUTHOR , YEAR." + +msgid "No form_data data found" +msgstr "No form_data data found" + +msgid "Create Account Key" +msgstr "Create Account Key" + +msgid "Proxy suspended" +msgstr "Proxy suspended" + +msgid "STMP information was not found, please re-add custom mail STMP information in the settings" +msgstr "STMP information was not found, please re-add custom mail STMP information in the settings" + +msgid "|-Failed to parse configuration file" +msgstr "|-Failed to parse configuration file" + +msgid "Unsupported authentication type: {}" +msgstr "Unsupported authentication type: {}" + +msgid "This is not a file!" +msgstr "This is not a file!" + +msgid "IP address is illegal!" +msgstr "" + +msgid "Disabling this IP will cause your server to fail" +msgstr "" + +msgid "The number of domain names exceeds the upper limit" +msgstr "The number of domain names exceeds the upper limit" + +msgid "|-Domain limit cancelled" +msgstr "|-Domain limit cancelled" + +msgid "Failde to delete FTP user[{}]! => {}" +msgstr "Failde to delete FTP user[{}]! => {}" + +msgid "Whether to allow upload file" +msgstr "Whether to allow upload file" + +msgid "Site manager" +msgstr "Site manager" + +msgid "Failed to get domain list!" +msgstr "Failed to get domain list!" + +msgid "Monthly" +msgstr "Monthly" + +msgid "The specified certificate file does not exist!" +msgstr "The specified certificate file does not exist!" + +msgid "New password" +msgstr "New password" + +msgid "Sync {} database(s) from server!" +msgstr "Sync {} database(s) from server!" + +msgid "The recipient cannot be empty" +msgstr "The recipient cannot be empty" + +msgid "Successfully blocked IP [{}]!" +msgstr "Successfully blocked IP [{}]!" + +msgid "Please run the program when all install tasks finished!" +msgstr "Please run the program when all install tasks finished!" + +msgid "Successfully recovered [{}] from recycle bin!" +msgstr "Successfully recovered [{}] from recycle bin!" + +msgid "3. Check whether the website is set to force HTTPS [please turn off the force HTTPS function temporarily]" +msgstr "3. Check whether the website is set to force HTTPS [please turn off the force HTTPS function temporarily]" + +msgid "Generate temporary connection, expiration time: {}" +msgstr "Generate temporary connection, expiration time: {}" + +msgid "Please specify the website document root in the --path parameter!" +msgstr "Please specify the website document root in the --path parameter!" + +msgid "redis password, leaving blank means no password is set" +msgstr "redis password, leaving blank means no password is set" + +msgid "Successfully optimized!" +msgstr "Successfully optimized!" + +msgid "Monitory log is emptied!" +msgstr "Monitory log is emptied!" + +msgid "The program ID you want to add already exists" +msgstr "The program ID you want to add already exists" + +msgid "PHP Daemon" +msgstr "PHP Daemon" + +msgid "Uninstall" +msgstr "Uninstall" + +msgid "Failed to delete DNS record" +msgstr "Failed to delete DNS record" + +msgid "Binding is valid!" +msgstr "Binding is valid!" + +msgid "Got successfully!" +msgstr "Got successfully!" + +msgid "User settings do not retain local backups, deleted {}" +msgstr "User settings do not retain local backups, deleted {}" + +msgid "View domain bound: cat /www/server/panel/data/domain.conf" +msgstr "View domain bound: cat /www/server/panel/data/domain.conf" + +msgid "This version of Python is the system default and cannot be uninstalled." +msgstr "This version of Python is the system default and cannot be uninstalled." + +msgid "Executing ({})..." +msgstr "Executing ({})..." + +msgid "Scan QR code successful, logging in" +msgstr "Scan QR code successful, logging in" + +msgid "The account name is invalid." +msgstr "The account name is invalid." + +msgid "Service shutdown or internal error due to maintenance, check [ https://letsencrypt.status.io ] see for more details." +msgstr "Service shutdown or internal error due to maintenance, check [ https://letsencrypt.status.io ] see for more details." + +msgid "Unbound!" +msgstr "Unbound!" + +msgid "Currently only support Nginx" +msgstr "Currently only support Nginx" + +msgid "Anti-theft chain domain name cannot be empty!" +msgstr "Anti-theft chain domain name cannot be empty!" + +msgid "This is the recycle bin directory, please press the [Recycle Bin] button in the upper right corner to open" +msgstr "This is the recycle bin directory, please press the [Recycle Bin] button in the upper right corner to open" + +msgid "|-Order index: {}" +msgstr "|-Order index: {}" + +msgid "Backup failed {}/total {} sites" +msgstr "Backup failed {}/total {} sites" + +msgid "Successfully installed plugin [{}]" +msgstr "Successfully installed plugin [{}]" + +msgid "Please do NOT enter the following special characters {}" +msgstr "Please do NOT enter the following special characters {}" + +msgid "Add failed, please check if the URL is correct." +msgstr "Add failed, please check if the URL is correct." + +msgid "Unauthorized" +msgstr "Unauthorized" + +msgid "Please enter the correct port number" +msgstr "Please enter the correct port number" + +msgid "The page you requested does not exist, please check the URL!" +msgstr "The page you requested does not exist, please check the URL!" + +msgid "|-Fetching certificate content..." +msgstr "|-Fetching certificate content..." + +msgid "|-A total of {} certificates need to be renewed" +msgstr "|-A total of {} certificates need to be renewed" + +msgid "Sorry, Page does NOT Exist" +msgstr "Sorry, Page does NOT Exist" + +msgid "Please fill in your email address!" +msgstr "Please fill in your email address!" + +msgid "Verification code is incorrect, please try again!" +msgstr "Verification code is incorrect, please try again!" + +msgid "Setting permissions" +msgstr "Setting permissions" + +msgid "Cannot edit files larger than 2MB online!" +msgstr "Cannot edit files larger than 2MB online!" + +msgid "|---Keep the latest [{}] backups" +msgstr "|---Keep the latest [{}] backups" + +msgid "Fail to connect to the server!" +msgstr "Fail to connect to the server!" + +msgid "Successfully modified FTP port to [{}]!" +msgstr "Successfully modified FTP port to [{}]!" + +msgid "Wrong parameter" +msgstr "Wrong parameter" + +msgid "Ready to deploy" +msgstr "Ready to deploy" + +msgid "Please uninstall the Mysql master-slave replication plugin before closing the binary log! !" +msgstr "Please uninstall the Mysql master-slave replication plugin before closing the binary log! !" + +msgid "Username is illegal, special characters are NOT allowed!" +msgstr "Username is illegal, special characters are NOT allowed!" + +msgid "Maximum file to upload" +msgstr "Maximum file to upload" + +msgid "Wrong password!" +msgstr "Wrong password!" + +msgid "Default Document cannot be empty!" +msgstr "Default Document cannot be empty!" + +msgid "This plugin does NOT have template" +msgstr "This plugin does NOT have template" + +msgid "One word Trojan" +msgstr "One word Trojan" + +msgid "Permission denied!" +msgstr "Permission denied!" + +msgid "Validation information construction failed!" +msgstr "Validation information construction failed!" + +msgid "To be paid" +msgstr "To be paid" + +msgid "Authentication failed {}" +msgstr "Authentication failed {}" + +msgid "Derectory [{}] backup failed" +msgstr "Derectory [{}] backup failed" + +msgid "Category deleted!" +msgstr "Category deleted!" + +msgid "Please enter redirected path" +msgstr "Please enter redirected path" + +msgid "Unbound device" +msgstr "Unbound device" + +msgid "Domain format is invalid!" +msgstr "Domain format is invalid!" + +msgid "Domain and name of subdirectory cannot be empty!" +msgstr "Domain and name of subdirectory cannot be empty!" + +msgid "Successfully marked, please click Paste All button in the target directory!" +msgstr "Successfully marked, please click Paste All button in the target directory!" + +msgid "Please specify the domain name for which you want to apply for a certificate in the --domain parameter, multiple separated by commas (,)" +msgstr "Please specify the domain name for which you want to apply for a certificate in the --domain parameter, multiple separated by commas (,)" + +msgid "PHP version of site [{}] changed to [{}]!" +msgstr "PHP version of site [{}] changed to [{}]!" + +msgid "Login failed" +msgstr "Login failed" + +msgid "Decompress the file" +msgstr "Decompress the file" + +msgid "|-Spool cleared, deleted [{}] files, freed disk space [{}]" +msgstr "|-Spool cleared, deleted [{}] files, freed disk space [{}]" + +msgid "Client: {}, has manually exited the panel" +msgstr "Client: {}, has manually exited the panel" + +msgid "New URL rewrite rule has been saved!" +msgstr "New URL rewrite rule has been saved!" + +msgid "2. Check if there is 301/302 redirection set up [please temporarily turn off the redirection related configuration]" +msgstr "2. Check if there is 301/302 redirection set up [please temporarily turn off the redirection related configuration]" + +msgid "Permission restored successfully" +msgstr "Permission restored successfully" + +msgid "The website has been redirected, please close it before applying!" +msgstr "The website has been redirected, please close it before applying!" + +msgid "|-Verification type: {}" +msgstr "|-Verification type: {}" + +msgid "New panel port" +msgstr "New panel port" + +msgid "Logout" +msgstr "Logout" + +msgid "Configuration ERROR, please check the configuration file" +msgstr "Configuration ERROR, please check the configuration file" + +msgid "Wrong response: {}" +msgstr "Wrong response: {}" + +msgid "The connection is disconnected, press enter to try to reconnect!" +msgstr "The connection is disconnected, press enter to try to reconnect!" + +msgid "Every {} Days, run at {} Hour {} Min" +msgstr "Every {} Days, run at {} Hour {} Min" + +msgid "Batch moved from [{}] to [{}]" +msgstr "Batch moved from [{}] to [{}]" + +msgid "The current web server is openlitespeed. This function is not supported yet." +msgstr "The current web server is openlitespeed. This function is not supported yet." + +msgid "Database character set: {}" +msgstr "Database character set: {}" + +msgid "Private Key ERROR, please check!" +msgstr "Private Key ERROR, please check!" + +msgid " 'Please do not enter the following special characters [ ~ ` / = ' ]" +msgstr " 'Please do not enter the following special characters [ ~ ` / = ' ]" + +msgid "Wrong operating mode" +msgstr "Wrong operating mode" + +msgid "Certificate saved at: {}/" +msgstr "Certificate saved at: {}/" + +msgid "Domain name format error! [{}]" +msgstr "Domain name format error! [{}]" + +msgid "You plugin list is up-to-date" +msgstr "You plugin list is up-to-date" + +msgid "Please specify the domain name to apply for a certificate" +msgstr "Please specify the domain name to apply for a certificate" + +msgid "Rule name needs to be greater than 3 bytes" +msgstr "Rule name needs to be greater than 3 bytes" + +msgid "There can be no extra parameters in the login parameters" +msgstr "There can be no extra parameters in the login parameters" + +msgid "{} Developer mode(DeBug)" +msgstr "{} Developer mode(DeBug)" + +msgid "Pgsql already installed" +msgstr "Pgsql already installed" + +msgid "Download file" +msgstr "Download file" + +msgid "Panel restarted" +msgstr "Panel restarted" + +msgid "This domain does NOT exist in this DNSPod account, failed to add resolution" +msgstr "This domain does NOT exist in this DNSPod account, failed to add resolution" + +msgid "File or directory does not exist!" +msgstr "File or directory does not exist!" + +msgid "[path] parameter cannot be empty!" +msgstr "[path] parameter cannot be empty!" + +msgid "Obtain [{}] plugin, [{}] plugin update from cloud!" +msgstr "Obtain [{}] plugin, [{}] plugin update from cloud!" + +msgid "Renewal success" +msgstr "Renewal success" + +msgid "Database size: {}" +msgstr "Database size: {}" + +msgid "Verification failed, domain name resolution error or verification URL cannot be accessed!" +msgstr "Verification failed, domain name resolution error or verification URL cannot be accessed!" + +msgid "|-Retry the command" +msgstr "|-Retry the command" + +msgid "Recycle bin feature turned off!" +msgstr "Recycle bin feature turned off!" + +msgid "Set the website [{}] expiration time successfully" +msgstr "Set the website [{}] expiration time successfully" + +msgid "Reconnection attempts:{}" +msgstr "Reconnection attempts:{}" + +msgid "Database user does NOT exist!" +msgstr "Database user does NOT exist!" + +msgid "The softlink file name already exists, please use another file name or delete it!" +msgstr "The softlink file name already exists, please use another file name or delete it!" + +msgid "The account has more than 5 failed orders within 1 hour, please wait 1 hour and try again!" +msgstr "The account has more than 5 failed orders within 1 hour, please wait 1 hour and try again!" + +msgid "|-Getting certificate content..." +msgstr "|-Getting certificate content..." + +msgid "Renewal failed. Domain resolution ERROR, or NOT valid!" +msgstr "Renewal failed. Domain resolution ERROR, or NOT valid!" + +msgid "|-Attempt to verify the resolution result, domain name [{}], record value [{}]..." +msgstr "|-Attempt to verify the resolution result, domain name [{}], record value [{}]..." + +msgid "Please enter correct parameters" +msgstr "Please enter correct parameters" + +msgid "Panel session lost, please login panel again!" +msgstr "Panel session lost, please login panel again!" + +msgid "Permission repair succeeded" +msgstr "Permission repair succeeded" + +msgid "Clearing disk monitoring records" +msgstr "Clearing disk monitoring records" + +msgid "Base directory turned off!" +msgstr "Base directory turned off!" + +msgid "Panel setting" +msgstr "Panel setting" + +msgid "#Referenced reverse proxy rule, if commented, the configured reverse proxy will be invalid" +msgstr "#Referenced reverse proxy rule, if commented, the configured reverse proxy will be invalid" + +msgid "Requested directory exists!" +msgstr "Requested directory exists!" + +msgid "Currently the latest version, no upgrade required!" +msgstr "Currently the latest version, no upgrade required!" + +msgid "The number of backup versions has exceeded {} ,Please go to the upper right corner [Backup Permissions] to clean up the old backup before operating" +msgstr "The number of backup versions has exceeded {} ,Please go to the upper right corner [Backup Permissions] to clean up the old backup before operating" + +msgid "ERROR getting identifier authorization" +msgstr "ERROR getting identifier authorization" + +msgid "Renewal failed, missing account_key." +msgstr "Renewal failed, missing account_key." + +msgid "CSRF calibration failed, please login again" +msgstr "CSRF calibration failed, please login again" + +msgid "Please enter an account name" +msgstr "Please enter an account name" + +msgid "Certificate acquisition failed, please try again later." +msgstr "Certificate acquisition failed, please try again later." + +msgid "If you want to use the worker process, how many worker processes allowed to fork at most" +msgstr "If you want to use the worker process, how many worker processes allowed to fork at most" + +msgid "Customized edition with aaPanel" +msgstr "Customized edition with aaPanel" + +msgid "The mailbox does not exist, please add it to the mailbox list" +msgstr "The mailbox does not exist, please add it to the mailbox list" + +msgid "|-Renew the visa certificate and start checking the environment" +msgstr "|-Renew the visa certificate and start checking the environment" + +msgid "Pls enter new panel port: " +msgstr "Pls enter new panel port: " + +msgid "|-Successful application, deploying to site.." +msgstr "|-Successful application, deploying to site.." + +msgid "|-Attempt to verify DNS records locally, domain name: {}, type: {} record value: {}" +msgstr "|-Attempt to verify DNS records locally, domain name: {}, type: {} record value: {}" + +msgid "Installation failed" +msgstr "Installation failed" + +msgid "Sent domain format ERROR {}" +msgstr "Sent domain format ERROR {}" + +msgid "Database does NOT exist!" +msgstr "Database does NOT exist!" + +msgid "Successfully started" +msgstr "Successfully started" + +msgid "Stop panel" +msgstr "Stop panel" + +msgid "|-Registering account..." +msgstr "|-Registering account..." + +msgid "The DNS verification failed. Please check if the key is correct." +msgstr "The DNS verification failed. Please check if the key is correct." + +msgid "Delete [ {} ] proxy successfully" +msgstr "Delete [ {} ] proxy successfully" + +msgid "This plugin does NOT have extend function!" +msgstr "This plugin does NOT have extend function!" + +msgid "Domain name {} is currently required to verify the CAA record, please parse the CAA record manually, or retry the application after 1 hour!" +msgstr "Domain name {} is currently required to verify the CAA record, please parse the CAA record manually, or retry the application after 1 hour!" + +msgid "Successfully deleted site [{}]!" +msgstr "Successfully deleted site [{}]!" + +msgid "Too many requests for this domain name. Please try again 3 hours later" +msgstr "Too many requests for this domain name. Please try again 3 hours later" + +msgid "Verification code is expired, click to refresh!" +msgstr "Verification code is expired, click to refresh!" + +msgid "Exploitable vulnerabilities" +msgstr "Exploitable vulnerabilities" + +msgid "Current version is developer version and already latest. Update cycle of stable version is generally 2 months,while developer version will update every Wednesday!" +msgstr "Current version is developer version and already latest. Update cycle of stable version is generally 2 months,while developer version will update every Wednesday!" + +msgid "20 consecutive verification failures, prohibited for 1 hour" +msgstr "20 consecutive verification failures, prohibited for 1 hour" + +msgid "|-Clearing PHP Session ..." +msgstr "|-Clearing PHP Session ..." + +msgid "Get failed, there is currently no result!" +msgstr "Get failed, there is currently no result!" + +msgid "|-Local authentication succeeded!" +msgstr "|-Local authentication succeeded!" + +msgid "The specified soft link file name must contain the full path (full path)" +msgstr "The specified soft link file name must contain the full path (full path)" + +msgid "The specified soft link file name already exists" +msgstr "" + +msgid "RAR component does not support aarch 64 platform" +msgstr "RAR component does not support aarch 64 platform" + +msgid "|-Attempt to verify file contents via HTTP [{}]..." +msgstr "|-Attempt to verify file contents via HTTP [{}]..." + +msgid "Need at least a domain name!" +msgstr "Need at least a domain name!" + +msgid "The file does not have backup permissions" +msgstr "The file does not have backup permissions" + +msgid "Current DNS is available" +msgstr "Current DNS is available" + +msgid "Site backed up to: {}" +msgstr "Site backed up to: {}" + +msgid "{}, the target URL is the same as the redirected path" +msgstr "{}, the target URL is the same as the redirected path" + +msgid "Running" +msgstr "Running" + +msgid "Successfully copied file!" +msgstr "Successfully copied file!" + +msgid "Failed,cannot delete current port of the panel!" +msgstr "Failed,cannot delete current port of the panel!" + +msgid "Installer" +msgstr "Installer" + +msgid "Increasing work_mem helps increase the speed of sorting, usually set to 2% -4% of real RAM." +msgstr "Increasing work_mem helps increase the speed of sorting, usually set to 2% -4% of real RAM." + +msgid "Please fill in the email title!" +msgstr "Please fill in the email title!" + +msgid "Secret Key ERROR, failed to add resolution" +msgstr "Secret Key ERROR, failed to add resolution" + +msgid "Default category" +msgstr "Default category" + +msgid "Site Traffic Control has been turned off!" +msgstr "Site Traffic Control has been turned off!" + +msgid "|-Downloading certificate.." +msgstr "|-Downloading certificate.." + +msgid "Compress the file" +msgstr "Compress the file" + +msgid "Username" +msgstr "Username" + +msgid "Warning list does NOT exist!" +msgstr "Warning list does NOT exist!" + +msgid "Successfully changed PHP Version of site [{}] to PHP-{}" +msgstr "Successfully changed PHP Version of site [{}] to PHP-{}" + +msgid "Default Document Format is invalid, e.g., index.html" +msgstr "Default Document Format is invalid, e.g., index.html" + +msgid "It is not recommended to use \".\" at the end of the file because there may be security risks" +msgstr "It is not recommended to use \".\" at the end of the file because there may be security risks" + +msgid "The available Inode of the target partition is less than {}, and the backup cannot be completed. Please increase the disk capacity or change the default backup directory on the settings page!" +msgstr "The available Inode of the target partition is less than {}, and the backup cannot be completed. Please increase the disk capacity or change the default backup directory on the settings page!" + +msgid "Version : " +msgstr "Version : " + +msgid "Task cancelled!" +msgstr "Task cancelled!" + +msgid "|-The domain name skipped this time: {}, because the last renewal failed, you still need to wait {} hours and try again" +msgstr "|-The domain name skipped this time: {}, because the last renewal failed, you still need to wait {} hours and try again" + +msgid "Sorry, [{}] command is NOT supported!" +msgstr "Sorry, [{}] command is NOT supported!" + +msgid "|-Setting up auto-renewal configuration.." +msgstr "|-Setting up auto-renewal configuration.." + +msgid "Base directory turned on!" +msgstr "Base directory turned on!" + +msgid "TXT record verification failed" +msgstr "TXT record verification failed" + +msgid "Gateway address is invalid" +msgstr "Gateway address is invalid" + +msgid "|-No SSL certificate found within 30 days!" +msgstr "|-No SSL certificate found within 30 days!" + +msgid "High risk" +msgstr "High risk" + +msgid "The content to replace cannot be the same as the content to be replaced" +msgstr "The content to replace cannot be the same as the content to be replaced" + +msgid "Scan directory" +msgstr "Scan directory" + +msgid "Site [{}] turned on SSL successfully!" +msgstr "Site [{}] turned on SSL successfully!" + +msgid "Database exists!" +msgstr "Database exists!" + +msgid "PHP load status acquisition failed: {}" +msgstr "PHP load status acquisition failed: {}" + +msgid "Successfully changed password" +msgstr "Successfully changed password" + +msgid "Cannot use same port as Panel!" +msgstr "Cannot use same port as Panel!" + +msgid "Failed to open file, file may be occupied by other processes!" +msgstr "Failed to open file, file may be occupied by other processes!" + +msgid "The specify rule name is already exists! [ {} ]" +msgstr "The specify rule name is already exists! [ {} ]" + +msgid "The email address already exists" +msgstr "The email address already exists" + +msgid "Second" +msgstr "Second" + +msgid "This port number cannot be used and the modification failed" +msgstr "This port number cannot be used and the modification failed" + +msgid "Query error, {}" +msgstr "Query error, {}" + +msgid "Wrong copy logic, from {} copy to {} has an inclusive relationship, there is an infinite loop copy risk!" +msgstr "" + +msgid "Do not count files or directories larger than 100MB" +msgstr "" + +msgid "Failed,cannot delete current port of the panel" +msgstr "" + +msgid "Please install the Pure-FTPd service in the software store first." +msgstr "" + +msgid "An error occurred while requesting a certificate using dns" +msgstr "" + +msgid "Only supports [{}] system" +msgstr "" + +msgid "Authentication timed out, please press enter to try again!{}" +msgstr "" + +msgid "{} system firewall!" +msgstr "" + +msgid "The system firewall is not open" +msgstr "" + +msgid "The target URL cannot be [http:// or https://], please fill in the full URL, such as: https://aapanel.com" +msgstr "" + +msgid "Please turn on the hotlink first!" +msgstr "" + +msgid "The specified server already exists: [{}:{}]" +msgstr "" + +msgid "Add remote MySQL server [{}:{}]" +msgstr "" + +msgid "Add failed: {}" +msgstr "" + +msgid "Failed to delete: {}" +msgstr "" + +msgid "Delete the remote MySQL server [{}:{}]" +msgstr "" + +msgid "The specified server dose not exists!" +msgstr "" + +msgid "Edit remote MySQL server [{}:{}]" +msgstr "" + +msgid "Fail to edit: {}" +msgstr "" + +msgid "A database with the same name already exists: [{}]" +msgstr "" + +msgid "Add remote MySQL database [{}] successfully" +msgstr "" + +msgid "The specified database does not exist!" +msgstr "" + +msgid "Wrong user name or password!" +msgstr "" + +msgid "No access rights, or the database does not exist!" +msgstr "" + +msgid "Database table does not exist!" +msgstr "" + +msgid "Change the password of the remote MySQL server" +msgstr "" + +msgid "Cannot change the root password of the remote database" +msgstr "" + +msgid "Unsupported database type" +msgstr "" + +msgid "Has {} HTTPS strict mode" +msgstr "" + +msgid "WebSite manager" +msgstr "" + +msgid "This function only supports Nginx/Apache" +msgstr "" + +msgid "Incorrect format of verification code" +msgstr "" + +msgid "Plugin does not exist" +msgstr "" + +msgid "The specified template does not exist!" +msgstr "" + +msgid "Bad return type [{}]" +msgstr "" + +msgid "Password can not be blank!" +msgstr "" + +msgid "The passwords entered twice do not match, please re-enter!" +msgstr "" + +msgid "Delete failed, failed to connect to database!" +msgstr "" + +msgid "|-Renewing additional certificate {}, domain name: " +msgstr "" + +msgid "This feature currently only supports Nginx" +msgstr "" + +msgid "Download successfully" +msgstr "" + +msgid "MD5 consistent!" +msgstr "" + +msgid "Generated password detection failed!" +msgstr "" + +msgid "Get failed wordpress user failed!" +msgstr "" + +msgid "Password reset successful" +msgstr "" + +msgid "Cleaned up successfully!" +msgstr "" + +msgid "Please check if the [{}] format is correct For example: {}" +msgstr "" + +msgid "Deployment was successful!" +msgstr "" + +msgid "Deployment failed!" +msgstr "" + +msgid "PHP FPM Optimization failed: {}" +msgstr "" + +msgid "PHP FPM optimization succeeded" +msgstr "" + +msgid "Mysql optimization failed {}" +msgstr "" + +msgid "Mysql optimization succeeded" +msgstr "" + +msgid "Nginx FastCgi cache configuration already exists" +msgstr "" + +msgid "Nginx FastCgi configuration error!" +msgstr "" + +msgid "Nginx FastCgi cache configuration complete" +msgstr "" + +msgid "FastCgi configuration does not exist in website configuration" +msgstr "" + +msgid "The FastCgi configuration already exists in the website configuration" +msgstr "" + +msgid "Website FastCgi configuration error!" +msgstr "" + +msgid "Website FastCgi configuration complete" +msgstr "" + +msgid "Wordpress configuration file does not exist: {}" +msgstr "" + +msgid "Anti-cross-site configuration file does not exist: {}" +msgstr "" + +msgid "The timeout time needs to be between 300-86400" +msgstr "" + +msgid "Cannot use system critical directory as default backup directory" +msgstr "" + +msgid "Cannot use system critical directory as default site directory" +msgstr "" + +msgid "Username cannot contain spaces" +msgstr "" + +msgid "Please install Mysql and PHP first!" +msgstr "" + +msgid "[{}] domain names added successfully, [{}] failed!" +msgstr "" + +msgid "All tasks have been processed!" +msgstr "" + +msgid "Ignore success, this version will no longer be reminded to update." +msgstr "" + +msgid "Timeout must be an integer!" +msgstr "" + +msgid "BasicAuth authentication username and password cannot be empty!" +msgstr "" + +msgid "Link file name is illegal!" +msgstr "" + +msgid "Incompatible PHP version, an attempt has been made to automatically switch to a compatible PHP version, please refresh the page and try again!" +msgstr "" + +msgid "The specified domain name has been bound by the website [{}]" +msgstr "" + +msgid "The specified domain name has been bound by a subdirectory of the website [{}]!" +msgstr "" + +msgid "Default index file cannot be empty" +msgstr "" + +msgid "The password fomart is wrong, please do not use special symbols for the first two digits!" +msgstr "" + +msgid "Please enter password!" +msgstr "" + +msgid "Password cannot be less than 3 characters" +msgstr "" + +msgid "Password cannot contain spaces" +msgstr "" + +msgid "Please enter username!" +msgstr "" + +msgid "Please enter a name!" +msgstr "" + +msgid "Name cannot be less than 3 characters" +msgstr "" + +msgid "Name cannot contain spaces" +msgstr "" + +msgid "Name format must be [ aaa_bbb ]" +msgstr "" + +msgid "The database of this wordpress was not found, this may be caused by the fact that you have manually deleted the database" +msgstr "" + +msgid "Site ID must be numeric" +msgstr "" + +msgid "This database was not found!" +msgstr "" + +msgid "Reverse proxies are not currently available for Wordpress sites that use one-click deployment" +msgstr "" + +msgid "wrong field name" +msgstr "" + +msgid "Database password cannot be empty or have special characters!" +msgstr "" + +msgid "Database type sid needs int type!" +msgstr "" + +msgid "Mongodb service has not been started yet!" +msgstr "" + +msgid "Database name cannot be empty!" +msgstr "" + +msgid "The specified database does not exist." +msgstr "" + +msgid "Lack of backup tools, please install MongoDB through [APP Store] first!" +msgstr "" + +msgid "Password authentication has been enabled. The password cannot be empty when the database is backed up. Please set a password and try again!" +msgstr "" + +msgid "Database backup failed, file does not exist" +msgstr "" + +msgid "The backup is executed successfully, the backup file is less than 1b, please check the backup integrity." +msgstr "" + +msgid "The database type SID requires an INT!" +msgstr "" + +msgid "The Mongodb service is not enabled!" +msgstr "" + +msgid "The database password cannot be empty or contain special characters" +msgstr "" + +msgid "Database password cannot be Chinese, please change the name!" +msgstr "" + +msgid "The modification failed because the specified database does not exist." +msgstr "" + +msgid "Password access is not enabled for the database." +msgstr "" + +msgid "The database name cannot contain special characters" +msgstr "" + +msgid "The database password is empty. Set the password first." +msgstr "" + +msgid "Lack of backup tools, please first through the software store PGSQL manager!" +msgstr "" + +msgid "The backup file size is smaller than 2Kb. Check the backup integrity." +msgstr "" + +msgid "Lack of recovery tool, please use software management to install PGSQL!" +msgstr "" + +msgid "Description Succeeded in importing database [{}]" +msgstr "" + +msgid "The database password cannot be empty." +msgstr "" + +msgid "If PgSQL is not installed or started, install or start it first" +msgstr "" + +msgid "The password must not be less than 8 digits." +msgstr "" + +msgid "{}File does not exist, please check the installation is complete!" +msgstr "" + +msgid "The administrator password is successfully changed. Procedure" +msgstr "" + +msgid "Connecting to remote PGSQL fails. Perform the following operations to rectify the fault:
                          1、The database port is correct and the firewall allows access
                          2、Check whether the database account password is correct
                          3、pg_hba.confWhether to add a client release record
                          4、postgresql.conf Add listen_addresses to the correct server IP address." +msgstr "" + +msgid "Parameter passing error." +msgstr "" + +msgid "Operation is successful" +msgstr "" + +msgid "Restore failure" +msgstr "" + +msgid "SQLServer databases cannot start with numbers!" +msgstr "" + +msgid "SQLServer password complexity policy does not match, should be 8-128 characters, and contain any 3 of them in upper case, lower case, digits, special symbols!" +msgstr "" + +msgid "Operation failed. Remote database cannot be backed up." +msgstr "" + +msgid "The import failed because the file is not a valid ZIP file" +msgstr "" + +msgid "The password of database [' + username + '] cannot be empty" +msgstr "" + +msgid "The SQL Server is not installed or started. Install or start it first" +msgstr "" + +msgid "The password of database [' + password + '] cannot be empty." +msgstr "" + +msgid "The password cannot be empty or have special symbols" +msgstr "" + +msgid "The password of sa is changed successfully." +msgstr "" diff --git a/BTPanel/templates/default/autherr.html b/BTPanel/templates/default/autherr.html index 60a72ee0..2cdc7789 100644 --- a/BTPanel/templates/default/autherr.html +++ b/BTPanel/templates/default/autherr.html @@ -1,10 +1,168 @@ - + + - - Ingress verification failed + + + Ingress verification failed + + -

                          Please use the correct Ingress

                          +
                          + +
                          Safety entrance error, please enter the correct security entrance
                          +
                          +
                          +
                            +
                          • The safe entrance can effectively protect the panels from risks such as malicious scanning and brute.
                          • +
                          • Please fill in the correct security entrance at the end of the URL in the input box, and then click the "Click to Jump" button
                          • +
                          • If you forget the safe entrance, log in to SSH and execute the command bt default, View the correct panel login information
                          • +
                          +
                          +
                          + + \ No newline at end of file diff --git a/BTPanel/templates/default/config.html b/BTPanel/templates/default/config.html index 9e780d31..72435e79 100644 --- a/BTPanel/templates/default/config.html +++ b/BTPanel/templates/default/config.html @@ -2,250 +2,230 @@ {% block content %}
                          -
                          -
                          -
                          -
                          {{data['lan']['GLOBAL']}}
                          -
                          {{data['lan']['H2']}}
                          -
                          {{data['lan']['SECURITY']}}
                          -
                          {{data['lan']['NOTIFY']}}
                          -
                          -
                          -
                          - -
                          -
                          {{data['lan']['H2']}}
                          -
                          - -
                          -
                          {{data['lan']['I1']}}
                          -
                          -
                          -
                          - - -
                          -
                          -
                          {{data['lan']['CLOSE_PANEL']}}
                          -
                          -
                          - -
                          -
                          IPv6
                          -
                          -
                          -
                          - - -
                          -
                          -
                          {{data['lan']['ALLOW_IPV6']}}
                          -
                          -
                          - -
                          -
                          {{data['lan']['OFFLINE_MODE']}}
                          -
                          -
                          -
                          - - -
                          -
                          -
                          -
                          {{data['lan']['OFFLINE']}} -
                          -
                          - -
                          -
                          {{data['lan']['DEV_MODE']}}
                          -
                          -
                          -
                          - - -
                          -
                          -
                          {{data['lan']['DEV_MODE_DESC']}}
                          -
                          -
                          - -
                          -
                          API
                          -
                          -
                          -
                          - - -
                          - -
                          -
                          {{data['lan']['API_DESC']}},{{data['lan']['HELP']}}
                          -
                          -
                          - -
                          -
                          {{data['lan']['CT1']}}
                          -
                          - -
                          - -
                          {{data['lan']['CY1']}}
                          -
                          - -
                          -
                          Timeout
                          -
                          - -
                          - -
                          {{data['lan']['CY13']}} 0 {{data['lan']['CY14']}} -
                          -
                          - -
                          -
                          {{data['lan']['CT5']}}
                          -
                          - -
                          -
                          - -
                          {{data['lan']['CY5']}}
                          -
                          - -
                          -
                          {{data['lan']['CT6']}}
                          -
                          - -
                          -
                          - -
                          {{data['lan']['CY6']}}
                          -
                          - -
                          -
                          {{data['lan']['CT7']}}
                          -
                          - -
                          - -
                          {{data['lan']['CY7']}}
                          -
                          - -
                          -
                          {{data['lan']['CT8']}}
                          -
                          - -
                          -
                          - -
                          -
                          {{data['lan']['CT9']}}
                          -
                          - -
                          - -
                           
                          -
                          - -
                          -
                          {{data['lan']['CT10']}}
                          -
                          - -
                          - -
                           
                          -
                          - -
                          -
                          {{data['lan']['BIND_ACCOUNT']}}
                          -
                          - -
                          - - -
                           
                          -
                          - -
                          -
                          {{data['lan']['HIDE_MENU_BAR']}}
                          -
                          - -
                          - -
                          {{data['lan']['HIDE_MENU_BAR_DESC']}}
                          -
                          -
                          -
                          - -
                          -
                          {{data['lan']['SECURITY']}}
                          -
                          - -
                          -
                          {{data['lan']['I3']}}
                          -
                          -
                          -
                          - - -
                          - -
                          -
                          {{data['lan']['SET_SSL']}},{{data['lan']['HELP']}}
                          -
                          -
                          - -
                          -
                          BasicAuth
                          -
                          -
                          -
                          - - -
                          -
                          -
                          -
                          {{data['lan']['BASEAUTH_DESC']}},{{data['lan']['HELP']}}
                          -
                          - -
                          -
                          Google authentication
                          -
                          -
                          -
                          - - -
                          - -
                          -
                          {{data['lan']['GOOGLE_AUTH_DESC']}},{{data['lan']['HELP']}}
                          -
                          -
                          - - +
                          +
                          {{data['lan']['H2']}}
                          +
                          + +
                          +
                          {{data['lan']['I1']}}
                          +
                          +
                          +
                          + + +
                          +
                          +
                          {{data['lan']['CLOSE_PANEL']}}
                          +
                          +
                          + +
                          +
                          IPv6
                          +
                          +
                          +
                          + + +
                          +
                          +
                          {{data['lan']['ALLOW_IPV6']}}
                          +
                          +
                          + +
                          +
                          {{data['lan']['OFFLINE_MODE']}}
                          +
                          +
                          +
                          + + +
                          +
                          +
                          +
                          {{data['lan']['OFFLINE']}}
                          +
                          + +
                          +
                          {{data['lan']['DEV_MODE']}}
                          +
                          +
                          +
                          + + +
                          +
                          +
                          {{data['lan']['DEV_MODE_DESC']}}
                          +
                          +
                          + +
                          +
                          API
                          +
                          +
                          +
                          + + +
                          + +
                          +
                          {{data['lan']['API_DESC']}},{{data['lan']['HELP']}}
                          +
                          +
                          + +
                          +
                          {{data['lan']['CT1']}}
                          +
                          + +
                          + +
                          {{data['lan']['CY1']}}
                          +
                          + +
                          +
                          Timeout
                          +
                          + +
                          + +
                          {{data['lan']['CY13']}} 0 {{data['lan']['CY14']}}
                          +
                          + +
                          +
                          {{data['lan']['CT5']}}
                          +
                          + +
                          +
                          + +
                          {{data['lan']['CY5']}}
                          +
                          + +
                          +
                          {{data['lan']['CT6']}}
                          +
                          + +
                          +
                          + +
                          {{data['lan']['CY6']}}
                          +
                          + +
                          +
                          {{data['lan']['CT7']}}
                          +
                          + +
                          + +
                          {{data['lan']['CY7']}}
                          +
                          + +
                          +
                          {{data['lan']['CT8']}}
                          +
                          + +
                          +
                          + +
                          +
                          {{data['lan']['CT9']}}
                          +
                          + +
                          + +
                           
                          +
                          + +
                          +
                          {{data['lan']['CT10']}}
                          +
                          + +
                          + +
                           
                          +
                          + +
                          +
                          {{data['lan']['BIND_ACCOUNT']}}
                          +
                          + +
                          + + +
                           
                          +
                          + +
                          +
                          {{data['lan']['HIDE_MENU_BAR']}}
                          +
                          + +
                          + +
                          {{data['lan']['HIDE_MENU_BAR_DESC']}}
                          +
                          +
                          +
                          + +
                          +
                          {{data['lan']['SECURITY']}}
                          +
                          +
                          + +
                          +
                          {{data['lan']['I3']}}
                          +
                          +
                          +
                          + + +
                          + +
                          +
                          {{data['lan']['SET_SSL']}},{{data['lan']['HELP']}}
                          +
                          +
                          + +
                          +
                          BasicAuth
                          +
                          +
                          +
                          + + +
                          +
                          +
                          +
                          {{data['lan']['BASEAUTH_DESC']}},{{data['lan']['HELP']}}
                          +
                          + +
                          +
                          Google authentication
                          +
                          +
                          +
                          + + +
                          + +
                          +
                          + {{data['lan']['GOOGLE_AUTH_DESC']}},{{data['lan']['HELP']}} +
                          +
                          +
                          + + - -
                          -
                          {{data['lan']['STRONG_PASSWORD']}}
                          -
                          -
                          -
                          - - -
                          -
                          -
                          {{data['lan']['STRONG_PASS_DESC']}}{{data['lan']['STRONG_PASS_DESC1']}} -
                          -
                          -
                          - -
                          -
                          {{data['lan']['CT3']}}
                          -
                          - -
                          - -
                          {{data['lan']['CY3']}},{{data['lan']['CY31']}}
                          -
                          - -
                          -
                          {{data['lan']['CT4']}}
                          -
                          - -
                          - -
                          {{data['lan']['CY4']}}{{data['lan']['CY41']}} -
                          -
                          - -
                          -
                          {{data['lan']['CT2']}}
                          -
                          - -
                          - -
                          {{data['lan']['CY2']}}, {{data['lan']['S_PORT_TIPS']}} -
                          -
                          - -
                          -
                          Security Entrance
                          -
                          - -
                          - -
                          Panel Admin entrance. After setting, you can ONLY log in to the panel - through the specified Security Entrance, e.g. /www_bt_cn -
                          -
                          - -
                          -
                          {{data['lan']['NOT_LOGGED_IN_RESPONSE']}}
                          -
                          - -
                          - -
                          {{data['lan']['NOT_LOGGED_IN_RESPONSE_DESC']}}
                          -
                          - -
                          -
                          {{data['lan']['PASSWORD_EXPIRE']}}
                          -
                          - - -
                          -
                          {{data['lan']['PASSWORD_EXPIRE_DESC']}}
                          -
                          - -
                          -
                          {{data['lan']['TEMP_ACCESS']}}
                          -
                          - -
                          -
                          {{data['lan']['TEMP_ACCESS_DESC']}}
                          -
                          -
                          -
                          - -
                          -
                          {{data['lan']['NOTIFY']}}
                          -
                          - -
                          -
                          {{data['lan']['NOTIFY']}}
                          -
                          - - -
                          -
                          {{data['lan']['NOTIFY_DESC']}}
                          -
                          - -
                          -
                          {{data['lan']['LOGIN_ALARM']}}
                          -
                          - - -
                          -
                          {{data['lan']['LOGIN_ALARM_DESC']}}
                          -
                          -
                          -
                          -
                          -
                          - - {% endblock %} - {% block scripts %} - - - - - - - {% endblock %} \ No newline at end of file + .bt-w-con { + margin-left: 110px; + } + + /*消息推送模块*/ + .layui-layer.layui-layer-page.panel_push_form .bt-form .form-checkbox-label { + height: 18px; + line-height: 18px; + } + .layui-layer.layui-layer-page.panel_push_form .bt-form .inlineBlock.group span.unit { + line-height: 28px; + } + + /*消息推送模块 end*/ + #panel_menu_tab .bterror { + text-decoration: underline; + } + .line-row-tips i, + .line-title i { + display: inline-flex; + line-height: 1.4; + background-color: yellow; + font-style: normal; + } + + .show-default { + position: relative; + top: -3px; + display: inline-block; + width: 4px; + height: 4px; + margin-left: 6px; + background-color: #cbcbcb; + border-radius: 50%; + } + + /* 配置模块图标 */ + .config-alert-icon { + width: 36px; + height: 36px; + display: inline-block; + background: url(../../static/img/config_alert.png); + background-size: 100%; + border-radius: 7px; + margin-right: 8px; + } + .alert-icon-mail { + background-position: 0 36px; + } + .alert-icon-feishu { + background-position: 0 144px; + } + .alert-icon-weixin { + background-position: 0 72px; + } + .alert-icon-tg { + background-position: 0 180px; + } + .alert-icon-wx_account { + background-position: 0 108px; + } + + .alert-config-content { + display: inline-block; + vertical-align: top; + } + .alert-config-content span { + font-weight: bold; + font-size: 14px; + } + .alert-config-content p { + font-size: 12px; + } + + /* 添加告警任务 */ + .panel_alert_task_view .bt_select_updown .bt_select_list { + max-height: 140px; + } + + #addAlertTask .line .tname { + height: 35px; + line-height: 35px; + font-size: 13px; + } + #addAlertTask .bt_select_updown { + height: 35px; + line-height: 35px; + } + #addAlertTask .info-r .bt-input-text { + height: 35px; + line-height: 35px; + } + #addAlertTask .bt_select_updown .bt_select_value { + height: 33px; + line-height: 33px; + } + #addAlertTask .bt_select_updown .bt_select_list .item { + height: 30px; + line-height: 30px; + } + #addAlertTask .bt_select_updown .bt_select_content { + font-size: 13px; + } + #addAlertTask .btn { + font-size: 13px; + padding: 7px 30px; + } + #addAlertTask .line .info-r { + margin-bottom: 15px; + } + .alert-view-box .bt_select_updown .bt_select_list { + top: 35px; + } + /* 添加告警任务 end*/ + + {% endblock %} + {% block scripts %} + + + + + + + + + {% endblock %} +
                          \ No newline at end of file diff --git a/BTPanel/templates/default/control.html b/BTPanel/templates/default/control.html index f76cd980..c89dc210 100644 --- a/BTPanel/templates/default/control.html +++ b/BTPanel/templates/default/control.html @@ -1,148 +1,488 @@ {% extends "layout.html" %} - {% block content %} -
                          -
                          -
                          -
                          - {{data['lan']['H1']}}/{{data['lan']['H2']}} -
                          -
                          -
                          -
                          -
                          - {{data['lan']['C1']}} -
                          -
                          -
                          -
                          -
                          -
                          - {{data['lan']['C2']}} - -
                          -
                          - -
                          -
                          -
                          - -
                          -
                          -
                          -
                          -
                          -
                          -
                          -

                          {{data['lan']['LOAD_BALANCE']}}

                          -
                          - {{data['lan']['S1']}}{{data['lan']['D1']}}{{data['lan']['D2']}}{{data['lan']['D3']}}{{data['lan']['D4']}} -
                          - {{data['lan']['S2']}} -
                          - {{data['lan']['G1']}} - {{data['lan']['G2']}} -
                          {{data['lan']['G3']}}
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -

                          {{data['lan']['T1']}}

                          -
                          - {{data['lan']['S1']}}{{data['lan']['D1']}}{{data['lan']['D2']}}{{data['lan']['D3']}}{{data['lan']['D4']}} -
                          - {{data['lan']['S2']}} -
                          - {{data['lan']['G1']}} - {{data['lan']['G2']}} -
                          {{data['lan']['G3']}}
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -

                          {{data['lan']['T2']}}

                          -
                          - {{data['lan']['S1']}}{{data['lan']['D1']}}{{data['lan']['D2']}}{{data['lan']['D3']}}{{data['lan']['D4']}} -
                          - {{data['lan']['S2']}} -
                          - {{data['lan']['G1']}} - {{data['lan']['G2']}} -
                          {{data['lan']['G3']}}
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -

                          {{data['lan']['T3']}}

                          -
                          - {{data['lan']['S1']}}{{data['lan']['D1']}}{{data['lan']['D2']}}{{data['lan']['D3']}}{{data['lan']['D4']}} -
                          - {{data['lan']['S2']}} -
                          - {{data['lan']['G1']}} - {{data['lan']['G2']}} -
                          {{data['lan']['G3']}}
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -

                          {{data['lan']['T4']}}

                          -
                          - {{data['lan']['S1']}}{{data['lan']['D1']}}{{data['lan']['D2']}}{{data['lan']['D3']}}{{data['lan']['D4']}} -
                          - {{data['lan']['S2']}} -
                          - {{data['lan']['G1']}} - {{data['lan']['G2']}} -
                          {{data['lan']['G3']}}
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          + +
                          +
                          +
                          +
                          +
                          {{data['lan']['H2']}}
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          + {{data['lan']['C1']}} +
                          +
                          +
                          +
                          +
                          + {{data['lan']['C2']}} + +
                          +
                          + +
                          +
                          +
                          + +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +

                          {{data['lan']['LOAD_BALANCE']}}

                          +
                          + {{data['lan']['S1']}}{{data['lan']['D1']}}{{data['lan']['D2']}} + {{data['lan']['D3']}}{{data['lan']['D4']}} +
                          + {{data['lan']['S2']}} +
                          + {{data['lan']['G1']}} + {{data['lan']['G2']}} +
                          {{data['lan']['G3']}}
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +

                          {{data['lan']['T1']}}

                          +
                          + {{data['lan']['S1']}}{{data['lan']['D1']}}{{data['lan']['D2']}} + {{data['lan']['D3']}}{{data['lan']['D4']}} +
                          + {{data['lan']['S2']}} +
                          + {{data['lan']['G1']}} + {{data['lan']['G2']}} +
                          {{data['lan']['G3']}}
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +

                          {{data['lan']['T2']}}

                          +
                          + {{data['lan']['S1']}}{{data['lan']['D1']}}{{data['lan']['D2']}} + {{data['lan']['D3']}}{{data['lan']['D4']}} +
                          + {{data['lan']['S2']}} +
                          + {{data['lan']['G1']}} + {{data['lan']['G2']}} +
                          {{data['lan']['G3']}}
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +

                          {{data['lan']['T3']}}

                          +
                          + {{data['lan']['S1']}}{{data['lan']['D1']}}{{data['lan']['D2']}} + {{data['lan']['D3']}}{{data['lan']['D4']}} +
                          + {{data['lan']['S2']}} +
                          + {{data['lan']['G1']}} + {{data['lan']['G2']}} +
                          {{data['lan']['G3']}}
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          + {{data['lan']['UNIT']}} +
                          +
                          + +
                          +
                            +
                          • KB/s
                          • +
                          • MB/s
                          • +
                          • GB/s
                          • +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +

                          + {{data['lan']['T4']}}: + +

                          +
                          + {{data['lan']['S1']}} + {{data['lan']['D1']}} + {{data['lan']['D2']}} + {{data['lan']['D3']}} + {{data['lan']['D4']}} +
                          + {{data['lan']['S2']}} +
                          + {{data['lan']['G1']}} + {{data['lan']['G2']}} +
                          {{data['lan']['G3']}}
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          + {{data['lan']['UNIT']}} +
                          +
                          + +
                          +
                            +
                          • KB/s
                          • +
                          • MB/s
                          • +
                          • GB/s
                          • +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          {% endblock %} {% block scripts %} - {{ super() }} - - +{{ super() }} + + + {% endblock %} diff --git a/BTPanel/templates/default/crontab.html b/BTPanel/templates/default/crontab.html index dc3fbb70..c31c8243 100644 --- a/BTPanel/templates/default/crontab.html +++ b/BTPanel/templates/default/crontab.html @@ -4,201 +4,43 @@
                          -
                          - {{data['lan']['H1']}}/{{data['lan']['H2']}} -
                          +
                          +
                          {{data['lan']['H2']}}
                          +
                          -
                          +

                          {{data['lan']['H3']}}

                          -
                          -
                          - {{data['lan']['T1']}} - - *{{data['lan']['PS']}} -
                          -
                          - {{data['lan']['T2']}} -
                          -
                          -
                          - {{data['lan']['T3']}} - -
                          - -
                          {{data['lan']['TZS1']}}
                          -
                          {{data['lan']['TZS2']}}
                          -
                          -
                          -
                          - {{data['lan']['T4']}} -
                          -
                          -
                          -
                          {{data['lan']['T5']}}
                          -
                          -
                            -
                          • {{data['lan']['PS1']}}
                          • -
                          • {{data['lan']['PS2']}}
                          • -
                          • {{data['lan']['PS3']}}
                          • -
                          -
                          - +
                          -
                          + +

                          {{data['lan']['H4']}}

                          - - - -
                          -
                          - - - - - - - - - - - - - - - -
                          {{data['lan']['TH1']}}{{data['lan']['TH6']}}{{data['lan']['TH2']}}{{data['lan']['TH3']}}{{data['lan']['TH7']}}{{data['lan']['TH8']}}Last execution time{{data['lan']['TH5']}}
                          +
                          -
                          {% endblock %} - {% block scripts %} -{{ super() }} - - + {{ super() }} + + {% endblock %} diff --git a/BTPanel/templates/default/database.html b/BTPanel/templates/default/database.html index 7c7475ac..f13f9e5d 100644 --- a/BTPanel/templates/default/database.html +++ b/BTPanel/templates/default/database.html @@ -1,53 +1,260 @@ -{% extends "layout.html" %} +{% extends "layout.html" %} {% block content %} +
                          -
                          -
                          -
                          -
                          {{data['lan']['H2']}}
                          -
                          -
                          -
                          -
                          -

                          - After adding the database, be sure to [Cron] page adds scheduled backup tasks to ensure your data security. -

                          -
                          -
                          -
                          - -
                          +
                          +
                          +
                          +
                          {{ data['lan']['H3'] }}
                          +
                          {{ data['lan']['H4'] }}
                          +
                          {{ data['lan']['H5'] }}
                          +
                          {{ data['lan']['H6'] }}
                          +
                          {{ data['lan']['H7'] }}
                          +
                          +
                          +
                          +
                          +
                          +
                          +

                          + + After adding the database, be sure to + [Cron] + page adds scheduled backup tasks to ensure your data security. +

                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          + + + + +
                          +
                          + + + All current action items are associated with + +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          + +
                          -{% endblock %} - -{% block scripts %} -{{ super() }} +{% endblock %} {% block scripts %} {{ super() }} - -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/BTPanel/templates/default/docker.html b/BTPanel/templates/default/docker.html new file mode 100644 index 00000000..aebd1841 --- /dev/null +++ b/BTPanel/templates/default/docker.html @@ -0,0 +1,427 @@ +{% extends "layout.html" %} + +{% block content %} +
                          +
                          +
                          +
                          + +
                          Container
                          +
                          Compose
                          +
                          Compose template
                          +
                          Image
                          + +
                          Network
                          +
                          Volume
                          +
                          Repository
                          +
                          Settings
                          +
                          +
                          +
                          +

                          [Reminder] This function is exclusive to the professional version, it is currently in the testing phase can be used by all users

                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          + +
                          +
                          + + +{% endblock %} + +{% block scripts %} +{{ super() }} + + + + + + + + +{% endblock %} \ No newline at end of file diff --git a/BTPanel/templates/default/error2.html b/BTPanel/templates/default/error2.html index 16933b20..a2d9376a 100644 --- a/BTPanel/templates/default/error2.html +++ b/BTPanel/templates/default/error2.html @@ -1,15 +1,132 @@ - - - - {0} - - -

                          {1}

                          -

                          {2}

                          -

                          {3}

                          -

                          {4}

                          -
                          -
                          {5} {6}
                          - - \ No newline at end of file + + + + + {0} + + + +
                          + +
                          The domain name access has been opened, and I cannot access it through IP, please re -enter
                          +
                          +
                          +
                            +
                          • Please replace the "Your Domain Name" in the input box to the correct binding domain name, and then click the "Click to Jump" button
                          • +
                          • If you forget the correct binding domain name, log in to SSH and execute the command bt default, View the correct panel login information
                          • +
                          • If your domain name has been abandoned, please log in to SSH and execute bt 12, Cancel the domain name binding
                          • +
                          +
                          +
                          + + + diff --git a/BTPanel/templates/default/files.html b/BTPanel/templates/default/files.html index 9ef49480..a4363fbe 100644 --- a/BTPanel/templates/default/files.html +++ b/BTPanel/templates/default/files.html @@ -1,7 +1,7 @@ {% extends "layout.html" %} {% block content %} - +
                          diff --git a/BTPanel/templates/default/firewall.html b/BTPanel/templates/default/firewall.html index c894f4fb..b31ca809 100644 --- a/BTPanel/templates/default/firewall.html +++ b/BTPanel/templates/default/firewall.html @@ -1,742 +1,846 @@ {% extends "layout.html" %} - {% block content %} -
                          -
                          -
                          -
                          - {{data['lan']['H1']}}/{{data['lan']['H2']}} -
                          -
                          -
                          -
                          -
                          -
                          - {{data['lan']['BTN1']}} -
                          - -
                          -
                          -
                          -
                          -
                          -
                          - {{data['lan']['BTN2']}} - -
                          -
                          - - -
                          -
                          -
                          -
                          - {{data['lan']['BTN4']}} -
                          - -
                          -
                          -
                          -
                          - {{data['lan']['S1']}}{{session['logsPath']}}0KB - -
                          -
                          -
                          -
                          -
                          -
                          -

                          {{data['lan']['H3']}}

                          -
                          -
                          -
                          - - - {{data['lan']['F6']}} +
                          +
                          +
                          +
                          {{ data['lan']['H1'] }}
                          +
                          {{ data['lan']['H2'] }}
                          +
                          {{ data['lan']['H3'] }}
                          +
                          {{ data['lan']['H4'] }}
                          + + +
                          +
                          +
                          +
                          +
                          +
                          +
                          {{ data['lan']['TURN1'] }}
                          +
                          +
                          + + +
                          -
                          - -
                          -
                          -
                          - -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          - -
                          -
                          -

                          {{data['lan']['H4']}}

                          - {{data['lan']['BTN5']}} - {{data['lan']['PANEL_LOG']}} -
                          -
                          -
                          -
                          - - -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          +
                          +
                          +
                          +
                          {{ data['lan']['TURN2'] }}
                          +
                          +
                          + + +
                          +
                          +
                          +
                          +
                          + {{ data['lan']['S1'] }} + {{ session['logsPath'] }} + 0 B + +
                          +
                          +
                          +
                          +
                          +
                          +
                          {{data['lan']['TURN3']}}
                          +
                          +
                          + + +
                          +
                          +
                          +
                          + +
                          +
                          +
                          +
                          +
                          +
                          {{ data['lan']['AI1'] }}
                          +
                          +
                          + + +
                          +
                          +
                          +
                          +
                          + {{ data['lan']['AI2'] }} + 0 +
                          +
                          +
                          + {{ data['lan']['AI3'] }} + 0 +
                          +
                          +
                          +
                          +
                          +
                          +
                          {{ data['lan']['SH1'] }}
                          +
                          +
                          + + +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          + {{ data['lan']['F1'] }}: 0 + {{ data['lan']['F2'] }}: 0 + {{ data['lan']['F3'] }}: 0 + {{ data['lan']['F4'] }}: 0 +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          + {{ data['lan']['S2'] }} + {{ data['lan']['S3'] }} +
                          +
                          +
                          +
                          +
                          +
                          +
                          {{ data['lan']['SS1'] }}
                          +
                          + + +
                          +
                          {{ data['lan']['SS3'] }}
                          +
                          +
                          +
                          {{ data['lan']['SS4'] }}
                          +
                          + + +
                          +
                          +
                          +
                          {{ data['lan']['SS6'] }}
                          +
                          +
                          +
                          + + +
                          +
                          +
                          {{ data['lan']['SS7'] }}
                          +
                          +
                          +
                          +
                          {{ data['lan']['SS8'] }}
                          +
                          +
                          +
                          + + +
                          +
                          + + +
                          {{ data['lan']['SS11'] }}
                          +
                          +
                          +
                          +
                          {{ data['lan']['SS12'] }}
                          +
                          + + +
                          {{ data['lan']['SS15'] }}
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          + +
                          +
                          +
                          +
                          +
                          + {{ data['lan']['AI4'] }} + {{ data['lan']['AI5'] }} + {{ data['lan']['AI6'] }} + {{ data['lan']['AI7'] }} +
                          +
                          +
                          +
                          +
                            +
                          • {{ data['lan']['AI8'] }}
                          • +
                          • {{ data['lan']['AI9'] }}
                          • +
                          • {{ data['lan']['AI10'] }}
                          • +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          + {{ data['lan']['H3'] }}{{ data['lan']['PF'] }} +
                            +
                          • {{ data['lan']['AI12'] }}
                          • +
                          • {{ data['lan']['AI13'] }}
                          • +
                          • {{ data['lan']['AI14'] }}
                          • +
                          + +
                          +
                          +
                            +
                          • {{ data['lan']['AI15'] }}
                          • +
                          • {{ data['lan']['AI16'] }}
                          • +
                          • {{ data['lan']['AI17'] }}
                          • +
                          • {{ data['lan']['AI18'] }}
                          • +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          + {{ data['lan']['SH2'] }} + {{ data['lan']['SH3'] }} + {{ data['lan']['SH4'] }} +
                          +
                          +
                          +
                          +
                            +
                          • {{ data['lan']['SH5'] }}
                          • +
                          • {{ data['lan']['SH6'] }}
                          • +
                          • {{ data['lan']['SH7'] }}
                          • +
                          • {{ data['lan']['SH8'] }}
                          • +
                          +
                          +
                          +
                          + + +
                          +
                          +
                            +
                          • {{ data['lan']['SH11'] }}
                          • +
                          • {{ data['lan']['SH12'] }}
                          • +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          + {{ data['lan']['H4'] }}{{ data['lan']['PF'] }} +
                            +
                          • {{ data['lan']['SH14'] }}
                          • +
                          • {{ data['lan']['SH15'] }}
                          • +
                          + +
                          +
                          +
                            +
                          • {{ data['lan']['SH16'] }}
                          • +
                          • {{ data['lan']['SH17'] }}
                          • +
                          • {{ data['lan']['SH18'] }}
                          • +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          + +
                          +
                          + +
                          +
                          +
                          + {{ data['lan']['L1'] }} + {{ data['lan']['L2'] }} +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          {% endblock %} - {% block scripts %} {{ super() }} - + {% endblock %} diff --git a/BTPanel/templates/default/ftp.html b/BTPanel/templates/default/ftp.html index 021fb536..2a43aaa1 100644 --- a/BTPanel/templates/default/ftp.html +++ b/BTPanel/templates/default/ftp.html @@ -22,11 +22,9 @@
                          --> -
                          -
                          -
                          {{data['lan']['H2']}}
                          -
                          -
                          +
                          +
                          {{data['lan']['H2']}}
                          +
                          @@ -43,11 +41,13 @@ {% endblock %} diff --git a/BTPanel/templates/default/index.html b/BTPanel/templates/default/index.html index 5716df75..e21c6e0f 100644 --- a/BTPanel/templates/default/index.html +++ b/BTPanel/templates/default/index.html @@ -71,20 +71,21 @@
                          -
                          - +
                          + {{data['lan']['ACCOUNT']}} +Feedback {% if data['pd'].find("{{data['lan']['ACCOUNT']}}") != -1 %} - + {{data['lan']['INVITATION_REWARD']}} {% endif %} - {{data['lan']['S1']}} {{data['lan']['S2']}}  {{data['lan']['S3']}} {{data['lan']['S4']}} + {{data['lan']['S1']}} {{data['lan']['S2']}}  {{data['lan']['S3']}} {{data['lan']['S4']}}
                          - {{data['pd']|safe}} + {{ data['pd'] | safe }} {{session['version']}} diff --git a/BTPanel/templates/default/layout.html b/BTPanel/templates/default/layout.html index e2d05982..08a851aa 100644 --- a/BTPanel/templates/default/layout.html +++ b/BTPanel/templates/default/layout.html @@ -48,6 +48,41 @@ .contextmenu li:hover a { color: #fff; } +.toolbar-right { + width: 35px; + height: 35px; + position: fixed; + right: 0; + bottom: 120px; + display: flex; + background-color: #fff; + box-shadow: 0 0 4px 0 #ccc; + flex-direction: column; + flex-wrap: nowrap; + align-items: center; + justify-content: center; + border-radius: 4px; + } + + .toolbar-right .feedback { + display: inline-block; + height: 35px; + width: 35px; + position: relative; + background-repeat: no-repeat; + background-position: center center; + border-radius: 4px; + background-size: 13.5px; + } + .toolbar-right .feedback { + background-image: url('/static/img/feedback.svg'); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + } + + .feedback-iframe .layui-layer-content { + overflow: hidden !important; + } + {% if request.path == '/btwaf/index' %} + + + + + + + + + + + {% endif %} + {% block scripts %} @@ -158,6 +209,396 @@ {% endfor %} {% endblock %}
                          diff --git a/BTPanel/templates/default/login.html b/BTPanel/templates/default/login.html index 5a0ced94..9e329e80 100644 --- a/BTPanel/templates/default/login.html +++ b/BTPanel/templates/default/login.html @@ -474,15 +474,17 @@ return -1; } }()); - if (ie_version != -1 && ie_version < 9) window.location.href = '/tips' + if (ie_version != -1 && ie_version < 9) { + window.location.href = '/tips'; + }
                          -{# #}
                        • tjC5KjM4)*I2q+vql=x!IUkN&hL{B9 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/nginx_firewall/7.png b/BTPanel/static/img/nginx_firewall/7.png new file mode 100644 index 0000000000000000000000000000000000000000..c1e316bb8313e145089eb7aadb068c59fe428e6e GIT binary patch literal 64813 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 z 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 XD0O@euP_L#efw_RFxIWoc7F69n9t@7 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/scrollbar/scroll-bar-block.png b/BTPanel/static/img/scrollbar/scroll-bar-block.png new file mode 100644 index 0000000000000000000000000000000000000000..35f4a6066b3a7812a867a071466683e525640938 GIT binary patch literal 662 zcmV;H0%`q;P)-=AqpZ?{ZrMd4QYxJu#+j%2e3PK#uTM}sxnU=`#a}e&qUE!kQu#Ruc(yR2i?}N z10diS#L@Nj;}@-#n3#ECPCDJw1A%y!m6}7N4_nPA&u0YPle1S^>)pHH1QOzPb9-wK zz=PU2LPhe(XMdLqWi+;C`dfVao#+g2L@0|>^q>_^9n$>op`I}!ePe& zR_5=373VKt;C34qf`woq`0oT#%0B|xOh&MT=M{5d&nqJ3QobMzqaCl53?DVHn|g#T0C2ECM&xx>Aba@FJP} zeg)Tc^96AwQ)0qq#wsua)oPHbT(GW#brDCSF|J#nS`C;?rnqi_!C+{MraLhAe=?ae z8jX42S5k2HH!>p#g5{Lt^Ovv5JP4NW7Q`!VN=(?ySOsQaeQh-bmppF_(hcW#cczegO{tZ$^?O1YGU5pe8)ILcP*_Xm9I57?}4B=GwWpJuuOaU^=Z zUU8}jEl(+zOKjFR=$@R}9;2_ficX`^h&1}p7P!2;%7@X1t(KVlo5MChb9-wquaj)$ w7>3OE0zjvu-JA3C><5RG`emchNd2?^0yy6B5pps+egFUf07*qoM6N<$f(Oqs0{{R3 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/scrollbar/scroll-bar-down.png b/BTPanel/static/img/scrollbar/scroll-bar-down.png new file mode 100644 index 0000000000000000000000000000000000000000..45b5a798e61db975f38253428d70ee4aca472766 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~q!3HGX7W?Z1DVAa<&kznEsNqQI0P?4Mx;Tbt zOx!!kknfNIkE=b$$=TccEV*||7Hq!rwEy0w%BH0&xq77+D*Y2X{{E#mCqqNZvFVDH z$}{~{=6_zpP{H8fwX&pv=Yf^{``mqEUoN>M9zMMwlVjT)ckch<9UeRG?7qzrBD(5U z>+(z~?lU|}pVTrp%zopr0N|2O%>V!Z literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-anti_spam.png b/BTPanel/static/img/soft_ico/ico-anti_spam.png new file mode 100644 index 0000000000000000000000000000000000000000..4a0605f5f5e124e8af6f193df40ed3fe28ada338 GIT binary patch literal 1009 zcmV| ztm=s^!+;?$A8LUi5T8ev$5o#&;%d9#upj}wHY8{Xu@(_y0l`ujpGCx4KvYqW%_34P zAf;wxL~7zLz-9ro{wOr~%y58YpP>5)YC$5J1+b1}KSooZ)S3}$ks@+4321==H2F?| z^7m6@3DlwoXhQcv1h57ygz_CIwgjz?FTf%Go@$mLH5@<&_anDLp{*FK1thV<5sAQF zOFUZ8JU}nEU>#i+EJ?M2hlJ~RR?Y#<@s;~JO28v{Vcqw52yS2Xx+4Jxtb zW9x%bC25h6AIEh9&?2M-uY(zZRLJ00000NkvXXu0mjf_4}Jl literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-apache.png b/BTPanel/static/img/soft_ico/ico-apache.png index b0235822aeadd70f45082186d80b1b97054890cb..a679b10266cc18f836cfe0b2cb944e4222b4578f 100644 GIT binary patch literal 1417 zcmV;41$O$0P)Px#1ZP1_K>z@;j|==^1pojAGf6~2RA@u(nCWj6WgN%ndFGzkojtnU#U9&BYy&7H z6{LWTQ4UcWj6uPKCcg9kG5!I@nE1lPh(RGlLF7hFI9d>TpWAM?+dbxbo|$>ZY4W@x z(a^mJ$$qlQWS{v?c0Mz|`904p)1*n0mm8LDUl@|eNy&to;y9MKk!#W6=jMe9XdzMC zx2I$1vcSntXLA40UC#}q+lB&yPeN0Y$A`C%oIbH@w6`-F z2tgt8ZdcF9$Z-EBvc$(-kDv_$<>~G%(Qp9~u+kniIW!dNJmIs93<%)XGDc=UKrEzoPo=H4|Mk}JO0utcl(=Gj9qy=re?+V%s(V4U$%YXsS zlvRFmSI=Cg(Tb_7zz31O(E&NSn}tvqLxnu&aF*tatnSxb&9yQ#S}}DK7>=b5 zA5*uFvcWGbW3xyk%i5`gqc$OU+B9ZwmsYOOXjRljpi2t%ol5qcjX^nu0mgr$lGy3Q zRg8gW_$YtFSonFvt!(CfmYNGd2CyF|dPh5iaG%XM#&w)`_G=+Fu6o!5o}EWtY0S+1 zN#j*hbAk6F>5mRXTMzkIRF;IbMMyX`gcXkikasy${=V?&tFq^mXuN7_Dli}<-aH&@ zKj8;=VHM&0EnMszQZ&NyF3wqQ;lj%5#R;qMD2Q%()%jo4OklHg4#zrAwkuK_)WfN9 zum*=!t;o4NV_`@hnz_5@ixb}v#`owUHKAq#N5Xw)4z|P(C^(W{h8r`>4ik`;P$c<|??aGxtkp|)Ry-bQ!QI<1qo|HE!(?vWw^nb^ zculEVV6$|NhWb8xFO?XMx{>a(q}yplWLYf1dl@{tQ~>7H_3ZC7UURAz*r7&We^rj` zT+@k;1S5CLEX8(tNkxH>l_ekKfj)n&ym*1eYfe=HoA0(eg>46SL_)7cNu=wkVObrV zP##Rk>4eC~c?Jl7=yT_SmQ%B?^DI>fgrOK~;l);qIL0E#K6pe5upcDidO_w&CJ%BJ zDP7JlU!?K6P?f+grDd=`r0qZs^fSb?(t-r{w#r?Rm}NlGHm+Ec-(lagX}m5}CGdt8 z-P6Iw24t31CmmDX=0@d-9GQEvffi;BbN15u(s>%K8&wH#o)`w4i?SFy0^vYJ3Q8S# zuH_MQt}yv^$*awR?fc)^YmRZEF-d)Cnx{wl3r3uawHqjjUI zzZOlNF$%$QdCo`4-k|=I5@aj}7r)It{&LzbPXza)?gBw4tPC}*#e?_qFyp!V+uAz! z4yrLm$!rv-3dM=5<@ukG@0v7PS1K+c004_@(*!>0kF~Wc+3vLUE7`bkMW6ejQ76Ai z#U+FhGKuG^0?+S87(Wb*@+;Yur-q>i53XOgiR)P^E}>0CQQXIKT$hc|btzc2A=@?` zj2d?Jt45LK_XCN+;3^1osNq!AMm<6bp6jg!^@8cp%LRlm8a&Jr{o15SlO|1GHW=n# X{5m;3Nc`_U00000NkvXXu0mjfAEKw( literal 1790 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 OA3ulX$E;&Sr2hv6o@S;1 delta 1915 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 literal 1761 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-bt_boce.png b/BTPanel/static/img/soft_ico/ico-bt_boce.png new file mode 100644 index 0000000000000000000000000000000000000000..2a6491b7b0d5ef4a623e2ea9ddc7145d0463dbfb GIT binary patch literal 3134 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-bt_hids.png b/BTPanel/static/img/soft_ico/ico-bt_hids.png new file mode 100644 index 0000000000000000000000000000000000000000..0751b11c24242d68dd8bcf9a1ddfa85016c00440 GIT binary patch literal 698 zcmeAS@N?(olHy`uVBq!ia0vp^Qa~)j!3-ol&c;7vU|>`Z@Ck7RavATL8tCmRKn)vQb!Kt+3ceewmfr5=*6}7K%%(fGXveSOOV9 z?F!4Rq4 z1*9EhCRhYy?=p}JfwCYH$XyDu8c0G7Sqd^7s0B<~0&N5{z=|PSpb9`D|NsBrsr3XD zN^vDYe!&ckOw6oo9GqM{y!=AKA|m3_a!N{CTG~2>M#iS*77k9%E^hvTA)$%MDH+*? zMa5<1)eX%p9o@Zs{SzinnLdB<%2lh@uHU}@=&@tRj~_pI=FHi17q48scH`mWckjOb z`4aDP0caCrlDE4{!qM$D0zl4fPZ!4!jq}L~3c^3!k{RO?R#xP^dfYi7Nmx)Y@vz=f zApwB}PMaDnmg;O|SP`Nk<}fcd%|MgW+1Z(Mhrw#LNpXb>rdV|7COk+`Un+g1FG)vY zMcXTnlbr5HcWzkZee%a=CeLDZ)g6uJ0u-L8@jm)I^MusFC07k#i@fYV--`%?N z@xhNjKmYjgr4bavvkYuBDUd7`k?YSQFM|NsA2 z-(sl-wmZl#7|6v67#K~swgVL%_jGX#skrs#>TSLz1D=M5kIv0;46pdFKGm_wZTm$v zHL1h(|5Zy~Go5+!K*io?RiRbhnt7e`HGYae>aS97S3c6Iv-8NJNj^yi>5t^oiq#D3 z&MooFF>LZQc{J5sY+>c*CoXe%W^dRK7Tgiy=y4~j^RfQawGqW7hxVN6pBTlxF#El> z(L}8|$C4*3`9|Qs7_H8nftbkxJY| tmE!OtuP>==PTZh={{HLv6L&K(Gq5S$UT1V7_b<>(44$rjF6*2UngI8e%8UR2 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-bt_ssh_auth.png b/BTPanel/static/img/soft_ico/ico-bt_ssh_auth.png new file mode 100644 index 0000000000000000000000000000000000000000..ae7a308e208ec74befdd89f64cbcc088733b0883 GIT binary patch literal 1459 zcmV;k1x)&hP)Px)ZAnByRA@uZnq6#EMHI*XXSTRLXf-hyix@#eFg9WcCO(LvB+%V$Q^6Rqiru>< z?Ji)NDA7I`5~vA^A<$@`%H4kKZE7IaC_d2LEg1Za8jYG5jrKtrAs8c3J`5D;&M~v) zF1L4Y+uiMU_s-Mqy=UhBe=~Dt=FAMiA%){jD?#)+h?aqIlaozRpAqlWef=GUlu7nX z;iUEg82bt-Y*u*+gqQ@-Hq_=F6BkYqFn?BJ^3VJefNB%~F$o|t99qJXNAmyv>~c_r zsOE9`ZXpnp09xXq8bN$wc5?F1t@{m%9B;nA5D3=*DC|NYTm?`FgzEtEg>WT6J`k<| zVBq7aT>sjTUM-nccL!owcCG-(W!x$Tz)Bzsn&#cLVYY38#Ugm zGMwfcYksrLVgY=QtKOA*gMMimfLn5~sVNTtqf-wU+m!flBG>~^J%E3R@ButxK#t1; z1U{qt`!`x`7<>_oI0WKgYFDjP765DC3nw&oXoZhJ{F%8NcCsN*lEJ>R008LL{YGng zY))tf1Hmi^!m#c$eCZZQ26w>bpr(Df08Z+D;~rB)cqp_U#IJzxfCc1F-EZ7+-A1cr zfjtB)v%*dS5OS5hBFt7SwiB!GB;fTn>8tg#=}}~8<3b@S4gh$}BI0uods^NK^!}=z zH4inPsJw$lXBItJjTXny2G-HztZ6#&} z3$q2v0xs!y*ng?L|I8~f2}6HYu^1rlL%Vk-~8grc(`90z!mB`QhKU0^iW zYn(tIGWaAI41t9J9sy&4X=e>w?8{|)P*c?9^i1P+Dc;X29w@TFAD}`=;&b_wE2a3P z+#%&CGj&7*u~Oq@c+Z9V>;zh@GZ@B7jK5Dx1;9B}0$7o&c&nY-$v(KI?`QK_$pNlS zfC?Zx5e9{%b}6JbRa9rMjM4)*ZQ(OtW+Ef%H@0ND*+gin0a$D$btAwoPH}&EDRF9o19__Sy4aCS_Zi;w5X;mz=6`o}p$S#{b-&S;21o{X z*iY=kaqSQYjcx{jOi^ujeN2U&lTvFk)JV*kCCH3jXs!;rtYYGQ~9{c{d0*+l{96fr)-t{L3Ep zk46$&9|Ivri0K|$Hq=bBtlKJSh$3INaf)Y^!>Y5eTp`r?nbVb={{iJkL2XyeD+2%k N002ovPDHLkV1j?OlQjSU literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-bt_vsftpd.png b/BTPanel/static/img/soft_ico/ico-bt_vsftpd.png new file mode 100644 index 0000000000000000000000000000000000000000..79753285a63dd462b85c1808196ded6a24ebc904 GIT binary patch literal 1060 zcmV+<1l#+GP)Px#1ZP1_K>z@;j|==^1poj8&PhZ;RA@u(m}zWGQ547jt+k{i)}lmgvBbWV1gX73 z6D0UzNhCgqt&vFhAeJw_2qKnPBC$j$;)__Ds0bpheHUA7V`+n;v|8hTt}`_==1u0k zd7~5NH@Wlfx%bVyd+xpG+;bihB#4eAz5b#;nj;OpRC3N|c<=@{REjBq3be- ziNRctSK1q6M1d9Xn$jFSwADTtn2+VCH2*Ujm$)Jgw8wQ~vxP2k1ukM8hwtTz48UX@ zKux4*ud7&Zq1_mbV%#@%CnR&o(nzc} zlduO_T!E9?6NFn{$ZeXTJFVx38JCRFkJxyjzeqxX>c-lLx1i@A5oHDzpeeek6v%b@ z`84znYda5cltD!SGR=ALYx2akmeF05F!a000OlJ5kYL0H=I{w2jM$z6({LOe_y^+A z#jpEw1T)bE6VMqGjVuq7Q^5b;GgyW@IE=ac_VvkC?i4=a8Mb4f3CH~jqkyw5bd0gi zCUgxbGP}o-Qzgqlg?y~4YP*bWrcJ2eTua+l^f8B15$>TO+Hm*_^^S;erhv>)F^BA5 z$~b?Ycy9RQa!NuehvsW5<@ayArtLL@3{k$2st8TEhBk1ffW$X_8E5)RTMW}4XVl}c z+cWkOL}42^Q=mV0WHz^huk^+&?TH+TP8Z{?DLKp=Ix>TkZFQ9ygbkc2a2{)LkU5vH z6kxOV*uhKxQ);%}Til|F?%~jf(idIO{)lj3Aiq0xi)GL$Fk(=tw~$p0k;z{uF2NH3HWg3Foky?z~W? z7?RHLz~_=%vmPV@*-3m#D95@a83P{E@4|i2^ zkFB&n4?`831S%k|DwDf59JP_kjBL0{?jeT$4IfmpCLb%AhF(=ENP%`3!Kge>rTAnw z)7i(r#~7$U3ud@kSgTTKYB7Tqck4ECaQa>ZgySR@nW$L#$7~=H~|lUFhDiC`K2B znnq=pL7@~ypimd(&a6zrpzSP`gshz>&OUUm?QHXd?e6S6&;S41yXSr0=Oq;QvHHi$ zC0#$j%m)cn#ef|kTOyq!1cVv)xr%P|G8`hu5Tz}E%FhWP3$+ixk!2cZrajOUXJa<4 ztN^kIeFk{@Dw!u`=!>Q}c4TV)2Ox{!4}k2eYo1c$u%@^w)3uiX$Raod(7v@XUw|0a z6jy!fX#pTvaOc<7Jh^F!ucQhy4q$9GCVIVsYA=?1hM4ynTQmV6RKb9!SQYbl9%IlH z0S!5--xpDw3fZrHEYr&@69BBM01yKZ08>C~bG)kPQX3=-p6AewO0%(TWa}O~#FF%I zCFTsgkeC9I%HKU`+&Q1pvWoF0f_^V&6Vmm=Bn!0%z|my@d;>VZu~=WU!~NdKw|9@b zbc=pW^EfXW&$3W&0yt%&-Agv1jxeyNZ~*QBpU&wJF9Fo$ zTmfLzSb?tqwweJjVMJo|lm2%g-0lvh$J+d#YdIFXO5nE<#d$6RY8Jpo6YWWoMd%m6 z>$3;(T_*HLJ+7zO-pe9%3E)l!orx-r>*+BS-r#PDXw-aVY0eBF=K*3Bq5TBz22cgY zNv+L!C(}swhMGZqs{jDAzktR7eNfji__N(LWDF$~)BVY!og>ikh~jvZ&BP{xJ_fbs zsjbOkitsyt%?Ux8U`QvTO4V>KgM0-TS4kFO(c6$=sW&r+pV!H;kd~(a4Tj!jH6miJ zF&njHZ>SE$#uhaFkkN>i(~AFCHdM~GYzfDwCZac*$8jUw$tuQM3A!(jf1(u|LB$?M zn&LG2N7~3nwXyFR6;L*0TPfnjN%DJ9>)xX2ymqT!bG!@&PJ5#XR=U@qrKK- z1(qJiM&RlVB>WDbUFMxNV<1TdmvkgcgDBllx(HFiv3wDtgcp+(L`kn^DTtC@PM37I cHM*Yv1I6r-jDX3E&;S4c07*qoM6N<$f{5*%_5c6? literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-btapp.png b/BTPanel/static/img/soft_ico/ico-btapp.png new file mode 100644 index 0000000000000000000000000000000000000000..e7a786eab024780049743983d3ec61110c18bd1c GIT binary patch literal 1472 zcmV;x1wZ5o)PHQ4pj>^8r^VNK2EFC?Z0BRIt$|^-n9- zTFC{P4{CFXnsVux)Lw3OeCE1)**h3K5>-uI%zlcj#z~Jw3 zxm^2llwDGcF?JAvs$G&H!$M9#D5a6+=H~GXdUIOB*8MvtK?uoitz7LmE|&-5c!(tp z@WcIh!L6qKELt$7}u~hlhH0`q+Xy^m7hV1ZrJf4qYu~-my)G<5! z%aTXxTT4WsytnE>8Y4SA)ZH`OFfhJURLW0OucwTxC4_q@RXmL9nxd14x5$0w=h}g! zt+U~q7m8*g;YX>$w1hsLa;ngY(U%5C60{5hDIgop?sd-uFAl>wA8z;aqYZW93*Fg3t0L0Jd?|(9%0YV4==|x`p zBY1UA_-1x}?vT)zso6g475!T@7QVKh#N$s#1t1t{YvXNSw$U~{$q4omkP<~DZ(Q0r zbjn<-?0xR8xrNAO=qS59O&$XMSFWoFCKIT~#&!)oW%7!?{CHI>Y_t=~pSRM}jcsRy zg=hC7lJ`+crZu;^36}o>n1_#cf7_5wv7k}xbL*Oyc&`)e6+v?;`kZx*5}q6kEMg1B z%RIDXE%&xE@_27uVJJ3<&vwLzD~E#hKa3$-N8qKOQ~q9EZ{3N$`aXm;xiQZ7m3LP) zn$%G2%0{Rt#1MB#l8? z_Y+@Xc{?i0>mc0(0(4>-SDGbnhCoV(OHda@3!t;|ridm@vjV{$JpzB8QCE9EO_DSw zE|>Z)i|HjOpVn*yAosMl$aOZIjFoopT6JV1#J-?Jv9p7$qRVp}ujzK7b#``^g113@ zoi;T!{bg6qE?-wymk&=td+@H+iN}qMpCqX|ZC{9n;9D?sFdB{G+}!?#WAZkB2Vmnh zS?y9lV8m+}Fnd{h8Tp}qgGq^Ww4rlC}KaN}vOQz&bpGR^r?0ob2J1 zwd+_$`uqDe?DZf(;FE@204TStb29vn0SSdd9snsYoGHPhf+pjbEU#lg8XFrUilTgo zjGRZ`>i7F|exSAk%F#1|OLIS*5I@J8V;OPW^ArO)Wdz%0XM215V=20Bd5SajK(0!p zfWXkSFogadbmHeogZ?R5#Zo|ui;F*=ot+&fe7>(G`17p!2;?J>kH8%m afqwxw|T`W-&9e4M#;nn?m+2OACdT zbIMv-O0MN#6xVW!EG4Qb*>XlFo%_e_zMs$g{+7@4Jm2m4<4trvXsaNnE(ZdE6bN>B zSJ7%9dUa%_Mc-P^HAm5+#6~`VjhkW2`~U284}J2W^ys%Sm-xhjA*}h4TnO$L3ng5^zWp+ zh|UlkivvImVTSq?1QHD~HiaP#k!Ta79>f5FM8Od#I1;6gG{7KCF-Swm_XjG9#-aLS zT=6#FV~I{!XdsWr#=zlWVPUW^6pY0QfFn&!P2mUwxPgJb2%*o7VDiY}`b_Swbp<@Y zrEq9$9*xC>tSOTHSfM;DRFvu8B{0}OWSQLWZ4xyM9!_S%kubzsN$Wr&@&7{^j2~z& z&lUJ5-~TDhB}K3SxGTVAg>opO!TIl63&qCZH~^W);*eOZ;Poy#2eNo9ZXk;d!Qmh} zo-`(v6~^8B4NfFt2uv=I%%lJWJQgYvfYE4Fi~-6BZ-c-Yqb+d=B+}Z%#MsKl)EZ@j zvqIyIZA{SXTs(^s$^e+WbuRTEuE|fiYffOWMUn9Uhjt90+HhD5$hV3yw4di<_*1>_ zT5AK{q~X!tvNSLuS&DCytho7W<8xA~y5@-{Mexar zBy&7;zpnlDDyX|3o&OO5wl7u%)1@{}{_*Zh?hCh!cOCZzhib-|F<9>Gf9_A@ESa45 z84S_5ahvmSK;!bjJqF=Oc0MJyIHtL$%tCl9ORmvu6x%gsoSu5=RlIlYtNtzg?rS-F zJveQqqsTd=mw1PCGWeFsKfqt4B!}$=VNUt*hemTs(b{t{zjV%@_%v$D7Ls(Ka>~1UNpViE z7TleG`D`-<&;A-Ewz98azK{>DxNm+-lHQn-M;be<@)G86Y#krI`R$vQt!Et@#p{o3 zh>q>SO2ohGR*6)&qve)jISN+JI1LgTtU6LyFZR~ysQa%nMb1*`LFz{3idQ^hU9+j% zPBb{`a*(mdu`hB%TY*Yd^ft6|1NqpNswEF{W|><wg zoVe#zk}L%KrmqAoq|g0(hz}R?7!F=3eMxzGt!We6N85@Q!2M=#^zsX)D~85S*RTE$F-i?;S;&kkYce1~MPTl`}4OAX2)aALm0;{pHJ{6;+|AB@keLSW{E zvxDqM)#n>Zmn1V@KK$+E&H>z(W>1LE(kB7IA=p}R5+TD@Ql({LO3=ndq2&&W{EUur zyIkv$ZI2(Ng6|NO$dhJy6a96y*8)C{A02+$v^;gLFR#?g<7D15ijZztbysku$#qi2 zPLCX+e%QvU`J#M00VCYGRc=Ni<~=`Z?p@tkwo_Dl-!f0SmUR1`)uwB zRO1#TB1;7u$pXn-@y^?a)xGam-Pttu-e;!&@}i`>pXMy;+Low$1ZS{wTxuomtKBnz zZ`>$HJo+dJjjC+_dbiM*I?|XwdtmoWjn)oV&1$mlgnz=~$&lXGIWJ0rM`6|?V`j6} zYW;)N-ODNZo`n}kqnPn%%@u0ee1f}S?o7`YsO<&vh)NMiG^&FXZ*yA|c%6OnMMCkESV69Zhd zWCTjjqYG9NexIsf^moVDDHqJ|i0gc5=EC0JDW(#WJZ4mXswJe!t~jgx1sx=A3dq9* z9oqqe)as`tT+hXv&zxc`vpu~Vmd#hlP@ymd3Nyj-EXC}0#D2K9>Xe+nZ6~a*%`7Feti0v+ zsOP@~+72lmlHuwtIK$aV#{Oq_ccz)?f6<%n2zy`rAXKCNMHVh~Yp3=u4i0t(~1ln;E#F3cWErnLr<4adq=rlsOSbyaBa534EN89j$& z_qlL#v$}5xnL*{lS4nS@l;2EOR6hvW%UrAsdp+FtbZQtVP4+5`aIQLFVP)%T(bk4N zS2W&rQv1I4n^Kn#mrGx1~4 IR!2|#1tw1_;s5{u delta 2003 zcmV;^2Q2u-6Vwlo7k@Gc1^@s69zTe&00001b5ch_0Itp)=>Px#L}ge>W=%~1DgXcg z2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@1ONa40RR91GN1zh1ONa4 z0RR91G5`Po0Cmf+s{jB8K1oDDRA>e5S$j}aRTw|_-d%R7L4R_PLUWu*CaWQzm4+H_ z=BP|gnKK)>>5K#_1HxzzE3^LSVOIVjh~$)M6c4ea?V!? zg0L$pD(cx~%YT+R!`10aUh>ru4js;madB~lsMkWz5Y&@hE>}ugTG~F8f5Or2OLo9B zvSrJbQQh6$+u^(gnP?V8(I(6CI%Xd!rvWwgGS$r~`qv z8VrW>M1MzrJYXa;dnhX_>k`p?6~BQL78ce+(Kw&Ng5X9Ujb;S`s6+tmzIZ+9+qP{p zU%q_V3i?vmpaBs*c{J^MWNm_`eI07Jj-nx`L147jgB*vp1pE)+=TLu#g?kLnU(tx@ zMwcvE(go&H0<57}tf6VZCqVD5urmz!72xNQp?@{N#{)ty8#iv`1fgpPUsA6R{?Zw~ z7lWuF638G9wk}hVjOZGsL1c<#WDo~im#P0vM*QyV-i9KvZ0b)qzg}ut=t!adJIYgj zWSreCh{EH|8ICU!%cokgGw(2nqUCgky&AZXSU#;0C#OV%BuzSOG$vKNv z+kaGJH-Djdq2paGO%EPQM(l8W!ldI%jbkdNj-VhELtIFu8jej71lAKT4L?flq>5Av z1pyD;F3z)vrY&&1hDq!R6-0w^m$qLo9&|>KjT(6SOvkSc<2V!Ufs-;EKft*>Loq7g zRLq3BZ>>A&n9gM8&V;kAobdyK%x#nQ%zt~XZr+~%Zi%3uX-Ti$t;mM)6LdxlBDa%0 zF0&~JXeQ8lOo-1=k58(a9?!TiQRMs^;<>Zx(O5Y8q`-s<#-vgl+JoXa2rLDeyO-!xkg>XETWtYBldbl}UTW{J z#;)Rrw$Bsy8wloh8wuc6n4lHJBY%mVrV098X3?mOKGqIBDA4WkRQ>$w&e4@KlEL$U zD2VS!Qq+9}A`@qk9+yk*mldsUEsi_Nh`#n&E!`XLHxLLYf%NqB^b15{taqI-eyqV- ztz4|c-swd{tOVwEJ2Nr;I5V)~#`Nk_1Wh*kK}3&dD4-{u)Y8(@n*%8u$bQ`8 zhamuZlyJqw#E>6;i{C)-B7b-h${ZLOQ%6Tfre941+}YLDl@GgEj_hkZRCESX?>7(< zhO!NPN><}}DBuDOWKd5(y{BOS>FtZ*rAF7eD_|gaPudNo*aO(@sF&+;BwQXmc(1_# z(&xPfFO~t<2iXf42r)tF+P?ZNJdxsjb>j-2RcFH9O0s}QznAq|(ti~QvhpQH=R+8{ z38Phcqox@2#$)gJ1kPhdiSOa@PuZ{Z1fweuQk0O8kdNvIz*q!ScI3#BKzk60=`MIe zr9EXYU^oV?HaR)@CEdbc)E$V`YQ1VS8m%yL5poMoo;Su7TpFMe-Zs|6U6@Wg!9Nzz zgjfHWIXO8kdgWC<-5F5@VB{1slZy857{R%4;(Pp8I796ZriR?pc%-J|4h8Wuf_ONT zAjoFW86hDm__CpWqdYA1Ah%p*-+DTrG>g5>!%D^I)r=09896bpjp5J{{<)N5AYRj`8&_Gn>eg8l$Ksy8QAc8uIAU?%T{duVW laH+Z@bz}r0BM{mM{0mbN^Ynpb^WOjf002ovPDHLkV1fuNrX>IX diff --git a/BTPanel/static/img/soft_ico/ico-btwaf_httpd.png b/BTPanel/static/img/soft_ico/ico-btwaf_httpd.png index 47bce9a2b50db3913fda7529789394c1748a14ab..aefddc2a90fec2efc42c997fb31541d6b804409f 100644 GIT binary patch literal 2445 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 literal 1896 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-cloudflare.png b/BTPanel/static/img/soft_ico/ico-cloudflare.png new file mode 100644 index 0000000000000000000000000000000000000000..06734fe58126aed4e06ad1878c58bdf6bfa6e1d5 GIT binary patch literal 971 zcmV;+12p`JP)3Q1AOeeHM8GN7sUX>wEtS&;whFb^#=ElWu2Xhx!D>Eb=G*s!#Vh z?|#HTRYQ`Vm-QLQ>0ib*vsj!%_a>Zxu<*YNcEUGRUQ;yw#zq61Z&eH9lE@ZFsz&0X zmH|0TPT801D;rX_cgDBP1)=?++8~R5?L4r@zM^w$OZi%3`NZyV?o%0@ty*a-Z3qJMM2n4!}R%dz}-5Z z&Ct>?pc;T3lTL*)8IkuX{b8+aL9-#6QTjk^+)>%EFfR_Z;}oQHv5Zzt=4r?2`x$7OB&ZWxkJgm6 z@P2F{$rO|cxXC;NNe0trI(xiY9d^lqB>HVCN>hq*lP`!zt|#V85z>o6jki~{twjj<{_S?DLDWD002ovPDHLkV1m$H!9f53 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-coll_admin.png b/BTPanel/static/img/soft_ico/ico-coll_admin.png new file mode 100644 index 0000000000000000000000000000000000000000..cf6e6a0b63951ac036ff2a89d64c38e475f37bbb GIT binary patch literal 1102 zcmV-U1hM;xP)Px#1ZP1_K>z@;j|==^1poj8_(?=TR9Hvtn15(fR}{zZdHGRiTP-bO_lM3#or@dia$nK5(FpP1b^T^3KL;}42A>!M>Y%UU;~$A6rE!_rJ^8BRFLUrMHGLe zPXAG)Qmu8iN#60Cm(yvhY2JHz5z&0;%e(h`Z|=S4-h0lysVY(8H3#JFIMZ9_)%K=R zXE|N&@w|JX`S>lPz+p6bJI=#YX1r4PCO_G9aVVMr)l;VZO$(glCz~z~McG32ZH?tU zUA<96T*P?*_@lC>Jk-&2q}Qn6AdVX_`PYVNX+0C8!OsxMfQ&fj)?C3WpSE8V$q^hg zVAg?!BfB1SZ3Ki(H25-+2SG;kA>fvpikhuw79MygazPYqz|`O7*YrQ?`$AW^ULn?s zJUjrmGzHteBg%GPT6(NYR9o0GU{Y&fjGodP5!4dOF32_G`QR0y*FiwFU-M{3t~ST- zWJ}Cr*??Jped)P-`NB^$=&(qRK*mI>-=6;2nc2HiBALSW7V<^>AJBeYhYIUy25q%N zD@cFPL4NanGMqRn^6N#xPFxrBuTiLf%V}_H^~vVM4Wl3jzE=NuOzRy+2DHtc!Nd+D zZIgmeVn7^)s7CYS&A9Wn$8`qk^LItIO+hO#)S)#{+ZAfvMqw^MuhLPiHbOs1*#IN%_xHU|gKnZ({KRzZ&jp5WHzHfYb{M4)xRRp@Idh{( zmf`Pm8{C#ima)A8bQmJO(j&L6AP ze?J%@)Im6uD)q+N&d{;jBALRp0h11WI7;vCS&d5nice9I9mR-3O8ZW$s%*LX(c$|d z4@+JHCdL}(=$H=Ey>U6+JS#;mDs)5bAt&3Tfje?7*nU#v=aScnGnigWGfp%AVg}D} zU)(46EmBVMt^he1_@aU3G$Wr=!{hAU{mml35pL4wkI7Jc4>>qW(W{B2+4RK%A0uWW zoCdc$kZf*0ZxlR5U3AVtdik@tXGnC0PA-u2|M*%P-obP_&S?NwI2nxpX%v{i(m_Ux z>EQ^(k4vRpA`hivpw7^T%d%Al!)*=J;XXt*g{2jk7!54WU}it3HGrM8PoMdRErr>#MKe<@7IOzh{l53&(?}lyy+XfU1s|MJ<3zaBQ;$=Xo$0v-A U`UqJUdH?_b07*qoM6N<$g6jhkfdBvi literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-cosfs.png b/BTPanel/static/img/soft_ico/ico-cosfs.png new file mode 100644 index 0000000000000000000000000000000000000000..082b976e738dab7e052b719fd585c04d90b8305d GIT binary patch literal 2985 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 U{UY0)*8l(j07*qoM6N<$f=KEMh5!Hn literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-dbcache.png b/BTPanel/static/img/soft_ico/ico-dbcache.png new file mode 100644 index 0000000000000000000000000000000000000000..58185dd51238aa028540dbd68b4c2fd7c3494d7d GIT binary patch literal 1510 zcmVPx)ph-kQRA@u(Sbc~TWf=cGvv)IlhxVb~&T2tdS6LaPm;@PgqM;c{1t(ZR_JM_v zl2Y02tb6Cqm`0Fb{h>zvk(3w_ec)F?7YQb0No7!ZRHod{-cc#(?(E*ZPt5Mjy0^Qx zJGXnf3HQSOu`|#6Jip)b{NDF{-XUD#gD!FW7$;Eg3XWG`yaF|5U|d3@O<-$;{bw7j zb|TzQB+Ukk$pB3PVE+mR^$-tr$HGlLBgMIB6;PvzYgzKGB^FBoYVl5-dQ458S62c7 zBe|BC)&iL79k^>*M*>qfq-F~Vn*d%=tPVQFV(5TGzBs`BVA1c|2%w!vie&%Si9kS4 ztsw9w09U%e7&rpZc0rAw41}m}q-q4BiLSa57!Du{lR;0%HF>)i3DuQAN$`Z*;vwaG zFW_w(RksWPoflm~CBUamO_99B=s7(0ovDYjn8fm03ZBQTaYb00P} z<-M$glH1&b5U?+%DfeccN0X~Tw8bI3H?Ap*%f&6*O0-1&4f^E9FPU*;fs?ZUdhH(* zjzdr{K)vyB$ z0;W}FNZwjC0adrw0eIPUVDIIU#0Mwzo#;Kj^#-eAMF0eJYcl~aIJRd9IK&_&2R^e- zMRz>h)HU3e1{%_Xvrct4pR9#|y;D5m2507uc-Viy3vkzFvVQKW21xb^td216fT<}9 z14eowvDoL@5b$bDQ=YFBtE`074d?EFs=pB%^3@2}pV_KkJUhGmCnv zp14Lp+6&-jXYL>fv&@k4W2IOX+iBHEJO!3^kD4eJADJd`&_H#H^fB}PR8wiEXtVo*<9lOOlu*sD!Iw{{cIao(PGn3`O1yUvrE z*HB|`R}7v9OwB)v%Z|OXRXKti63c}|bBM9u4Eu+*0$yAegGbU#%M;N}gI?y>RDt}y z$30y~6SM^Qzeq~m6ziOryVQ8~H|h!$H*Mu_Ooc!KhV>{h-pPCZr(mAnANK$16?DGc zs0aiMD?*H}JO{@}!qU;~N@_HD5JYpGZS-gM(X#%RoMVMm(ieJsHn^m0(_FhW%w*g-XOc5peFe+sb9$B}kxeSq!c;*Eb(74DK9Qzq`+w zcu_p$-(Lx2x%Zw33~RiAqRbac%k6E7^dC(xAQGSDp0l{l3^&=mf7QbifnYSz&g6?Q zxL=acm9P0y(i$T9o>E^Of_iEtgWqt_o-sA$@~V+L6Fm_q7eqCzQ((Bav9gOg|8fK1 z8&gx})SW;;PrXgxeEqnyiiGobd{bWj3qvb;(!YKfzr-L1;Fyx1l&avCS(I9yUzA;};2doBV$Y@?1_nkSPZ!4! zi{8>nzJ7-d1X`CfGG#@S^oD4PFGxDgR>Y{1$6%h}=Wt`wW45OpcNTcaENHcL(GpSwe<;Pb?=RH5yoT(03 z?{X(lkI)+#QOkN**n*wW4WKl2CauRVvkIi zIK9qPt_XiA-Pod_`Jj2r@`B0I`-T(dlfq|p;ST4$bZ4ciLxgg_-5a* z4^U`b`Td#0BQcc-dGE{px=S`Vu?F4ne5)!kL)+do?481*)i>A=g_ B-RA%R literal 1947 zcmV;M2W0q(P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB81xZ9fRA>e5Sqp4aRT#dvk3GT& z8WA=@?b;zklA%J3w(EjHG@wQ_QpQG1$P!_WZ9$Fkfv{YG-1C|sTykq}Za!dW zWZSlFGBIpE*CzxaxQU>q75kk18p32Fh|)@Cd-QuzOOJH{_<;; z&gB2042-;*7;*dd?FC5j48sYU1aS>P&~HXE-%?-G^cm{C==mDuKp z=5zX!=FOMU?kjtggn61qS-rqOtDVAiiLow@`lM|s%5wW zG156u8X~0F=Ne|r*4EZ?&_8FmIvG74&!{Mhi-;l1axN2yMx$;-a3{kJp<}menIR)f zoSX{Sy=9FKue%~0Z|aa631c!(I5R>nE%%?DD zANjV|$_`yg!W#YeEGzP?^9rKVgExZ0j%%jX{-;!@4>--I9i2j zEMfGxXo$f+dSs*F+x@PMk|e)wltoKROSL3PJK&@Z&Xjd4sS{!%tE&;w2`KeIX%5k7 zNdms=cx5m^IBT(>jv=TU7;Qq(=5-y^uX__RlvT=B;4-Q}vDfu}y6I}xu5^{`e)ket zknc}dKB*HdEr$DqBu85XQBV%ZwBJCkDw)HCPUw(>waaa&EDQ5+pnidPV`F1GA-4sl0?C|jLZ*+}dbOtp};9w6@UxY*ALx}JPCd5NY z78+pi8=gje$WH^1unnJs4UJtD!KU*Zm>xLTTvu1OS8s&JMU$nD$623k*$9@laJ8vU zKnW5RyW4FlSJ$z7UCW6SsyIX?jcXVaYm7L`GgT*u{vgUg+vaja@)|G1`WS>3K@>Gn zG9E#UiDDcXY0e0$6B0sQ+W_7~*&ajr))GzIWIF|AZUwL=7g>8;bO8Rg!=ZHtQ#o$!5x%(1_q@at{KcE0zTTb>sBlO67Q-f3a;? z8a+;OaC+o;Rrjq-2lj%nM|X}0?5%*keTu;FK>lM1FaA~>W^ha;+*^1_4! zPMFPR7w$$qsT>gB=5^x|7Tr&M=z8&jwTAloh6Eh&L6?e|G2X9vd3j~))~!3Gm(}A* z6QQ^F{{H@bFit083StEPWjMHgsW+4i$N%Dv%CayAGE$D1GxKQWS4jiIJz_EZ(BmRI zwtt2r{Jn`z*yKB5BB)L)4AI>|X-Hx{=59N~(}hT)4oNh}jBLS5^?bUzxad3rS=A?E zXhjT~X~}FECK9{5&x#54VR%b0yvlz?m|{Bc_Q1;gzOmlF@UIcNvz!dAK0FgpbEipV zr?azj%D}+DG03r{+VD}^aQVg5nGJ_4p-gW8MYv<0#|U*|gbWi;6iokE?<2ei9Y{55-3I^etszFt!;+o0uYkc?!d;Ja#ae5iAb4=E`I8FA7f- zy2F*-DVJzw2Q%Vn^j~5)U=tE(gKK{j?Hc3LPCCQwIkJX~kL? zqn*ZZm&4glOom{wuk1cqmOdD#iEoFif@^uczK>B~02=Kh^s+?lyMls(JF2Uz&yAz0 z|7Nry#tbjQGouZ!fV8h%gAH;$+^DOY;!>7c6o`?#BHy|(RT!{CtJ5@8zSnBCx@u}_ z!l`uh{ES9KuWW=D`(01Sl8lcWAGjz!6RHeuHInP}V?mlAJQ hH(P;h1^#Ch_#0;x&0zD|e|7)>002ovPDHLkV1l2xd4~W1 diff --git a/BTPanel/static/img/soft_ico/ico-disk_analysis.png b/BTPanel/static/img/soft_ico/ico-disk_analysis.png new file mode 100644 index 0000000000000000000000000000000000000000..7717d7851de40459a46dcce2411f7809d5d77f62 GIT binary patch literal 2386 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-diskquota.png b/BTPanel/static/img/soft_ico/ico-diskquota.png new file mode 100644 index 0000000000000000000000000000000000000000..02109fbd2b29187275610d1fa5c422731ca725b6 GIT binary patch literal 2254 zcmV;<2r>7GP)Px#1ZP1_K>z@;j|==^1pojDcu7P-R9HvtSZj<`R~24s?{n^B=FYu$MxY|Ep~My} z3WcdsA84z8jqyj*f|fKkw)jga1~sw%FeTD7G5X7x~mq6|h zpUFxYFlA-JY%bUBPwXu2pL6!x5!WBgUZ-$o<7-)IdUy#e-MKz1O+k^iuVUmXOnVS3 z_j}Y~BT{)gkcpiox>d3IsG;a&O%1O=U6i(F7`fwgR+=7O0{xHQoRy}qfLR^IZ?_}& z1-9-tQptwNX$Kbgy*>vf6l{AioLor$fbmLPd;mH=zD_Iwr&5h8MHa z^za&i)jTBz;uL=f)!mS`weB#~g7S)@UYIi4>$X7=h`>LVfWQvOgT(4OG@>I@%^Grn zkxyfG#t;^TCqXA9ODn-hSX~qkyaZz9rX+!4R`Htbvx6M)-137DP@1_EsW?!|Qp5!ssRlG!(f=@tk7IMBeLzV5i+JEAP(L$x zQHBP|H5!-%!yF$}?J$me>r}h;oa{m#=J;55Sl%00y~>jPMD_`>mUYl?B}%(XI(!1# zSj@E*_0%18MFw`|_NN_{TPwSBsrcaafhCWBJS(Mux$wr7lkwA@kU7!?KesM+gf;*CiDaiJJ_Zu?m8>}Dteu<~9eTYseg-@+FGR6B4NacS zhKY%dfXt4#-Fk=s!OHeT(KnfEsA{&&qp!iJ)Kc5;#})C#IEl&-T1b~qVu;o8H>YV44lGCf=WJ zXB4fe51pji8y)e%O8{PeLAs#q4bTY=YxjlCm{cO6F=bFsJ5NDX+ifnyszu#grQ)gi z8cy4nZdV4lZ_VLw6W^+h4O6>0xlihq3YYhk-`@)%5g)t+N{uL!_*w*wg;FVQCh51g zVc(pC*d2pDb9FBNL6yssh!0)@&g47dLgYSa|KTvQ$8t>zMGZ9;jnc%5v&YV?JFvUi z9Ni0}!Rk7gM)AJTl@7s-4zc5Jrr*M5;qZGU={CD`C_5EMLZ>i*cy?9-E`MF zaF{UItX;6tKzW;kAq9#O*nXl_(=s2DVO>o#&^Mk?-^470(F+7vxf_whQL{Pz>d0HC zXk_FhHQpSho?{EC=LqD){D!m(pw?4Z;Y*XUK`iW(og!=93LAPdBwY)s83a@-btDS; z<V_&K5mnB|FeUSHHsrcyPR)a)FEhd0 zqds(s+Hak`9;-VKuZarOYe6ocAjAslfM7*9JjKFf<>^;=+%JX_PIT2!Dd|HSyEh>R zGTOI8c1jtEC>9!m0&A!dphdew=-zk>#(Q z+#Vt-We@@qWiANPZiz@sApKbBUrUaZwn<+Za0#Sd;UAuIdy!Ka)9E$N{(Cz0pYRe0 z^Icf&!hob`iQ?0V=7mrI&UtwOnZ?SvMJRW4bu8t@Gmm48Q*tz?S1^!Ti-#0vgf|;4 z|8Bip;P)Z39e{mGSn%h#{~KgcL&#yqwe{qNmu8&Ly93pFG!H>&S>{|4nB{btRl#as z`Yy@~mX1eeK~}yjygRVu7wgukSR+lQ^LX739^;*s*#YK{jfopUh;WB=#VJ#TDcuKC zTF^B1b7$||vn%U5ExZKg?Y#N!Qm7s^&ix48w|KYgZNlQ1kE8Y%gRbs_D$++>u8DiH zyPuN$_Z!B10|b7Yb)6Poee#+=BEbgfKrKCFW&vW3R_@o@nm63qTClmzSS|Te`a6MfnAJ~>H4nV;rM)vM=q2#~j#+fetAqCl cTwM_T69zuVqI*|6dH?_b07*qoM6N<$f_$h$iU0rr literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-dns_manager.png b/BTPanel/static/img/soft_ico/ico-dns_manager.png new file mode 100644 index 0000000000000000000000000000000000000000..3e2516666cc6b1edff847ab6721be99321901952 GIT binary patch literal 1505 zcmV<71s?i|P)^F^!(zo& zKo$Ukw*c7M_F&UGwpIy~vu&(Y2nf~7@m(o+1BmCl1d!c}t`6qu8TQ9h-*dcya17i- z@Nrug@>NL65z#b+^mM;B9{8;F0&>@^v{HiirrI3$8Y04xK- zOCRNg4AFVi8@j$Wi+ZDu3y5I9 zz3|)SI`|OvhOJqn(gwu$w)Hl*%>dy;W_!VniJjP$N|4kf&zoH2$vipoNo><*Wq^Qx zs4NxtM$h^81w)1dQyejyJ-ttl^)oU+T>h)y#+j9u6`k&PZ>~-IF&hz}s05zP>DE*Ms4{uh zF3ssHQ?al}UKU?-Jq)7zgN2xq@>KkHfC8|h++{@foBs}Q6L0#%PP98!nsQVS!L*`J2Vo2 zs-%yM&BclWvALfPZ0TC-oAgoAM`j&Yo3+s|2ZV^e$|Obr{kS_k)!o=L*xLc5&X$p2 zKi#)|ZrewOl~kVsGV2$$NFM$2cRuUEfG}8<4VfgO`}AnG7xX1@cv>VE%Yy?EZ<|su zR$UB$p63DK3m|~98v&N(du0VgE#7?GrihGQC9`GZ)7Y1hOn_7u<;Pqmj}%c-Kfp%O zvqrUVdW-K02<ILu@y}uGCt_u7)krv?s4BmY4l?7uy98N$aa}#D^&YfUAS<=*otX15kc5z1^1` znpFp~1Zms!H1N?yKj(2hta3BXFCg%EEn?$*PGluaPgI}IbU}b7ad&j&V?a}D6oFpL z7+g~JXQo(vKS{aj-)${ZZf9oR@H!Y1Xy2BpYpn|eD<48~tdoS%weotea*|}c)tuRg zyv1pw@=fjH%lx!F`_g0yvDQNWTaOihs1suPA%XB_!}Nx(r0yE5Y-SzM1psop*51i? z?Cl=(yCjk&Vs86gTV?oi63IPN&W4 zjn#DwOu-wwtyVYWp~WE<$F zwO&AYp$I|>`le>Gw^Bs~J*HoBOK%|Jau%+}gG~SNa#7`l5$LuAX)CWq>m4ID9mI?g z!dB7P$-~4H93YRBx2g)E|PB4#S3phW{ZPl(jt2EbOX<+@SP2w(nZ10lug zpwm=hAOH_L$NTfNU*vyI9>gMfuEO8h4W*p#|CRXctIPZcc3%0b<-SV000000NkvXX Hu0mjf#e&_1 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-dnspod.png b/BTPanel/static/img/soft_ico/ico-dnspod.png new file mode 100644 index 0000000000000000000000000000000000000000..14f4f7ce530b8cc117ef422e5f61cbe769989d6a GIT binary patch literal 3728 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

                          edjRb){T`dVG5 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 Hu0mjfq(_Kq literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-file_real_time_log.png b/BTPanel/static/img/soft_ico/ico-file_real_time_log.png new file mode 100644 index 0000000000000000000000000000000000000000..443f890e42ca6ac14ef59cda4a363f91580625fd GIT binary patch literal 658 zcmV;D0&V??P)P000>X1^@s6#OZ}&00001b5ch_0Itp) z=>Px%Oi4sRR7gwBmOp3{VHn1r_byWH;NYLZitSY$#7U?_bD?T+(xG@%g60zN&*13d zATCKJ2hl+g!66jVOQ6e15JV6fDP9T{hawR~+H2841O>M?ci$_Q=3-jf=B_Eh8}GaC z`+e{8@VxI4y6{jJ7-&LF)4Z@-Kuy!it!FhMFH5CqFn10jDqk5J8{HDZuKP~Yw9HN` zGEFl>vV8vkf++dnz|z^N*}4azD^U!UgUV*>R^8jskf4Cp??OY`$>mGb8Du-Tgc#iw z$WG+iYR|ebcAAsW5Ty{E_BYvyN;APHisz2G!ih0BMl2m=@LL&}TS!`S;UR{ahFI%u zcFL-E0VS_yAR!Il4}c1YJ~vv?84#D@a&|MX0?E}sIdWQ(oM&J<2%?<4mkTQnJCPc$ z+IrQw%%?cp0D}Ka2xL^d5m8 zZ3Jx#`3Imcy^-J7s`2V-T{c7gE-~L(NLF4chWd#?50~`!hPO6YP?OBa1IXCAmG$1W zt;F|%nQt#8E4ejDtOUUyCE^c)DCg|qQ{Up1Uni$V4%cd;K;R>S<@j=PrWy#c&Tys& zkpugme7*d7WnfZ$N`!F&?l0tPSHvptTScQusAj(b;&C50E zl0>XAV;sN)B$4%e3pW{CCY@3oR^ZZI5Jo)18wdRW;AQHKty>eDWhKyz-#D|qgZc_X shkDT4x0sljZ`Xpl`?u2WHl3{h1>xL|DGADTs{jB107*qoM6N<$f@SP1bN~PV literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-firewall.png b/BTPanel/static/img/soft_ico/ico-firewall.png new file mode 100644 index 0000000000000000000000000000000000000000..e27ef48910aa66077a2f95dd55ca08ee57492d37 GIT binary patch literal 930 zcmV;T16}-yP)@A=NCv)*!KSGXsPPw(x(| zyK*vV>W_0&=soEaC$aCn-@SKt@0~5nh!G>_LhK?s?e%&NK335-(N_592<-)0*lac@ zXBq?mWc+=!y7IF$+EIQB2?{{rnE`?E9*=x|p0NzM$(~Xn>HjY78!sFLM!9S_8RjZ~ zkuhBvKGW&+$U`?@-l6~Y#m4(k3A@K=p7N~V&>P@cQ5Z;417Q4L9%2ybfdSnQs4)+S z>@z+fvd@VY5C+(t7ZNc3B!jFNh!q=vBkuu9oD!nJXX{MY2 zqRR1#2B^u5MT0_hEicG-9-*sh+{acXD<_B*UnG?IMEWi0o@?t;f{q>Th#=ay9HxQD zAT&@zcdvSoX1`go{u41E2E>3E5CdXB3<%_6nwvjD9 z``Fmtu;b-&uFw)nRk%p`!P&1Yv~q*U(eRRVs8NJciE8o4JN~@O1<;}-;<|_AlMWDh zWV1@u8&`=%OK97+P%6_fHwf3t6jCl?w$3GK(b9#k6<%aSlB1%e`$(5RTkuL$uva2@ zgLJg`dq>-bh!GhmUZHX~NHPI42=&>3jx9dW5UgA4&K^jwJo&axF82!nY4rPjOYuga zJw?IDkh^#I>ku$BcN!WY0zgE3xIz2JAkEous$2^l2QtLa4geEsf*D|5&>(Fq`&E#p zgDgp-&x$-vFdab9yr9#}x|}CzUp=G-VFe9VsKWRe7JvpI+A#<}%gKDEG@cdtN*X~h zWJEb(8bi;OF(>FW@h~q$u6l$OmSbV&VV@~0i^9zLzz}r(g`X99AV@CcnW3Z6=vS>) zdyUIwvaDKo9hrJKy1h_12*Wt+1y}JxC+}P^V#LTfm)`;m0H}&yhvk71$N&HU07*qoM6N<$ Ef|Dw#8UO$Q literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-free_waf.png b/BTPanel/static/img/soft_ico/ico-free_waf.png new file mode 100644 index 0000000000000000000000000000000000000000..55dabc43d782b232437a2efee3bbaa696aa4ec5a GIT binary patch literal 2501 zcmaJ@c|4T+9v-{I$p}TNF-a1$n6V9$n6V5d+gKvE#>|T`W-&9e4M#;nn?m+2OACdT zbIMv-O0MN#6xVW!EG4Qb*>XlFo%_e_zMs$g{+7@4Jm2m4<4trvXsaNnE(ZdE6bN>B zSJ7%9dUa%_Mc-P^HAm5+#6~`VjhkW2`~U284}J2W^ys%Sm-xhjA*}h4TnO$L3ng5^zWp+ zh|UlkivvImVTSq?1QHD~HiaP#k!Ta79>f5FM8Od#I1;6gG{7KCF-Swm_XjG9#-aLS zT=6#FV~I{!XdsWr#=zlWVPUW^6pY0QfFn&!P2mUwxPgJb2%*o7VDiY}`b_Swbp<@Y zrEq9$9*xC>tSOTHSfM;DRFvu8B{0}OWSQLWZ4xyM9!_S%kubzsN$Wr&@&7{^j2~z& z&lUJ5-~TDhB}K3SxGTVAg>opO!TIl63&qCZH~^W);*eOZ;Poy#2eNo9ZXk;d!Qmh} zo-`(v6~^8B4NfFt2uv=I%%lJWJQgYvfYE4Fi~-6BZ-c-Yqb+d=B+}Z%#MsKl)EZ@j zvqIyIZA{SXTs(^s$^e+WbuRTEuE|fiYffOWMUn9Uhjt90+HhD5$hV3yw4di<_*1>_ zT5AK{q~X!tvNSLuS&DCytho7W<8xA~y5@-{Mexar zBy&7;zpnlDDyX|3o&OO5wl7u%)1@{}{_*Zh?hCh!cOCZzhib-|F<9>Gf9_A@ESa45 z84S_5ahvmSK;!bjJqF=Oc0MJyIHtL$%tCl9ORmvu6x%gsoSu5=RlIlYtNtzg?rS-F zJveQqqsTd=mw1PCGWeFsKfqt4B!}$=VNUt*hemTs(b{t{zjV%@_%v$D7Ls(Ka>~1UNpViE z7TleG`D`-<&;A-Ewz98azK{>DxNm+-lHQn-M;be<@)G86Y#krI`R$vQt!Et@#p{o3 zh>q>SO2ohGR*6)&qve)jISN+JI1LgTtU6LyFZR~ysQa%nMb1*`LFz{3idQ^hU9+j% zPBb{`a*(mdu`hB%TY*Yd^ft6|1NqpNswEF{W|><wg zoVe#zk}L%KrmqAoq|g0(hz}R?7!F=3eMxzGt!We6N85@Q!2M=#^zsX)D~85S*RTE$F-i?;S;&kkYce1~MPTl`}4OAX2)aALm0;{pHJ{6;+|AB@keLSW{E zvxDqM)#n>Zmn1V@KK$+E&H>z(W>1LE(kB7IA=p}R5+TD@Ql({LO3=ndq2&&W{EUur zyIkv$ZI2(Ng6|NO$dhJy6a96y*8)C{A02+$v^;gLFR#?g<7D15ijZztbysku$#qi2 zPLCX+e%QvU`J#M00VCYGRc=Ni<~=`Z?p@tkwo_Dl-!f0SmUR1`)uwB zRO1#TB1;7u$pXn-@y^?a)xGam-Pttu-e;!&@}i`>pXMy;+Low$1ZS{wTxuomtKBnz zZ`>$HJo+dJjjC+_dbiM*I?|XwdtmoWjn)oV&1$mlgnz=~$&lXGIWJ0rM`6|?V`j6} zYW;)N-ODNZo`n}kqnPn%%@u0ee1f}S?o7`YsO<&vh)NMiG^&FXZ*yA|c%6OnMMCkESV69Zhd zWCTjjqYG9NexIsf^moVDDHqJ|i0gc5=EC0JDW(#WJZ4mXswJe!t~jgx1sx=A3dq9* z9oqqe)as`tT+hXv&zxc`vpu~Vmd#hlP@ymd3Nyj-EXC}0#D2K9>Xe+nZ6~a*%`7Feti0v+ zsOP@~+72lmlHuwtIK$aV#{Oq_ccz)?f6<%n2zy`rAXKCNMHVh~Yp3=u4i0t(~1ln;E#F3cWErnLr<4adq=rlsOSbyaBa534EN89j$& z_qlL#v$}5xnL*{lS4nS@l;2EOR6hvW%UrAsdp+FtbZQtVP4+5`aIQLFVP)%T(bk4N zS2W&rQv1I4n^Kn#mrGx1~4 IR!2|#1tw1_;s5{u literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-freefrpc.png b/BTPanel/static/img/soft_ico/ico-freefrpc.png new file mode 100644 index 0000000000000000000000000000000000000000..7c655ed99f6ef4b67c0c357a48ca56f05baa5553 GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DinK$vl=HlH+5@SLZMV@QPi+v(9KAya=+(xg8edl^T0J`Y6vCCHKZTn`3L1&!`k}klwzaea7A| z6>rj$zCCK1caG`2&IP4S*B1Uh%<7P`Ht2opS*G;wjcHqtq-L!+u)RlU`pW;I3*0tG zJu>?Gy#In{%rd*(4kn9%vO5@5^qP;PzS1f9Db1kQ4iwq!z`ea6s9`$S4qKr9Rk{~0 zM<$3#)Eh|FnH>Ia^`)RHru@RPzopr0G&R5 Ao&W#< literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-frps.png b/BTPanel/static/img/soft_ico/ico-frps.png new file mode 100644 index 0000000000000000000000000000000000000000..7c655ed99f6ef4b67c0c357a48ca56f05baa5553 GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DinK$vl=HlH+5@SLZMV@QPi+v(9KAya=+(xg8edl^T0J`Y6vCCHKZTn`3L1&!`k}klwzaea7A| z6>rj$zCCK1caG`2&IP4S*B1Uh%<7P`Ht2opS*G;wjcHqtq-L!+u)RlU`pW;I3*0tG zJu>?Gy#In{%rd*(4kn9%vO5@5^qP;PzS1f9Db1kQ4iwq!z`ea6s9`$S4qKr9Rk{~0 zM<$3#)Eh|FnH>Ia^`)RHru@RPzopr0G&R5 Ao&W#< literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-ftp.png b/BTPanel/static/img/soft_ico/ico-ftp.png index 6f27b365ff316266fde99c80790f63536a496c32..2f7bc68738fade9a68e6188f0727b645bec9a300 100644 GIT binary patch literal 1531 zcmVPx#1ZP1_K>z@;j|==^1pojArAb6VRA@u(SX)SJRT%!q`*aY}l}2!-fqT{~;Xuc_}y?j(EV6n3!0KXI^Y< zY#QZ{A3xqWIy&+l930H}{r*Xaf|OqeE=#}xrEjLCrM;Y*n)+f=Qc`(BLV_0rGPno= zYZxp0`}+^Jwzh`0x3@?3_V#|l(v=g5ngFeyl9KX5R#w(K85tR`!SV%=#p-1PK*R?E z->EL6UKCac+>f1&=I%#4md3AHy;MCTVtd_IsI` znQue+6fL$4O~Qqd&5(j9208Q+#+~HkV-B@fU#u>2b?m#fh%VXXlB6POcF zo|UUmd&Py{HxOb^&_k?VAoQ2sVhYm)JOK_bU=o5zf)-sGGysr_v(D!b7vSiO26`L6 zU0QAmO9Xfrav)bvuNC-K8gk-UmS-(8g(U*8nv-Fqr`HX(_X38Jo}1!A0*qOP5Ds)} z(X}HG2>4Nr4)oL%rUYmS;3Kcs`w0_Hi?1ELKj9wrNKZ`>v5Zpr{QUfTZnyg`rg8AZ z>ATg{)zaA5D7a2&i7JEA)6*kWRaH`0SjftySB`-@k#u)=%iP?Yw6wGcs+z#cf|4nd zlatcl-!D^BQwzynYy(n;{2SGGR5|GCf)p79;|qf~$ZU=o3n21t&(JXBa{V7xo%8&V$X9k$|-# zEee5w0GMY%p=v#i2r6G+U$5esqpq$_5wQXoM}<;FMTOeO5Q3FuVPQeP5ekra6Bo$} z5Kq*iQy2*FB`Xz&R%Cp`&1xXzNM5g+gG6g%^1a~9p>+4fF6b|rKGLrr+ zoNs8R;bJ@4ju`!vRp1x3d0%7O16hiER_`sifY5;3D6`5cm{f$7U9C zXxOU+KCp{TkKln^Sn*~!68{!p@s;J}<gd%R>-}01*I*Ww`BUx)9;OYy}^6x#M6}xKct0%OhGDia*@k z-2853Wu?>S^L+#5=k+TFSW*DWvO9YiPVff*ndQW=)^?)<^bh!HIFNV%!_9%zzFxCo h!-fqTHvVrA`5PkTRcRi$r~Lo`002ovPDHLkV1f`O%=Q2P literal 1646 zcmV-!29f!RP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB6*hxe|RA>e5T3bl1MHHT`BIG6X zWTp=X!ER`Q#rA@ts8CS!ppbN=4q{0!auf|g;b0eh=poT#7-XHu)HsGhFQO3Qh4PwG zNDtL9MG^DC%JA0lw)@tcJ=6TR{r`J&ETn(nch;=+ty#0yteJo2-!c|z@d!n)*XtwN zZ*K-ii#pg$o~*gR#wKK!7?*5sdV3$`$+`dJFM{DS{4E8ok(%?F4{jert?fC~=$P!q84DtIE-Qd3hO9vB!n)$uKxmPWAm z{D3{^2`f!HcFfGo(9U36OpRn^WxaHEcJ_sxHav=0Sy_1>xZm&sd(#SUYQ(?YTj^Nx z#i36R&}{X3VX$osuF*`#V5Fd+;6XE>Lmt1-=&_pj3FhMUgM)*Q1ZZ$@kdsG8M{Iw8 zpT)<=^EO`3tg5Ptb$55O)YL>retwf}ZEaO=wH<8yPNmF(7;M6LE2IjBZ;9p(b3V|uwIC{ zp}U|gGF<^sBEG&b0a;0U`3C#Yj139u&JpjJJ>((ahw>v zI5BF@K;hxxbOy8S#0;R$i}Yk}ZjLhJwyF@S0c6>yYCqBlF=72NRG+JW5a^pY^t~2> zo~zR<#0XG5{G6M3T66)x4b8|1@Wm<;g!3*f)Nz@PFeRT)*ZPfJs`zj_T=GMf- z#7U?&oalw*2z_$KQG5`CEplQ+!3=@Ef_Lvd|7ahyBRE_Q!-40O!39lXrf%T?@N&?K z0ThCA1jo*w(buB^`g1ITGd}@*h@d>BQ=*SYAI8SUzJYZ7ODD5zI(7u-@CKyQdzL-j zdx0-3EG*|+6enG4&W(W-;Kb8`fjLl`ei7FX!{ZG7?386q@*M^G(@k4yJc)_jJ373iKcB`US7`V5oKvWtW7g&e8=Drkcvrn?pv*=Iu0tfsZG zzP_$mA7(hpe_A*A7XyuWZEcOOm*wSU4c}oy`&+1A$#jj73{%(-@2@!Q{NI9EzFSOZ zghqutq~v`BkLJS%$^N7AHT?=>^@6mV5&dB4H$W`5SHOQ3&t=TkCDe}f_5Inj_mSQk surY@EV+8d(8@wxaBj85h{}O?}0e);I8o^X(x&QzG07*qoM6N<$f`b?d(EtDd diff --git a/BTPanel/static/img/soft_ico/ico-gcloud_storage.png b/BTPanel/static/img/soft_ico/ico-gcloud_storage.png new file mode 100644 index 0000000000000000000000000000000000000000..322c8fff4b7d273010b24e18049880ee8ec1d67a GIT binary patch literal 3141 zcmV-L47&4)P)Px#1ZP1_K>z@;j|==^1pojG?@2^KR9HvVSb1<&)fxZJx!c>ale{Dl0wP2LqOuiX zT3cli>sXySj$_B=53Sg-)4Ep0YOA=kRibw4g46O(2N}!KRv9e=Lkg&9S!^rHPD02+ z_T=sN-Fr`e=e$IcyvL^9{LOsxa?ZW?obUH-=R09S2>L365Bz>*p*--xr56qibHjrK zIHO`ir_QuP$CEbAE(no>ZyBEHjM4E_nkEJ;IuJ|Txvs5i`Gt8wD#ZH|ttp$rrt#|K zC51m}Nu`|q(F9Gw^OWbQHHx^PNT`Z#z4&EvBW;xII!bo5ofyx2e=6)-f7h4yfDAy$ zMM2K5N_pbJ34Y(J4^0>oSX^2ZxU?`&$#=sgfq6yw_r_hf&S31S5>vm-gW}%5A$q?Q z0VpvB3O$5HHkMn)2K@d)dMgdhTqrmw(#rA|xI3h28)`#=dXuxIc{-mbpM4n~UxWu!%g*Q4gdv2?pH37LSLMAxcXKpMuv@0>LKDVuMLlzNKl5zVA zYWH)dzsr~w6ha2#*+CKDs3NBm8K*!fsOzgu#ul7ud0Cm@ozH(!z;c4YET(JIma@yK zuI8bjKd)?2u;jc|AP{!bN%9=~w4&CK7T7qeRt<7NZeD4br2&n9k&;>y;smm*e?dgbj+O+L-)ak~W4HQr(oLV46?5NE6pBigg_L zL9)By6~<2=AiG{)lp(PC;)w%O!yz|<#p#NY!r2~)4^LP2p!kL!$K6|um_Ij!Q z1>~h$Gycqt&5xI6LP%QfRDuu+B7}aglvjcUy_3Q+pe$k?Br z7n;IcHjx}C3gQfBIvo|_svk1YI*%&U))&^^-dPRhb2F1{Op zGzdn?SlZbg3sk-mFDTjJ^K508EHHfnj^c^JbLdo}UXvlTb^0_lz@KD0CzoR|+tdPI zn^llJb0Wss5-IpuN0tV_O_MIRp&6rLQvBcTO<`@!~vxOJgMM>{-f@4`{v?2+|e z70pPLQgyyT+xq)xoX@0vu_W!DbPKH?dqYh@plGFT2InAgPcl_Nio14uf9pTP#8I?! zRHmK3nU^83`^NFg3Oe39FPupnnLq8_;)det)a(8!z4`i>I0*-ngW-b@1QVpocEw@s zt#N&AQ-ibTlJocr0<$Nm95~WSmnAjRpyM$ z55Ya!H|aRlPdGqbR-E!v3G&;0D((d=E7FPGG%NHggwTER^UNwIfqBnMMIL6J^GiYw4aJrx$7DP( z6wYo*!i^R$XPG+w8i=JV+??)N8OC#w@B!&^N(~L}?RNi~)TooS*X{cn1ifhL5 z${CY5T{01Z-&r--u=RcF+y4%f-lU}a$QJ5p*xHS%;*PX%22ezx3R|HU$ngIVf9omS z6;hEC>Zu|yctBk+jwYT-d70?Ce?VZ_5qU)#p5t!Qbl@0$2PAgLIl11T$QWbU!kLDn zI46Mt;A3uuUc%X+bsX4C?GOn?Af6;jAXewpvbs|#FXI^D;54<-^0(^6lJ%R#l1~qd z=OhuSv?QWoH7MN-<*!BTe5?xl~j=+fUrM1jFAk-KxpBYy?2oj&-2*rnYTQ zkIQ%ZK5@pY;Xu!#U9{UW_C}e^(y{*jJL0klV|gfG*Bk+r4`bHoJyC3zCBi zzei1C4!z#^0Bvl(ib_V;Qo)#+$e{vs3nspmeUN+`ZHCGR{BmtKLgRT%4tEoPXDrp< zQqa0*wKBFM;43nOW?-igP}Rhy{x>#@mv^CMScA~{=m5^c5j5p{O7OQ-#S#vULa*{6 zzkuG3FQuP$eL&k2cTyg2#|tPnnneXwmr}5FGWqhW#?zVljm(E>c8LT_}pPA=Yz@V%?4M z_XxrrUE>IAA$hssBY*LDHB>9MHrmNl(sOfFF*z455CTHwg@US!T?!YW5BbK|>FJ_x z&{O5}DTO2orakK6etIzfo3tW0lm6^S(MRm(v#27M3j*GdL=e-IS9u{qQ-+TL4?&nF zwaL~9?|>M-L%INpz~7E~iAa*%!T247%rQe}=7P)pwO3ympwY#G-WfNW*3A1hwU<}W zCuTVv(o1O5w0X2*=3;sh%KzO6Q!n#TiI-3wIU9H`l3bFgm`12D6m8o}!Lph=a61c0 zZ)E{D(ZK?s2$U8P$MK(+t7>sBf)n%X`_A{u`bl%JDPr9RFDH?V{Z@eb znMDCy3w2bUvr~Ntu(`Cn3=cC@YH4O*31+jZB67vm{rQIqs=tQt8X&NErWP;ovA0oS zhF*<^;$~>IOozTYT1`HJDJq7VJ6nsN3T`?txASmre8Y;tYMv4kYbJ?z*BUHR2QH7h%EyBA@_vL@j429ox z?bLmkP^W7a1idIyk$#*NYN$@)-gP*Y0NoI`p%+@I1_O|3p&?W@MJwnDXEyZ<>r=yX zP>aq0RAnBop-}Uqvh0y-$2B*NO9jI%C=0kd`wAwb#^Z2cR_3~xoxc*oj#PkfoBUh0 z(~3a%+6)08FR#!&fdkDiqeLl>vt)C$oE}Teq6lK#%063iV+aA|=z+#fxiklIhszMi za_D&pH`!H%g9sN^qWWc3nGkB|a+MtIbR!3wXfDo!4%rT9aJy1IIg1j^ID6%D0i`c< z8FzEa>7a-UuOr%daBj4xxhvM!Oj0Bifk8-;u>^g5xQVWb+v3Du;+6C`ET13)p2%&v z|1=O*GC$g&{57r}`&hObLotkiglvr?ak1k>7rTC?J^A4t)b#(A@*L$Ex$}IaZSVDN zDz-zC8Hp?c67oPp2yHi+`z%W1w=i{Y=E;8tnOvc|X#4*8jvc$-j&{Dsw5%>)At!-B z3^=PEQU^I7BL4>|e-APx#1ZP1_K>z@;j|==^1pojGEJ;K`R9HvVSbL0KMHN3Y_kQpFw%eDrTl(B$X+;XP zCW=@oft2tl5@|>yMvUPhF+5{~T3ZE)Xh5E#O+yKhM=S~<1yZPDg_gEL0i!^zELtqv zZg;=uey{tQ@tnDL?svc2-EFOZ@w++SnS17O&pC7E%*@B6l<;vzXuyx~`CnineRLoJ z^|xxPZu;cF184MjdGP!?fVflWJ&>vINo1@5rg0rR>6+&tzs#>Y0q}sI5K`FtZ%tUf zt>8{`tyUH!l8BJk42a4BsX8mmM13Zc*17+u3Mby%00w2Nv8rU%zV*9O23{+2bgRG` zBJ{EqWJN^$q6NR0SA!YZU=~8?ml#(J+w$ZtY0mySK(-&`@y!BT zbf@Cs3}kx5xRgaoMaJlUvQQVw1&4iQuc5b7(l?H=K@T{pGQ7b zhDB&>=QUOS4QMwQ1HQhYDdHFprWhJCRkQ7DTSD|ORGvN& z5-Mw8B03-qcyu5QEhnmgE(biUQazCvFkw%XqHz@tlu}`JO!5)Vzz>extN7?Z_hMT7 zcj3snJ6<2&W+w21B#T4oBQV_yc&x7sUz~zd(xGgd`A{AFA}WPR33%`Pvmrh0&$PhD zMfdj<3k|sC)n^qS4IH1A+v zs0+k(8I5q$FGKdr7ccn>o)pHJqJ;lvI1veHnVnZJGCSeCOO*QJxU!LULhFxt*EWb!^7=Ko&#(ABu&ePV99?B?s)81Fhl>QI#qF$9=G|?Kt

                          ":"",g=this.options.liveSearch?'":"",h=this.multiple&&this.options.actionsBox?'
                          ":"",i=this.multiple&&this.options.doneButton?'
                          ":"",j='
                          ";return a(j)},createView:function(){var a=this.createDropdown(),b=this.createLi();return a.find("ul")[0].innerHTML=b,a},reloadLi:function(){this.destroyLi();var a=this.createLi();this.$menuInner[0].innerHTML=a},destroyLi:function(){this.$menu.find("li").remove()},createLi:function(){var d=this,e=[],f=0,g=document.createElement("option"),h=-1,i=function(a,b,c,d){return""+a+"

                          h^w`Q1m|MIVxBOnn??+`vp#bA9by}>$cI_b{Wk$!kp0V-JXf;QE zyJF2f_n&_~7;`6rxoE*Xp0JxiHDY|_2@JfP=amD)$3_@JSG?VMl%PCc94egk&fw6? zLJCZr#|JbPQo_9E&DHmA>`rEJa12e?Vsg(r*RrnGL!?>$*}W@j z9D&V#O!06AS`AE<5waTwygyXlK+01+b&t|mFa_IVGGmJ?MZ1}rI^$W_gEs=nDA3K@ z-7tNm+-hP2SX1FB3ee6%+x%5c4&u0p3{($)=TNP9H`XTo3apAA9Y%pCgzRIP3vqM*Y@MkY5VS#l?bglsr2)E!$n0~nfM;+fk>@8CSO zNo~1d|2U6=WFp0#3T?YNJa3?)EuR8}GjJQ;i78fIe-&WghlPz*QU4~sD(7j8?SBTg zsMi;#mYp}*?A_&I?xK$yUKSp>2w+MMH&xX;1)}<|GsV8AUow-q+_9A>Mx1$qO?;Sl zSFVA1TYY&@AI<@`fjG71SQp}^jt6A_(V)_36>!TF%i!PJ&t;g*kD+`dOr^AYh1I+pn$rxhP70(E173N)2G2iNS~)muEx{|V!f3JHHYIq3 zXkp&Ev)h{WUa8_jYj6p0nF-^R0%u~b1?6T2);_)%-q>wJ|Hx_Y8eR*pRMJw7LX4)o z&lz{YXk?a%{#6&lM>i@NAzTBWd+Nq76|MTcbR{L!Og*zM;EhFf^Rk&;1ZnUn%%T3>f#^ zfu!99J;RH@5EB4zE4UU=Zu^^;?icUt&!A5l9c}0(5JZY$dm%(Q>B{x9d8#$b7b!$m z9GQ#R&)_dIA@=B=dN4)k9wrUQSNfoC1e{f8N9v(z+J!oa3)PaaFULQ5y zFG|-H_LDgNeuoPva~mp18leGc$5fPZI3yhgT}@bnqgDN=#%V*=Rhte|4xfSdRXjBr zc*@3b(rJ_9!l5>j{+^3!L7>+t1&FqyE=Mbm+0k<Bu-6)lFVx;5&srP_%z3Lp)*Yo14=H!e(f;efk zXTa&WyM*9gB0J~4^>0u6@cbDZy~@mF+xr;)>L2Qe_Z3&~R7qn7i#!JZs}aNm!gBj} suATgOJpa*c=qPvz--)3CA5Q@M7hJ5UWvKuWBme*a07*qoM6N<$g0~)UQ~&?~ literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-hm_shell_san.png b/BTPanel/static/img/soft_ico/ico-hm_shell_san.png new file mode 100644 index 0000000000000000000000000000000000000000..6e43508f959f27a84d9b93c4c90525e604d2532b GIT binary patch literal 2479 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 D3g{h8 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-java_manager.png b/BTPanel/static/img/soft_ico/ico-java_manager.png new file mode 100644 index 0000000000000000000000000000000000000000..ef046ace883e1895b3e8fe2fb340807d65056591 GIT binary patch literal 2974 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-jumpserver.png b/BTPanel/static/img/soft_ico/ico-jumpserver.png new file mode 100644 index 0000000000000000000000000000000000000000..65154e0dbcdb403069e3a744553c2962610241c7 GIT binary patch literal 2474 zcmV;b303xqP)Px#1ZP1_K>z@;j|==^1pojER7pfZRA@u(S!-;Q=N0xXc48+^e1VVzJD3D=At4Eb z5`r2QDkL^2h-sT>w{(oQn>0;mMN@wuO}qZ6HdW9Kv`&>em2JIkD$=;^2NWS#1SMAp zNs}hz0wJ*z>^Qz8zQo_2$NroGi4!v$x*t5rtIvL~=bZOB=X>8{$x}Q@MC4QYnC={B(7@r^rA+ah9sZ=WC8W^V#tHMA( z3Fh~q1jMR&5mNz9n3a`f%FoZQ*6DQ1xscez$wM}q?Tf*|!E0`}dn_tcYHF$${h!Ir z%`L-tdAM@~(y6H_JNh?`jEr|jY}xW-rBbQJgn~FfCz3gx&e3z{&i(G{)vL!LoC9^z zs;a7Q@7}%p4ZU7(68lEy=QG&V)%EG|RQG#WjuxgJ(kLs;9uz`$p{y}gZiwoFb=+F-FI z7K^18yOakCq*BSEqN3;UeJKRA_xJZV_4V~NvRJLw9#RVeuTD!#)3HB_3TqgbELpM= z6qVh(ckedmXMxpQY4yy^%;hUruG~ynM6u@J0p8sYT7cXnJuqR@`Sa)BgkUzK(O6hl zSND@ut5$6RwM-N`CnskO1whho_ysP z4i(3QP(Kb|nSg?F_Gf`oG8ku)W9}0;x?WteEw%%5!0m@qeGFP%n{N@+Nk|`bK7Ltr>&gc83d2MC4b2M->+c8nCq3XtoJ-EdU(lPHXIST-C1!vZXT=$mp5 z=mUt|M+*xJYwHUQih>Joz2O-AuH2Fk;oemPN=IkZQ8USGOPuKK1hf{I81H4aN)w+Cr+IBnb`E$v0}xFnw>j$ z{)Pv+#T1B(LOcra{PLs<*5fNXuCV=BUSzU#g+Xc2tXEg-_ptD@EL|S+NE`!k1&m}X zAXSxW>kTg#{MqU%UdkQ9~QpDI#r4GYhu5oA*l+atA$kg&oRYArxGL1aL*W+sTHakv9g2I<67ku`%*iZVta5bY( zx~ec^1IB2@)`XB01yb_VYZOM6SrU>cg4XFE{Oqtk{5RyZo z6j>@RoC-#6VMd6Rh+=dPhNHVoBIlS$bz(@C4+!BuLK^3RFWNsrB+ZHEK#I9(>1Yv? z0*`>Gf(sfXrUE=Z@MOpnA#*bBz~ z`1ur@<{+j5KA+EPx7%-12fbdO&l959G(Sk42z|m9%c#$O#qdhuTl)Pg{}?U}mfxqA zXzQ>d+9Ut-ff+lUPM6PIDKAivVF-5-uh={XF%@7AXLxwH9g0kvOs2~9>({@yY}v9> zT=~+(E?)vB5)dkdKxkSBg`HTCX%u?Au(B08v(#vkF|oxG z-C9|iJOi7q2-v3k{C)1v{I|Uw2$#X&-KpN`&nFwFyCcQd!{Tc6b-Vr(81S@)yfYIR zE>$X(8m>`QRrRgSn>WA8I|zig;x_i-&6_t*<3`Bj@w|w!kr8k^&1Un4+S=Nei;9Zs znPhc19D`k5UFUDyxN-WB)0H?!e#R z^%Yl1&FJW8_qA)+KEOrlW2e(O%ncTY%)x?@fxEy=95ZVZ6BBosMg)zDK&f?j7H4E+ zEMp$j?R1X@y#WX4;SmA?Fa8VqDd~cp&1Isurl#im8#Zis0ft(KwZ_`p+y8at%9Zyz zIyz2a7e>V)F|lZ9qY}*LQwgip+U@apCdk#iyu7tsl+F#SrGuv~`c0HpvA{GuGusHw|JJU@h^qpt<0Ep$5mYJ(8$CtdhELV0=luB}_QzE)XTxr@IefZNu# zwzf|$Uc7h|KJ{<@8iW2majCempc5~KX!HQS4kvt`kqSEcL4oU?ots)WE75m`Qg0*&M2HPzMCFVIo7T5UFhK#0zN z{rdG&pv*t`nKZim;QOx{l3Br18Hd_ym1n`Y}jA~-nq#)@Eh>&7O oWTX!x%3=qyr+A953=+wI0dZ8QiV1p9g8%>k07*qoM6N<$f}8HH;{X5v literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-linksforbt.png b/BTPanel/static/img/soft_ico/ico-linksforbt.png new file mode 100644 index 0000000000000000000000000000000000000000..1a1096573176a2a18615414bf2039915487e7a90 GIT binary patch literal 2088 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 Zz`u#~is9^IQZ)bo002ovPDHLkV1jG7Xw(1z diff --git a/BTPanel/static/img/soft_ico/ico-load_balance.png b/BTPanel/static/img/soft_ico/ico-load_balance.png new file mode 100644 index 0000000000000000000000000000000000000000..f7aab18cc8525dd831cd546c1da2b7977ece2afb GIT binary patch literal 1137 zcmV-%1djWOP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB4+et)0RA>e5Sxrb(Q51e}<~d3c zjv^#T5TW*C7!mEnBnZkNTbM|MEdnJ+XLhY~6Gf|0CvY`o8=FW<$Ts~*o1ld#Bw^XF z7y~LaNIK>F={r+b-aN;-@8KJoV@4XpG5=CS{WI$x#f69RDma|nu z_4`##9Wf-S(vD3GJfnD(Gw)kpzO{qrVLUv5UHz)Awc8DXY!a3@cJ1?U3J+jcFB`@- zI47Oj)gT3GE@q`grtU~jX2&GrWCc12` znz3Bt#f;=S!%pps8F8AiT;tulM`TH*>w4(Ji1gsoXjZ>hb@h*)I4%{}0x=Blh%D>v zx}hsSwO?HKWLZ`vkMW2Lv~giVxGquqnEJ1FOf}8<<``Ifq{XtWHLEVa*xMT(cRts&5CiWzhzD>TQkz%-(RomdK0o& z=p=*K2SwmrA`WIGY8b|{L;eal_k+RUYaWjqNMB!H1DttAzVM9YNUti2ax@SKOk}gq zJ+%RatxqjOv$TZ zDDLR;MVZQWO{J#f!oUZ)>EsV6adY@ zDDQ+i2uwM$SOv-iX5uvJLU1+6c`sX(bsGCDp5cXsg?*+VRv_E3z`h4qN>;NOlokj8 zY=)Xcq0pomXl;kXVGS}en%ZZWdId{?U_;>2k-cF7_Xd<#@TA5EkNKg4ySA(|8NjMJ z1o;HU^_ultX0wYx%+s0=Z80PHFbifM#Eh7;kq>Qley90@Gx`M1Yr5#N6?#Qqr-!Tr z+{5b>CIK)zP2IF6kBj?iFWw;1IMhiC1h*!AGtl?L%}h?NV?zML-$@QU`}%7{yD<~i zDq|d0Lr)j%xD{vavmoFr8!x4{?vcxozQOa+#xso|u6A~I5|&D88x=89?jeGTWIrf$brYTM-Z(}VKO4cx#J-+wm2AAVI?VcYhr+&R~ zEx*9MaLez^pg4}541W)ET{#`cGBIB8*ZDQB&kr*-EPh~fI5*LW!*VIl`pH)7I3ta= zsif$#M^;U0=8a!f?YrB1@$@S)Qq?yr9Evih;9#c0Q654gBqKeLhY-Xk1$yZyYS;eFYen44$rjF6*2UngH-w4PyWR literal 1137 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 literal 2061 zcmV+o2=e!dP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB8cS%G+RA>e5nR`stRUE*7_rXI! z5Vex*0i;#8hTx_kVsF;c5B;ZLvlVogFCySQn3)l9l={nS)~qR0VQ!RW+qP{9$k>dGMCRJ5FU6SmRrq){ z1je&r@+BZk{|-x@!IIll82d}Z7Pg!_cWx`jtc8bc-MKjKfG>VlZv=ScZ5YZ*e2Qn* zd!y~IF_)v(u@j<@Jx_Fiw@*X#L*`Zw7|B7D@cFu1f*aVW%hYx7CCaNI`eeLvTCd+M zY*ePIA(L;G0lFLvF(gyT5W?e|atL)HHyVp9k!eJZk|8jRCz9;V$;k;d!rUKPks-1~ zrjhwdhOo@(9J;w=j7Q`2DP+=7xZ(8N%GfT4$>i2_UF zJHXhh6DCafLN1QTGqmc;h9JmUT-TGb{QUg2EiEmxP$(Y7;}~4Pwg?s?`n1cJFFWbw zr?s`UyAF-qr8?+11wIJ=9tZ4SwQAKL-9&y=lnmLkXOC>btF9)gsi_y}`^W`aUS3{6 zM@L6A-X4Y_Ls2q5i=d12UjiCwpTQw*V2`Dwq{L8^R5GN#zCIR-KY5hO!1CqG z#mm2YqcJj8Sy?&W2))u_XFF^#!nB`g`~R@B9Tswls~tIVuD1IFH4C8l;vkcDfCRf^8P|K4~tv<^o zuzz?Eu!a=MiO8ZaD2sz6@SY7{wPX@u!o;QShgpD zE`>f}T)?k#PvP{(Yz`am0}kiyz#S8lX8NIe@zDp}jj2YhOs>~*H@acPu62?CJsTl{ z9hzf`Ck2!YVQYl)ELz6lU)J9rSh5n)g$e1rW=#ZG3ocUE>- zt*>dFj_sOByURUcPp^_8gi47d&KS=Jk6ay&kxSN-OJ-t}td!)EDd-#qjHW&s4C*Sq z>(T?iR@abQ#LQb++E~qQi=#f8Q|_}U8N!FrR5>b9)_>$_G$=9eTz4zqQn-WRk63H zerV-$Rlf3ke(CX1cAX+bE&fLE<$9CHmGo)|-_YyH)+HD-j%f8Y`+EWRpugN`(dVwf z5N&sRv&0I=psShbVcAh?)-0#49_wlOj4~YF`H+8%F#&kJ5!f6a9-g&i$&%(CHvZS5 zcO{&zUR*ZD6Nj!G!~b>8$mWTP_4GW{GeV@A%*qtfGgf*rMqU>7Vcc%^{1F}wnxx;K z616L_+@v}Gb96u5WC~&>og;ou3jZWgj8Zb2Be_;MnFQSv(P7x5+~`C@LWy% zEV!O_3w7tJQI|hPLxBj+TMSsDS_uyjA2^xx!;i8dx-5Au;S%{ciX@}Z6W}m?%m`-g zKhTdMKlQvD8DVe@tzkoY&&LQe0U#Eo67lqSa5Urc_jCkxIkW;c+7hZSx}cgMQbk>^ r@`w0)x{>-o8Sub>2L?Q#=7IkJ0XuI`U6F6Y00000NkvXXu0mjf+`7C} diff --git a/BTPanel/static/img/soft_ico/ico-memcached.png b/BTPanel/static/img/soft_ico/ico-memcached.png index ebe679986258ad0afe48a0e2fa7ce69757ebba5c..cd6d3a4cbe161646059678bcf541b00ad775f16c 100644 GIT binary patch literal 1705 zcmV;a23GlrP)Px#1ZP1_K>z@;j|==^1pojBQ%OWYRA@u(m}_hlRTRfhyW4$sce{O2T4#*|>8Z?7kcKwgDDyf3{uyv2I_5ZrpbwMsnN$|P9QIA<`$9F37hd!1Dg+MY$#~6 z2R6sYq(&8e2jb#Ql)1E+*1fTtik>PbXHqK5LY+-bPEerNPdCn;r0PQlskQC`O^l67 ztvY6lm9kepN{_v=jSALoAg4E#;!S3$We29FDA4Dp#@~5B_#sK19g8n4j!@Q~C-pzlE1q5>*?`7KIalrJUfpwr}qx#VFdI&WO1 zL4T*13Nwi}nJ8=7D%!MbFXcbJA>v~wi8q^hgeR%BwweaI?@DO|;od8;d%WVs<^o?EL*dK>9BnL z^R%{Nr~`5wMc){rMS{&CTXVx~vC--+6;xdQBEPIj zT*c)tQ3N8ZQtnj-+IIX4@W`U$C4q@|TI<4$s_2avJdg^rzeG z!#UUasw6$PkT&l4m^SYGMEo{Fu^v_oJJ5*owD~$~Yq$V7T-61YD@Jz#RN9hRLsQLK^vHKdpm;-$s zZFHC8y|2EOP96Ay+W)Q*F?+7y-uA1P=;Sy1gpJOoYt(nQU23Dkm;-^ndo+rv!<$v- z&3dXmc8CW2nww1o1H94I9X%wTg$+!lq27B^8x_VJm>3Q__p) zaG>S#dD#j9TNayBwxYtA1ITNvi7wd+;p5njBc}2!03d@7@n4C}=@$8u0gO4|Oi34~ zHDzjy4X*D_i|RUn3_9F16WDNa+MLKX4PeXxGan5->6!fHB1hr&rE_ARPy*TQnzOPM z0yf-i3&%|Z7;^xmWG@jTp#(7=JL}A86r4T-)O7x|l!S05r%`H7o@_;paR<^kMRuiT z$X1Bfx{G3=270^2p&S<~7tJhdRfJFAO3M(o3^Ka|Y6}viWao)Pyz;;^F*-t32ltDT z$hq&o78ib3eY;=iW`gx!h6`0vi>w)XJ~+ zitE&YeJr~uwIOVY9!g^yTBkMit+z2U`VLHtkJ3m$>%c;kxpbxKG@2`}w0XjY7Ngwv zbkeASz5_V840dG~ zZ3mEckMZ82gT4dEGP`bZ&aQ!H{z6gjK?q#6`8C?~?&tLEd;6$t`<}3B2C55X+dmY# z^4*`&Bb#3r&v^M+*wCWuW`hU@I_Nuazq><34~&Ew*bh*A!mgb2a4EUx@!pW=ro1)l zIXwu)b-XNO(BbRntSS{{MLY`|YM@Ui;)II4_zf9!J-%j6r%wbc4t%LCQuKwCyQ%s#ufYK+Rb}>)iP>rs zWs&sUrJ`OL28TIR6uS8|hOfI|MTscP`mSB3USA8VgIOoa=iaOwQ5!`L-Jt5-#mCLATa6K+H%5#YF=E8{7ovXv4v>m>`|Or*00000NkvXXu0mjfQS>;7 literal 1678 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 IR!2|#1tw1_;s5{u literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-mongodb.png b/BTPanel/static/img/soft_ico/ico-mongodb.png index be7b00a959f2ecf0f7b216eea4bb03c7b97605a3..4d40d8b47fb71748458b9034d120e9c4e252cf66 100644 GIT binary patch literal 1464 zcmV;p1xNacP)Px#1ZP1_K>z@;j|==^1pojAVo5|nR9Hv7nN4gPMHI((_S4R0?Zo-0-Ns259)NO#n&YGVy>zy~d*89JC`*wDtNPU9HM45el-y4!9n|7&rjhkbq zF9KwhXp;|QpFQ@<+=srYPOSb^JRJsMhY!a}>;k}fJ^x_tx#O=N`9x1BX2(?WZM(f$ zU#edW{jkjsi;Z{%5J}D+8b5LDwZk79gIY!=M6$h(lHND;uvhoWjg`iwxMw0(0ja!o z;Qp5meqd$Iy^2g^RAf7CDU^vmd{_FR`by(+v)r7QLiof)Yy#8)HGS}fnYVTv9D7XB z6axfE1ZTi)O98k`RM{|d=5%$wde+jr64TvEu0HZp3@92{{M4vhiHcX*Ag1^;K zR3(v`O5K;4&OFKn#1Ix>X3c$rI|pZERY`{6HTy8Ij|8Zy2R)_lfK+;hC`9L`$OsEa z?M}^UmNtsv?M5A|4)>ix(27Rh6ipr&+-csE982!uheSq5fQ+RvZ_cWwHjMt#2Al3Y zU>`TVV%Rv5^|X<*CauHV92p@28r*G@Bgwq1$qDKtcb4wL1~25TG@^YrhNww(2-0tc zcOxStATgSp(uWfhk|Jy97>zo0`j&{>UNbN}-Nn{dviG(sw z7zXTa^>D{$yS=~#Y$P(t-N~_mz1$QDApyypxu0FY%ukjkbRO6Tja?-u0;>^kBqRjV zC=EBi91cfCNB}w@!G%oAWYPbZ$n9_Dc+5QkN|-2Mk5|z+j5=-8`g9G z0WA3V`B4!P;MUw?$MNgvK4t6c)?$tc!kO6Kf{yQX+)jfY7!e@>oAcFk&PHn)oD4CI zn9E!RfHQ)ivv&fv5XHmNy2wqD5E6h-SgmsNdiPNgbkMZf#&-WDJjc1|EVtHLLJ$06 zDYW4%wbq?N&<u$X|a-iGHm8_uFzb^l^#MMFpcIN{h!n-@L1UFkZF z4Z+!925#$ZFimZ{Q?Xa=%g_@-NB~m3TK%E5)?5H5edh12G@}0E2I)GF$An>kk*{5^ zouy*}2n%Sg+E=Q-SHADq?J74>X!=l(x8u9MU0>e(t-03xlba$VEC4D0Ts#Hoa5V_v z(xee)_7E!*t)ujhHHbb`u0r`j`Bd1s{o08_ECOt(M&Db-2c5=p{X*fZ zg}1$$yUNZKBQ^m(L>6j#VK8saCWeh&@XLxNB_-kzsTFvV9FoARx+{xc7v8P>QTdji zCQPhv=DeC$gzB*#rcjjRsjfHpi9nL zYauaZ&P}H$#-`M)bm_*z;_^3(?-b7$KMh=8XzlaAKxCp?cc+fN`Ton7zWDMZcjoy1 z7ZoGEw{gA1QibjW-$2*rH_xqKseIRLI4gx;7EeR%hgEC*^hH3I;*E{VjfPWpTCUAa zvC~%pb*M|KX8gkwaeVYuK+|?Aflq3@+ZST5LcQ2_v$nQYSt%5j`t(meN%|Z29m*}Y SGO+jn0000o49=d literal 2067 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 diff --git a/BTPanel/static/img/soft_ico/ico-msg_push.png b/BTPanel/static/img/soft_ico/ico-msg_push.png index a5642603f7f365997918b6b5c709a405bceac4e6..2b21c2ede32c77811ae4395c18780b2eab178364 100644 GIT binary patch literal 1819 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 literal 1453 zcmV;e1ycHnP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB67fD1xRA>e5S$$|6MHK(-T`ozD zwGwTO)@VNcuS!*f2v&or2oXhE6%}o(&}eNXIV%OJTKq@s&ZfQAkAl_uQL0g>2%`Se zf~AN?EsBV;b9dIOjYK4srjjPT8{h8cuD5qP`*GP`TeyME&ilQuc{8{3-b?_`rX`>B zlmXL!@fIqRVEXDZ%n@Mxb4NS?IHccFDjhKap|q4TEP9`)Gdo(QxmgzPOxO z1w;sI^oA={pYZRoSkcg8`~z=gEi;D%_uB*+UuC0x6D)O&Z`rd!km+N7hH+{=5Ls_3 zFnyUH#d4Xq(~adIP~?HwEcI|fC^{!v=u107C^nwP<2ITIyN8d6X8Owop@{NTq3_t) zlDxtZSNSWBxFg8;R!7_w92Pz%z|}&HY0d!SBj$UE-$`qKjGot!7@Z&f>@fXB%TfA5 zn{ido;N8EPY}l*_!=S9GJS$@b$5sBURLSQaBGoq;D!}5esC>yJCM5p0-cC=tteKpa&$3LX;#%c?NLutzq^zZ0dd7xA`(Fv?HHf1|wO zv-I~n9LC=;MUA~H-!`X~kh9P7UWgrSY$(N5k<4okyirBohah^8QCvNbS!dBTbiQT;m9ii<>^;T4xldfDW<2}0I`@- zs#>CJkt*K}MT}EM^l=5?WP$1Lo3NI?*@ z{4s9re@Hz?fo-5?C$8=4N3RmXrAWbpwBs)jLw$%Yy>i)K(Hw2ViuOsV#XRHHbPFa= z?uAe$(1bob(dFw(IVF6yuvn zZwy9YXH8T28XDAa;PGgD9j#6lZq;;Pqn3jFy$(f=@Bz;y0= z?D%`GqfFI6mb{8)Ret35GZ4lTw4#UUpj7Wi+>cD~6^TTnv>K-d!1(<%s3~Zfg?=2G zGV!jpw3{73hW|(j*8k4w;-E4kO#d2@$ObIz*hhmo4k%xek0oflpcShZ`2WYMs=q~5 z!g9(vyHFo{9>zhv!d6)z+eHk=k_TvICTT`{fTl}PuPB(B_=YljZ$+71J#sPd-+Hq7 z7{$_0iT1-FF;y0bn+N0WB|_!OV0Z9cEpOL4J-NV<^i$Wek0eQX4>wm-^t=76@;`jTz?v5Alo-6{ErA!-5m#-p_xZN?V>4{Qt&KbCr+);0+5V&B=3j=O0BQ5hg>JPvXF zw_i2Wh;e5dppBW)(wQ3BX7o~S2;8<#!?0oAlWT6@0Z?0QeMa{#`oLK@)~l{e~5Q zk^^|L@OyUp(s85IS=EA?>+AqVolOvJ>F8byYY$=ws)Bac2@% z&X%{BS7q;;W-frQbJ%+aY6*Z<>Gy@&yh7uzBlb0qTy^7Gs8PmTfZ(!j#0^gGIv*hN z*1UI%h{UL~1){w&ftLaB^Snp932~O$fiI-vmP%$33%4o&V%$|4s}IH{2p@|e5&$Be zWkREsK*Iq*x|?FY#Ld-kUh%2}5E?(Tp#&lX$cQr~iP_tfUrr`fg0?C^#`rl9K7ejW za2g$Y{TyEfpwRdd2n~=BXE>D3bh*l@$Jf{bWR2%PVdtizVb(9C!ikcn-<&wJ0mvHf zttYy*>%VXDd|{FYL8(TfF>z)JkY~K==+f)`)Sd&O0Pdu^ngC?Gx~Lz{Tc3ddUyvAe zf6sD$m3&=TgbeF|7AGxvpcI5E zZYqQ>^=)S<9e1&A_6dzL^gvw?ChkC$5Yk!9Yo|vkr6=f*W0W8)p8uG7FqwrcHNIA= zIMR2>FoqMeq~al#1wgC{Gf(82`_VLvtg}dZ5LVLF83X7_+&v46gtZsa(>Z;rnLKV` zyp}g+a$HLZHQsBrjF2e`gkPlFXg zSQuXmz+bH9_qR0ACBF1|pV#VTny4gd%cc&h>53nbI`#9yYJs!OW{sT}3a*O4rOdkLM N002ovPDHLkV1l;Y07L)) literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-nfs_tools.png b/BTPanel/static/img/soft_ico/ico-nfs_tools.png new file mode 100644 index 0000000000000000000000000000000000000000..d8a50ac855afc00294c7d9b6aef08773ed809653 GIT binary patch literal 932 zcmV;V16%xwP)2J^KnymF3m_H56p+C@ z=K)^@kP5<03dm6bPytXt2GW74Aijq@pKnsYnF`JwBod>&5qsVrukF|m*36F2K3GYg z^hsLddA;<~OD}E8pv;Hk^ErUacUWOV_N1^5i}^gO-2pIu36~wLQNy6-uvXy2sWt}) z`KSM2JeMgrk(xf_TW+>y#$ORazd%7=hot}z?!AyAj5@#66@kC(_6`hBT#fzo<1?n> zoNmv5zWqKiJrP`fiF?p9sO$ix&r6w2HO3#|vXma5z=?YWSYs2RhZcH6sY0@|!<967iR0d_pDh1Co|X zaYldN@jXdLrm&%O1XScgLw79HcrO%lg)xo>62kYiOe00WG9YnvU{;j>RLdWjV*y(p zA-e^`Ge^QdQtF{hnuvgCL}=uOi25oTorJjSQ0LhYd1z>00n5!q8n|po?mJ{f>%qdB#R%_0sBBa5A zscDGB9#S;E4_z9VtzeX3jVay49(cuPQz`~HS}Y2PeACcWU3pmN_@HwHEz|USiBJv+eol8a~77cCIS_CKxDRpR%$SDZAX9YkPfzXP?b)LX92b+kc zQ&QqM`|hCc8_>^8(_rN$bvAbHjBzBCo2qXZ-~xWg?tsi#8Y(#udfk;!%K>^n^D4hJ zfOTof;Ex4wF>V@~ugU+M-T|d;LJpuFD2>HDwcu$q)PyK*+jy#iDfJMqsOjmZ(MyMN z|6)5%^I_>LaiR+{m&&TLjAE#Eyo7=iTf+&gNf~*!zenU!Iu&-}4b3cFlr3;#V>}Ol z6F09+IwE^8epTi`6L`)3oK)s$d2l_G^wLW&y)-NT1Q-BFI7P*~3r$G?0000Px#1ZP1_K>z@;j|==^1pojA{7FPXRA@u(m|JWVRTzMGW@mOTyF0tv-FADUKxsvw zEh<<+vB3v~AQVlEhG)U=9B^(g#R6d;^M`Pd zbdXuZE%vVUtO`EuUgqCGI7tSH%(S6OU9m&rsmVRb-mAy7$y6^cMX)H~6zDQ;k+;#^ z5NL)S-%7fvAVCnMEw(UC(=a4GB6dVur1ofw(s%WQp3sJEan9tW0LeLhY?Wt~dxd|q z2TX=4Vito5QMPza%(SWNkyM}99@#6Miycq~#FJoJaa(-bWJ|{ zNBM1OPNb81Oz9I(z}IM%&&Lj`swC=beJHCf1iO}8cduR|1xoG{0n73 zI_c!8fD=Wa8`jLkP}8#9ooI{wJp7?LqI6S!R|S}%56RGT@O+Ug%-zja@+;Nh8is1Vyl+ZB;w@T46o>vQ^aSvDB53-4}PHC4JIbgcdmnd{XjyN;=)!#2bu_jNg!Uui@0H~9~WjktiLzXSKZlcHp_07co z%Wt8aVco+7b_K41O6>6V>W@j*DWGdpHRSlQvCq+;wEz?IrT_ve*R8=#m9K+YxzRNw zx5)&QAC?dk^Qr*C|48X8LSykW;NVt&JS}r$VBQsQI0;v1%Yt|L<$*^X6B<~D>Nx4vS#FXX-h|9HD}EXipHEvKz;H@MM!sLmQ})#WhQQq&>2L+Xs~m*B-wdunRtJP)>JV2>78+oQ#; zS&bHsIk8zqs5s}0$s)~_BOifZ#mpGQ7IvIM)yhW(Y@AiH-3kQyVHOK zMF*K`uG+iSb6@bO+2i$in|OL+PqJ4$s!b@DP?>E#mnZlXut6aflGa_&)HDfeN}fZh z7z(&ua!>pSM6(OlBm*PZ6}SefKwV*ODLPk2lNX?zmMlSm0tE{Ek8n8t0Y90&H1RO2 QnE(I)07*qoM6N<$f}EiSga7~l literal 1749 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-nodejs.png b/BTPanel/static/img/soft_ico/ico-nodejs.png new file mode 100644 index 0000000000000000000000000000000000000000..14dc09706fae8248547aa03ab81d3ed0b396bb7e GIT binary patch literal 1017 zcmeAS@N?(olHy`uVBq!ia0vp^20*OA!3-q(BRide6mzkYX9x!e$L)vy4}jdC0X`wF z|NsB*J?_l&QrC^0Y9Qpk@AkSs}>8M9V_dbfA zs(EHAonB$Le@@(SFyZpkqJKJ9MZB&!)qCfO*PMG>nwLASSPZ#DM5wtz^bkt-3@ncNG*?9{NlY^ z`+}p(SJujF>wn{lOGur{t#^2zaKUZ)btU(+nJ2~@xLntl_Vk1osIQ+JCxZaDO!SCiGO_q)Y0v*Oj8mxtOZrCc}DuQ|5OqxX$k{apw3 znuMUvCH46QYdFVdQ&MBb@0Om*0 A6aWAK literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-oneav.png b/BTPanel/static/img/soft_ico/ico-oneav.png new file mode 100644 index 0000000000000000000000000000000000000000..aedceab72f8775df96f9ce60f309f06a37abad78 GIT binary patch literal 1848 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 Y4K}2XgTE?x7ytkO07*qoM6N<$f>-k&D*ylh literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-openlitespeed.png b/BTPanel/static/img/soft_ico/ico-openlitespeed.png index 9c73ed202e90ec3f2a911cd077433f05af3e1336..b4b9899b2dd2121b22e7bd66bdc17a23e46b7bf2 100644 GIT binary patch literal 3885 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 literal 3801 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 diff --git a/BTPanel/static/img/soft_ico/ico-pgsql_manager.png b/BTPanel/static/img/soft_ico/ico-pgsql_manager.png index 309fc55ce4bc54bad027286bafb6e001cf10ecd2..64fed4c959d9b07bf2700b7d4d96c9e40cdac9f2 100644 GIT binary patch literal 2701 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 literal 3294 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 diff --git a/BTPanel/static/img/soft_ico/ico-php.png b/BTPanel/static/img/soft_ico/ico-php.png index 760ca4a4f915aadd4ea9ee37e86c62ed222684e7..1197135d732991078c542e095f807e0b35abb7d1 100644 GIT binary patch literal 1635 zcmV-p2AuhcP)Px#1ZP1_K>z@;j|==^1pojB4M{{nRA@u(R%>iiWf<<(wQIX;Z)-Q!t-H~IY<5f> zuz_5Z5K#d!nh-P?(Rhnd)Wm2EKfJ`m7=IWAqZkdzOcV{GFi*j5+!`qtR$Yt}ZIi zR^%3vTo~|qM%nEN!GblADN}1!Y~1;3$+Fd(*(CQi?uiN&_ zvXu|+!k*a(O$B{kx5MtRUB6;#K2h&++RRi+QC1wsf)OAiimTT>{*p?g(@V&uHy&9| zmP}o!%3oZmU0QR$Z^AX~b`JECqr;lAsybcOx~-|Av`n0VRH9g#USAyuYl$#bPjO-XLivYO(hD<5z<`a6lxz^x<}tbtT< zdZsi-Q^HQ;fM-cRnI=wyf{IlSJw-+pL8izpUJ3!m9;e-WqW+^7j~{yfxwF6Qe>dQD zJMpbBRg#gd%xBIOOR}U=c6=*H3#kzZiFk%Gue3s6w|!4qrd-8}K_HI!AeBjL;!`4nCWW*&|yX4-D zGxp5JyadQg=`vM889atL<-F4~GSCYp0pGZ*x6RPt9PDj_4Eay#9R+DwPC*$zMaU3v zSUayo!y(8bG)gM2Cn*2eDNjPGXY$-nsS&2?B;!kkvcSUeAb~sW72PTv)zhy^M7tB5ZDJJc;Ntn`dEO0;yDJR9waEl+i5C$X4W+RIa+a zcI(qMn|8gfAOh41`+7}=7&k1SotG7=u2>ggoe* zfQKQ&tqSAOB2CQ=^_KRFzmwbx*(9aF0Fi;gW>e$Ic)rGXF(0hxHlCxXc>6k<|D;Hz zNhzK)zZ}z3fl1U7^`{VY!XaTQ<`H{O>$S#Tzq4CR&Ctu7cMIlJHF;mP=Hch}Ex+%v z7sAvM%qByF@$BI*aWEZ1bjBQHj}6^|{p7ZhPB&QXmOby_qQo4;jc0z`k6MHApT?ior`Mh9X#;U2b9D-JTk z+r*rIA^KrtdXU4`)ncQ(g-0lL-K;nvKr2QQA{|$4Jy*_K+M7;Ij1Bd(Vh$WQaNxj! h0|yQq{uAKw{sv#@C{ANhQ1Ji&002ovPDHLkV1mE^2>1X1 literal 1537 zcmV+c2LAbpP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB6Ye_^wRA>e5S#4}nRTw_+ZMVUS zB*utCO^gPONMP%TMiPFA{vm!OBoYEqU|H5NnZ%DDM%K<$(oU4bC5xYHH-(_a8Gjgz z{xNYHKhPiThE5Swei+#%Q@6p!cGuqH^PcY9-F9s=mQADHleF*WIqyBs`MU49LM&cs zYEMZ1afGmxMkwC%m>sPtmiR&o+DXg*I3@iA!B{dWrK}=Bze$oQt^Ze1yEo3Ke!lCM zr9;C*Z<66@jn=LE)M;bhuEc|5l$NZLX6h3u|`<_DhXuZ;HBN?(D`=8Hfg| zR|ezBz0#5|YCop19fxg0ZXIPSGp>#9uKJaEwFa5t5{xCDR18swciz$x?`kPU1?zMG zrC(BZ9qWjUu3)@pr{aZifNh4yb2H1rl|& z+3eKu*$}Q<^CJgfy(Ps<0!}@{$=4wgj^kEjT92|#7a}@?^W+9C=N?)rfI9t*vMboh zl;&sJnGA}t4W(P_fM0-lXB`B+UfY>w1#uei^nb8SQvB2$JF#Bbq|wO~johK+jNsF} zuA^m5v*6OoXFE<_HfoJG0u`~$=ehU%SV|qs(Lm*K?Su0;Ydpe7PcJtoE;KTp80aC} z4~*TD=8h8^v|%JYKB~@puV?-K2iE3IevZw0a^g%d(ryp zE47}fJ-aY~uL6d8{o>$sD#T;PwP8Z+^HE7fFtB#8ke}TX0KL7CQz1QaclA0{EI^^U zuHHq!MZiVCMZiVCMZiVie}aJhQn!%(v?gYmwIwC;!X}*V>d8iDh-s_2eKz{O-uXJgsY4_^iwNEhCdpj=e zzSMGFN^}b8;EtBs$^_d(vBXy78F{bc_zM|aP63RMy%j4ChVQ#NJExcqP;^9q?4D`A zEP^>wj@-hJ#HHcFZnT9(Px0orpF{9%(MIRtrzDLW> zIIP1;+XC{iwrg5&L@+&Sv=dVVaG)+ks(&z~?O4aH%ukI>)qs>RkDjN!6%~gSkH26? z@BNIfmXV>W&A?1iz1As8#w$*FYH(n`Q$}LjmL*RM0D5*gbfnieJYkI@aKVmdYSAQl z#huYwzxpnXuVc9DmbbDE9e)GJKB!wq+WHX&<1Qr=ecKZ7uMOh^w;Asl#gO{6UqMPV zM&!9W-*;E8leZ&Sd=IHhlT51@F-7(ADD=idHlJ;QKGtH4W8wvQISg5w$ nc3cEp1Y87M1Y86z1%bZ+h#(abLEqZv00000NkvXXu0mjf{RYa5 diff --git a/BTPanel/static/img/soft_ico/ico-php_encoder.png b/BTPanel/static/img/soft_ico/ico-php_encoder.png new file mode 100644 index 0000000000000000000000000000000000000000..25377e099dcb1de771228d9f9944914f31f8bb88 GIT binary patch literal 1193 zcmV;a1XlZrP)_Q4?d(PeiNAEeTPc_;{4ilFr& z>Vv{|XDw6N`hwPyP`nNNfOEE8VX!k27H(fSFbRR%x1nvx>rpi;2qTaY4iakgKKl z0DJ(1EsKVE0=SGW!lt*4q4MQ+LD~Wsozfp;8?Q1j(qhPR0AlzYGv1oV_0loTx*8S4 z7a&{L_fij4jlrd>^g=CpTQBuJ1Mss1(tH%l05qr0fpJ_>@!64tdDbm2Gd-}jXMWvN z%5|D4=;k#qUA_Q0OaB_cHh{hZ*qwL-5~~#kz%A~30Kd3?cmhBlDYUVeD7$~ZF(e4! z5`fJT#(E8j3gE5IrpVfx13Ij8B&n z;_<(12whWE^})i^lUK4<`V@heoUs{HD<#WALHYv$!~uQ{^<8jcG2AB$aLh=WFJ^10 z=ZNTI04KP?6HsV90q=uwFEc-1(kh=s3L!BmUr!%q=J9a$dtYp|%3vG&OGDvfFGJQMU!hZsAAR_~ayC2)ew<`hA>~V6I&aJn3Lf;}7+--^UHtHUj ztLtBYu`2{ba0oH~1kheXGbcmH^c*VHN{m{=58F_Mn`Lh)mdk+?M$#O~T6%_nJu(n} z4V@H#6O*U(eWYMQMw#E`ZgVa(A1rB=Hx@%jQY3yflIGo!LZ~?@L?{J%z#o8rBSMv# z?pmzGOYAk0=KmI4+5%$FAv_!|I^y9wF`a6+l3?@$Ow8Q2iu`=|iB zn~9yT>l4h*Tf>bn761q0bm}2mPz-<{@qvg209-VZ<^!U86%QhTQa)nf60P%9;cOw{U2(^aISUqvag1vS> z5sd=4^j9f)kKJ)elTiNv;!C7Y#l@aW00000NkvXX Hu0mjfr>q)3 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-php_filter.png b/BTPanel/static/img/soft_ico/ico-php_filter.png new file mode 100644 index 0000000000000000000000000000000000000000..4ee597335aee0669417bbe2b1a6751851fe73339 GIT binary patch literal 2668 zcmV-y3X}DTP)>>i4OAS};{HSwLVY(?EeF9j0VA1QaSv z<-=MiiUb9Md{{_HAiH_{-tF(a-M74Cv-#MeEzIQ3yuIh1d(L_1-1Bkoeal!+>sf)G z73gRMct?}}i@8NL`9q|prfEW^NhXumIxAm`=e@Rgn7Yg3KAzvJ{*r$*(-cxRjY%lY zSsLVgL)H9!40$?ZSk;q&?+inVYx2IWOZ5>cSsG^?O0%?c^??VVpu(7D=xqGRTj1@0 zZo5Y`J?Me*kC1X${oA2qmt=@8QQZYZJ%-$APP(H!A~{Fxim%0$>_xsDr!MtHNh3zg zEg4-Bi0{?B1?8ZI2~i;wen{!XFR&JwR9KyT6?OOwWPZe?*e1SqpSN^ksoL2);@S|4 zs$I{a9{rYa`Ip2IBl4`q6nI@nuum9OtNoXA4T^5yHronM`u6iyn&S8JQZ>JN!HNUz zMb6psp_vobySY22$D#}=@@D@4d%&xvFs`uI%QCCpE%dtFQ1FK)o^gJ^lrj-7*=04R zu-bJLWp{jp&H`Xx`4YzGd9tbwn&{%%AKfd1H*&EsqoK4H!SzjeYOK!q0`$F1I?nk) z%+K^VD=(QiYabO_h|_*hkapcr)A)cel!}+#!o%8d8>gSGPXYXeiHOnv!=^aCyC!pM zJ*YvkDDnB6_ zYl}+uegpe%=63rq^XX-Gyh9B3gx)_lae^ze;L4luM!mH0sc&X(j~IcYN5n$&MexMs z1jYV6GQut0qR^ZDn$-38gcPSGmvc=zYcCY`7Q8cD>7O!5aP~W6PO|&eAp7(4wKMx! zX$g+<$jWh>ZU9eDtM>Nef4Bw&J*>!=T|_V$u{OQ(Gs1P$gkZBxW6${xzYbGh1pO6V z%KqpR+T$(Ds5%aVzZFjOWeDx-@X88!Z&Z`2uLDn>l`qO8*2!3KnX_tzu=O6_6(it{ z9i`67T9Q@ln>jOV1cgy8oHsqzJ3@H=&mv#$7=k@nm2U8q6AWW=DKrT-Ta-u4iO%}c z^etbtN5du3**d|MS7=!LVX<9nxHuKcY@{(la0^1y$z^CvIF#E@jXv@t{wTOc`DfsT z?VcriuqgxSc`wtY8~99<6rtX|w&+0aAhlV068DA;?QvSG7L@)wR&rc>bn)UK{{?tt zB|NPsCOA?`p4fVYWOdsk!RFwvna&Eam-I6$j8!Qk*-e*7R$o@%$aj(!-fryX_}@lT)6Pi`t|D*kOz}&Hrr*Q3kHLOgg{9U;_9$r!%n8Brw0{g zuMD!5l`uv$2U?y4nc?AX=ZNT+`W%?6btYFKPM@V0#%zKgH|GL@z;GzJmmXc$Kk)ng z^-w$?Mr;SoR-(h)V47D|^_TPzjQM?lKd!5*J4`h1O#9O*>?d^uGp3IX^^8Rfao5gI zSmMha@YBEMC(`6g`(1sWsdf#1x;DQzjh7yrn@scehAWA7C1D}rdml>ZYV73C(0q*6 zdY1+fys<-3lpH9jz@VRm`2;-H7r4-E(IO1A)4{U~sE0Rh+&D2jb%uH=1?7*?B8Jqf zSLgfn;8%?|15_H>)n@iWGn4f#YTzjvH#c72Li6MksQIs^d*q{ z5#DD*le`Y~rv}vF%?@G0WwOZ#VX08y>!=pj1h;)?;;ns9@>GnET5;gX#W)v6;1Iz# zVf-@s20U)y2SD#%w4wLX81r>@yM2FnZm`iyc`-b`mFzhGP+~@s)00)P5o3CchU)W@ z3FDZ6j|Q^FFha3AOEb40G3Q$KLJn;;4h?D%F26wnpPDys-kEjl*1ZgL2vJJXp&!0>l&4m*ynO{;QD|A`c7kqCfw1)n#(1VH^b4PhC)*$ZFajkre0(E zB4fMsP0%CutY3XKP48B^scdYT&> zm$LxhWR4A7Q{!wayQ=z^Xn~udqJjyWxAL%m%pw}(XbHj&DIIFvHiVcxQ>xCG0y^ta z-Clk1qaWWxd^Vf10KIXafCf$`_`Z(#vAI5xq_Dk2v)K3jkthsn40>F)MF0EVFyQb{ zw+$h_r}yOyEAr)i$12E#>8xeK)MEux8?H30B6v;u&d(9cv>W4CA;)v3e?a*5TCq33 zFAii0tI~Hi03NPNmGWvJ9Zk3t1vnMowDQGeNJ~K9CS}lDyeDUpRah)o;z)xd`SUct zCadzO!yzU>$@dW;V^CL5w8tlT%UsUHy9G5l**fzdrczIIQn2NoX%)NL@<5UfG^^s{vaG6d>|q0wl9T&#ArIilbB#_E^Af+3FcPq^UI+dHJ1uZuE7FnJ8t zuNBf3x)%$%m&Pb?pAr);L)BQ(%^?_$JT$JL^8BrYj;0Mi|12xWS_YjWES zL9!l321nftyP_bfRNRKdRkgaJ6kV0C`E6-T*V82avBhHJk5GJam24E!x>tKLU`X6w zUH)r^w5KTH=wejk)kg-EU>es$#=#G`C>ij%wbQD`$Kt(f@brP>u2Hr}(Vi9PS%Lr0 a3j7DJ7$#5!Oh#=00000_Q4?d(PeiNAEeTPc_;{4ilFr& z>Vv{|XDw6N`hwPyP`nNNfOEE8VX!k27H(fSFbRR%x1nvx>rpi;2qTaY4iakgKKl z0DJ(1EsKVE0=SGW!lt*4q4MQ+LD~Wsozfp;8?Q1j(qhPR0AlzYGv1oV_0loTx*8S4 z7a&{L_fij4jlrd>^g=CpTQBuJ1Mss1(tH%l05qr0fpJ_>@!64tdDbm2Gd-}jXMWvN z%5|D4=;k#qUA_Q0OaB_cHh{hZ*qwL-5~~#kz%A~30Kd3?cmhBlDYUVeD7$~ZF(e4! z5`fJT#(E8j3gE5IrpVfx13Ij8B&n z;_<(12whWE^})i^lUK4<`V@heoUs{HD<#WALHYv$!~uQ{^<8jcG2AB$aLh=WFJ^10 z=ZNTI04KP?6HsV90q=uwFEc-1(kh=s3L!BmUr!%q=J9a$dtYp|%3vG&OGDvfFGJQMU!hZsAAR_~ayC2)ew<`hA>~V6I&aJn3Lf;}7+--^UHtHUj ztLtBYu`2{ba0oH~1kheXGbcmH^c*VHN{m{=58F_Mn`Lh)mdk+?M$#O~T6%_nJu(n} z4V@H#6O*U(eWYMQMw#E`ZgVa(A1rB=Hx@%jQY3yflIGo!LZ~?@L?{J%z#o8rBSMv# z?pmzGOYAk0=KmI4+5%$FAv_!|I^y9wF`a6+l3?@$Ow8Q2iu`=|iB zn~9yT>l4h*Tf>bn761q0bm}2mPz-<{@qvg209-VZ<^!U86%QhTQa)nf60P%9;cOw{U2(^aISUqvag1vS> z5sd=4^j9f)kKJ)elTiNv;!C7Y#l@aW00000NkvXX Hu0mjfr>q)3 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-phpguard.png b/BTPanel/static/img/soft_ico/ico-phpguard.png index 09d62a430ce7a6316978e8f3006d725e34d118c1..28a29afc8ec8695ef22413491623b9ae459da1b6 100644 GIT binary patch literal 2256 zcmV;>2ru`EP)Px#1ZP1_K>z@;j|==^1pojDdPzh2CGX|TzfER3_B)B$C zy)>pQdMcvbWs{RtsNVJgRuz| z48ed|XMh=In0>wdzTu}$Y&^{1u^Op-($$@N|K*&^PN(xG72>{Pk9#7m0@t)z;P? z!?_I_UP#7Ta%NM-B4tX@skp01Ef`8*REYH9UUD%rQqD0!T}%9 ziPrdu?lNkp;d0*zTLa9urN%zh-o>2!C)vPEvu`m+w1D;9)&^&K*zwD zGiN$)-n{vyn06O747PQUx3m`LR_XQ*0~n zfRJ&lWv_r-rchb5yS0_379JWLYP-Hpp;P8@RAEvTY08ZUNO3iL#W5E~7e&qj$^R)3H%af{|`nuE@Q(Ih$#Abs-SpQPw z17A<-{u(ybU<)3QD^!J=(u61K@cwb;$F5)A`ljc#*`M&fxufidY6zw-)i+R4&R$!D zAMg;y>gge6q1qms2@FEXZ@7Ow`E0Of`DKn7KV^AZY1Y`ql8mtB7)S={WJ+e0HHxW3+Bn#<0`Z0LSn!7X zucQL#6gxS_T9iyU8maqMf+xzI2akYq}kO25y1vgn!07dQsRqS2{9f8agW ztEmKlJ)+Zr!MH0jO@nYwrr0utV$RTbpnLhO?=8oRJR=?krD&4$StD><3gbE~#c<$0 zuK!z{;5P&w;96#`;5GN3VEM^xg(q?n16x7{EZ_7)2uP~{Q#6p|CpC^Wy5UB`A9p8w z@ntC?vFiE=q)0N5a7Slh@l-{&b{9Y3g~Up9P6{RcjFUtlz9NS10-p!j6?`@>)2f{(^&#=C|aN)vp7cXA?nb`D!0fH-!A3y&66DLmm0Ch*;+_`gKXNf6>??PG+ zus)rbn7D$v)mmO&-exwNOU2Lw1E0al3>8{2iu_BgwZ+he*i3;LYR_VZ^>Iy2&8O*J zF`RRdHZat~sFC;cne0+{Jf2xGydlymz^Vu}@Vhv!S}c|-Q0g&u62x%M0Z-de51(Ma zX>M-rI%@AhRD%&QydgHtLhL#W4Gq1)!X6%YWY3;GPq0=M!#RUWrP5*V&#|DV&?w~p z&JKtez9%-NgQ$lCMMXvBpwTC_TCI^CHM%xe0Zm$R?;}T!d>j04B5k|7yHC4Zt_d;a zp2&#L>=-~;iLDNs&9)cT(mI{akw74@ET(K35DBR1!!qDwb&YDfKdrNSk4w8dzoTd*5DrCdkuweZf<^x-oASE>Tmk{`(I(xS4>Nb zj57*p#QqTbp?14{AFNhK*Do(GPh|SA4};xncH|)ZvrSD+PvMp{Ffj0HPfyQFNS*iW z#NCOkQX-qM?1M5}zzh5633k*F4>RnCW*QUhU?W&h9y@mId;9nA?;t$~2M1pVb)HA& z`InfM5wcQ%fC7u;Df^dDpaF5wgw(o=y-|87UD~6^K$+UMwzjUrhYx=XS?wr|0?M4d zeEIS(=I7^!#MF$DwF0y<1Z8i3jBP(sX+5~vm}MuKN`AOCPOcXh7gvJkUukb|KXu^1 zfiLsD!bHG!C3%l@Jtn4Sg-yTq(g8wMH8eCl*3#1QRiwdY-g7t{BT#M>FQWHnW@h@K zaH6WJ>ImPkh@HLoR48NMkBp4`?b@|#XZfjuYfoy!E#STsAo%A8(;!n|YinyK-WQd$ zI8!V#dr_&X1jGgAu z(b4n6!^3}pX9g%Zl}RnUPvlGi0Xc)4|DiG6@-HdI3BPIhCkT(tzHL5M;EV4;d^c@l e8{1fiO!jXc+pg<>S9z%b0000+ literal 2241 zcmV;y2tN0TP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB9D@jB_RA>e5T7OJcRUE(fz8`>~ zi7rLwoTypL<GQq5^Sr;`L(p>LZugzm;6l`LT;jyUok_0~%v(-3wVO9@eo;p(EG#S{0@}+uMz;|)T#8H- z#bUuU{P1x-C;6foji4{G5gNt~i6>{wG~y_i^@bRs}F$U)#wSHPT&`ts0kNX3R&o(Vj3!9vv_kA!H1p~!U z%+(4z!3bs+CdEPMx-7=NUX`i_NAKvVkz-a>*Ub&1sWBBPbBQL3(&dKqnx6@8%&0v? zG=dc-UYA5RNN|bmjV~XqBf8ZU8tqn0nJEWVqhg?KRC)3Z!V}Ar-=dpfL6AQpet)m) ztm&DeG3b~Hmupy7-v~IK44u!c+emc4?{WUgMTc7fo9fH?CMPKPL=^8N1lH4X!Ud_- z;#!!?pq3v(SK&Bsbw)T5Q#T#CtLwtAmW*I5$$kJL#yC{F)=SM?~I1l z2R_vvK&PpZ^)??bLt3+|7mV+?g0Z&hnk#Vyhp)c6{MzdNfRpj;Pt$rx=k>~)vU2`R$~&DiUhh;uO!kLjds5M=CXZf>US z?;ZxS6x9pXa}#W zGx2RRxf!?~FEioMSWiNAv;Wd@=4T5$w>k!?M%y~Zio&fFg|T(Z)1RwizJE51-kCa6 zHUMnRn zt+ceXzt88p1X{(aRjdBe@;GeigqX3hv4aua0yz4G3maQ(vR8C;bhKeq?L}ajMn1<) zO8{q38(hNGi3mekSi-jv9gZJI0Ca3{qlUB5#kO;VaC?J=pSj3C7)qse1vZn7_Mg zGn{<46Tx~i0yADXSs80r%~# zP*4*NFChtfEk+yhdaPj=gRE{fB_$<8Z~#t)tyxf9gm#G50BrBWo_wv{d6mmLCSq9S zw5Kcs!k9b z$>o?xBnIw>42GBE$e|ei*NGs0?TB#fGsn%mon~Ui%%P0kGHop3_!_o7S%M;rWCGh9 z6YUy)ZpqPRZfESS)X4!^J|T(1ON4RPwXs>%*5lLD@@9p@F zBubdV_A*h4(?($jBk@|UOReN~O~M4v8(opYxB2(BBB8((<$b*6d>bR!jUIjouN-}n zAmUSu7>|kwKA&7Osv=3<+mcQ|k)uPpw}Gk9=g*6H#UFsWu&XisXo;9{rwB;y4q`CC z(YqR2Tv?E$H*tctkKp&<=C7>3nlNF) zvgy;Ohn8)vydB)_M7W_HJ9fmjwzhtW0G=lrDs%(zyJ+c)XD64lYH1=v_G8@Y_e97j z(A$XJbpbY}vXxFa+Fd82HH^TL5!5HRpW<``M#&roZ69FjUHTtG=$Qc;1-uR4#@69= z75%rNM^~>TqKyEPH3~RYi2|R2mVf=DJ=ZQAlD1%8H306r`g-6&=z)I$uKI9=>vgq! P00000NkvXXu0mjf^q~aG diff --git a/BTPanel/static/img/soft_ico/ico-phpmyadmin.png b/BTPanel/static/img/soft_ico/ico-phpmyadmin.png index be105c6732408565ac5bb00afce64d432f99a0c5..8c5f8187a89799636e26af32b279ab3bb82f7c49 100644 GIT binary patch literal 2786 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 literal 2691 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 diff --git a/BTPanel/static/img/soft_ico/ico-phpok.png b/BTPanel/static/img/soft_ico/ico-phpok.png new file mode 100644 index 0000000000000000000000000000000000000000..aa6768e613980de9f291e48995475b3d64b02314 GIT binary patch literal 2069 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 A6aWAK literal 2259 zcmV;^2rT!BP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB9JxN4CRA>e5S$S+!MHruXyKOBZ z9)N~JB_7=^S4j%dZYfqk4aN)Q2p)KWrCSvZ5D+2~OaP6ENV2P$-G0w=2@(qYrArl{ zWW&^aH8y%!wa4tZX2!Nu)pIpBA$Yr)LlN{)PpT$;IVn$xr};9u%w!H@aU&HG_2e1W za|F}a9Zc{qTD-x0VpdKite}~ZNyb~|)NcVSF;)O1Fb%C4drKsu@62V6tA47gJwZYW z{3Y*k#)pTzK})NM=3;Ixzvp;btLqMUW`p>Yat7mt1%A(;YM#({B@yd%MiD2hDghDB z^|8Lm?JIqdG;q$VY#9^+i&!X_*rYkNvN#NbP8t+4r~lwQ+8QFPhZKx@TZX;UHX7%d zn6S_Kn3>{Zay;4jW}oZFD589e>qGOU7{k-4nFM%)G!S<~IUZH6aZv zM*+8lgh+=hY^kW9O|()j31B46pOtV0%P3qp zGh+}cJuzI8_3byfml9~zcT$1_7?E6FZbeKm3YQ(u4&EtToNKpIBE$#K5h@UdZ7A<; z$E@Heiyk5GkUm-!%-mb16(Ya^tb-B{jp5xPglY(l&8@JeY=Evuj?&jLb2`deDr#%Z z_>9N&IcH|V1~@?0;|fSfoMsv|w)I32Q17ZP9W8aS3qyg7ycQnLLf?qYJi<(8H%?25 zVum*>B^M9jE#Q`)ywSG+h0FHY2xKF0u}2`IR&cvMEl2E_Q^DOn&oaT}E0nTwdgTqUIz#HU3`TFkcnW=lq>^ie?@>pj#NVKr|Qsw=^{c@;!S6{QkvY;FTFSmPvI$x zF39|3d^+xXDPHZTobu)a*z;gDxA2RjK%)yc1G+` zM?#hLYhmA7m%nTzXW|(cJ`+D#+#s2r&jkwucL>JskzBhQEA|yR)7_SqBS@*+kUnoi z2CBw(xhb!A?^O*mH^+bVB;_#3iR6R@h`!yM4GMX8&`(j%nqhY1;+lJV{Tn&HNC+{X zXh^pmtr-se>9yg$ao2`iznf@jQ0$UqN6`A~%I9QOIPOE_QMP#OFynKpS&kGsDfJT(tn z?IrN3mzqCuh8EA5bJu&zIIf=zTelra)0zDgn{{XHbBY}Er8|?r9002ovPDHLkV1io35TyVB diff --git a/BTPanel/static/img/soft_ico/ico-psync_api.png b/BTPanel/static/img/soft_ico/ico-psync_api.png new file mode 100644 index 0000000000000000000000000000000000000000..42cffe336bbdc3b51ea6dec4c6f2e4b1f3037ad8 GIT binary patch literal 705 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 Y1;#gHt{#bwApigX07*qoM6N<$g2s&_dH?_b diff --git a/BTPanel/static/img/soft_ico/ico-pythonmamager.png b/BTPanel/static/img/soft_ico/ico-pythonmamager.png index 59877a64d5353b8622cac26dfa6b7b40350793a5..3ee82d951cffafd274934ec22ac34adfebcb85ca 100644 GIT binary patch literal 1612 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 VEW3UUCISEe002ovPDHLkV1j5S;W_{S literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-rsync.png b/BTPanel/static/img/soft_ico/ico-rsync.png index a41a2f315caaf945c47411fbc99749242d8452dc..d59fa198dbd255072f955ac5664484072656f672 100644 GIT binary patch literal 996 zcmeAS@N?(olHy`uVBq!ia0vp^20*OA!3-q(BRide6mzkYX9x!e$L)vy4}jd~0X`wF z|NsA2SZXCO^S03R`$E%h^H0AeIQ5Ru)H?!GZ}U#OEj0PIz?7RjQ*ZH4zRf%FHc+L| zw0l5hKs7*>LQ`)8l>rriOqhNbq;VQZ1kAlHF?WLK%pDNLK$SoIQ+eo=O@f^)Fhi#?lqfa=6R>YR&G z6H7Al^Atidb5j`%O!bY7^$jhI1A46(7#Kf#x;Tbd^zNPdwtljK!10xr)^4*(**tsA zgB#4%0ng5u%wDOuBqn!T+yDRX4SBBf^Si&j_oJ5aNzwj-osXMR|K`6b^hjG!lv^?3 zWNyOxuY4UnoE?>Nbuk%!+@2#@_gNqM2c^y@`$Q4v2Sk=DHR_4~blc{IY zyf%7r}%KS63`?mRMZ++OOwL4@?SeG>xojmlM?bI~hP2c2xEo&4h z_;tm>eg6KMqE%mRF`X{*&sf@crGlGtubROgZK;l+V2e}htj_Q0T5u|1vUyJ5gs&Sf zFWCChV*T9q|9-D0JX4Ze+s2+Q`e%0Pv+YT*=AS=nSSDWi?%WE)tEa=}hxXp(4x4iB zPheNPSE@Dlo&5;{0($cEUa39J`n%?`{L<|i$M;*-GaRlhaQvqE${UzG7(8A5T-G@y GGywpVFTffA literal 1133 zcmV-z1d{uSP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB4*GWV{RA>e5SzSm|Q5-*K(^44Z zOZ4?nt6qY7Fw4q(7#KZPP)SZ$>>*+}=R-mw_+q{F5Yr)%#SCeFWM5P-N*SaHkp_K0 zQDjDH(L+TGOWnQw&fJxI@20!E_iR(R2M+g~^Z)w&{{M5f-7`YWW@f<5fSCa^16jxb zRmThj0%d|AG>W2F2wA>buAWm$zhJGky1M!t#-duDskwqkQ&ZCc1nvb1#kxi?muhNi zJQ{Vmt0@43$Ph^EMHCl6wI_=P{gu%1!{&5M_XzCnCbLV2+@f;IwiD4pg6a8uzJCP; z1!rR0i{N=N7!2kyS*DwU2r|nuoKkbSTz^2ImKnj`9u9}krsRN=vVw?SpE&4UAk)w6 zL8h*`x!JDQmtMOZy@qPL+}vE>^z`%#5Mf*ECC<;3TF2o07wktY7Rwc{*W0J|#ib(5 zsmJ4ajj9CL7-Vedt2y_r@K+v*M0!#23oMSjajOV(YPDJ$@Evqd9)Q;vNwR`S5&YMq z*MiI-w)7pzKUX4ERaId)ek3_h!?Oy@9RFE5Af|EbCiJ= ziMS)(;N||gRKy-CTk~~x{INuWQqr?7XMLkQP`by4E3&22v0aEv-N%c_Mh2D=I&7gd zG%1W9+|*f;6h9R#f=wg?uPO(ABvoES!7!1CFvC8}qa;`yY^kD%Al_Oera~kVf&8ZA zEf%*a1Sw7oZ!NqNK1Uf)5S?w#c1Wl7yqV#Oj8+bwfH&5&+6-4DtLSCHO(L>nEQz7v zGh)BKzgwi@F&uZrMTTZ}bBDd_lk;hXW}5_x9JZENteXS_6ioo#od8=(ONJ}5!a_@C z3EhLLXsd`IQb8p3K)I74h0&Omki#jVPM~a<$h(Tc3HZI8z<1n|qu-G?HaT+*WtbyD z$unGL9{S*X_$^L3#RU#qOMAr66SH;rJyy;v@M3gxZO#VACqy9HtI!-{nd zak#mVut``Y#|pqu8eszbM-u&1k(8Fwv!$h_D28WPj!QuVEUz*l2({tLvshv;H^|nQ zVPTkX(-@3ljAE7W#GN?5-`@t|Nl9TTK9TS?{H5WRV~Zoggt*OfA_J!|EW}fBeg<0o8LBctjR6 zFmMZjFyp1Wb$@_@G9|7NCBgY=CFO}lsSJ)O`AMk?Zka`?<@rU~#R|^BW-s<^>S17D zoagD{7-G?TcIw-(W&@tKi+O%)jU3dw0P-;Ux$lp&P#4E;m^EvAth2l zarQL{6(y6oT1z=(^Y*%4jpAxqw$|JtaK%Ac!2?-qbs3WKoAjEd-kU$yx7xD**zq~) zCl?$qIU!Lu^{TI6XS~VW(ukc-1}3^+Zwc0}5xAkaY0a_!jWQyOtp2b~oYteLeOZw4 zz&#-c6=kmC^3#D!m7H$>J9y5zj^8lNVAg(TKQ4#LkAJ7MYm!!3Zd_E)cP(jLfmPWjyyUGn4pZgPXj?^q&X{EGz z+4+v2jAs2t_o{^7b%mc~e`9IYu+e9ai2SBd6StI|Y_-P0?QTbpd>4DD)w`iODk{#R zcvqfq%!W4!;*BC7ypy`O2Ar#9`&#^ed6BRC>Ds2#t4d=}zuk3Z4y)Pkvqgd&Tk<#F ty({3nfbEx9=I1E_d;9n{P5<$L-(JNo`&)=OA23E4JYD@<);T3K0RaAqAASG; literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-san_security.png b/BTPanel/static/img/soft_ico/ico-san_security.png new file mode 100644 index 0000000000000000000000000000000000000000..f493bf58af61642e4bb057149063a6074c4036c4 GIT binary patch literal 3611 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-score.png b/BTPanel/static/img/soft_ico/ico-score.png index ee0916fcf6f6f5ebd60c5a18a29c103ba9f805cb..71f1b5a14c077abe00594e37e70f6630861cadb5 100644 GIT binary patch literal 2072 zcmV+z2Px#1ZP1_K>z@;j|==^1pojC!bwCyRA@u(n0shjbri>Q^J*SV)1*zCw&~K>>b90n zhg+wsu8+-5MG-;q4T2yj;uQTu5z&8yF+rFpih`RCrq21cvf&1^)xMnV>_gW!eXQ@S zP1EN6y4Ul~ehb@@*4*mGkbEGt_nzO)J?HoP{?0kSNK&Loks`&vLB{@G8%U%6aP$$P z*GX{A1Rzz*GNc;0UJ@395?&HvxBn4D`=6jxDz%xJnHHT+mz$QBmQL3i+>;WaP$&=% zhy6aEZ_(v)%`Po1&3HVXIrgZ8Q%coJt9GLh5yHV?_bIxS^a}i|02B&^%49N?=jP_F z%gM zrA1Te>sve#w)=;p_mgB*0m$WYB{{u*?b@|ZS z9C!0PAE7|iv?^Mx4vmpFH#fh1?AWn4qTgj!m8I9@JQ|)4jJr?Hek4XdKy&~GgJI2v z4IA#D&+SD;MK@u#9S+Cn^z?MU-ERMrK7$m%{AB^CAS((o7qYV1Y|T?sQ$13hJX=?n z`-HMUv%&e@@=(Xu7VfS%5+B^g_E5EIW!d&6?fLw*6xl( zBEk0d_WiA`tsfx6up#2$BvPeCTVZ^-=uL%LT^_RgZLXu!`$AK`zt{)~y(a|O(7yt$ zd}UrhmqMRd8m-}sODV9%yA?PK&@8m*R5OENSkUa>E3qw z^yx35e`Xd9r;w_UF4a|;jhu{=hn>M`Pv`s*ArMKJWhkr7c6D_frqtYzRlug!YPDI+ zdP#bT5SYU}(bE>-%HjC>xOo zVQ_HpIKBH<$f~@&dANM=-8=!z3~AwtdCkoPyoSLX+;486P6>2!`$Dn%i^m86}?OfeD$KoM7? zfI#=uo_GIjKS0`FarQ4TH#cWP_lgWeX>}v|DQ1ch z7XUg*MwV%Kz`94OSDG)LeH1QF>)fH}wFuw?PIQz;v*8=N9V0FPf}?@h?U*-F zhYLW`xldV=z8U!**U{Mz@E-T^+4p%`h3Fs=(9@8xKyx9DO~^&W1%SqI;sWe*xN$Iq(I00X-SJ9V0FPbc1v(JcG6t{ScyOrlfEkpLx&y z^SJ{-o4X@4?Hlm6&L8rga(u(gqJRp>hf?@LJ`KP(W{MFP0GcVZu=KE;Dze37GLPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB8OG!jQRA>e5SqW?uRT!R`cAIW# zs-cQp!fwlDJDQciDTZ_Mo z<36`TM&Nyqhz1|lp_{j6&6*rj`$nPK>odP&`2hW@sW2l@I>xwWJvO0Shv0z5liF;8n@3s)Xi|{ zx6s&7Ko;ajY{L_D@gM=qNFZL3lB5#qS@Yzz**y#h^>FD?4iy9MbOv;5Hj;9zsI{Qa z$1@c(a|?YtrnCa*%@LBb*JqTu^V+It%r{dbQ0juRTqybkiVAr_2B+80&It;EW!OBX zJd9WEvFxi2H;>BEH^6oXV3i+Z7|50MD+})r;JL>N||c_jH@m<94(?z|*ua3=}6MBs{Cd>Bf{#9KU%wWE4P1z90&b7;7v8 z_d^CA+dn7O%n#F3SSwIdQ!~D|w|66OQ?Z+E=+EJ4z!CI5dcpqr?Ah)m$JB$8aM~8O z--!Sg2ZZj?7lav)&7yTM}^Np*E~vfuB&3A#TqF)_WU zsOSi0y&+>RJCzwJB-_Yf*6Zd3%9{{@H_~-Wf>}*j@p3@;3YUjc zNit;?i)ApPS=7|jq|1=b2pF>B;^K6#2uy*t_jLMv1lxvLrfBi2SFgSf*wfL`aY&0- zE$-N{V`(4|5K2l){?an=W2#)?3<4IfHD@>bdAcM?xv0{A(&E)fK*)#Sk6I!>w(p&_ z2nL=ee6lQ#VwxYzgkq^s|;S2ekIDkDI!Q72DYIqr7>%2x7Z*qT0f!|;0>UP8jUKd95?cdxV`&6-1CeaOhpmuN2TZ? zQu_Y6LjvAgN3HRe8AeqWCmsggRv;*3>BV6av{|VXMDqc5p`?2YRl?V(|NjiLq(OjJ zYHVy&ZQJTIHw3-6-X0Whv7K7n9I>p_sL>7kEjt)@U0vO%o}QjB;lzXx?j#E4C8edM zzcHR@`-!fsq1}GpNqngpBF2l4yBD{fAszH#xwEs=g<0ExSvxThz5ND)04xaLFapRS zg;4%3l)pC+<&k*o&Wue6U_J4~i$cb^yteNdKdK!n)*Apzuy@{SwPqF;7G7a=qdsCF zcx9Y|SH|{`!XuL=O?oanJ3H(x!AP+gZk#J;M6bW+1QMgX{z!4s{0mE4zA)m)3tKJl zuMrK)b`D+?jvDb1&NL7xSpfP0g-H}Y#4MP8Vk4e`w6yw}n}c#tc_Al$QIM9q9W8qz z$-<9Spw|%(mhuWL4wo(PvLN(p)o=A6PjS2Sp+Jmy7 z`(%vFZNA`WrK3CA_ALbH2m@mp*!}FU3vMa>+ z{LY;_$MQn`!EkuiFw2M}Oz8@mg+wXAj$cn7^e1OVr^^^gT}X83W4`Iw4NooNz)8^# z;b{;&kMnyhdS%n-r0)>`U+DMC1o&_Q8-JRSS<^s}g(TeQXP{st1TUqeq>Rtc&-WTB zxm!4@D!g8A2lS7}b0s-Bd2B&J0e#aAYlf#5aiQ?*Mi8S=F6;&P6oR7v$Y+UmuNv;M zG|WOA{Md(?Sd6j$ThqOABxWa;fmjCapA7sBZyDB8FWGBr00000NkvXXu0mjfn0=ZU diff --git a/BTPanel/static/img/soft_ico/ico-sdetection.svg b/BTPanel/static/img/soft_ico/ico-sdetection.svg new file mode 100644 index 00000000..4d0b6c99 --- /dev/null +++ b/BTPanel/static/img/soft_ico/ico-sdetection.svg @@ -0,0 +1,10 @@ + + + Created with Pixso. + + + + + + + diff --git a/BTPanel/static/img/soft_ico/ico-security_notice.png b/BTPanel/static/img/soft_ico/ico-security_notice.png new file mode 100644 index 0000000000000000000000000000000000000000..0790fc059f07c41e47ba2c80b1087b37c791d282 GIT binary patch literal 1511 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 BTf+bV literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-sshkey.png b/BTPanel/static/img/soft_ico/ico-sshkey.png index 50ceb873b74c403c9d9958720e285325a07caf29..470933e474db36b369ba8a0ec13f8c773602803f 100644 GIT binary patch delta 3126 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 M07*qoM6N<$f>ZE`z5oCK literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-static_cdn.png b/BTPanel/static/img/soft_ico/ico-static_cdn.png new file mode 100644 index 0000000000000000000000000000000000000000..b35043d0d82021d25549f788a264ac4764af228c GIT binary patch literal 1788 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 KMNUMnLSTZq8D78u literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-syssafe.png b/BTPanel/static/img/soft_ico/ico-syssafe.png index f5cc61b192299efc4291e7d5a66ccb6336d708da..3252487d4d923defe0dadca962a570f6d3493b40 100644 GIT binary patch literal 1007 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 P00000NkvXXu0mjf^hp?v diff --git a/BTPanel/static/img/soft_ico/ico-system_scan.png b/BTPanel/static/img/soft_ico/ico-system_scan.png new file mode 100644 index 0000000000000000000000000000000000000000..f493bf58af61642e4bb057149063a6074c4036c4 GIT binary patch literal 3611 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-tamper_core.png b/BTPanel/static/img/soft_ico/ico-tamper_core.png new file mode 100644 index 0000000000000000000000000000000000000000..3dede4e917b29139828a3a76016c5ae7a642cbe9 GIT binary patch literal 556 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 Hu0mjf9WEnJ diff --git a/BTPanel/static/img/soft_ico/ico-task_manager.png b/BTPanel/static/img/soft_ico/ico-task_manager.png index 485c5089f0af36fe21947b880619b303e0dc443e..60fa27d663a8f3f63ce92e95d426e73d37ea97cf 100644 GIT binary patch literal 455 zcmeAS@N?(olHy`uVBq!ia0vp^20*OA!VDz6R;D-sDdu7)&kzm{j@u9Y9{{-q0X`wF z|Ns9_BLytWVF%eEP!i-9%pj;_>=K$*-Z694?lX7a{V$u!C<>J0EbxddW?4=TCI1#TvI-O)`}#s?Kg$83nEzH64*cd!;M^zwBJKSC2IoccdIy&*S<(^e1oXsv zg>;Ul28LxU=dA@QS~L%Gm%T~%;Z#c&FgP&fK-N$GHA0U{?YlR68GNWa_Rf**o_>Jg z)-79H)(HJvaW3`2-!vY^zb}M5Ha03Ta`Grt^s6y)+9|AXpWMJ)a{8geksCJzRPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB4aY;l$RA>e5SWie)K^UKTyFSr~ zZh{d+wb4=fb1>Iz=~6f8P>R}lLu93chl-*@6cI$O|M1c&!K8vtMOI3>ksy*pgrzP9 zt#-?TYPX%4zIpA)bDOujZ(wIl-h*Yn`QG>E_xon%dv6~?-sM%mtAJO5|EU5v7uaYt zdIauwF~$zTSe?tZi1(H;#?ui0W+W1saLVII1V~%}r>j81(Z(rgk@OS@T>>)KWbvgS z`APtRad0rec@^Y)ATP@TXwX#yh9QdW0Wv)*~5bEZH7uj;?0w@5aX~djwLR%Og;gD|FmD5 z=CFH2wC|lf3B47`Qy}fPmAV$ZQscl#L)})>_wLQf@vj1PXe{Lav_g&|%#_-%fpB8J zd16Myb2BOt*)v=prj!k=5^^7soe~L`5~({3p)+FccBJ62dnnkp*cuyh>#KG~DEyDd zm>`73e}unzFW0J0j0Lxzv`}+F!6GHg+*6l*Cc}xI->5h&LrI$&~SiN*> z709`@gjIKU_X&_|#a#3Fy0f!0@0XdpM0$IBcS7rn^YfyafRzq96@!+$3(m+=uKd!j zWp}8ms^ZU&DZ5UyJe9$qIjxt@tAJMluL8xaz#mBr3kSd`#+U#A002ovPDHLkV1jvn B%~k*a diff --git a/BTPanel/static/img/soft_ico/ico-tomcat.png b/BTPanel/static/img/soft_ico/ico-tomcat.png index 68f536c367b95ff151a0b77a3f18d59193a60f94..364683131aca7eec8511fbbd588ff37200913b90 100644 GIT binary patch literal 2508 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 literal 2733 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 diff --git a/BTPanel/static/img/soft_ico/ico-txcdn.png b/BTPanel/static/img/soft_ico/ico-txcdn.png new file mode 100644 index 0000000000000000000000000000000000000000..5231f3625b2f4f1a7048c859502c8c70215cc85f GIT binary patch literal 2899 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 Hu0mjfU~zPF literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-w7assistant.png b/BTPanel/static/img/soft_ico/ico-w7assistant.png new file mode 100644 index 0000000000000000000000000000000000000000..817b02183dfb64e7095b601174686c612f1b1cc2 GIT binary patch literal 1173 zcmV;G1Zw+Px#1ZP1_K>z@;j|==^1poj9KS@MER9HvNnR}=eRTRdL8e#Y-t;8oqnPy@IW=82B zJ*gy%L?lW=MEy(DAPPcAN`kws0EGxSX`~pIL2?vk0Ux{p%=QzYhaJh^lWIe!JY8&DRxLd|m$a;Z~ z^ruh;KlVJ;4Kd@JA zvN#0pP=l1*;5W;TysHzj;7`>~X*yDRKS@z+RmecPu+Cn=*V2V&4O?vM0e= zbwEA>p-HUtY}y4EtQOfk;7@{Y@zf-ojX#*8ya5m))TU08V3MNSZBGOLc`3?gU_jGX zt+Kh`A9YF?f|pr3=fG+ZSdz8L7J;n5E#X!07~szJmyY=`wR{KUMyS}M>yRzOpQoDN zJLv;316_0XV*jH66D8!w4P5aCqSMB1oc|f0-60oxd=JuBmGFgjnGFArvN^zym3;mM zuY-$Zdn$|XQAg3!Pd_(1aW6)*)b3*&Ew)05?>JLIyY*EEx zV6-}34!crz75H3(2*Ks_plqK7t-^_)fFjW@kxc~OsPhnfsm+uzWVeA6I+q3S1X9`B z<%(0>t3!iGSSVx2MgnY$LAx}}0B=ykI^SgsCQ z!B>AzHIiIjTqLO>yc5^RL0K`|viIb;6%62dt5Hfe2&|V~EIUEjN!S>`^`n#QK9INVk$r#xSpl^* ziP>r#BR+)xtyku`+pI2@7KSD&$^rS%oiNd4(c{W}M|k>8p{ch;rrsBwdPjK1U5FZ> ztibe}Kq=v=AX%X)ci~b%aiECc)SCi8@#(jLDnSa67$7Tv#)35hl>xbE3P4(r)q}Nz zlz~+?M>l^5y4SnKM_d+P!=CnKO6a{r~Sa zbzvjW6wU&V$YKTtzQZ8Qcszea3Q$m{#5JNMI6tkVJh3R1!7(L2DOJHOvnaJZzbLy{ z!8zFM#hy()Ky_jubkmrLf{q-kLyVXd3OJB4_Wz&TE6I&)0^KMFHa5&|*>0pB6mG~#${X?18 zaIcB-*?VA-R7-D(;i`;{ADE=mxlHe?@i+vpJ$&HQ#yz1|PjRmhS+O$1qO&ql*Gac= zZZ+eFbxEh!Gja8O`_BW-6zW(B*sABi> z`Se>SHn!M5s%KA$5|G>8$l3BWo!j8|iFdahPMrzoUa?u}v9q%5M6(V5m+i>*a7k}p zk73@5&PoDF}ozG#zmXI8kn|CbmG$fBV_Jg1hf~-8b(&dGX2Bo%4A6cD+CPX7StO zh09~J=Gf%Fwf4Pucjo!^U%oVH3O5D!$TdIPP{+9MYhC5V)<=thamC>2>gTe~DWM4f Dx`1TB literal 2018 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/ico-webssh.png b/BTPanel/static/img/soft_ico/ico-webssh.png index d75b3b9f1d011c2caa72cffbe66dd05a0a336655..462b3206ff19582513c79e42a5b46287a4349617 100644 GIT binary patch literal 659 zcmeAS@N?(olHy`uVBq!ia0vp^20*OA!3-q(BRide6mzkYX9x!e$L)vy4}jeH0X`wF z|NsA&TWY1S#6n@Ih2m0Exuq5gi>+iAn?nR4Tom>abGgM93d=0vf^tBSrB)!7Kyx7C zU!v!H4OLaGG1Ul8UB*-tAK@b9zfWR0GTtFZ+G&C(O ztsDqCI%dvXwQAMw-Mh~K!QH!e-@W_qEyPv;G=Q_fBeIx*fm;ZK886+f`vVk|DRGS` z3C>R|DNig)WpGT%PfAsA%PdMQ&o9a@R&WkBd$DIz4+8_ElBbJfh(+(-sj=lv20U%? zrNMXZi2FUCv4Qb$qv+d=fB*BNA0!#6U8p$sEpEx)6UCFvGP@i)w>Y^ez1?8Vu5swV z2O(D0iQj52b5|VbI>8>Z$nwJ-#uZ#U7-gKx4_ugVc$@j5<0)UxmD%ugK05eftGL2i z?b-6*Z5#G#IV_zPw2Y}JLVG&X&Hc;=W7rD3_jEM42aE0E&bW8UYo zyZbCLb!TtC=KHU9;Jakm&glpKxqEH=zISe`DetX@S=YV>8g6BXsSUB)#_;Cc2k{0g z^`?0@e%+VuJ0KjLK27Tszv?vK_ac5uKTEft)@R^fU>42Wxd0fd44$rjF6*2UngB$$ B|GNMH literal 1459 zcmV;k1x)&hP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GN1zh1ONa40RR91G5`Po0Cmf+s{jB69Z5t%RA>e5SzTybRUE%JH?1A% zI;Nsd5Rwc9S1A)gG|5V*^Mm;y!klZOF#A#v+JYh?f()O0*h~8)LUjz1=wg`)GP=%M z>)NpwKL!ICmc+@_m%6z&sV2?6{{A5++;cxpZckc`a4#JG=ls7v&R0$pMewOa8y_Dx ztUP05V>Ox;zrk@h6U&oGI1^uIqFZ3oQKh#K;Gxbuvq5q@l8&7uLJKx*dIg9^*6UR% zc6D{_86Fc|uZ^H6+IuH+v%OYRuuv1= zVi@>pAUL;w?rUO>eB9q}RI9VpFC-Tle2oqfz}#5)`4{Hrf#T@IQ$xVoXHHX`7}$px zSl5RhGf=A`<7Ej(vQHqHM}aS(^`PB~mO)FRdHT%TtF5HaFomYW&<76MoNzWaI5=cO zG6ai+jb-7)#Kf9e)?s;=$(Z$-_)0h(|BlCsM~H;e>y$1|Lq55%oeJ^F!jYQM&gFQSE~o6tx;bw1Z~dv|wP(U&6G_&bgoJRpTeNdD4OXNz>?8oKe8tf8hx z$PkX;-?2;!`N4&^X}r_AbilH7aq!wOhwCJe=J9;|Sxi$9vb91i8 zvCv4dQkhY;z~20k^FJ^H1oic`q>gl|~{X0eq@ZEz}MXLmZ!CiG+KLrNdWqPk99PZ_B{@cNNstBB< z<7WbG5a->|x|8oCz)y5te-$`-JEd#-8wlbGaL3WVx6Zezz^x+OxofqE0F0555qcG7 zr}bIzylml{v5aZ>xdW~x6s9^oC~tF9(sXK>f^gH(7Wk%tw1t;&0tt0p2IQk~YKelN zH~F7`EnmZ&y8~uU?CQAtl?#V++_R=gUV#cxR{Dc|V+b__xZn5}sPG z;}!H72`8J1(B)jjBwZ1v^h$E>NAzodt%S3QQA4ku#;;_&JE~`bJA01cRkh_yJK3VC zW&MS~d>|-Y5wjB3@6CKVapXEWsywcHAOMrEm!^uB5^aJ zj_tQyK0N)0+0a(^r32}kelm1(xp+}Aj9$agOPZp+w3PbhBR7Y4XZjzj8tY%W(HS0z zn8LpfhuGLFln#X6SoWSCNRT1X>jQISDLFrjzHq@ZUKuDI2pRJdfQ(ZzGMl>CWgPG# zgWZb!4A92q#_w8cyw#SW0NZH$dxsC}aGJ@GT(XFw_g{{X!plDvGR N002ovPDHLkV1gnlm81Xw diff --git a/BTPanel/static/img/soft_ico/ico-word.svg b/BTPanel/static/img/soft_ico/ico-word.svg new file mode 100644 index 00000000..feafd6fe --- /dev/null +++ b/BTPanel/static/img/soft_ico/ico-word.svg @@ -0,0 +1,12 @@ + + + Created with Pixso. + + + + + + + + + diff --git a/BTPanel/static/img/soft_ico/ico-y6w_speedtest.png b/BTPanel/static/img/soft_ico/ico-y6w_speedtest.png new file mode 100644 index 0000000000000000000000000000000000000000..2778e68c3082afd2d149807ebe478ae9323b0bc5 GIT binary patch literal 2644 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 Uqwsgpzi0=br)7+&xa$!0Z=Xtu)c^nh literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/soft_ico/soft_icoico-vuln_push.png b/BTPanel/static/img/soft_ico/soft_icoico-vuln_push.png new file mode 100644 index 0000000000000000000000000000000000000000..f50c06e2daf410bcc2fe88ab5d3b485b758ba3fd GIT binary patch literal 4085 zcmV_!RZ&w@^RZPjGtxVd%F@x;*r;}Nbohwq_B^S0Ls69LTrO8jp5*sI z87M{R@Or(ruCA_4c{DBnoG+!^t?T;qJnHDhka>eOP169l(`1tX4g&Z+GanbQ zqXCQs@L2%m01DH{X#-F`5F?EtVPL=Ce>V~RG)0y_GxLKso9(IE+S-m(vNTOAP!#1d z!!TA7(N~fDSNiIhF=OUCoz7s+70-Y{H*g>jxI{|XgvfX{o*;m`+S}VTuh%PckUd*U z*$7}pk}MAkA@0dmZZ-_6fxTX@Qe0eo0Kg>)lDhyb5<<11DKT{NfOb6R_j}~Y}qaV z&56PFpU88X6kT2!%p3nfag) zB9v`;!!TwLB^)7gcX#(6QkB&-tr);m0OO^UlT}qMkWwB~RrRliVZ1YT?AW$6lZXEV zkZ7trGt>I(x;~wm9|h1A3WaW2zI^$yWO=hTFf)^`>n{WN9DtXY`AQ;6^s`Hfq9`TI z35$HPV#SIRv4GF#JImp4+{(;fR}^IyGmizJn&g0)K}3*Jf{4)B*$G|Ok2CYzM6{cT ze&KSt{>P-_gG7pns3g<+ODXRsqH+KzC@8oEz|WKA&Dy}LSFaxBa5!RP*9DrUT?Zg5 zUn?_@PLk9a{Q}(p?joWY%uGatBwt7}`Go*3WabN*dAX)(A2ahag@uLR>hA9DN+K&+ zo%%pTmz$oCq{^Fh8@yu0ijM$1cT#|&d@oxW02~S8J_7KDuIncN_yNp}j+L!o6cH`y z?(Tk9O8GTrej`2uGmpqbP1FJ|V2u`n~QN>?W5VVbI{ zcL9iXNF~htZ<&@=6y*p25YZ%NzQL3fM3PR(D&pGA>CAjx^f_f)x_0f_NzD8UQ`8E+S)e(JQ52N(H(xj|Jn?Te?C5fhz=mq8~-gqegnXN1K7aK%Me)zeaMvl zU(EbvBDxvC!$hHxb2mG6sO1M6^{^)hFW@EB$_d zH4$xy244|Ee9@fl^?H?w6DO7{ic$r@iO6itOgDft(Ax&D0$3=7IQc8mG_8P$o-{WN z0E7@iPxe2W>31)!>-s-3^Iib4HuzmtRV$)zczoUmnEBo`B98-D9S(;dsjI6ynk-W~ z1Dk1VY_xZEbzRTQUL<$E$2b@Yg}$_W`SN3pjg4woSJ$u1%@`4_ce~xSX=I$F-&19` z+x-x9jj2myfAb>UDaQIvy#Qmv^n=MYKGw61^f7RaJ zegQKtMPyCRjQJNgtDvCZd7sZWp`)W?TbywpFDfb$+32>!7a@e$%FHfA79{~-ieVW0 zbY1@^0Py?$H!!o=1^FjcRWCzNd%K&6<_IC~u+p&cc)i}R$Kz=@e*E}(0Dg#QC#@*T zzoK`W{&|PP@n<4h9E)J)9YsY&RZgeV$VR7S&K{4)v!0pj(DNpbW9H{IP5V*wrySGO z8V-lAs;#YUi*`0uLWl~t+kMcgx}@XoyYKE6LU@U2Hh>oZ><~iSi{9?cF{bD3M09;F z3#68>$@%^Mn~5lZNCy&62Y`7(i2t=fPsVLMMSphe*s*G|GU>>RKiKVdzsk&uiOB5ATmHOrPQi%oiB+`D1J zh6%aI%8P+DO}h}0{k#AGW?mtLNHjwmvV_Co9|4Fta?T2e!}sMPCtq*ychJ*;HV@X` z-2PBkSN91KnZ1UthK7csY~@&P;Pva*PX=(4DavcLj)5Y&EEJoRj0y&WHQCCr+`xum zRHDbH`-TwW1*>%o6hep)5t+xv-^^BqlKcR?8n~h-edfMidtW0)g4tl(*Et znx;(yaB(zf*lf1VR>~g?TrSspM6@#&mQr4yO?gWV9Jhn<^_rTRluqnZ1u5lrQ}D`c z%35k*W;Rb(cUdWWFi}4g1NB=X5MYF>_H=XXy&S1%3AgY z`+PnJfYMl4N;zQOv7wA*2DaPn)6lc)COCfl_;{!G-zAnASWy)7X1OG6OTSdCB_|tK^>QBpgNfd_ITWZl9^DYR01sW819{`j|nf1}M71>GmQt4WN2sDGmYtHfin6WqYMHsujv|YAy|t>T zK2bs+14}9QA+q21pA)60KqA_vGxMk%Dw$V;q0kcrHgzRH=cmt|9RyyVEUk|LqelY1 zlC2U=(=G+DFB<%ZY|H1HcW*mzY|1aoueRCvWq_uFsY(*%~iDG%PnC~c@HIvxx@3&LCgK4Lt}gau$F>24&e zy=kwRg5_4q&W5&I_q2eC0o>c`Bjt{gO_$Ai>(-_}K~WYmppv8=Wt--u+YpGdt(Q)O zBe*MS+y`5$n(l;xvjG5{yos>dAH2sDTwtZ_Y-z39`&~9{=SV2iOrJS6Rt^I|>ylUY zgYZ=VXR*RN%eKr-ddldWjq|56t1p8w8_X+PtD5cu0Evi!xgebXHW&b;l)Dw>AZJ_E-rhF=FwSNmeE7!Z z&SZKlZ6cz3ySAC4l3gK?7pNfUBXA*sFG=?S@TDLJw@zs+AJJ0PypafZf^iWXC!Q#6 zs5ql+OZgW_(u)8W649bQ#svWIL;~IiB|QHO!1@&p5Ybjp)M8<-as^(OO(&GpgQNTuk%N9<=ITHo z@X$bB1_uCTo9F(737Ox)M*MW^q2{Hne`)@9$+_iWX@mC8P5a+USp=8>LefbFkUstA=f-M_I~UsAk~t=PLVU*gFYn#cfnAlu+T zATUKyl;0t8pF=O0IZ$6;UuvbkK}F$-0H9!inus-P){K)s=wNT7fs5BWE+rfCJt9Dl>!{X&Qb{C@vI)7W^f-EQCL z^?H}&a+6=K9CkK$Pv2Tmd4hwh2$bk>PS(UWKO01S4qTeC#K6p~$L&k|u@K?`0PuJ` zkNf@p01>$WfQX!vCQWK*=9Ssrl+qs#Rqpx#z^wzNFGj!HU`^9j645tfVP@XqcDw(@ zoQH_&5IK()3*V{hy5H;d4w>t9^F_b@!9XBz9)OeA7!c83hr>}D|7J#4Nt^&)H$}TA zPoBJa)v8q)-86EllCyy|O)HR6Zbr|6!*-j^wz#^w`qM=Dg%BUw?e+yQ-M+`nO9~4M zo8!+lpHB4W4ZaVi%iM^_oo2q=xr%wDG|jSNS2(o&j&eOXP{}?eE^mMSSN&dC|&++h#J}h z;2X&NHonu#zypD%X(O3=5fNR3$oYsVDY6e6xW7c*pfibR7J#YIdo3>laEO@?cs!o0 nI@)1|8D^Mah8bpYl3NkwdJ9U@+K`JGXDD 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 E19{34q5uE@ literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/update_1.png b/BTPanel/static/img/update_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f86f5d70487db507e738c4c9afe0fea010a71df4 GIT binary patch literal 46578 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 b92A^KD@xNa*TM}ZLBI#0Z>m?VgN*$jpjBD0 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/update_back.png b/BTPanel/static/img/update_back.png new file mode 100644 index 0000000000000000000000000000000000000000..93283f941a07b4cb0e4269f8e252fb4b82d5c1a6 GIT binary patch literal 17636 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 CT8DN3 literal 0 HcmV?d00001 diff --git a/BTPanel/static/img/update_bg.png b/BTPanel/static/img/update_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..023b0eddeae2b955e2e232f94dd31c88d1c37845 GIT binary patch literal 64351 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 literal 0 HcmV?d00001 diff --git a/BTPanel/static/js/bootstrap-select.min.js b/BTPanel/static/js/bootstrap-select.min.js index 12625e57..3826fc84 100644 --- a/BTPanel/static/js/bootstrap-select.min.js +++ b/BTPanel/static/js/bootstrap-select.min.js @@ -5,4 +5,3 @@ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) */ !function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){"use strict";function b(b){var c=[{re:/[\xC0-\xC6]/g,ch:"A"},{re:/[\xE0-\xE6]/g,ch:"a"},{re:/[\xC8-\xCB]/g,ch:"E"},{re:/[\xE8-\xEB]/g,ch:"e"},{re:/[\xCC-\xCF]/g,ch:"I"},{re:/[\xEC-\xEF]/g,ch:"i"},{re:/[\xD2-\xD6]/g,ch:"O"},{re:/[\xF2-\xF6]/g,ch:"o"},{re:/[\xD9-\xDC]/g,ch:"U"},{re:/[\xF9-\xFC]/g,ch:"u"},{re:/[\xC7-\xE7]/g,ch:"c"},{re:/[\xD1]/g,ch:"N"},{re:/[\xF1]/g,ch:"n"}];return a.each(c,function(){b=b.replace(this.re,this.ch)}),b}function c(a){var b={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},c="(?:"+Object.keys(b).join("|")+")",d=new RegExp(c),e=new RegExp(c,"g"),f=null==a?"":""+a;return d.test(f)?f.replace(e,function(a){return b[a]}):f}function d(b,c){var d=arguments,f=b,g=c;[].shift.apply(d);var h,i=this.each(function(){var b=a(this);if(b.is("select")){var c=b.data("selectpicker"),i="object"==typeof f&&f;if(c){if(i)for(var j in i)i.hasOwnProperty(j)&&(c.options[j]=i[j])}else{var k=a.extend({},e.DEFAULTS,a.fn.selectpicker.defaults||{},b.data(),i);k.template=a.extend({},e.DEFAULTS.template,a.fn.selectpicker.defaults?a.fn.selectpicker.defaults.template:{},b.data().template,i.template),b.data("selectpicker",c=new e(this,k,g))}"string"==typeof f&&(h=c[f]instanceof Function?c[f].apply(c,d):c.options[f])}});return"undefined"!=typeof h?h:i}String.prototype.includes||!function(){var a={}.toString,b=function(){try{var a={},b=Object.defineProperty,c=b(a,a,a)&&b}catch(d){}return c}(),c="".indexOf,d=function(b){if(null==this)throw new TypeError;var d=String(this);if(b&&"[object RegExp]"==a.call(b))throw new TypeError;var e=d.length,f=String(b),g=f.length,h=arguments.length>1?arguments[1]:void 0,i=h?Number(h):0;i!=i&&(i=0);var j=Math.min(Math.max(i,0),e);return g+j>e?!1:-1!=c.call(d,f,i)};b?b(String.prototype,"includes",{value:d,configurable:!0,writable:!0}):String.prototype.includes=d}(),String.prototype.startsWith||!function(){var a=function(){try{var a={},b=Object.defineProperty,c=b(a,a,a)&&b}catch(d){}return c}(),b={}.toString,c=function(a){if(null==this)throw new TypeError;var c=String(this);if(a&&"[object RegExp]"==b.call(a))throw new TypeError;var d=c.length,e=String(a),f=e.length,g=arguments.length>1?arguments[1]:void 0,h=g?Number(g):0;h!=h&&(h=0);var i=Math.min(Math.max(h,0),d);if(f+i>d)return!1;for(var j=-1;++j'},maxOptions:!1,mobile:!1,selectOnTab:!1,dropdownAlignRight:!1},e.prototype={constructor:e,init:function(){var b=this,c=this.$element.attr("id");this.$element.addClass("bs-select-hidden"),this.liObj={},this.multiple=this.$element.prop("multiple"),this.autofocus=this.$element.prop("autofocus"),this.$newElement=this.createView(),this.$element.after(this.$newElement).appendTo(this.$newElement),this.$button=this.$newElement.children("button"),this.$menu=this.$newElement.children(".dropdown-menu"),this.$menuInner=this.$menu.children(".inner"),this.$searchbox=this.$menu.find("input"),this.$element.removeClass("bs-select-hidden"),this.options.dropdownAlignRight&&this.$menu.addClass("dropdown-menu-right"),"undefined"!=typeof c&&(this.$button.attr("data-id",c),a('label[for="'+c+'"]').click(function(a){a.preventDefault(),b.$button.focus()})),this.checkDisabled(),this.clickListener(),this.options.liveSearch&&this.liveSearchListener(),this.render(),this.setStyle(),this.setWidth(),this.options.container&&this.selectPosition(),this.$menu.data("this",this),this.$newElement.data("this",this),this.options.mobile&&this.mobile(),this.$newElement.on({"hide.bs.dropdown":function(a){b.$element.trigger("hide.bs.select",a)},"hidden.bs.dropdown":function(a){b.$element.trigger("hidden.bs.select",a)},"show.bs.dropdown":function(a){b.$element.trigger("show.bs.select",a)},"shown.bs.dropdown":function(a){b.$element.trigger("shown.bs.select",a)}}),b.$element[0].hasAttribute("required")&&this.$element.on("invalid",function(){b.$button.addClass("bs-invalid").focus(),b.$element.on({"focus.bs.select":function(){b.$button.focus(),b.$element.off("focus.bs.select")},"shown.bs.select":function(){b.$element.val(b.$element.val()).off("shown.bs.select")},"rendered.bs.select":function(){this.validity.valid&&b.$button.removeClass("bs-invalid"),b.$element.off("rendered.bs.select")}})}),setTimeout(function(){b.$element.trigger("loaded.bs.select")})},createDropdown:function(){var b=this.multiple||this.options.showTick?" show-tick":"",d=this.$element.parent().hasClass("input-group")?" input-group-btn":"",e=this.autofocus?" autofocus":"",f=this.options.header?'