Version Description
December 3, 2020 =
Improvement: Added option to disable application passwords.
Improvement: Updated site cleaning callout with 1-year guarantee.
Improvement: Upgraded sodium_compat library to 1.13.0.
Improvement: Replaced the terms whitelist and blacklist with allowlist and blocklist.
Improvement: Made a number of WordPress 5.6 and jQuery 3.x compatibility improvements.
Improvement: Made a number of PHP8 compatilibility improvements.
Improvement: Added dismissable notice informing users of possible PHP8 compatibility issues.
Download this release
Release Info
Developer | wfmatt |
Plugin | Wordfence Security – Firewall & Malware Scan |
Version | 7.4.14 |
Comparing to | |
See all releases |
Code changes from version 7.4.12 to 7.4.14
- crypto/vendor/composer/ClassLoader.php +1 -1
- crypto/vendor/composer/InstalledVersions.php +227 -0
- crypto/vendor/composer/autoload_real.php +3 -0
- crypto/vendor/composer/installed.json +13 -13
- crypto/vendor/composer/installed.php +42 -0
- crypto/vendor/composer/platform_check.php +26 -0
- crypto/vendor/paragonie/random_compat/lib/cast_to_int.php +4 -4
- crypto/vendor/paragonie/random_compat/lib/error_polyfill.php +6 -6
- crypto/vendor/paragonie/random_compat/lib/random_bytes_com_dotnet.php +7 -7
- crypto/vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.php +27 -45
- crypto/vendor/paragonie/random_compat/lib/random_bytes_libsodium.php +5 -5
- crypto/vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php +5 -5
- crypto/vendor/paragonie/random_compat/lib/random_bytes_mcrypt.php +5 -5
- crypto/vendor/paragonie/random_compat/psalm-autoload.php +10 -0
- crypto/vendor/paragonie/sodium_compat/LICENSE +2 -2
- crypto/vendor/paragonie/sodium_compat/autoload-php7.php +32 -0
- crypto/vendor/paragonie/sodium_compat/autoload-phpunit.php +8 -0
- crypto/vendor/paragonie/sodium_compat/autoload.php +49 -33
- crypto/vendor/paragonie/sodium_compat/composer-php52.json +87 -0
- crypto/vendor/paragonie/sodium_compat/lib/constants.php +2 -0
- crypto/vendor/paragonie/sodium_compat/lib/namespaced.php +3 -1
- crypto/vendor/paragonie/sodium_compat/lib/php72compat.php +311 -2
- crypto/vendor/paragonie/sodium_compat/lib/php72compat_const.php +91 -0
- crypto/vendor/paragonie/sodium_compat/lib/sodium_compat.php +2 -0
- crypto/vendor/paragonie/sodium_compat/psalm-above-3.xml +52 -0
- crypto/vendor/paragonie/sodium_compat/psalm-below-3.xml +43 -0
- crypto/vendor/paragonie/sodium_compat/src/Compat.php +706 -9
- crypto/vendor/paragonie/sodium_compat/src/Core/BLAKE2b.php +40 -10
- crypto/vendor/paragonie/sodium_compat/src/Core/Base64/Common.php +214 -0
- crypto/vendor/paragonie/sodium_compat/src/Core/Base64/Original.php +249 -0
- crypto/vendor/paragonie/sodium_compat/src/Core/Base64/UrlSafe.php +248 -0
- crypto/vendor/paragonie/sodium_compat/src/Core/Ed25519.php +1 -1
- crypto/vendor/paragonie/sodium_compat/src/Core/Poly1305/State.php +28 -2
- crypto/vendor/paragonie/sodium_compat/src/Core/SecretStream/State.php +164 -0
- crypto/vendor/paragonie/sodium_compat/src/Core/Util.php +1 -0
- crypto/vendor/paragonie/sodium_compat/src/Core/XChaCha20.php +53 -0
- crypto/vendor/paragonie/sodium_compat/src/Core32/BLAKE2b.php +45 -11
- crypto/vendor/paragonie/sodium_compat/src/Core32/Ed25519.php +1 -1
- crypto/vendor/paragonie/sodium_compat/src/Core32/Poly1305/State.php +2 -2
- crypto/vendor/paragonie/sodium_compat/src/Core32/SecretStream/State.php +164 -0
- crypto/vendor/paragonie/sodium_compat/src/Core32/X25519.php +3 -2
- crypto/vendor/paragonie/sodium_compat/src/Crypto.php +403 -0
- crypto/vendor/paragonie/sodium_compat/src/Crypto32.php +403 -0
- crypto/vendor/paragonie/sodium_compat/src/File.php +34 -12
- crypto/vendor/paragonie/sodium_compat/src/PHP52/SplFixedArray.php +188 -0
- css/{activity-report-widget.1603293147.css → activity-report-widget.1607007971.css} +0 -0
- css/{diff.1603293147.css → diff.1607007971.css} +0 -0
- css/{dt_table.1603293147.css → dt_table.1607007971.css} +0 -0
- css/{fullLog.1603293147.css → fullLog.1607007971.css} +0 -0
- css/{iptraf.1603293147.css → iptraf.1607007971.css} +0 -0
- css/{jquery-ui-timepicker-addon.1603293147.css → jquery-ui-timepicker-addon.1607007971.css} +0 -0
- css/{jquery-ui.min.1603293147.css → jquery-ui.min.1607007971.css} +0 -0
- css/{jquery-ui.structure.min.1603293147.css → jquery-ui.structure.min.1607007971.css} +0 -0
- css/{jquery-ui.theme.min.1603293147.css → jquery-ui.theme.min.1607007971.css} +0 -0
- css/main.1603293147.css +0 -1
- css/main.1607007971.css +1 -0
- css/{phpinfo.1603293147.css → phpinfo.1607007971.css} +0 -0
- css/{wf-adminbar.1603293147.css → wf-adminbar.1607007971.css} +0 -0
- css/{wf-colorbox.1603293147.css → wf-colorbox.1607007971.css} +0 -0
- css/{wf-font-awesome.1603293147.css → wf-font-awesome.1607007971.css} +0 -0
- css/{wf-global.1603293147.css → wf-global.1607007971.css} +0 -0
- css/{wf-ionicons.1603293147.css → wf-ionicons.1607007971.css} +0 -0
- css/{wf-onboarding.1603293147.css → wf-onboarding.1607007971.css} +0 -0
- css/{wf-roboto-font.1603293147.css → wf-roboto-font.1607007971.css} +0 -0
- css/{wfselect2.min.1603293147.css → wfselect2.min.1607007971.css} +0 -0
- css/{wordfenceBox.1603293147.css → wordfenceBox.1607007971.css} +0 -0
- js/{Chart.bundle.min.1603293147.js → Chart.bundle.min.1607007971.js} +0 -0
- js/{admin.1603293147.js → admin.1607007971.js} +2 -2
- js/{admin.ajaxWatcher.1603293147.js → admin.ajaxWatcher.1607007971.js} +4 -4
- js/{admin.liveTraffic.1603293147.js → admin.liveTraffic.1607007971.js} +1 -1
- js/{date.1603293147.js → date.1607007971.js} +0 -0
- js/{jquery-ui-timepicker-addon.1603293147.js → jquery-ui-timepicker-addon.1607007971.js} +0 -0
- js/{jquery.colorbox-min.1603293147.js → jquery.colorbox-min.1607007971.js} +0 -0
- js/{jquery.colorbox.1603293147.js → jquery.colorbox.1607007971.js} +0 -0
- js/{jquery.dataTables.min.1603293147.js → jquery.dataTables.min.1607007971.js} +0 -0
- js/{jquery.qrcode.min.1603293147.js → jquery.qrcode.min.1607007971.js} +0 -0
- js/{jquery.tmpl.min.1603293147.js → jquery.tmpl.min.1607007971.js} +0 -0
- js/{jquery.tools.min.1603293147.js → jquery.tools.min.1607007971.js} +0 -0
- js/{knockout-3.3.0.1603293147.js → knockout-3.3.0.1607007971.js} +0 -0
- js/{wfdashboard.1603293147.js → wfdashboard.1607007971.js} +0 -0
- js/{wfdropdown.1603293147.js → wfdropdown.1607007971.js} +0 -0
- js/{wfglobal.1603293147.js → wfglobal.1607007971.js} +0 -0
- js/{wfpopover.1603293147.js → wfpopover.1607007971.js} +0 -0
- js/{wfselect2.min.1603293147.js → wfselect2.min.1607007971.js} +0 -0
- languages/wordfence.po +37 -37
- lib/Diff/SequenceMatcher.php +1 -1
- lib/email_genericAlert.php +1 -1
- lib/email_newIssues.php +1 -1
- lib/menu_firewall_waf.php +4 -4
- lib/menu_firewall_waf_options.php +3 -3
- lib/menu_options.php +8 -7
- lib/menu_scanner.php +1 -1
- lib/menu_scanner_options.php +1 -1
- lib/menu_tools_diagnostic.php +1 -1
- lib/menu_tools_livetraffic.php +1 -1
- lib/wfActivityReport.php +1 -1
- lib/wfConfig.php +5 -1
- lib/wfDashboard.php +1 -1
- lib/wfScanEngine.php +15 -15
- lib/wfSupportController.php +2 -0
- lib/wordfenceClass.php +53 -16
- lib/wordfenceScanner.php +2 -22
- models/block/wfBlock.php +1 -1
- models/firewall/wfFirewall.php +2 -2
- models/scanner/wfScanner.php +1 -1
- modules/login-security/classes/controller/wordfencels.php +1 -1
- modules/login-security/css/{admin-global.1603293147.css → admin-global.1607007971.css} +0 -0
- modules/login-security/css/{admin.1603293147.css → admin.1607007971.css} +0 -0
- modules/login-security/css/{colorbox.1603293147.css → colorbox.1607007971.css} +0 -0
- modules/login-security/css/{font-awesome.1603293147.css → font-awesome.1607007971.css} +0 -0
- modules/login-security/css/{ionicons.1603293147.css → ionicons.1607007971.css} +0 -0
- modules/login-security/css/{jquery-ui-timepicker-addon.1603293147.css → jquery-ui-timepicker-addon.1607007971.css} +0 -0
- modules/login-security/css/{jquery-ui.min.1603293147.css → jquery-ui.min.1607007971.css} +0 -0
- modules/login-security/css/{jquery-ui.structure.min.1603293147.css → jquery-ui.structure.min.1607007971.css} +0 -0
- modules/login-security/css/{jquery-ui.theme.min.1603293147.css → jquery-ui.theme.min.1607007971.css} +0 -0
- modules/login-security/css/{login.1603293147.css → login.1607007971.css} +0 -0
- modules/login-security/js/{admin-global.1603293147.js → admin-global.1607007971.js} +0 -0
- modules/login-security/js/{admin.1603293147.js → admin.1607007971.js} +0 -0
- modules/login-security/js/{jquery-ui-timepicker-addon.1603293147.js → jquery-ui-timepicker-addon.1607007971.js} +0 -0
- modules/login-security/js/{jquery.colorbox.1603293147.js → jquery.colorbox.1607007971.js} +0 -0
- modules/login-security/js/{jquery.colorbox.min.1603293147.js → jquery.colorbox.min.1607007971.js} +0 -0
- modules/login-security/js/{jquery.qrcode.min.1603293147.js → jquery.qrcode.min.1607007971.js} +0 -0
- modules/login-security/js/{jquery.tmpl.min.1603293147.js → jquery.tmpl.min.1607007971.js} +0 -0
- modules/login-security/js/{login.1603293147.js → login.1607007971.js} +0 -0
- modules/login-security/views/options/option-ip-source.php +1 -1
- modules/login-security/views/page/manage.php +1 -1
- modules/login-security/views/settings/options.php +2 -2
- modules/login-security/wordfence-login-security.php +1 -1
- readme.txt +50 -40
- vendor/wordfence/wf-waf/src/lib/rules.php +6 -0
- vendor/wordfence/wf-waf/src/lib/waf.php +3 -3
- vendor/wordfence/wf-waf/src/views/403-roadblock.php +4 -4
- views/blocking/blocking-create.php +1 -1
- views/dashboard/option-howgetips.php +1 -1
- views/diagnostics/text.php +1 -1
- views/scanner/options-group-general.php +1 -1
- views/scanner/scan-progress.php +1 -1
- views/scanner/scanner-status.php +1 -1
- views/scanner/site-cleaning-bottom.php +2 -2
- views/tours/login-security.php +2 -2
- views/waf/debug.php +1 -1
- views/waf/option-whitelist.php +3 -3
- views/waf/options-group-advanced-firewall.php +3 -3
- views/waf/options-group-basic-firewall.php +3 -3
- views/waf/options-group-brute-force.php +12 -0
- views/waf/options-group-rate-limiting.php +1 -1
- views/waf/options-group-whitelisted.php +2 -2
- waf/bootstrap.php +2 -2
- wordfence.php +3 -3
crypto/vendor/composer/ClassLoader.php
CHANGED
@@ -60,7 +60,7 @@ class ClassLoader
|
|
60 |
public function getPrefixes()
|
61 |
{
|
62 |
if (!empty($this->prefixesPsr0)) {
|
63 |
-
return call_user_func_array('array_merge', $this->prefixesPsr0);
|
64 |
}
|
65 |
|
66 |
return array();
|
60 |
public function getPrefixes()
|
61 |
{
|
62 |
if (!empty($this->prefixesPsr0)) {
|
63 |
+
return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
|
64 |
}
|
65 |
|
66 |
return array();
|
crypto/vendor/composer/InstalledVersions.php
ADDED
@@ -0,0 +1,227 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Composer;
|
4 |
+
|
5 |
+
use Composer\Semver\VersionParser;
|
6 |
+
|
7 |
+
|
8 |
+
|
9 |
+
|
10 |
+
|
11 |
+
|
12 |
+
class InstalledVersions
|
13 |
+
{
|
14 |
+
private static $installed = array (
|
15 |
+
'root' =>
|
16 |
+
array (
|
17 |
+
'pretty_version' => 'dev-master',
|
18 |
+
'version' => 'dev-master',
|
19 |
+
'aliases' =>
|
20 |
+
array (
|
21 |
+
),
|
22 |
+
'reference' => '547ce2234fff039cbd57697d05f7236e431868e5',
|
23 |
+
'name' => '__root__',
|
24 |
+
),
|
25 |
+
'versions' =>
|
26 |
+
array (
|
27 |
+
'__root__' =>
|
28 |
+
array (
|
29 |
+
'pretty_version' => 'dev-master',
|
30 |
+
'version' => 'dev-master',
|
31 |
+
'aliases' =>
|
32 |
+
array (
|
33 |
+
),
|
34 |
+
'reference' => '547ce2234fff039cbd57697d05f7236e431868e5',
|
35 |
+
),
|
36 |
+
'paragonie/random_compat' =>
|
37 |
+
array (
|
38 |
+
'pretty_version' => 'v2.0.10',
|
39 |
+
'version' => '2.0.10.0',
|
40 |
+
'aliases' =>
|
41 |
+
array (
|
42 |
+
),
|
43 |
+
'reference' => '634bae8e911eefa89c1abfbf1b66da679ac8f54d',
|
44 |
+
),
|
45 |
+
'paragonie/sodium_compat' =>
|
46 |
+
array (
|
47 |
+
'pretty_version' => 'v1.13.0',
|
48 |
+
'version' => '1.13.0.0',
|
49 |
+
'aliases' =>
|
50 |
+
array (
|
51 |
+
),
|
52 |
+
'reference' => 'bbade402cbe84c69b718120911506a3aa2bae653',
|
53 |
+
),
|
54 |
+
),
|
55 |
+
);
|
56 |
+
|
57 |
+
|
58 |
+
|
59 |
+
|
60 |
+
|
61 |
+
|
62 |
+
|
63 |
+
public static function getInstalledPackages()
|
64 |
+
{
|
65 |
+
return array_keys(self::$installed['versions']);
|
66 |
+
}
|
67 |
+
|
68 |
+
|
69 |
+
|
70 |
+
|
71 |
+
|
72 |
+
|
73 |
+
|
74 |
+
|
75 |
+
|
76 |
+
public static function isInstalled($packageName)
|
77 |
+
{
|
78 |
+
return isset(self::$installed['versions'][$packageName]);
|
79 |
+
}
|
80 |
+
|
81 |
+
|
82 |
+
|
83 |
+
|
84 |
+
|
85 |
+
|
86 |
+
|
87 |
+
|
88 |
+
|
89 |
+
|
90 |
+
|
91 |
+
|
92 |
+
|
93 |
+
|
94 |
+
public static function satisfies(VersionParser $parser, $packageName, $constraint)
|
95 |
+
{
|
96 |
+
$constraint = $parser->parseConstraints($constraint);
|
97 |
+
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
|
98 |
+
|
99 |
+
return $provided->matches($constraint);
|
100 |
+
}
|
101 |
+
|
102 |
+
|
103 |
+
|
104 |
+
|
105 |
+
|
106 |
+
|
107 |
+
|
108 |
+
|
109 |
+
|
110 |
+
|
111 |
+
public static function getVersionRanges($packageName)
|
112 |
+
{
|
113 |
+
if (!isset(self::$installed['versions'][$packageName])) {
|
114 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
115 |
+
}
|
116 |
+
|
117 |
+
$ranges = array();
|
118 |
+
if (isset(self::$installed['versions'][$packageName]['pretty_version'])) {
|
119 |
+
$ranges[] = self::$installed['versions'][$packageName]['pretty_version'];
|
120 |
+
}
|
121 |
+
if (array_key_exists('aliases', self::$installed['versions'][$packageName])) {
|
122 |
+
$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['aliases']);
|
123 |
+
}
|
124 |
+
if (array_key_exists('replaced', self::$installed['versions'][$packageName])) {
|
125 |
+
$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['replaced']);
|
126 |
+
}
|
127 |
+
if (array_key_exists('provided', self::$installed['versions'][$packageName])) {
|
128 |
+
$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['provided']);
|
129 |
+
}
|
130 |
+
|
131 |
+
return implode(' || ', $ranges);
|
132 |
+
}
|
133 |
+
|
134 |
+
|
135 |
+
|
136 |
+
|
137 |
+
|
138 |
+
public static function getVersion($packageName)
|
139 |
+
{
|
140 |
+
if (!isset(self::$installed['versions'][$packageName])) {
|
141 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
142 |
+
}
|
143 |
+
|
144 |
+
if (!isset(self::$installed['versions'][$packageName]['version'])) {
|
145 |
+
return null;
|
146 |
+
}
|
147 |
+
|
148 |
+
return self::$installed['versions'][$packageName]['version'];
|
149 |
+
}
|
150 |
+
|
151 |
+
|
152 |
+
|
153 |
+
|
154 |
+
|
155 |
+
public static function getPrettyVersion($packageName)
|
156 |
+
{
|
157 |
+
if (!isset(self::$installed['versions'][$packageName])) {
|
158 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
159 |
+
}
|
160 |
+
|
161 |
+
if (!isset(self::$installed['versions'][$packageName]['pretty_version'])) {
|
162 |
+
return null;
|
163 |
+
}
|
164 |
+
|
165 |
+
return self::$installed['versions'][$packageName]['pretty_version'];
|
166 |
+
}
|
167 |
+
|
168 |
+
|
169 |
+
|
170 |
+
|
171 |
+
|
172 |
+
public static function getReference($packageName)
|
173 |
+
{
|
174 |
+
if (!isset(self::$installed['versions'][$packageName])) {
|
175 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
176 |
+
}
|
177 |
+
|
178 |
+
if (!isset(self::$installed['versions'][$packageName]['reference'])) {
|
179 |
+
return null;
|
180 |
+
}
|
181 |
+
|
182 |
+
return self::$installed['versions'][$packageName]['reference'];
|
183 |
+
}
|
184 |
+
|
185 |
+
|
186 |
+
|
187 |
+
|
188 |
+
|
189 |
+
public static function getRootPackage()
|
190 |
+
{
|
191 |
+
return self::$installed['root'];
|
192 |
+
}
|
193 |
+
|
194 |
+
|
195 |
+
|
196 |
+
|
197 |
+
|
198 |
+
|
199 |
+
|
200 |
+
public static function getRawData()
|
201 |
+
{
|
202 |
+
return self::$installed;
|
203 |
+
}
|
204 |
+
|
205 |
+
|
206 |
+
|
207 |
+
|
208 |
+
|
209 |
+
|
210 |
+
|
211 |
+
|
212 |
+
|
213 |
+
|
214 |
+
|
215 |
+
|
216 |
+
|
217 |
+
|
218 |
+
|
219 |
+
|
220 |
+
|
221 |
+
|
222 |
+
|
223 |
+
public static function reload($data)
|
224 |
+
{
|
225 |
+
self::$installed = $data;
|
226 |
+
}
|
227 |
+
}
|
crypto/vendor/composer/autoload_real.php
CHANGED
@@ -13,6 +13,9 @@ class ComposerAutoloaderInite213e65b2dafae4ad799b13fe0d36f8e
|
|
13 |
}
|
14 |
}
|
15 |
|
|
|
|
|
|
|
16 |
public static function getLoader()
|
17 |
{
|
18 |
if (null !== self::$loader) {
|
13 |
}
|
14 |
}
|
15 |
|
16 |
+
/**
|
17 |
+
* @return \Composer\Autoload\ClassLoader
|
18 |
+
*/
|
19 |
public static function getLoader()
|
20 |
{
|
21 |
if (null !== self::$loader) {
|
crypto/vendor/composer/installed.json
CHANGED
@@ -1,17 +1,17 @@
|
|
1 |
[
|
2 |
{
|
3 |
"name": "paragonie/random_compat",
|
4 |
-
"version": "v2.0.
|
5 |
-
"version_normalized": "2.0.
|
6 |
"source": {
|
7 |
"type": "git",
|
8 |
"url": "https://github.com/paragonie/random_compat.git",
|
9 |
-
"reference": "
|
10 |
},
|
11 |
"dist": {
|
12 |
"type": "zip",
|
13 |
-
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/
|
14 |
-
"reference": "
|
15 |
"shasum": ""
|
16 |
},
|
17 |
"require": {
|
@@ -23,7 +23,7 @@
|
|
23 |
"suggest": {
|
24 |
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
|
25 |
},
|
26 |
-
"time": "
|
27 |
"type": "library",
|
28 |
"installation-source": "dist",
|
29 |
"autoload": {
|
@@ -52,17 +52,17 @@
|
|
52 |
},
|
53 |
{
|
54 |
"name": "paragonie/sodium_compat",
|
55 |
-
"version": "v1.
|
56 |
-
"version_normalized": "1.
|
57 |
"source": {
|
58 |
"type": "git",
|
59 |
"url": "https://github.com/paragonie/sodium_compat.git",
|
60 |
-
"reference": "
|
61 |
},
|
62 |
"dist": {
|
63 |
"type": "zip",
|
64 |
-
"url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/
|
65 |
-
"reference": "
|
66 |
"shasum": ""
|
67 |
},
|
68 |
"require": {
|
@@ -70,13 +70,13 @@
|
|
70 |
"php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8"
|
71 |
},
|
72 |
"require-dev": {
|
73 |
-
"phpunit/phpunit": "^3|^4|^5"
|
74 |
},
|
75 |
"suggest": {
|
76 |
"ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.",
|
77 |
"ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security."
|
78 |
},
|
79 |
-
"time": "
|
80 |
"type": "library",
|
81 |
"installation-source": "dist",
|
82 |
"autoload": {
|
1 |
[
|
2 |
{
|
3 |
"name": "paragonie/random_compat",
|
4 |
+
"version": "v2.0.17",
|
5 |
+
"version_normalized": "2.0.17.0",
|
6 |
"source": {
|
7 |
"type": "git",
|
8 |
"url": "https://github.com/paragonie/random_compat.git",
|
9 |
+
"reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d"
|
10 |
},
|
11 |
"dist": {
|
12 |
"type": "zip",
|
13 |
+
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/29af24f25bab834fcbb38ad2a69fa93b867e070d",
|
14 |
+
"reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d",
|
15 |
"shasum": ""
|
16 |
},
|
17 |
"require": {
|
23 |
"suggest": {
|
24 |
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
|
25 |
},
|
26 |
+
"time": "2018-07-04T16:31:37+00:00",
|
27 |
"type": "library",
|
28 |
"installation-source": "dist",
|
29 |
"autoload": {
|
52 |
},
|
53 |
{
|
54 |
"name": "paragonie/sodium_compat",
|
55 |
+
"version": "v1.13.0",
|
56 |
+
"version_normalized": "1.13.0.0",
|
57 |
"source": {
|
58 |
"type": "git",
|
59 |
"url": "https://github.com/paragonie/sodium_compat.git",
|
60 |
+
"reference": "bbade402cbe84c69b718120911506a3aa2bae653"
|
61 |
},
|
62 |
"dist": {
|
63 |
"type": "zip",
|
64 |
+
"url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/bbade402cbe84c69b718120911506a3aa2bae653",
|
65 |
+
"reference": "bbade402cbe84c69b718120911506a3aa2bae653",
|
66 |
"shasum": ""
|
67 |
},
|
68 |
"require": {
|
70 |
"php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8"
|
71 |
},
|
72 |
"require-dev": {
|
73 |
+
"phpunit/phpunit": "^3|^4|^5|^6|^7"
|
74 |
},
|
75 |
"suggest": {
|
76 |
"ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.",
|
77 |
"ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security."
|
78 |
},
|
79 |
+
"time": "2020-03-20T21:48:09+00:00",
|
80 |
"type": "library",
|
81 |
"installation-source": "dist",
|
82 |
"autoload": {
|
crypto/vendor/composer/installed.php
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php return array (
|
2 |
+
'root' =>
|
3 |
+
array (
|
4 |
+
'pretty_version' => 'dev-master',
|
5 |
+
'version' => 'dev-master',
|
6 |
+
'aliases' =>
|
7 |
+
array (
|
8 |
+
),
|
9 |
+
'reference' => '547ce2234fff039cbd57697d05f7236e431868e5',
|
10 |
+
'name' => '__root__',
|
11 |
+
),
|
12 |
+
'versions' =>
|
13 |
+
array (
|
14 |
+
'__root__' =>
|
15 |
+
array (
|
16 |
+
'pretty_version' => 'dev-master',
|
17 |
+
'version' => 'dev-master',
|
18 |
+
'aliases' =>
|
19 |
+
array (
|
20 |
+
),
|
21 |
+
'reference' => '547ce2234fff039cbd57697d05f7236e431868e5',
|
22 |
+
),
|
23 |
+
'paragonie/random_compat' =>
|
24 |
+
array (
|
25 |
+
'pretty_version' => 'v2.0.10',
|
26 |
+
'version' => '2.0.10.0',
|
27 |
+
'aliases' =>
|
28 |
+
array (
|
29 |
+
),
|
30 |
+
'reference' => '634bae8e911eefa89c1abfbf1b66da679ac8f54d',
|
31 |
+
),
|
32 |
+
'paragonie/sodium_compat' =>
|
33 |
+
array (
|
34 |
+
'pretty_version' => 'v1.13.0',
|
35 |
+
'version' => '1.13.0.0',
|
36 |
+
'aliases' =>
|
37 |
+
array (
|
38 |
+
),
|
39 |
+
'reference' => 'bbade402cbe84c69b718120911506a3aa2bae653',
|
40 |
+
),
|
41 |
+
),
|
42 |
+
);
|
crypto/vendor/composer/platform_check.php
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// platform_check.php @generated by Composer
|
4 |
+
|
5 |
+
$issues = array();
|
6 |
+
|
7 |
+
if (!(PHP_VERSION_ID >= 50204)) {
|
8 |
+
$issues[] = 'Your Composer dependencies require a PHP version ">= 5.2.4". You are running ' . PHP_VERSION . '.';
|
9 |
+
}
|
10 |
+
|
11 |
+
if ($issues) {
|
12 |
+
if (!headers_sent()) {
|
13 |
+
header('HTTP/1.1 500 Internal Server Error');
|
14 |
+
}
|
15 |
+
if (!ini_get('display_errors')) {
|
16 |
+
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
|
17 |
+
fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
|
18 |
+
} elseif (!headers_sent()) {
|
19 |
+
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
|
20 |
+
}
|
21 |
+
}
|
22 |
+
trigger_error(
|
23 |
+
'Composer detected issues in your platform: ' . implode(' ', $issues),
|
24 |
+
E_USER_ERROR
|
25 |
+
);
|
26 |
+
}
|
crypto/vendor/paragonie/random_compat/lib/cast_to_int.php
CHANGED
@@ -28,19 +28,19 @@
|
|
28 |
*/
|
29 |
|
30 |
if (!is_callable('RandomCompat_intval')) {
|
31 |
-
|
32 |
/**
|
33 |
* Cast to an integer if we can, safely.
|
34 |
-
*
|
35 |
* If you pass it a float in the range (~PHP_INT_MAX, PHP_INT_MAX)
|
36 |
* (non-inclusive), it will sanely cast it to an int. If you it's equal to
|
37 |
* ~PHP_INT_MAX or PHP_INT_MAX, we let it fail as not an integer. Floats
|
38 |
* lose precision, so the <= and => operators might accidentally let a float
|
39 |
* through.
|
40 |
-
*
|
41 |
* @param int|float $number The number we want to convert to an int
|
42 |
* @param bool $fail_open Set to true to not throw an exception
|
43 |
-
*
|
44 |
* @return float|int
|
45 |
* @psalm-suppress InvalidReturnType
|
46 |
*
|
28 |
*/
|
29 |
|
30 |
if (!is_callable('RandomCompat_intval')) {
|
31 |
+
|
32 |
/**
|
33 |
* Cast to an integer if we can, safely.
|
34 |
+
*
|
35 |
* If you pass it a float in the range (~PHP_INT_MAX, PHP_INT_MAX)
|
36 |
* (non-inclusive), it will sanely cast it to an int. If you it's equal to
|
37 |
* ~PHP_INT_MAX or PHP_INT_MAX, we let it fail as not an integer. Floats
|
38 |
* lose precision, so the <= and => operators might accidentally let a float
|
39 |
* through.
|
40 |
+
*
|
41 |
* @param int|float $number The number we want to convert to an int
|
42 |
* @param bool $fail_open Set to true to not throw an exception
|
43 |
+
*
|
44 |
* @return float|int
|
45 |
* @psalm-suppress InvalidReturnType
|
46 |
*
|
crypto/vendor/paragonie/random_compat/lib/error_polyfill.php
CHANGED
@@ -1,13 +1,13 @@
|
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
/**
|
4 |
-
* Random_* Compatibility Library
|
5 |
* for using the new PHP 7 random_* API in PHP 5 projects
|
6 |
-
*
|
7 |
* The MIT License (MIT)
|
8 |
*
|
9 |
* Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
|
10 |
-
*
|
11 |
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
12 |
* of this software and associated documentation files (the "Software"), to deal
|
13 |
* in the Software without restriction, including without limitation the rights
|
@@ -31,7 +31,7 @@ if (!class_exists('Error', false)) {
|
|
31 |
// We can't really avoid making this extend Exception in PHP 5.
|
32 |
class Error extends Exception
|
33 |
{
|
34 |
-
|
35 |
}
|
36 |
}
|
37 |
|
@@ -39,12 +39,12 @@ if (!class_exists('TypeError', false)) {
|
|
39 |
if (is_subclass_of('Error', 'Exception')) {
|
40 |
class TypeError extends Error
|
41 |
{
|
42 |
-
|
43 |
}
|
44 |
} else {
|
45 |
class TypeError extends Exception
|
46 |
{
|
47 |
-
|
48 |
}
|
49 |
}
|
50 |
}
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
/**
|
4 |
+
* Random_* Compatibility Library
|
5 |
* for using the new PHP 7 random_* API in PHP 5 projects
|
6 |
+
*
|
7 |
* The MIT License (MIT)
|
8 |
*
|
9 |
* Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
|
10 |
+
*
|
11 |
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
12 |
* of this software and associated documentation files (the "Software"), to deal
|
13 |
* in the Software without restriction, including without limitation the rights
|
31 |
// We can't really avoid making this extend Exception in PHP 5.
|
32 |
class Error extends Exception
|
33 |
{
|
34 |
+
|
35 |
}
|
36 |
}
|
37 |
|
39 |
if (is_subclass_of('Error', 'Exception')) {
|
40 |
class TypeError extends Error
|
41 |
{
|
42 |
+
|
43 |
}
|
44 |
} else {
|
45 |
class TypeError extends Exception
|
46 |
{
|
47 |
+
|
48 |
}
|
49 |
}
|
50 |
}
|
crypto/vendor/paragonie/random_compat/lib/random_bytes_com_dotnet.php
CHANGED
@@ -1,23 +1,23 @@
|
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
/**
|
4 |
-
* Random_* Compatibility Library
|
5 |
* for using the new PHP 7 random_* API in PHP 5 projects
|
6 |
-
*
|
7 |
* The MIT License (MIT)
|
8 |
-
*
|
9 |
* Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
|
10 |
-
*
|
11 |
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
12 |
* of this software and associated documentation files (the "Software"), to deal
|
13 |
* in the Software without restriction, including without limitation the rights
|
14 |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
15 |
* copies of the Software, and to permit persons to whom the Software is
|
16 |
* furnished to do so, subject to the following conditions:
|
17 |
-
*
|
18 |
* The above copyright notice and this permission notice shall be included in
|
19 |
* all copies or substantial portions of the Software.
|
20 |
-
*
|
21 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
22 |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
23 |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
@@ -89,4 +89,4 @@ if (!is_callable('random_bytes')) {
|
|
89 |
'Could not gather sufficient random data'
|
90 |
);
|
91 |
}
|
92 |
-
}
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
/**
|
4 |
+
* Random_* Compatibility Library
|
5 |
* for using the new PHP 7 random_* API in PHP 5 projects
|
6 |
+
*
|
7 |
* The MIT License (MIT)
|
8 |
+
*
|
9 |
* Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
|
10 |
+
*
|
11 |
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
12 |
* of this software and associated documentation files (the "Software"), to deal
|
13 |
* in the Software without restriction, including without limitation the rights
|
14 |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
15 |
* copies of the Software, and to permit persons to whom the Software is
|
16 |
* furnished to do so, subject to the following conditions:
|
17 |
+
*
|
18 |
* The above copyright notice and this permission notice shall be included in
|
19 |
* all copies or substantial portions of the Software.
|
20 |
+
*
|
21 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
22 |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
23 |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
89 |
'Could not gather sufficient random data'
|
90 |
);
|
91 |
}
|
92 |
+
}
|
crypto/vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.php
CHANGED
@@ -1,23 +1,23 @@
|
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
/**
|
4 |
-
* Random_* Compatibility Library
|
5 |
* for using the new PHP 7 random_* API in PHP 5 projects
|
6 |
-
*
|
7 |
* The MIT License (MIT)
|
8 |
*
|
9 |
* Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
|
10 |
-
*
|
11 |
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
12 |
* of this software and associated documentation files (the "Software"), to deal
|
13 |
* in the Software without restriction, including without limitation the rights
|
14 |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
15 |
* copies of the Software, and to permit persons to whom the Software is
|
16 |
* furnished to do so, subject to the following conditions:
|
17 |
-
*
|
18 |
* The above copyright notice and this permission notice shall be included in
|
19 |
* all copies or substantial portions of the Software.
|
20 |
-
*
|
21 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
22 |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
23 |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
@@ -37,7 +37,6 @@ if (!is_callable('random_bytes')) {
|
|
37 |
* random numbers in accordance with best practices
|
38 |
*
|
39 |
* Why we use /dev/urandom and not /dev/random
|
40 |
-
* @ref https://www.2uo.de/myths-about-urandom
|
41 |
* @ref http://sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers
|
42 |
*
|
43 |
* @param int $bytes
|
@@ -56,35 +55,17 @@ if (!is_callable('random_bytes')) {
|
|
56 |
*/
|
57 |
if (empty($fp)) {
|
58 |
/**
|
59 |
-
* We
|
60 |
-
*
|
61 |
-
* condition in random.php, it doesn't hurt to be defensive in depth
|
62 |
-
* here.
|
63 |
-
*
|
64 |
-
* To that end, we only try to open /dev/urandom if we're on a Unix-
|
65 |
-
* like operating system (which means the directory separator is set
|
66 |
-
* to "/" not "\".
|
67 |
*/
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
* We use /dev/urandom if it is a char device.
|
77 |
-
* We never fall back to /dev/random
|
78 |
-
*/
|
79 |
-
/** @var resource|bool $fp */
|
80 |
-
$fp = fopen('/dev/urandom', 'rb');
|
81 |
-
if (is_resource($fp)) {
|
82 |
-
/** @var array<string, int> $st */
|
83 |
-
$st = fstat($fp);
|
84 |
-
if (($st['mode'] & 0170000) !== 020000) {
|
85 |
-
fclose($fp);
|
86 |
-
$fp = false;
|
87 |
-
}
|
88 |
}
|
89 |
}
|
90 |
|
@@ -148,28 +129,29 @@ if (!is_callable('random_bytes')) {
|
|
148 |
*/
|
149 |
$read = fread($fp, $remaining);
|
150 |
if (!is_string($read)) {
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
|
|
|
|
159 |
}
|
160 |
/**
|
161 |
* Decrease the number of bytes returned from remaining
|
162 |
*/
|
163 |
$remaining -= RandomCompat_strlen($read);
|
164 |
/**
|
165 |
-
* @var string
|
166 |
*/
|
167 |
-
$buf
|
168 |
} while ($remaining > 0);
|
169 |
|
170 |
/**
|
171 |
* Is our result valid?
|
172 |
-
* @var string|bool $buf
|
173 |
*/
|
174 |
if (is_string($buf)) {
|
175 |
if (RandomCompat_strlen($buf) === $bytes) {
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
/**
|
4 |
+
* Random_* Compatibility Library
|
5 |
* for using the new PHP 7 random_* API in PHP 5 projects
|
6 |
+
*
|
7 |
* The MIT License (MIT)
|
8 |
*
|
9 |
* Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
|
10 |
+
*
|
11 |
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
12 |
* of this software and associated documentation files (the "Software"), to deal
|
13 |
* in the Software without restriction, including without limitation the rights
|
14 |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
15 |
* copies of the Software, and to permit persons to whom the Software is
|
16 |
* furnished to do so, subject to the following conditions:
|
17 |
+
*
|
18 |
* The above copyright notice and this permission notice shall be included in
|
19 |
* all copies or substantial portions of the Software.
|
20 |
+
*
|
21 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
22 |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
23 |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
37 |
* random numbers in accordance with best practices
|
38 |
*
|
39 |
* Why we use /dev/urandom and not /dev/random
|
|
|
40 |
* @ref http://sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers
|
41 |
*
|
42 |
* @param int $bytes
|
55 |
*/
|
56 |
if (empty($fp)) {
|
57 |
/**
|
58 |
+
* We use /dev/urandom if it is a char device.
|
59 |
+
* We never fall back to /dev/random
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
*/
|
61 |
+
/** @var resource|bool $fp */
|
62 |
+
$fp = fopen('/dev/urandom', 'rb');
|
63 |
+
if (is_resource($fp)) {
|
64 |
+
/** @var array<string, int> $st */
|
65 |
+
$st = fstat($fp);
|
66 |
+
if (($st['mode'] & 0170000) !== 020000) {
|
67 |
+
fclose($fp);
|
68 |
+
$fp = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
69 |
}
|
70 |
}
|
71 |
|
129 |
*/
|
130 |
$read = fread($fp, $remaining);
|
131 |
if (!is_string($read)) {
|
132 |
+
if ($read === false) {
|
133 |
+
/**
|
134 |
+
* We cannot safely read from the file. Exit the
|
135 |
+
* do-while loop and trigger the exception condition
|
136 |
+
*
|
137 |
+
* @var string|bool
|
138 |
+
*/
|
139 |
+
$buf = false;
|
140 |
+
break;
|
141 |
+
}
|
142 |
}
|
143 |
/**
|
144 |
* Decrease the number of bytes returned from remaining
|
145 |
*/
|
146 |
$remaining -= RandomCompat_strlen($read);
|
147 |
/**
|
148 |
+
* @var string|bool
|
149 |
*/
|
150 |
+
$buf = $buf . $read;
|
151 |
} while ($remaining > 0);
|
152 |
|
153 |
/**
|
154 |
* Is our result valid?
|
|
|
155 |
*/
|
156 |
if (is_string($buf)) {
|
157 |
if (RandomCompat_strlen($buf) === $bytes) {
|
crypto/vendor/paragonie/random_compat/lib/random_bytes_libsodium.php
CHANGED
@@ -1,23 +1,23 @@
|
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
/**
|
4 |
-
* Random_* Compatibility Library
|
5 |
* for using the new PHP 7 random_* API in PHP 5 projects
|
6 |
-
*
|
7 |
* The MIT License (MIT)
|
8 |
*
|
9 |
* Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
|
10 |
-
*
|
11 |
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
12 |
* of this software and associated documentation files (the "Software"), to deal
|
13 |
* in the Software without restriction, including without limitation the rights
|
14 |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
15 |
* copies of the Software, and to permit persons to whom the Software is
|
16 |
* furnished to do so, subject to the following conditions:
|
17 |
-
*
|
18 |
* The above copyright notice and this permission notice shall be included in
|
19 |
* all copies or substantial portions of the Software.
|
20 |
-
*
|
21 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
22 |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
23 |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
/**
|
4 |
+
* Random_* Compatibility Library
|
5 |
* for using the new PHP 7 random_* API in PHP 5 projects
|
6 |
+
*
|
7 |
* The MIT License (MIT)
|
8 |
*
|
9 |
* Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
|
10 |
+
*
|
11 |
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
12 |
* of this software and associated documentation files (the "Software"), to deal
|
13 |
* in the Software without restriction, including without limitation the rights
|
14 |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
15 |
* copies of the Software, and to permit persons to whom the Software is
|
16 |
* furnished to do so, subject to the following conditions:
|
17 |
+
*
|
18 |
* The above copyright notice and this permission notice shall be included in
|
19 |
* all copies or substantial portions of the Software.
|
20 |
+
*
|
21 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
22 |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
23 |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
crypto/vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php
CHANGED
@@ -1,23 +1,23 @@
|
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
/**
|
4 |
-
* Random_* Compatibility Library
|
5 |
* for using the new PHP 7 random_* API in PHP 5 projects
|
6 |
-
*
|
7 |
* The MIT License (MIT)
|
8 |
*
|
9 |
* Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
|
10 |
-
*
|
11 |
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
12 |
* of this software and associated documentation files (the "Software"), to deal
|
13 |
* in the Software without restriction, including without limitation the rights
|
14 |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
15 |
* copies of the Software, and to permit persons to whom the Software is
|
16 |
* furnished to do so, subject to the following conditions:
|
17 |
-
*
|
18 |
* The above copyright notice and this permission notice shall be included in
|
19 |
* all copies or substantial portions of the Software.
|
20 |
-
*
|
21 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
22 |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
23 |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
/**
|
4 |
+
* Random_* Compatibility Library
|
5 |
* for using the new PHP 7 random_* API in PHP 5 projects
|
6 |
+
*
|
7 |
* The MIT License (MIT)
|
8 |
*
|
9 |
* Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
|
10 |
+
*
|
11 |
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
12 |
* of this software and associated documentation files (the "Software"), to deal
|
13 |
* in the Software without restriction, including without limitation the rights
|
14 |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
15 |
* copies of the Software, and to permit persons to whom the Software is
|
16 |
* furnished to do so, subject to the following conditions:
|
17 |
+
*
|
18 |
* The above copyright notice and this permission notice shall be included in
|
19 |
* all copies or substantial portions of the Software.
|
20 |
+
*
|
21 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
22 |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
23 |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
crypto/vendor/paragonie/random_compat/lib/random_bytes_mcrypt.php
CHANGED
@@ -1,23 +1,23 @@
|
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
/**
|
4 |
-
* Random_* Compatibility Library
|
5 |
* for using the new PHP 7 random_* API in PHP 5 projects
|
6 |
-
*
|
7 |
* The MIT License (MIT)
|
8 |
*
|
9 |
* Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
|
10 |
-
*
|
11 |
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
12 |
* of this software and associated documentation files (the "Software"), to deal
|
13 |
* in the Software without restriction, including without limitation the rights
|
14 |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
15 |
* copies of the Software, and to permit persons to whom the Software is
|
16 |
* furnished to do so, subject to the following conditions:
|
17 |
-
*
|
18 |
* The above copyright notice and this permission notice shall be included in
|
19 |
* all copies or substantial portions of the Software.
|
20 |
-
*
|
21 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
22 |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
23 |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
/**
|
4 |
+
* Random_* Compatibility Library
|
5 |
* for using the new PHP 7 random_* API in PHP 5 projects
|
6 |
+
*
|
7 |
* The MIT License (MIT)
|
8 |
*
|
9 |
* Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
|
10 |
+
*
|
11 |
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
12 |
* of this software and associated documentation files (the "Software"), to deal
|
13 |
* in the Software without restriction, including without limitation the rights
|
14 |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
15 |
* copies of the Software, and to permit persons to whom the Software is
|
16 |
* furnished to do so, subject to the following conditions:
|
17 |
+
*
|
18 |
* The above copyright notice and this permission notice shall be included in
|
19 |
* all copies or substantial portions of the Software.
|
20 |
+
*
|
21 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
22 |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
23 |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
crypto/vendor/paragonie/random_compat/psalm-autoload.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
+
|
4 |
+
require_once 'lib/byte_safe_strings.php';
|
5 |
+
require_once 'lib/cast_to_int.php';
|
6 |
+
require_once 'lib/error_polyfill.php';
|
7 |
+
require_once 'other/ide_stubs/libsodium.php';
|
8 |
+
require_once 'lib/random.php';
|
9 |
+
|
10 |
+
$int = random_int(0, 65536);
|
crypto/vendor/paragonie/sodium_compat/LICENSE
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
/*
|
2 |
* ISC License
|
3 |
*
|
4 |
-
* Copyright (c) 2016-
|
5 |
* Paragon Initiative Enterprises <security at paragonie dot com>
|
6 |
*
|
7 |
-
* Copyright (c) 2013-
|
8 |
* Frank Denis <j at pureftpd dot org>
|
9 |
*
|
10 |
* Permission to use, copy, modify, and/or distribute this software for any
|
1 |
/*
|
2 |
* ISC License
|
3 |
*
|
4 |
+
* Copyright (c) 2016-2019
|
5 |
* Paragon Initiative Enterprises <security at paragonie dot com>
|
6 |
*
|
7 |
+
* Copyright (c) 2013-2019
|
8 |
* Frank Denis <j at pureftpd dot org>
|
9 |
*
|
10 |
* Permission to use, copy, modify, and/or distribute this software for any
|
crypto/vendor/paragonie/sodium_compat/autoload-php7.php
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
+
/*
|
4 |
+
This file should only ever be loaded on PHP 7+
|
5 |
+
*/
|
6 |
+
if (PHP_VERSION_ID < 70000) {
|
7 |
+
return;
|
8 |
+
}
|
9 |
+
|
10 |
+
spl_autoload_register(function ($class) {
|
11 |
+
$namespace = 'ParagonIE_Sodium_';
|
12 |
+
// Does the class use the namespace prefix?
|
13 |
+
$len = strlen($namespace);
|
14 |
+
if (strncmp($namespace, $class, $len) !== 0) {
|
15 |
+
// no, move to the next registered autoloader
|
16 |
+
return false;
|
17 |
+
}
|
18 |
+
|
19 |
+
// Get the relative class name
|
20 |
+
$relative_class = substr($class, $len);
|
21 |
+
|
22 |
+
// Replace the namespace prefix with the base directory, replace namespace
|
23 |
+
// separators with directory separators in the relative class name, append
|
24 |
+
// with .php
|
25 |
+
$file = dirname(__FILE__) . '/src/' . str_replace('_', '/', $relative_class) . '.php';
|
26 |
+
// if the file exists, require it
|
27 |
+
if (file_exists($file)) {
|
28 |
+
require_once $file;
|
29 |
+
return true;
|
30 |
+
}
|
31 |
+
return false;
|
32 |
+
});
|
crypto/vendor/paragonie/sodium_compat/autoload-phpunit.php
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
+
|
4 |
+
require_once (dirname(__FILE__) . '/vendor/autoload.php');
|
5 |
+
|
6 |
+
if (PHP_VERSION_ID >= 50300) {
|
7 |
+
require_once (dirname(__FILE__) . '/tests/phpunit-shim.php');
|
8 |
+
}
|
crypto/vendor/paragonie/sodium_compat/autoload.php
CHANGED
@@ -1,50 +1,66 @@
|
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
|
4 |
-
if (
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
|
|
21 |
|
22 |
-
|
23 |
-
|
24 |
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
|
|
|
|
33 |
}
|
34 |
-
return false;
|
35 |
-
}
|
36 |
|
37 |
-
|
38 |
-
|
|
|
|
|
|
|
39 |
}
|
40 |
|
41 |
-
|
|
|
|
|
42 |
if (PHP_VERSION_ID >= 50300) {
|
43 |
// Namespaces didn't exist before 5.3.0, so don't even try to use this
|
44 |
// unless PHP >= 5.3.0
|
45 |
require_once dirname(__FILE__) . '/lib/namespaced.php';
|
46 |
require_once dirname(__FILE__) . '/lib/sodium_compat.php';
|
|
|
|
|
47 |
}
|
48 |
if (PHP_VERSION_ID < 70200 || !extension_loaded('sodium')) {
|
49 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
}
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
|
4 |
+
if (PHP_VERSION_ID < 70000) {
|
5 |
+
if (!is_callable('sodiumCompatAutoloader')) {
|
6 |
+
/**
|
7 |
+
* Sodium_Compat autoloader.
|
8 |
+
*
|
9 |
+
* @param string $class Class name to be autoloaded.
|
10 |
+
*
|
11 |
+
* @return bool Stop autoloading?
|
12 |
+
*/
|
13 |
+
function sodiumCompatAutoloader($class)
|
14 |
+
{
|
15 |
+
$namespace = 'ParagonIE_Sodium_';
|
16 |
+
// Does the class use the namespace prefix?
|
17 |
+
$len = strlen($namespace);
|
18 |
+
if (strncmp($namespace, $class, $len) !== 0) {
|
19 |
+
// no, move to the next registered autoloader
|
20 |
+
return false;
|
21 |
+
}
|
22 |
|
23 |
+
// Get the relative class name
|
24 |
+
$relative_class = substr($class, $len);
|
25 |
|
26 |
+
// Replace the namespace prefix with the base directory, replace namespace
|
27 |
+
// separators with directory separators in the relative class name, append
|
28 |
+
// with .php
|
29 |
+
$file = dirname(__FILE__) . '/src/' . str_replace('_', '/', $relative_class) . '.php';
|
30 |
+
// if the file exists, require it
|
31 |
+
if (file_exists($file)) {
|
32 |
+
require_once $file;
|
33 |
+
return true;
|
34 |
+
}
|
35 |
+
return false;
|
36 |
}
|
|
|
|
|
37 |
|
38 |
+
// Now that we have an autoloader, let's register it!
|
39 |
+
spl_autoload_register('sodiumCompatAutoloader');
|
40 |
+
}
|
41 |
+
} else {
|
42 |
+
require_once dirname(__FILE__) . '/autoload-php7.php';
|
43 |
}
|
44 |
|
45 |
+
if (!class_exists('SodiumException', false)) {
|
46 |
+
require_once dirname(__FILE__) . '/src/SodiumException.php';
|
47 |
+
}
|
48 |
if (PHP_VERSION_ID >= 50300) {
|
49 |
// Namespaces didn't exist before 5.3.0, so don't even try to use this
|
50 |
// unless PHP >= 5.3.0
|
51 |
require_once dirname(__FILE__) . '/lib/namespaced.php';
|
52 |
require_once dirname(__FILE__) . '/lib/sodium_compat.php';
|
53 |
+
} else {
|
54 |
+
require_once dirname(__FILE__) . '/src/PHP52/SplFixedArray.php';
|
55 |
}
|
56 |
if (PHP_VERSION_ID < 70200 || !extension_loaded('sodium')) {
|
57 |
+
if (PHP_VERSION_ID >= 50300 && !defined('SODIUM_CRYPTO_SCALARMULT_BYTES')) {
|
58 |
+
require_once dirname(__FILE__) . '/lib/php72compat_const.php';
|
59 |
+
}
|
60 |
+
if (PHP_VERSION_ID >= 70000) {
|
61 |
+
assert(class_exists('ParagonIE_Sodium_Compat'), 'Possible filesystem/autoloader bug?');
|
62 |
+
} else {
|
63 |
+
assert(class_exists('ParagonIE_Sodium_Compat'));
|
64 |
+
}
|
65 |
+
require_once (dirname(__FILE__) . '/lib/php72compat.php');
|
66 |
}
|
crypto/vendor/paragonie/sodium_compat/composer-php52.json
ADDED
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "paragonie/sodium_compat",
|
3 |
+
"description": "Pure PHP implementation of libsodium; uses the PHP extension if it exists",
|
4 |
+
"keywords": [
|
5 |
+
"PHP",
|
6 |
+
"cryptography",
|
7 |
+
"elliptic curve",
|
8 |
+
"elliptic curve cryptography",
|
9 |
+
"Pure-PHP cryptography",
|
10 |
+
"side-channel resistant",
|
11 |
+
"Curve25519",
|
12 |
+
"X25519",
|
13 |
+
"ECDH",
|
14 |
+
"Elliptic Curve Diffie-Hellman",
|
15 |
+
"Ed25519",
|
16 |
+
"RFC 7748",
|
17 |
+
"RFC 8032",
|
18 |
+
"EdDSA",
|
19 |
+
"Edwards-curve Digital Signature Algorithm",
|
20 |
+
"ChaCha20",
|
21 |
+
"Salsa20",
|
22 |
+
"Xchacha20",
|
23 |
+
"Xsalsa20",
|
24 |
+
"Poly1305",
|
25 |
+
"BLAKE2b",
|
26 |
+
"public-key cryptography",
|
27 |
+
"secret-key cryptography",
|
28 |
+
"AEAD",
|
29 |
+
"Chapoly",
|
30 |
+
"Salpoly",
|
31 |
+
"ChaCha20-Poly1305",
|
32 |
+
"XSalsa20-Poly1305",
|
33 |
+
"XChaCha20-Poly1305",
|
34 |
+
"encryption",
|
35 |
+
"authentication",
|
36 |
+
"libsodium"
|
37 |
+
],
|
38 |
+
"license": "ISC",
|
39 |
+
"authors": [
|
40 |
+
{
|
41 |
+
"name": "Paragon Initiative Enterprises",
|
42 |
+
"email": "security@paragonie.com"
|
43 |
+
},
|
44 |
+
{
|
45 |
+
"name": "Frank Denis",
|
46 |
+
"email": "jedisct1@pureftpd.org"
|
47 |
+
}
|
48 |
+
],
|
49 |
+
"autoload": {
|
50 |
+
"files": ["autoload.php"]
|
51 |
+
},
|
52 |
+
"repositories": [
|
53 |
+
{
|
54 |
+
"type": "git",
|
55 |
+
"url": "https://github.com/garex/phpunit"
|
56 |
+
},
|
57 |
+
{
|
58 |
+
"type": "git",
|
59 |
+
"url": "https://github.com/garex/phpunit-mock-objects"
|
60 |
+
}
|
61 |
+
],
|
62 |
+
"require": {
|
63 |
+
"php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8",
|
64 |
+
"xrstf/composer-php52": "1.*",
|
65 |
+
"paragonie/random_compat": ">=1"
|
66 |
+
},
|
67 |
+
"minimum-stability": "dev",
|
68 |
+
"require-dev": {
|
69 |
+
"phpunit/phpunit-php52": "dev-3.6.12-php52",
|
70 |
+
"phpunit/phpunit-mock-objects-php52": "dev-1.1.0-php52"
|
71 |
+
},
|
72 |
+
"scripts": {
|
73 |
+
"post-install-cmd": [
|
74 |
+
"xrstf\\Composer52\\Generator::onPostInstallCmd"
|
75 |
+
],
|
76 |
+
"post-update-cmd": [
|
77 |
+
"xrstf\\Composer52\\Generator::onPostInstallCmd"
|
78 |
+
],
|
79 |
+
"post-autoload-dump": [
|
80 |
+
"xrstf\\Composer52\\Generator::onPostInstallCmd"
|
81 |
+
]
|
82 |
+
},
|
83 |
+
"suggest": {
|
84 |
+
"ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.",
|
85 |
+
"ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security."
|
86 |
+
}
|
87 |
+
}
|
crypto/vendor/paragonie/sodium_compat/lib/constants.php
CHANGED
@@ -2,6 +2,8 @@
|
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
namespace Sodium;
|
4 |
|
|
|
|
|
5 |
use ParagonIE_Sodium_Compat;
|
6 |
|
7 |
const CRYPTO_AEAD_AES256GCM_KEYBYTES = ParagonIE_Sodium_Compat::CRYPTO_AEAD_AES256GCM_KEYBYTES;
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
namespace Sodium;
|
4 |
|
5 |
+
require_once dirname(dirname(__FILE__)) . '/autoload.php';
|
6 |
+
|
7 |
use ParagonIE_Sodium_Compat;
|
8 |
|
9 |
const CRYPTO_AEAD_AES256GCM_KEYBYTES = ParagonIE_Sodium_Compat::CRYPTO_AEAD_AES256GCM_KEYBYTES;
|
crypto/vendor/paragonie/sodium_compat/lib/namespaced.php
CHANGED
@@ -1,6 +1,8 @@
|
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
|
|
|
|
|
4 |
if (PHP_VERSION_ID < 50300) {
|
5 |
return;
|
6 |
}
|
@@ -37,7 +39,7 @@ spl_autoload_register(function ($class) {
|
|
37 |
// Replace the namespace prefix with the base directory, replace namespace
|
38 |
// separators with directory separators in the relative class name, append
|
39 |
// with .php
|
40 |
-
$file = dirname(
|
41 |
// if the file exists, require it
|
42 |
if (file_exists($file)) {
|
43 |
require_once $file;
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
|
4 |
+
require_once dirname(dirname(__FILE__)) . '/autoload.php';
|
5 |
+
|
6 |
if (PHP_VERSION_ID < 50300) {
|
7 |
return;
|
8 |
}
|
39 |
// Replace the namespace prefix with the base directory, replace namespace
|
40 |
// separators with directory separators in the relative class name, append
|
41 |
// with .php
|
42 |
+
$file = dirname(dirname(__FILE__)) . '/namespaced/' . str_replace('\\', '/', $relative_class) . '.php';
|
43 |
// if the file exists, require it
|
44 |
if (file_exists($file)) {
|
45 |
require_once $file;
|
crypto/vendor/paragonie/sodium_compat/lib/php72compat.php
CHANGED
@@ -1,6 +1,8 @@
|
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
|
|
|
|
|
4 |
/**
|
5 |
* This file will monkey patch the pure-PHP implementation in place of the
|
6 |
* PECL functions and constants, but only if they do not already exist.
|
@@ -9,6 +11,10 @@
|
|
9 |
* ParagonIE_Sodium_Compat method or class constant, respectively.
|
10 |
*/
|
11 |
foreach (array(
|
|
|
|
|
|
|
|
|
12 |
'CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES',
|
13 |
'CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES',
|
14 |
'CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES',
|
@@ -21,6 +27,10 @@ foreach (array(
|
|
21 |
'CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES',
|
22 |
'CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES',
|
23 |
'CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES',
|
|
|
|
|
|
|
|
|
24 |
'CRYPTO_AUTH_BYTES',
|
25 |
'CRYPTO_AUTH_KEYBYTES',
|
26 |
'CRYPTO_BOX_SEALBYTES',
|
@@ -30,10 +40,17 @@ foreach (array(
|
|
30 |
'CRYPTO_BOX_MACBYTES',
|
31 |
'CRYPTO_BOX_NONCEBYTES',
|
32 |
'CRYPTO_BOX_SEEDBYTES',
|
|
|
|
|
|
|
|
|
33 |
'CRYPTO_KX_BYTES',
|
|
|
|
|
34 |
'CRYPTO_KX_SEEDBYTES',
|
35 |
'CRYPTO_KX_PUBLICKEYBYTES',
|
36 |
'CRYPTO_KX_SECRETKEYBYTES',
|
|
|
37 |
'CRYPTO_GENERICHASH_BYTES',
|
38 |
'CRYPTO_GENERICHASH_BYTES_MIN',
|
39 |
'CRYPTO_GENERICHASH_BYTES_MAX',
|
@@ -50,6 +67,12 @@ foreach (array(
|
|
50 |
'CRYPTO_PWHASH_OPSLIMIT_MODERATE',
|
51 |
'CRYPTO_PWHASH_MEMLIMIT_SENSITIVE',
|
52 |
'CRYPTO_PWHASH_OPSLIMIT_SENSITIVE',
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
'CRYPTO_SCALARMULT_BYTES',
|
54 |
'CRYPTO_SCALARMULT_SCALARBYTES',
|
55 |
'CRYPTO_SHORTHASH_BYTES',
|
@@ -57,6 +80,14 @@ foreach (array(
|
|
57 |
'CRYPTO_SECRETBOX_KEYBYTES',
|
58 |
'CRYPTO_SECRETBOX_MACBYTES',
|
59 |
'CRYPTO_SECRETBOX_NONCEBYTES',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
'CRYPTO_SIGN_BYTES',
|
61 |
'CRYPTO_SIGN_SEEDBYTES',
|
62 |
'CRYPTO_SIGN_PUBLICKEYBYTES',
|
@@ -64,16 +95,59 @@ foreach (array(
|
|
64 |
'CRYPTO_SIGN_KEYPAIRBYTES',
|
65 |
'CRYPTO_STREAM_KEYBYTES',
|
66 |
'CRYPTO_STREAM_NONCEBYTES',
|
|
|
|
|
67 |
'LIBRARY_VERSION_MAJOR',
|
68 |
'LIBRARY_VERSION_MINOR',
|
69 |
'VERSION_STRING'
|
70 |
) as $constant
|
71 |
) {
|
72 |
-
if (!defined("SODIUM_$constant")) {
|
73 |
define("SODIUM_$constant", constant("ParagonIE_Sodium_Compat::$constant"));
|
74 |
}
|
75 |
}
|
76 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
if (!is_callable('sodium_bin2hex')) {
|
78 |
/**
|
79 |
* @see ParagonIE_Sodium_Compat::hex2bin()
|
@@ -187,6 +261,7 @@ if (!is_callable('sodium_crypto_aead_chacha20poly1305_keygen')) {
|
|
187 |
/**
|
188 |
* @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_keygen()
|
189 |
* @return string
|
|
|
190 |
*/
|
191 |
function sodium_crypto_aead_chacha20poly1305_keygen()
|
192 |
{
|
@@ -233,6 +308,7 @@ if (!is_callable('sodium_crypto_aead_chacha20poly1305_ietf_keygen')) {
|
|
233 |
/**
|
234 |
* @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_keygen()
|
235 |
* @return string
|
|
|
236 |
*/
|
237 |
function sodium_crypto_aead_chacha20poly1305_ietf_keygen()
|
238 |
{
|
@@ -279,6 +355,7 @@ if (!is_callable('sodium_crypto_aead_xchacha20poly1305_ietf_keygen')) {
|
|
279 |
/**
|
280 |
* @see ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_keygen()
|
281 |
* @return string
|
|
|
282 |
*/
|
283 |
function sodium_crypto_aead_xchacha20poly1305_ietf_keygen()
|
284 |
{
|
@@ -303,6 +380,7 @@ if (!is_callable('sodium_crypto_auth_keygen')) {
|
|
303 |
/**
|
304 |
* @see ParagonIE_Sodium_Compat::crypto_auth_keygen()
|
305 |
* @return string
|
|
|
306 |
*/
|
307 |
function sodium_crypto_auth_keygen()
|
308 |
{
|
@@ -517,6 +595,7 @@ if (!is_callable('sodium_crypto_generichash_keygen')) {
|
|
517 |
/**
|
518 |
* @see ParagonIE_Sodium_Compat::crypto_generichash_keygen()
|
519 |
* @return string
|
|
|
520 |
*/
|
521 |
function sodium_crypto_generichash_keygen()
|
522 |
{
|
@@ -537,6 +616,37 @@ if (!is_callable('sodium_crypto_generichash_update')) {
|
|
537 |
ParagonIE_Sodium_Compat::crypto_generichash_update($ctx, $message);
|
538 |
}
|
539 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
540 |
if (!is_callable('sodium_crypto_kx')) {
|
541 |
/**
|
542 |
* @see ParagonIE_Sodium_Compat::crypto_kx()
|
@@ -558,6 +668,73 @@ if (!is_callable('sodium_crypto_kx')) {
|
|
558 |
);
|
559 |
}
|
560 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
561 |
if (!is_callable('sodium_crypto_pwhash')) {
|
562 |
/**
|
563 |
* @see ParagonIE_Sodium_Compat::crypto_pwhash()
|
@@ -591,6 +768,21 @@ if (!is_callable('sodium_crypto_pwhash_str')) {
|
|
591 |
return ParagonIE_Sodium_Compat::crypto_pwhash_str($passwd, $opslimit, $memlimit);
|
592 |
}
|
593 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
594 |
if (!is_callable('sodium_crypto_pwhash_str_verify')) {
|
595 |
/**
|
596 |
* @see ParagonIE_Sodium_Compat::crypto_pwhash_str_verify()
|
@@ -697,6 +889,7 @@ if (!is_callable('sodium_crypto_secretbox_keygen')) {
|
|
697 |
/**
|
698 |
* @see ParagonIE_Sodium_Compat::crypto_secretbox_keygen()
|
699 |
* @return string
|
|
|
700 |
*/
|
701 |
function sodium_crypto_secretbox_keygen()
|
702 |
{
|
@@ -722,6 +915,77 @@ if (!is_callable('sodium_crypto_secretbox_open')) {
|
|
722 |
}
|
723 |
}
|
724 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
725 |
if (!is_callable('sodium_crypto_shorthash')) {
|
726 |
/**
|
727 |
* @see ParagonIE_Sodium_Compat::crypto_shorthash()
|
@@ -740,6 +1004,7 @@ if (!is_callable('sodium_crypto_shorthash_keygen')) {
|
|
740 |
/**
|
741 |
* @see ParagonIE_Sodium_Compat::crypto_shorthash_keygen()
|
742 |
* @return string
|
|
|
743 |
*/
|
744 |
function sodium_crypto_shorthash_keygen()
|
745 |
{
|
@@ -774,6 +1039,20 @@ if (!is_callable('sodium_crypto_sign_detached')) {
|
|
774 |
return ParagonIE_Sodium_Compat::crypto_sign_detached($message, $sk);
|
775 |
}
|
776 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
777 |
if (!is_callable('sodium_crypto_sign_keypair')) {
|
778 |
/**
|
779 |
* @see ParagonIE_Sodium_Compat::crypto_sign_keypair()
|
@@ -916,6 +1195,7 @@ if (!is_callable('sodium_crypto_stream_keygen')) {
|
|
916 |
/**
|
917 |
* @see ParagonIE_Sodium_Compat::crypto_stream_keygen()
|
918 |
* @return string
|
|
|
919 |
*/
|
920 |
function sodium_crypto_stream_keygen()
|
921 |
{
|
@@ -1020,6 +1300,34 @@ if (!is_callable('sodium_memzero')) {
|
|
1020 |
ParagonIE_Sodium_Compat::memzero($str);
|
1021 |
}
|
1022 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1023 |
if (!is_callable('sodium_randombytes_buf')) {
|
1024 |
/**
|
1025 |
* @see ParagonIE_Sodium_Compat::randombytes_buf()
|
@@ -1050,6 +1358,7 @@ if (!is_callable('sodium_randombytes_random16')) {
|
|
1050 |
/**
|
1051 |
* @see ParagonIE_Sodium_Compat::randombytes_random16()
|
1052 |
* @return int
|
|
|
1053 |
*/
|
1054 |
function sodium_randombytes_random16()
|
1055 |
{
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
|
4 |
+
require_once dirname(dirname(__FILE__)) . '/autoload.php';
|
5 |
+
|
6 |
/**
|
7 |
* This file will monkey patch the pure-PHP implementation in place of the
|
8 |
* PECL functions and constants, but only if they do not already exist.
|
11 |
* ParagonIE_Sodium_Compat method or class constant, respectively.
|
12 |
*/
|
13 |
foreach (array(
|
14 |
+
'BASE64_VARIANT_ORIGINAL',
|
15 |
+
'BASE64_VARIANT_ORIGINAL_NO_PADDING',
|
16 |
+
'BASE64_VARIANT_URLSAFE',
|
17 |
+
'BASE64_VARIANT_URLSAFE_NO_PADDING',
|
18 |
'CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES',
|
19 |
'CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES',
|
20 |
'CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES',
|
27 |
'CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES',
|
28 |
'CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES',
|
29 |
'CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES',
|
30 |
+
'CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES',
|
31 |
+
'CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES',
|
32 |
+
'CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES',
|
33 |
+
'CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES',
|
34 |
'CRYPTO_AUTH_BYTES',
|
35 |
'CRYPTO_AUTH_KEYBYTES',
|
36 |
'CRYPTO_BOX_SEALBYTES',
|
40 |
'CRYPTO_BOX_MACBYTES',
|
41 |
'CRYPTO_BOX_NONCEBYTES',
|
42 |
'CRYPTO_BOX_SEEDBYTES',
|
43 |
+
'CRYPTO_KDF_BYTES_MIN',
|
44 |
+
'CRYPTO_KDF_BYTES_MAX',
|
45 |
+
'CRYPTO_KDF_CONTEXTBYTES',
|
46 |
+
'CRYPTO_KDF_KEYBYTES',
|
47 |
'CRYPTO_KX_BYTES',
|
48 |
+
'CRYPTO_KX_KEYPAIRBYTES',
|
49 |
+
'CRYPTO_KX_PRIMITIVE',
|
50 |
'CRYPTO_KX_SEEDBYTES',
|
51 |
'CRYPTO_KX_PUBLICKEYBYTES',
|
52 |
'CRYPTO_KX_SECRETKEYBYTES',
|
53 |
+
'CRYPTO_KX_SESSIONKEYBYTES',
|
54 |
'CRYPTO_GENERICHASH_BYTES',
|
55 |
'CRYPTO_GENERICHASH_BYTES_MIN',
|
56 |
'CRYPTO_GENERICHASH_BYTES_MAX',
|
67 |
'CRYPTO_PWHASH_OPSLIMIT_MODERATE',
|
68 |
'CRYPTO_PWHASH_MEMLIMIT_SENSITIVE',
|
69 |
'CRYPTO_PWHASH_OPSLIMIT_SENSITIVE',
|
70 |
+
'CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES',
|
71 |
+
'CRYPTO_PWHASH_SCRYPTSALSA208SHA256_STRPREFIX',
|
72 |
+
'CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE',
|
73 |
+
'CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE',
|
74 |
+
'CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_SENSITIVE',
|
75 |
+
'CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_SENSITIVE',
|
76 |
'CRYPTO_SCALARMULT_BYTES',
|
77 |
'CRYPTO_SCALARMULT_SCALARBYTES',
|
78 |
'CRYPTO_SHORTHASH_BYTES',
|
80 |
'CRYPTO_SECRETBOX_KEYBYTES',
|
81 |
'CRYPTO_SECRETBOX_MACBYTES',
|
82 |
'CRYPTO_SECRETBOX_NONCEBYTES',
|
83 |
+
'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES',
|
84 |
+
'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES',
|
85 |
+
'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES',
|
86 |
+
'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH',
|
87 |
+
'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PULL',
|
88 |
+
'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY',
|
89 |
+
'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL',
|
90 |
+
'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX',
|
91 |
'CRYPTO_SIGN_BYTES',
|
92 |
'CRYPTO_SIGN_SEEDBYTES',
|
93 |
'CRYPTO_SIGN_PUBLICKEYBYTES',
|
95 |
'CRYPTO_SIGN_KEYPAIRBYTES',
|
96 |
'CRYPTO_STREAM_KEYBYTES',
|
97 |
'CRYPTO_STREAM_NONCEBYTES',
|
98 |
+
'LIBRARY_MAJOR_VERSION',
|
99 |
+
'LIBRARY_MINOR_VERSION',
|
100 |
'LIBRARY_VERSION_MAJOR',
|
101 |
'LIBRARY_VERSION_MINOR',
|
102 |
'VERSION_STRING'
|
103 |
) as $constant
|
104 |
) {
|
105 |
+
if (!defined("SODIUM_$constant") && defined("ParagonIE_Sodium_Compat::$constant")) {
|
106 |
define("SODIUM_$constant", constant("ParagonIE_Sodium_Compat::$constant"));
|
107 |
}
|
108 |
}
|
109 |
+
if (!is_callable('sodium_add')) {
|
110 |
+
/**
|
111 |
+
* @see ParagonIE_Sodium_Compat::add()
|
112 |
+
* @param string $val
|
113 |
+
* @param string $addv
|
114 |
+
* @return void
|
115 |
+
* @throws SodiumException
|
116 |
+
*/
|
117 |
+
function sodium_add(&$val, $addv)
|
118 |
+
{
|
119 |
+
ParagonIE_Sodium_Compat::add($val, $addv);
|
120 |
+
}
|
121 |
+
}
|
122 |
+
if (!is_callable('sodium_base642bin')) {
|
123 |
+
/**
|
124 |
+
* @see ParagonIE_Sodium_Compat::bin2base64()
|
125 |
+
* @param string $string
|
126 |
+
* @param int $variant
|
127 |
+
* @param string $ignore
|
128 |
+
* @return string
|
129 |
+
* @throws SodiumException
|
130 |
+
* @throws TypeError
|
131 |
+
*/
|
132 |
+
function sodium_base642bin($string, $variant, $ignore ='')
|
133 |
+
{
|
134 |
+
return ParagonIE_Sodium_Compat::base642bin($string, $variant, $ignore);
|
135 |
+
}
|
136 |
+
}
|
137 |
+
if (!is_callable('sodium_bin2base64')) {
|
138 |
+
/**
|
139 |
+
* @see ParagonIE_Sodium_Compat::bin2base64()
|
140 |
+
* @param string $string
|
141 |
+
* @param int $variant
|
142 |
+
* @return string
|
143 |
+
* @throws SodiumException
|
144 |
+
* @throws TypeError
|
145 |
+
*/
|
146 |
+
function sodium_bin2base64($string, $variant)
|
147 |
+
{
|
148 |
+
return ParagonIE_Sodium_Compat::bin2base64($string, $variant);
|
149 |
+
}
|
150 |
+
}
|
151 |
if (!is_callable('sodium_bin2hex')) {
|
152 |
/**
|
153 |
* @see ParagonIE_Sodium_Compat::hex2bin()
|
261 |
/**
|
262 |
* @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_keygen()
|
263 |
* @return string
|
264 |
+
* @throws Exception
|
265 |
*/
|
266 |
function sodium_crypto_aead_chacha20poly1305_keygen()
|
267 |
{
|
308 |
/**
|
309 |
* @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_keygen()
|
310 |
* @return string
|
311 |
+
* @throws Exception
|
312 |
*/
|
313 |
function sodium_crypto_aead_chacha20poly1305_ietf_keygen()
|
314 |
{
|
355 |
/**
|
356 |
* @see ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_keygen()
|
357 |
* @return string
|
358 |
+
* @throws Exception
|
359 |
*/
|
360 |
function sodium_crypto_aead_xchacha20poly1305_ietf_keygen()
|
361 |
{
|
380 |
/**
|
381 |
* @see ParagonIE_Sodium_Compat::crypto_auth_keygen()
|
382 |
* @return string
|
383 |
+
* @throws Exception
|
384 |
*/
|
385 |
function sodium_crypto_auth_keygen()
|
386 |
{
|
595 |
/**
|
596 |
* @see ParagonIE_Sodium_Compat::crypto_generichash_keygen()
|
597 |
* @return string
|
598 |
+
* @throws Exception
|
599 |
*/
|
600 |
function sodium_crypto_generichash_keygen()
|
601 |
{
|
616 |
ParagonIE_Sodium_Compat::crypto_generichash_update($ctx, $message);
|
617 |
}
|
618 |
}
|
619 |
+
if (!is_callable('sodium_crypto_kdf_keygen')) {
|
620 |
+
/**
|
621 |
+
* @see ParagonIE_Sodium_Compat::crypto_kdf_keygen()
|
622 |
+
* @return string
|
623 |
+
* @throws Exception
|
624 |
+
*/
|
625 |
+
function sodium_crypto_kdf_keygen()
|
626 |
+
{
|
627 |
+
return ParagonIE_Sodium_Compat::crypto_kdf_keygen();
|
628 |
+
}
|
629 |
+
}
|
630 |
+
if (!is_callable('sodium_crypto_kdf_derive_from_key')) {
|
631 |
+
/**
|
632 |
+
* @see ParagonIE_Sodium_Compat::crypto_kdf_derive_from_key()
|
633 |
+
* @param int $subkey_len
|
634 |
+
* @param int $subkey_id
|
635 |
+
* @param string $context
|
636 |
+
* @param string $key
|
637 |
+
* @return string
|
638 |
+
* @throws Exception
|
639 |
+
*/
|
640 |
+
function sodium_crypto_kdf_derive_from_key($subkey_len, $subkey_id, $context, $key)
|
641 |
+
{
|
642 |
+
return ParagonIE_Sodium_Compat::crypto_kdf_derive_from_key(
|
643 |
+
$subkey_len,
|
644 |
+
$subkey_id,
|
645 |
+
$context,
|
646 |
+
$key
|
647 |
+
);
|
648 |
+
}
|
649 |
+
}
|
650 |
if (!is_callable('sodium_crypto_kx')) {
|
651 |
/**
|
652 |
* @see ParagonIE_Sodium_Compat::crypto_kx()
|
668 |
);
|
669 |
}
|
670 |
}
|
671 |
+
if (!is_callable('sodium_crypto_kx_seed_keypair')) {
|
672 |
+
/**
|
673 |
+
* @param string $seed
|
674 |
+
* @return string
|
675 |
+
* @throws Exception
|
676 |
+
*/
|
677 |
+
function sodium_crypto_kx_seed_keypair($seed)
|
678 |
+
{
|
679 |
+
return ParagonIE_Sodium_Compat::crypto_kx_seed_keypair($seed);
|
680 |
+
}
|
681 |
+
}
|
682 |
+
if (!is_callable('sodium_crypto_kx_keypair')) {
|
683 |
+
/**
|
684 |
+
* @return string
|
685 |
+
* @throws Exception
|
686 |
+
*/
|
687 |
+
function sodium_crypto_kx_keypair()
|
688 |
+
{
|
689 |
+
return ParagonIE_Sodium_Compat::crypto_kx_keypair();
|
690 |
+
}
|
691 |
+
}
|
692 |
+
if (!is_callable('sodium_crypto_kx_client_session_keys')) {
|
693 |
+
/**
|
694 |
+
* @param string $keypair
|
695 |
+
* @param string $serverPublicKey
|
696 |
+
* @return array{0: string, 1: string}
|
697 |
+
* @throws SodiumException
|
698 |
+
*/
|
699 |
+
function sodium_crypto_kx_client_session_keys($keypair, $serverPublicKey)
|
700 |
+
{
|
701 |
+
return ParagonIE_Sodium_Compat::crypto_kx_client_session_keys($keypair, $serverPublicKey);
|
702 |
+
}
|
703 |
+
}
|
704 |
+
if (!is_callable('sodium_crypto_kx_server_session_keys')) {
|
705 |
+
/**
|
706 |
+
* @param string $keypair
|
707 |
+
* @param string $clientPublicKey
|
708 |
+
* @return array{0: string, 1: string}
|
709 |
+
* @throws SodiumException
|
710 |
+
*/
|
711 |
+
function sodium_crypto_kx_server_session_keys($keypair, $clientPublicKey)
|
712 |
+
{
|
713 |
+
return ParagonIE_Sodium_Compat::crypto_kx_server_session_keys($keypair, $clientPublicKey);
|
714 |
+
}
|
715 |
+
}
|
716 |
+
if (!is_callable('sodium_crypto_kx_secretkey')) {
|
717 |
+
/**
|
718 |
+
* @param string $keypair
|
719 |
+
* @return string
|
720 |
+
* @throws Exception
|
721 |
+
*/
|
722 |
+
function sodium_crypto_kx_secretkey($keypair)
|
723 |
+
{
|
724 |
+
return ParagonIE_Sodium_Compat::crypto_kx_secretkey($keypair);
|
725 |
+
}
|
726 |
+
}
|
727 |
+
if (!is_callable('sodium_crypto_kx_publickey')) {
|
728 |
+
/**
|
729 |
+
* @param string $keypair
|
730 |
+
* @return string
|
731 |
+
* @throws Exception
|
732 |
+
*/
|
733 |
+
function sodium_crypto_kx_publickey($keypair)
|
734 |
+
{
|
735 |
+
return ParagonIE_Sodium_Compat::crypto_kx_publickey($keypair);
|
736 |
+
}
|
737 |
+
}
|
738 |
if (!is_callable('sodium_crypto_pwhash')) {
|
739 |
/**
|
740 |
* @see ParagonIE_Sodium_Compat::crypto_pwhash()
|
768 |
return ParagonIE_Sodium_Compat::crypto_pwhash_str($passwd, $opslimit, $memlimit);
|
769 |
}
|
770 |
}
|
771 |
+
if (!is_callable('sodium_crypto_pwhash_str_needs_rehash')) {
|
772 |
+
/**
|
773 |
+
* @see ParagonIE_Sodium_Compat::crypto_pwhash_str_needs_rehash()
|
774 |
+
* @param string $hash
|
775 |
+
* @param int $opslimit
|
776 |
+
* @param int $memlimit
|
777 |
+
* @return bool
|
778 |
+
*
|
779 |
+
* @throws SodiumException
|
780 |
+
*/
|
781 |
+
function sodium_crypto_pwhash_str_needs_rehash($hash, $opslimit, $memlimit)
|
782 |
+
{
|
783 |
+
return ParagonIE_Sodium_Compat::crypto_pwhash_str_needs_rehash($hash, $opslimit, $memlimit);
|
784 |
+
}
|
785 |
+
}
|
786 |
if (!is_callable('sodium_crypto_pwhash_str_verify')) {
|
787 |
/**
|
788 |
* @see ParagonIE_Sodium_Compat::crypto_pwhash_str_verify()
|
889 |
/**
|
890 |
* @see ParagonIE_Sodium_Compat::crypto_secretbox_keygen()
|
891 |
* @return string
|
892 |
+
* @throws Exception
|
893 |
*/
|
894 |
function sodium_crypto_secretbox_keygen()
|
895 |
{
|
915 |
}
|
916 |
}
|
917 |
}
|
918 |
+
if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_init_push')) {
|
919 |
+
/**
|
920 |
+
* @param string $key
|
921 |
+
* @return array<int, string>
|
922 |
+
* @throws SodiumException
|
923 |
+
*/
|
924 |
+
function sodium_crypto_secretstream_xchacha20poly1305_init_push($key)
|
925 |
+
{
|
926 |
+
return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_init_push($key);
|
927 |
+
}
|
928 |
+
}
|
929 |
+
if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_push')) {
|
930 |
+
/**
|
931 |
+
* @param string $state
|
932 |
+
* @param string $msg
|
933 |
+
* @param string $aad
|
934 |
+
* @param int $tag
|
935 |
+
* @return string
|
936 |
+
* @throws SodiumException
|
937 |
+
*/
|
938 |
+
function sodium_crypto_secretstream_xchacha20poly1305_push(&$state, $msg, $aad = '', $tag = 0)
|
939 |
+
{
|
940 |
+
return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_push($state, $msg, $aad, $tag);
|
941 |
+
}
|
942 |
+
}
|
943 |
+
if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_init_pull')) {
|
944 |
+
/**
|
945 |
+
* @param string $header
|
946 |
+
* @param string $key
|
947 |
+
* @return string
|
948 |
+
* @throws Exception
|
949 |
+
*/
|
950 |
+
function sodium_crypto_secretstream_xchacha20poly1305_init_pull($header, $key)
|
951 |
+
{
|
952 |
+
return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_init_pull($header, $key);
|
953 |
+
}
|
954 |
+
}
|
955 |
+
if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_pull')) {
|
956 |
+
/**
|
957 |
+
* @param string $state
|
958 |
+
* @param string $cipher
|
959 |
+
* @param string $aad
|
960 |
+
* @return bool|array{0: string, 1: int}
|
961 |
+
* @throws SodiumException
|
962 |
+
*/
|
963 |
+
function sodium_crypto_secretstream_xchacha20poly1305_pull(&$state, $cipher, $aad = '')
|
964 |
+
{
|
965 |
+
return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_pull($state, $cipher, $aad);
|
966 |
+
}
|
967 |
+
}
|
968 |
+
if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_rekey')) {
|
969 |
+
/**
|
970 |
+
* @param string $state
|
971 |
+
* @return void
|
972 |
+
* @throws SodiumException
|
973 |
+
*/
|
974 |
+
function sodium_crypto_secretstream_xchacha20poly1305_rekey(&$state)
|
975 |
+
{
|
976 |
+
ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_rekey($state);
|
977 |
+
}
|
978 |
+
}
|
979 |
+
if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_keygen')) {
|
980 |
+
/**
|
981 |
+
* @return string
|
982 |
+
* @throws Exception
|
983 |
+
*/
|
984 |
+
function sodium_crypto_secretstream_xchacha20poly1305_keygen()
|
985 |
+
{
|
986 |
+
return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_keygen();
|
987 |
+
}
|
988 |
+
}
|
989 |
if (!is_callable('sodium_crypto_shorthash')) {
|
990 |
/**
|
991 |
* @see ParagonIE_Sodium_Compat::crypto_shorthash()
|
1004 |
/**
|
1005 |
* @see ParagonIE_Sodium_Compat::crypto_shorthash_keygen()
|
1006 |
* @return string
|
1007 |
+
* @throws Exception
|
1008 |
*/
|
1009 |
function sodium_crypto_shorthash_keygen()
|
1010 |
{
|
1039 |
return ParagonIE_Sodium_Compat::crypto_sign_detached($message, $sk);
|
1040 |
}
|
1041 |
}
|
1042 |
+
if (!is_callable('sodium_crypto_sign_keypair_from_secretkey_and_publickey')) {
|
1043 |
+
/**
|
1044 |
+
* @see ParagonIE_Sodium_Compat::crypto_sign_keypair_from_secretkey_and_publickey()
|
1045 |
+
* @param string $sk
|
1046 |
+
* @param string $pk
|
1047 |
+
* @return string
|
1048 |
+
* @throws SodiumException
|
1049 |
+
* @throws TypeError
|
1050 |
+
*/
|
1051 |
+
function sodium_crypto_sign_keypair_from_secretkey_and_publickey($sk, $pk)
|
1052 |
+
{
|
1053 |
+
return ParagonIE_Sodium_Compat::crypto_sign_keypair_from_secretkey_and_publickey($sk, $pk);
|
1054 |
+
}
|
1055 |
+
}
|
1056 |
if (!is_callable('sodium_crypto_sign_keypair')) {
|
1057 |
/**
|
1058 |
* @see ParagonIE_Sodium_Compat::crypto_sign_keypair()
|
1195 |
/**
|
1196 |
* @see ParagonIE_Sodium_Compat::crypto_stream_keygen()
|
1197 |
* @return string
|
1198 |
+
* @throws Exception
|
1199 |
*/
|
1200 |
function sodium_crypto_stream_keygen()
|
1201 |
{
|
1300 |
ParagonIE_Sodium_Compat::memzero($str);
|
1301 |
}
|
1302 |
}
|
1303 |
+
if (!is_callable('sodium_pad')) {
|
1304 |
+
/**
|
1305 |
+
* @see ParagonIE_Sodium_Compat::pad()
|
1306 |
+
* @param string $unpadded
|
1307 |
+
* @param int $blockSize
|
1308 |
+
* @return int
|
1309 |
+
* @throws SodiumException
|
1310 |
+
* @throws TypeError
|
1311 |
+
*/
|
1312 |
+
function sodium_pad($unpadded, $blockSize)
|
1313 |
+
{
|
1314 |
+
return ParagonIE_Sodium_Compat::pad($unpadded, $blockSize, true);
|
1315 |
+
}
|
1316 |
+
}
|
1317 |
+
if (!is_callable('sodium_unpad')) {
|
1318 |
+
/**
|
1319 |
+
* @see ParagonIE_Sodium_Compat::pad()
|
1320 |
+
* @param string $padded
|
1321 |
+
* @param int $blockSize
|
1322 |
+
* @return int
|
1323 |
+
* @throws SodiumException
|
1324 |
+
* @throws TypeError
|
1325 |
+
*/
|
1326 |
+
function sodium_unpad($padded, $blockSize)
|
1327 |
+
{
|
1328 |
+
return ParagonIE_Sodium_Compat::unpad($padded, $blockSize, true);
|
1329 |
+
}
|
1330 |
+
}
|
1331 |
if (!is_callable('sodium_randombytes_buf')) {
|
1332 |
/**
|
1333 |
* @see ParagonIE_Sodium_Compat::randombytes_buf()
|
1358 |
/**
|
1359 |
* @see ParagonIE_Sodium_Compat::randombytes_random16()
|
1360 |
* @return int
|
1361 |
+
* @throws Exception
|
1362 |
*/
|
1363 |
function sodium_randombytes_random16()
|
1364 |
{
|
crypto/vendor/paragonie/sodium_compat/lib/php72compat_const.php
ADDED
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
+
|
4 |
+
const SODIUM_LIBRARY_MAJOR_VERSION = 9;
|
5 |
+
const SODIUM_LIBRARY_MINOR_VERSION = 1;
|
6 |
+
const SODIUM_LIBRARY_VERSION = '1.0.8';
|
7 |
+
|
8 |
+
const SODIUM_BASE64_VARIANT_ORIGINAL = 1;
|
9 |
+
const SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING = 3;
|
10 |
+
const SODIUM_BASE64_VARIANT_URLSAFE = 5;
|
11 |
+
const SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING = 7;
|
12 |
+
const SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES = 32;
|
13 |
+
const SODIUM_CRYPTO_AEAD_AES256GCM_NSECBYTES = 0;
|
14 |
+
const SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES = 12;
|
15 |
+
const SODIUM_CRYPTO_AEAD_AES256GCM_ABYTES = 16;
|
16 |
+
const SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES = 32;
|
17 |
+
const SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES = 0;
|
18 |
+
const SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES = 8;
|
19 |
+
const SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_ABYTES = 16;
|
20 |
+
const SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES = 32;
|
21 |
+
const SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES = 0;
|
22 |
+
const SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES = 12;
|
23 |
+
const SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES = 16;
|
24 |
+
const SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES = 32;
|
25 |
+
const SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES = 0;
|
26 |
+
const SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES = 24;
|
27 |
+
const SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES = 16;
|
28 |
+
const SODIUM_CRYPTO_AUTH_BYTES = 32;
|
29 |
+
const SODIUM_CRYPTO_AUTH_KEYBYTES = 32;
|
30 |
+
const SODIUM_CRYPTO_BOX_SEALBYTES = 16;
|
31 |
+
const SODIUM_CRYPTO_BOX_SECRETKEYBYTES = 32;
|
32 |
+
const SODIUM_CRYPTO_BOX_PUBLICKEYBYTES = 32;
|
33 |
+
const SODIUM_CRYPTO_BOX_KEYPAIRBYTES = 64;
|
34 |
+
const SODIUM_CRYPTO_BOX_MACBYTES = 16;
|
35 |
+
const SODIUM_CRYPTO_BOX_NONCEBYTES = 24;
|
36 |
+
const SODIUM_CRYPTO_BOX_SEEDBYTES = 32;
|
37 |
+
const SODIUM_CRYPTO_KDF_BYTES_MIN = 16;
|
38 |
+
const SODIUM_CRYPTO_KDF_BYTES_MAX = 64;
|
39 |
+
const SODIUM_CRYPTO_KDF_CONTEXTBYTES = 8;
|
40 |
+
const SODIUM_CRYPTO_KDF_KEYBYTES = 32;
|
41 |
+
const SODIUM_CRYPTO_KX_BYTES = 32;
|
42 |
+
const SODIUM_CRYPTO_KX_PRIMITIVE = 'x25519blake2b';
|
43 |
+
const SODIUM_CRYPTO_KX_SEEDBYTES = 32;
|
44 |
+
const SODIUM_CRYPTO_KX_KEYPAIRBYTES = 64;
|
45 |
+
const SODIUM_CRYPTO_KX_PUBLICKEYBYTES = 32;
|
46 |
+
const SODIUM_CRYPTO_KX_SECRETKEYBYTES = 32;
|
47 |
+
const SODIUM_CRYPTO_KX_SESSIONKEYBYTES = 32;
|
48 |
+
const SODIUM_CRYPTO_GENERICHASH_BYTES = 32;
|
49 |
+
const SODIUM_CRYPTO_GENERICHASH_BYTES_MIN = 16;
|
50 |
+
const SODIUM_CRYPTO_GENERICHASH_BYTES_MAX = 64;
|
51 |
+
const SODIUM_CRYPTO_GENERICHASH_KEYBYTES = 32;
|
52 |
+
const SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MIN = 16;
|
53 |
+
const SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MAX = 64;
|
54 |
+
const SODIUM_CRYPTO_PWHASH_SALTBYTES = 16;
|
55 |
+
const SODIUM_CRYPTO_PWHASH_STRPREFIX = '$argon2id$';
|
56 |
+
const SODIUM_CRYPTO_PWHASH_ALG_ARGON2I13 = 1;
|
57 |
+
const SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13 = 2;
|
58 |
+
const SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE = 33554432;
|
59 |
+
const SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE = 4;
|
60 |
+
const SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE = 134217728;
|
61 |
+
const SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE = 6;
|
62 |
+
const SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE = 536870912;
|
63 |
+
const SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE = 8;
|
64 |
+
const SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES = 32;
|
65 |
+
const SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_STRPREFIX = '$7$';
|
66 |
+
const SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE = 534288;
|
67 |
+
const SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE = 16777216;
|
68 |
+
const SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_SENSITIVE = 33554432;
|
69 |
+
const SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_SENSITIVE = 1073741824;
|
70 |
+
const SODIUM_CRYPTO_SCALARMULT_BYTES = 32;
|
71 |
+
const SODIUM_CRYPTO_SCALARMULT_SCALARBYTES = 32;
|
72 |
+
const SODIUM_CRYPTO_SHORTHASH_BYTES = 8;
|
73 |
+
const SODIUM_CRYPTO_SHORTHASH_KEYBYTES = 16;
|
74 |
+
const SODIUM_CRYPTO_SECRETBOX_KEYBYTES = 32;
|
75 |
+
const SODIUM_CRYPTO_SECRETBOX_MACBYTES = 16;
|
76 |
+
const SODIUM_CRYPTO_SECRETBOX_NONCEBYTES = 24;
|
77 |
+
const SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES = 17;
|
78 |
+
const SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES = 24;
|
79 |
+
const SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES = 32;
|
80 |
+
const SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH = 0;
|
81 |
+
const SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PULL = 1;
|
82 |
+
const SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY = 2;
|
83 |
+
const SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL = 3;
|
84 |
+
const SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX = 0x3fffffff80;
|
85 |
+
const SODIUM_CRYPTO_SIGN_BYTES = 64;
|
86 |
+
const SODIUM_CRYPTO_SIGN_SEEDBYTES = 32;
|
87 |
+
const SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES = 32;
|
88 |
+
const SODIUM_CRYPTO_SIGN_SECRETKEYBYTES = 64;
|
89 |
+
const SODIUM_CRYPTO_SIGN_KEYPAIRBYTES = 96;
|
90 |
+
const SODIUM_CRYPTO_STREAM_KEYBYTES = 32;
|
91 |
+
const SODIUM_CRYPTO_STREAM_NONCEBYTES = 24;
|
crypto/vendor/paragonie/sodium_compat/lib/sodium_compat.php
CHANGED
@@ -2,6 +2,8 @@
|
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
namespace Sodium;
|
4 |
|
|
|
|
|
5 |
use ParagonIE_Sodium_Compat;
|
6 |
|
7 |
/**
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
namespace Sodium;
|
4 |
|
5 |
+
require_once dirname(dirname(__FILE__)) . '/autoload.php';
|
6 |
+
|
7 |
use ParagonIE_Sodium_Compat;
|
8 |
|
9 |
/**
|
crypto/vendor/paragonie/sodium_compat/psalm-above-3.xml
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<psalm
|
3 |
+
useDocblockTypes="true"
|
4 |
+
totallyTyped="true"
|
5 |
+
>
|
6 |
+
<projectFiles>
|
7 |
+
<directory name="src" />
|
8 |
+
</projectFiles>
|
9 |
+
<issueHandlers>
|
10 |
+
<InvalidFunctionCall errorLevel="suppress" />
|
11 |
+
<!--
|
12 |
+
Previous issue type is suppressed because we have to use a string
|
13 |
+
as a function name for PHP 5.2 compatibility. When testing, be sure
|
14 |
+
to change this to "info".
|
15 |
+
-->
|
16 |
+
|
17 |
+
<UndefinedFunction errorLevel="info" />
|
18 |
+
<!--
|
19 |
+
Inconsistently erroneous.
|
20 |
+
-->
|
21 |
+
|
22 |
+
<DuplicateClass errorLevel="info" />
|
23 |
+
<!--
|
24 |
+
Psalm isn't correctly identifying the guard conditions that return
|
25 |
+
early if a class already exists.
|
26 |
+
-->
|
27 |
+
<RedundantConditionGivenDocblockType errorLevel="suppress" />
|
28 |
+
|
29 |
+
<TooFewArguments errorLevel="info" />
|
30 |
+
|
31 |
+
<DocblockTypeContradiction errorLevel="suppress" />
|
32 |
+
<RedundantCondition errorLevel="info" />
|
33 |
+
<!--
|
34 |
+
Redundancy is good for PHP <7
|
35 |
+
-->
|
36 |
+
|
37 |
+
<TypeDoesNotContainType errorLevel="info" />
|
38 |
+
<!--
|
39 |
+
This mostly fails on `PHP_INT_SIZE === 4`
|
40 |
+
-->
|
41 |
+
|
42 |
+
<InternalMethod errorLevel="suppress" />
|
43 |
+
<!--
|
44 |
+
We mark methods as internal.
|
45 |
+
-->
|
46 |
+
<PossiblyNullArgument errorLevel="suppress" />
|
47 |
+
<!--
|
48 |
+
Not interesting
|
49 |
+
-->
|
50 |
+
|
51 |
+
</issueHandlers>
|
52 |
+
</psalm>
|
crypto/vendor/paragonie/sodium_compat/psalm-below-3.xml
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<psalm
|
3 |
+
useDocblockTypes="true"
|
4 |
+
totallyTyped="true"
|
5 |
+
>
|
6 |
+
<projectFiles>
|
7 |
+
<directory name="src" />
|
8 |
+
</projectFiles>
|
9 |
+
<issueHandlers>
|
10 |
+
<InvalidFunctionCall errorLevel="suppress" />
|
11 |
+
<!--
|
12 |
+
Previous issue type is suppressed because we have to use a string
|
13 |
+
as a function name for PHP 5.2 compatibility. When testing, be sure
|
14 |
+
to change this to "info".
|
15 |
+
-->
|
16 |
+
|
17 |
+
<UndefinedFunction errorLevel="info" />
|
18 |
+
<!--
|
19 |
+
Inconsistently erroneous.
|
20 |
+
-->
|
21 |
+
|
22 |
+
<DuplicateClass errorLevel="info" />
|
23 |
+
<!--
|
24 |
+
Psalm isn't correctly identifying the guard conditions that return
|
25 |
+
early if a class already exists.
|
26 |
+
-->
|
27 |
+
<RedundantConditionGivenDocblockType errorLevel="suppress" />
|
28 |
+
|
29 |
+
<TooFewArguments errorLevel="info" />
|
30 |
+
|
31 |
+
<DocblockTypeContradiction errorLevel="info" />
|
32 |
+
<RedundantCondition errorLevel="info" />
|
33 |
+
<!--
|
34 |
+
Redundancy is good for PHP <7
|
35 |
+
-->
|
36 |
+
|
37 |
+
<TypeDoesNotContainType errorLevel="info" />
|
38 |
+
<!--
|
39 |
+
This mostly fails on `PHP_INT_SIZE === 4`
|
40 |
+
-->
|
41 |
+
|
42 |
+
</issueHandlers>
|
43 |
+
</psalm>
|
crypto/vendor/paragonie/sodium_compat/src/Compat.php
CHANGED
@@ -45,11 +45,17 @@ class ParagonIE_Sodium_Compat
|
|
45 |
*/
|
46 |
public static $fastMult = false;
|
47 |
|
|
|
|
|
48 |
const LIBRARY_VERSION_MAJOR = 9;
|
49 |
const LIBRARY_VERSION_MINOR = 1;
|
50 |
const VERSION_STRING = 'polyfill-1.0.8';
|
51 |
|
52 |
// From libsodium
|
|
|
|
|
|
|
|
|
53 |
const CRYPTO_AEAD_AES256GCM_KEYBYTES = 32;
|
54 |
const CRYPTO_AEAD_AES256GCM_NSECBYTES = 0;
|
55 |
const CRYPTO_AEAD_AES256GCM_NPUBBYTES = 12;
|
@@ -75,10 +81,17 @@ class ParagonIE_Sodium_Compat
|
|
75 |
const CRYPTO_BOX_MACBYTES = 16;
|
76 |
const CRYPTO_BOX_NONCEBYTES = 24;
|
77 |
const CRYPTO_BOX_SEEDBYTES = 32;
|
|
|
|
|
|
|
|
|
78 |
const CRYPTO_KX_BYTES = 32;
|
|
|
79 |
const CRYPTO_KX_SEEDBYTES = 32;
|
|
|
80 |
const CRYPTO_KX_PUBLICKEYBYTES = 32;
|
81 |
const CRYPTO_KX_SECRETKEYBYTES = 32;
|
|
|
82 |
const CRYPTO_GENERICHASH_BYTES = 32;
|
83 |
const CRYPTO_GENERICHASH_BYTES_MIN = 16;
|
84 |
const CRYPTO_GENERICHASH_BYTES_MAX = 64;
|
@@ -86,7 +99,7 @@ class ParagonIE_Sodium_Compat
|
|
86 |
const CRYPTO_GENERICHASH_KEYBYTES_MIN = 16;
|
87 |
const CRYPTO_GENERICHASH_KEYBYTES_MAX = 64;
|
88 |
const CRYPTO_PWHASH_SALTBYTES = 16;
|
89 |
-
const CRYPTO_PWHASH_STRPREFIX = '$
|
90 |
const CRYPTO_PWHASH_ALG_ARGON2I13 = 1;
|
91 |
const CRYPTO_PWHASH_ALG_ARGON2ID13 = 2;
|
92 |
const CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE = 33554432;
|
@@ -108,6 +121,14 @@ class ParagonIE_Sodium_Compat
|
|
108 |
const CRYPTO_SECRETBOX_KEYBYTES = 32;
|
109 |
const CRYPTO_SECRETBOX_MACBYTES = 16;
|
110 |
const CRYPTO_SECRETBOX_NONCEBYTES = 24;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
const CRYPTO_SIGN_BYTES = 64;
|
112 |
const CRYPTO_SIGN_SEEDBYTES = 32;
|
113 |
const CRYPTO_SIGN_PUBLICKEYBYTES = 32;
|
@@ -116,6 +137,110 @@ class ParagonIE_Sodium_Compat
|
|
116 |
const CRYPTO_STREAM_KEYBYTES = 32;
|
117 |
const CRYPTO_STREAM_NONCEBYTES = 24;
|
118 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
/**
|
120 |
* Cache-timing-safe implementation of bin2hex().
|
121 |
*
|
@@ -1311,6 +1436,7 @@ class ParagonIE_Sodium_Compat
|
|
1311 |
* @throws TypeError
|
1312 |
* @psalm-suppress MixedArgument
|
1313 |
* @psalm-suppress ReferenceConstraintViolation
|
|
|
1314 |
*/
|
1315 |
public static function crypto_generichash_final(&$ctx, $length = self::CRYPTO_GENERICHASH_BYTES)
|
1316 |
{
|
@@ -1325,6 +1451,14 @@ class ParagonIE_Sodium_Compat
|
|
1325 |
$func = '\\Sodium\\crypto_generichash_final';
|
1326 |
return (string) $func($ctx, $length);
|
1327 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1328 |
if (PHP_INT_SIZE === 4) {
|
1329 |
$result = ParagonIE_Sodium_Crypto32::generichash_final($ctx, $length);
|
1330 |
} else {
|
@@ -1380,6 +1514,53 @@ class ParagonIE_Sodium_Compat
|
|
1380 |
return ParagonIE_Sodium_Crypto::generichash_init($key, $length);
|
1381 |
}
|
1382 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1383 |
/**
|
1384 |
* Update a BLAKE2b hashing context with additional data.
|
1385 |
*
|
@@ -1425,6 +1606,65 @@ class ParagonIE_Sodium_Compat
|
|
1425 |
return random_bytes(self::CRYPTO_GENERICHASH_KEYBYTES);
|
1426 |
}
|
1427 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1428 |
/**
|
1429 |
* Perform a key exchange, between a designated client and a server.
|
1430 |
*
|
@@ -1511,6 +1751,149 @@ class ParagonIE_Sodium_Compat
|
|
1511 |
);
|
1512 |
}
|
1513 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1514 |
/**
|
1515 |
* @param int $outlen
|
1516 |
* @param string $passwd
|
@@ -1593,6 +1976,36 @@ class ParagonIE_Sodium_Compat
|
|
1593 |
);
|
1594 |
}
|
1595 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1596 |
/**
|
1597 |
* @param string $passwd
|
1598 |
* @param string $hash
|
@@ -1988,6 +2401,111 @@ class ParagonIE_Sodium_Compat
|
|
1988 |
return ParagonIE_Sodium_Crypto::secretbox_xchacha20poly1305_open($ciphertext, $nonce, $key);
|
1989 |
}
|
1990 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1991 |
/**
|
1992 |
* Calculates a SipHash-2-4 hash of a message for a given key.
|
1993 |
*
|
@@ -2137,6 +2655,32 @@ class ParagonIE_Sodium_Compat
|
|
2137 |
return ParagonIE_Sodium_Core_Ed25519::keypair();
|
2138 |
}
|
2139 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2140 |
/**
|
2141 |
* Generate an Ed25519 keypair from a seed.
|
2142 |
*
|
@@ -2576,15 +3120,14 @@ class ParagonIE_Sodium_Compat
|
|
2576 |
* with (sans pwhash and memzero).
|
2577 |
*
|
2578 |
* @return int
|
2579 |
-
* @psalm-suppress MixedInferredReturnType
|
2580 |
-
* @psalm-suppress UndefinedFunction
|
2581 |
*/
|
2582 |
public static function library_version_major()
|
2583 |
{
|
2584 |
-
if (self::useNewSodiumAPI()) {
|
2585 |
-
return
|
2586 |
}
|
2587 |
if (self::use_fallback('library_version_major')) {
|
|
|
2588 |
return (int) call_user_func('\\Sodium\\library_version_major');
|
2589 |
}
|
2590 |
return self::LIBRARY_VERSION_MAJOR;
|
@@ -2595,15 +3138,14 @@ class ParagonIE_Sodium_Compat
|
|
2595 |
* with (sans pwhash and memzero).
|
2596 |
*
|
2597 |
* @return int
|
2598 |
-
* @psalm-suppress MixedInferredReturnType
|
2599 |
-
* @psalm-suppress UndefinedFunction
|
2600 |
*/
|
2601 |
public static function library_version_minor()
|
2602 |
{
|
2603 |
-
if (self::useNewSodiumAPI()) {
|
2604 |
-
return
|
2605 |
}
|
2606 |
if (self::use_fallback('library_version_minor')) {
|
|
|
2607 |
return (int) call_user_func('\\Sodium\\library_version_minor');
|
2608 |
}
|
2609 |
return self::LIBRARY_VERSION_MINOR;
|
@@ -2625,6 +3167,9 @@ class ParagonIE_Sodium_Compat
|
|
2625 |
ParagonIE_Sodium_Core_Util::declareScalarType($left, 'string', 1);
|
2626 |
ParagonIE_Sodium_Core_Util::declareScalarType($right, 'string', 2);
|
2627 |
|
|
|
|
|
|
|
2628 |
if (self::use_fallback('memcmp')) {
|
2629 |
return (int) call_user_func('\\Sodium\\memcmp', $left, $right);
|
2630 |
}
|
@@ -2669,6 +3214,158 @@ class ParagonIE_Sodium_Compat
|
|
2669 |
);
|
2670 |
}
|
2671 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2672 |
/**
|
2673 |
* Will sodium_compat run fast on the current hardware and PHP configuration?
|
2674 |
*
|
45 |
*/
|
46 |
public static $fastMult = false;
|
47 |
|
48 |
+
const LIBRARY_MAJOR_VERSION = 9;
|
49 |
+
const LIBRARY_MINOR_VERSION = 1;
|
50 |
const LIBRARY_VERSION_MAJOR = 9;
|
51 |
const LIBRARY_VERSION_MINOR = 1;
|
52 |
const VERSION_STRING = 'polyfill-1.0.8';
|
53 |
|
54 |
// From libsodium
|
55 |
+
const BASE64_VARIANT_ORIGINAL = 1;
|
56 |
+
const BASE64_VARIANT_ORIGINAL_NO_PADDING = 3;
|
57 |
+
const BASE64_VARIANT_URLSAFE = 5;
|
58 |
+
const BASE64_VARIANT_URLSAFE_NO_PADDING = 7;
|
59 |
const CRYPTO_AEAD_AES256GCM_KEYBYTES = 32;
|
60 |
const CRYPTO_AEAD_AES256GCM_NSECBYTES = 0;
|
61 |
const CRYPTO_AEAD_AES256GCM_NPUBBYTES = 12;
|
81 |
const CRYPTO_BOX_MACBYTES = 16;
|
82 |
const CRYPTO_BOX_NONCEBYTES = 24;
|
83 |
const CRYPTO_BOX_SEEDBYTES = 32;
|
84 |
+
const CRYPTO_KDF_BYTES_MIN = 16;
|
85 |
+
const CRYPTO_KDF_BYTES_MAX = 64;
|
86 |
+
const CRYPTO_KDF_CONTEXTBYTES = 8;
|
87 |
+
const CRYPTO_KDF_KEYBYTES = 32;
|
88 |
const CRYPTO_KX_BYTES = 32;
|
89 |
+
const CRYPTO_KX_PRIMITIVE = 'x25519blake2b';
|
90 |
const CRYPTO_KX_SEEDBYTES = 32;
|
91 |
+
const CRYPTO_KX_KEYPAIRBYTES = 64;
|
92 |
const CRYPTO_KX_PUBLICKEYBYTES = 32;
|
93 |
const CRYPTO_KX_SECRETKEYBYTES = 32;
|
94 |
+
const CRYPTO_KX_SESSIONKEYBYTES = 32;
|
95 |
const CRYPTO_GENERICHASH_BYTES = 32;
|
96 |
const CRYPTO_GENERICHASH_BYTES_MIN = 16;
|
97 |
const CRYPTO_GENERICHASH_BYTES_MAX = 64;
|
99 |
const CRYPTO_GENERICHASH_KEYBYTES_MIN = 16;
|
100 |
const CRYPTO_GENERICHASH_KEYBYTES_MAX = 64;
|
101 |
const CRYPTO_PWHASH_SALTBYTES = 16;
|
102 |
+
const CRYPTO_PWHASH_STRPREFIX = '$argon2id$';
|
103 |
const CRYPTO_PWHASH_ALG_ARGON2I13 = 1;
|
104 |
const CRYPTO_PWHASH_ALG_ARGON2ID13 = 2;
|
105 |
const CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE = 33554432;
|
121 |
const CRYPTO_SECRETBOX_KEYBYTES = 32;
|
122 |
const CRYPTO_SECRETBOX_MACBYTES = 16;
|
123 |
const CRYPTO_SECRETBOX_NONCEBYTES = 24;
|
124 |
+
const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES = 17;
|
125 |
+
const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES = 24;
|
126 |
+
const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES = 32;
|
127 |
+
const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH = 0;
|
128 |
+
const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PULL = 1;
|
129 |
+
const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY = 2;
|
130 |
+
const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL = 3;
|
131 |
+
const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX = 0x3fffffff80;
|
132 |
const CRYPTO_SIGN_BYTES = 64;
|
133 |
const CRYPTO_SIGN_SEEDBYTES = 32;
|
134 |
const CRYPTO_SIGN_PUBLICKEYBYTES = 32;
|
137 |
const CRYPTO_STREAM_KEYBYTES = 32;
|
138 |
const CRYPTO_STREAM_NONCEBYTES = 24;
|
139 |
|
140 |
+
/**
|
141 |
+
* Add two numbers (little-endian unsigned), storing the value in the first
|
142 |
+
* parameter.
|
143 |
+
*
|
144 |
+
* This mutates $val.
|
145 |
+
*
|
146 |
+
* @param string $val
|
147 |
+
* @param string $addv
|
148 |
+
* @return void
|
149 |
+
* @throws SodiumException
|
150 |
+
*/
|
151 |
+
public static function add(&$val, $addv)
|
152 |
+
{
|
153 |
+
$val_len = ParagonIE_Sodium_Core_Util::strlen($val);
|
154 |
+
$addv_len = ParagonIE_Sodium_Core_Util::strlen($addv);
|
155 |
+
if ($val_len !== $addv_len) {
|
156 |
+
throw new SodiumException('values must have the same length');
|
157 |
+
}
|
158 |
+
$A = ParagonIE_Sodium_Core_Util::stringToIntArray($val);
|
159 |
+
$B = ParagonIE_Sodium_Core_Util::stringToIntArray($addv);
|
160 |
+
|
161 |
+
$c = 0;
|
162 |
+
for ($i = 0; $i < $val_len; $i++) {
|
163 |
+
$c += ($A[$i] + $B[$i]);
|
164 |
+
$A[$i] = ($c & 0xff);
|
165 |
+
$c >>= 8;
|
166 |
+
}
|
167 |
+
$val = ParagonIE_Sodium_Core_Util::intArrayToString($A);
|
168 |
+
}
|
169 |
+
|
170 |
+
/**
|
171 |
+
* @param string $encoded
|
172 |
+
* @param int $variant
|
173 |
+
* @param string $ignore
|
174 |
+
* @return string
|
175 |
+
* @throws SodiumException
|
176 |
+
*/
|
177 |
+
public static function base642bin($encoded, $variant, $ignore = '')
|
178 |
+
{
|
179 |
+
/* Type checks: */
|
180 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($encoded, 'string', 1);
|
181 |
+
|
182 |
+
/** @var string $encoded */
|
183 |
+
$encoded = (string) $encoded;
|
184 |
+
if (ParagonIE_Sodium_Core_Util::strlen($encoded) === 0) {
|
185 |
+
return '';
|
186 |
+
}
|
187 |
+
|
188 |
+
// Just strip before decoding
|
189 |
+
if (!empty($ignore)) {
|
190 |
+
$encoded = str_replace($ignore, '', $encoded);
|
191 |
+
}
|
192 |
+
|
193 |
+
try {
|
194 |
+
switch ($variant) {
|
195 |
+
case self::BASE64_VARIANT_ORIGINAL:
|
196 |
+
return ParagonIE_Sodium_Core_Base64_Original::decode($encoded, true);
|
197 |
+
case self::BASE64_VARIANT_ORIGINAL_NO_PADDING:
|
198 |
+
return ParagonIE_Sodium_Core_Base64_Original::decode($encoded, false);
|
199 |
+
case self::BASE64_VARIANT_URLSAFE:
|
200 |
+
return ParagonIE_Sodium_Core_Base64_UrlSafe::decode($encoded, true);
|
201 |
+
case self::BASE64_VARIANT_URLSAFE_NO_PADDING:
|
202 |
+
return ParagonIE_Sodium_Core_Base64_UrlSafe::decode($encoded, false);
|
203 |
+
default:
|
204 |
+
throw new SodiumException('invalid base64 variant identifier');
|
205 |
+
}
|
206 |
+
} catch (Exception $ex) {
|
207 |
+
if ($ex instanceof SodiumException) {
|
208 |
+
throw $ex;
|
209 |
+
}
|
210 |
+
throw new SodiumException('invalid base64 string');
|
211 |
+
}
|
212 |
+
}
|
213 |
+
|
214 |
+
/**
|
215 |
+
* @param string $decoded
|
216 |
+
* @param int $variant
|
217 |
+
* @return string
|
218 |
+
* @throws SodiumException
|
219 |
+
*/
|
220 |
+
public static function bin2base64($decoded, $variant)
|
221 |
+
{
|
222 |
+
/* Type checks: */
|
223 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($decoded, 'string', 1);
|
224 |
+
/** @var string $decoded */
|
225 |
+
$decoded = (string) $decoded;
|
226 |
+
if (ParagonIE_Sodium_Core_Util::strlen($decoded) === 0) {
|
227 |
+
return '';
|
228 |
+
}
|
229 |
+
|
230 |
+
switch ($variant) {
|
231 |
+
case self::BASE64_VARIANT_ORIGINAL:
|
232 |
+
return ParagonIE_Sodium_Core_Base64_Original::encode($decoded);
|
233 |
+
case self::BASE64_VARIANT_ORIGINAL_NO_PADDING:
|
234 |
+
return ParagonIE_Sodium_Core_Base64_Original::encodeUnpadded($decoded);
|
235 |
+
case self::BASE64_VARIANT_URLSAFE:
|
236 |
+
return ParagonIE_Sodium_Core_Base64_UrlSafe::encode($decoded);
|
237 |
+
case self::BASE64_VARIANT_URLSAFE_NO_PADDING:
|
238 |
+
return ParagonIE_Sodium_Core_Base64_UrlSafe::encodeUnpadded($decoded);
|
239 |
+
default:
|
240 |
+
throw new SodiumException('invalid base64 variant identifier');
|
241 |
+
}
|
242 |
+
}
|
243 |
+
|
244 |
/**
|
245 |
* Cache-timing-safe implementation of bin2hex().
|
246 |
*
|
1436 |
* @throws TypeError
|
1437 |
* @psalm-suppress MixedArgument
|
1438 |
* @psalm-suppress ReferenceConstraintViolation
|
1439 |
+
* @psalm-suppress ConflictingReferenceConstraint
|
1440 |
*/
|
1441 |
public static function crypto_generichash_final(&$ctx, $length = self::CRYPTO_GENERICHASH_BYTES)
|
1442 |
{
|
1451 |
$func = '\\Sodium\\crypto_generichash_final';
|
1452 |
return (string) $func($ctx, $length);
|
1453 |
}
|
1454 |
+
if ($length < 1) {
|
1455 |
+
try {
|
1456 |
+
self::memzero($ctx);
|
1457 |
+
} catch (SodiumException $ex) {
|
1458 |
+
unset($ctx);
|
1459 |
+
}
|
1460 |
+
return '';
|
1461 |
+
}
|
1462 |
if (PHP_INT_SIZE === 4) {
|
1463 |
$result = ParagonIE_Sodium_Crypto32::generichash_final($ctx, $length);
|
1464 |
} else {
|
1514 |
return ParagonIE_Sodium_Crypto::generichash_init($key, $length);
|
1515 |
}
|
1516 |
|
1517 |
+
/**
|
1518 |
+
* Initialize a BLAKE2b hashing context, for use in a streaming interface.
|
1519 |
+
*
|
1520 |
+
* @param string|null $key If specified must be a string between 16 and 64 bytes
|
1521 |
+
* @param int $length The size of the desired hash output
|
1522 |
+
* @param string $salt Salt (up to 16 bytes)
|
1523 |
+
* @param string $personal Personalization string (up to 16 bytes)
|
1524 |
+
* @return string A BLAKE2 hashing context, encoded as a string
|
1525 |
+
* (To be 100% compatible with ext/libsodium)
|
1526 |
+
* @throws SodiumException
|
1527 |
+
* @throws TypeError
|
1528 |
+
* @psalm-suppress MixedArgument
|
1529 |
+
*/
|
1530 |
+
public static function crypto_generichash_init_salt_personal(
|
1531 |
+
$key = '',
|
1532 |
+
$length = self::CRYPTO_GENERICHASH_BYTES,
|
1533 |
+
$salt = '',
|
1534 |
+
$personal = ''
|
1535 |
+
) {
|
1536 |
+
/* Type checks: */
|
1537 |
+
if (is_null($key)) {
|
1538 |
+
$key = '';
|
1539 |
+
}
|
1540 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 1);
|
1541 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($length, 'int', 2);
|
1542 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($salt, 'string', 3);
|
1543 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($personal, 'string', 4);
|
1544 |
+
$salt = str_pad($salt, 16, "\0", STR_PAD_RIGHT);
|
1545 |
+
$personal = str_pad($personal, 16, "\0", STR_PAD_RIGHT);
|
1546 |
+
|
1547 |
+
/* Input validation: */
|
1548 |
+
if (!empty($key)) {
|
1549 |
+
/*
|
1550 |
+
if (ParagonIE_Sodium_Core_Util::strlen($key) < self::CRYPTO_GENERICHASH_KEYBYTES_MIN) {
|
1551 |
+
throw new SodiumException('Unsupported key size. Must be at least CRYPTO_GENERICHASH_KEYBYTES_MIN bytes long.');
|
1552 |
+
}
|
1553 |
+
*/
|
1554 |
+
if (ParagonIE_Sodium_Core_Util::strlen($key) > self::CRYPTO_GENERICHASH_KEYBYTES_MAX) {
|
1555 |
+
throw new SodiumException('Unsupported key size. Must be at most CRYPTO_GENERICHASH_KEYBYTES_MAX bytes long.');
|
1556 |
+
}
|
1557 |
+
}
|
1558 |
+
if (PHP_INT_SIZE === 4) {
|
1559 |
+
return ParagonIE_Sodium_Crypto32::generichash_init_salt_personal($key, $length, $salt, $personal);
|
1560 |
+
}
|
1561 |
+
return ParagonIE_Sodium_Crypto::generichash_init_salt_personal($key, $length, $salt, $personal);
|
1562 |
+
}
|
1563 |
+
|
1564 |
/**
|
1565 |
* Update a BLAKE2b hashing context with additional data.
|
1566 |
*
|
1606 |
return random_bytes(self::CRYPTO_GENERICHASH_KEYBYTES);
|
1607 |
}
|
1608 |
|
1609 |
+
/**
|
1610 |
+
* @param int $subkey_len
|
1611 |
+
* @param int $subkey_id
|
1612 |
+
* @param string $context
|
1613 |
+
* @param string $key
|
1614 |
+
* @return string
|
1615 |
+
* @throws SodiumException
|
1616 |
+
*/
|
1617 |
+
public static function crypto_kdf_derive_from_key(
|
1618 |
+
$subkey_len,
|
1619 |
+
$subkey_id,
|
1620 |
+
$context,
|
1621 |
+
$key
|
1622 |
+
) {
|
1623 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($subkey_len, 'int', 1);
|
1624 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($subkey_id, 'int', 2);
|
1625 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($context, 'string', 3);
|
1626 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4);
|
1627 |
+
$subkey_id = (int) $subkey_id;
|
1628 |
+
$subkey_len = (int) $subkey_len;
|
1629 |
+
$context = (string) $context;
|
1630 |
+
$key = (string) $key;
|
1631 |
+
|
1632 |
+
if ($subkey_len < self::CRYPTO_KDF_BYTES_MIN) {
|
1633 |
+
throw new SodiumException('subkey cannot be smaller than SODIUM_CRYPTO_KDF_BYTES_MIN');
|
1634 |
+
}
|
1635 |
+
if ($subkey_len > self::CRYPTO_KDF_BYTES_MAX) {
|
1636 |
+
throw new SodiumException('subkey cannot be larger than SODIUM_CRYPTO_KDF_BYTES_MAX');
|
1637 |
+
}
|
1638 |
+
if ($subkey_id < 0) {
|
1639 |
+
throw new SodiumException('subkey_id cannot be negative');
|
1640 |
+
}
|
1641 |
+
if (ParagonIE_Sodium_Core_Util::strlen($context) !== self::CRYPTO_KDF_CONTEXTBYTES) {
|
1642 |
+
throw new SodiumException('context should be SODIUM_CRYPTO_KDF_CONTEXTBYTES bytes');
|
1643 |
+
}
|
1644 |
+
if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_KDF_KEYBYTES) {
|
1645 |
+
throw new SodiumException('key should be SODIUM_CRYPTO_KDF_KEYBYTES bytes');
|
1646 |
+
}
|
1647 |
+
|
1648 |
+
$salt = ParagonIE_Sodium_Core_Util::store64_le($subkey_id);
|
1649 |
+
$state = self::crypto_generichash_init_salt_personal(
|
1650 |
+
$key,
|
1651 |
+
$subkey_len,
|
1652 |
+
$salt,
|
1653 |
+
$context
|
1654 |
+
);
|
1655 |
+
return self::crypto_generichash_final($state, $subkey_len);
|
1656 |
+
}
|
1657 |
+
|
1658 |
+
/**
|
1659 |
+
* @return string
|
1660 |
+
* @throws Exception
|
1661 |
+
* @throws Error
|
1662 |
+
*/
|
1663 |
+
public static function crypto_kdf_keygen()
|
1664 |
+
{
|
1665 |
+
return random_bytes(self::CRYPTO_KDF_KEYBYTES);
|
1666 |
+
}
|
1667 |
+
|
1668 |
/**
|
1669 |
* Perform a key exchange, between a designated client and a server.
|
1670 |
*
|
1751 |
);
|
1752 |
}
|
1753 |
|
1754 |
+
/**
|
1755 |
+
* @param string $seed
|
1756 |
+
* @return string
|
1757 |
+
* @throws SodiumException
|
1758 |
+
*/
|
1759 |
+
public static function crypto_kx_seed_keypair($seed)
|
1760 |
+
{
|
1761 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($seed, 'string', 1);
|
1762 |
+
|
1763 |
+
$seed = (string) $seed;
|
1764 |
+
|
1765 |
+
if (ParagonIE_Sodium_Core_Util::strlen($seed) !== self::CRYPTO_KX_SEEDBYTES) {
|
1766 |
+
throw new SodiumException('seed must be SODIUM_CRYPTO_KX_SEEDBYTES bytes');
|
1767 |
+
}
|
1768 |
+
|
1769 |
+
$sk = self::crypto_generichash($seed, '', self::CRYPTO_KX_SECRETKEYBYTES);
|
1770 |
+
$pk = self::crypto_scalarmult_base($sk);
|
1771 |
+
return $sk . $pk;
|
1772 |
+
}
|
1773 |
+
|
1774 |
+
/**
|
1775 |
+
* @return string
|
1776 |
+
* @throws Exception
|
1777 |
+
*/
|
1778 |
+
public static function crypto_kx_keypair()
|
1779 |
+
{
|
1780 |
+
$sk = self::randombytes_buf(self::CRYPTO_KX_SECRETKEYBYTES);
|
1781 |
+
$pk = self::crypto_scalarmult_base($sk);
|
1782 |
+
return $sk . $pk;
|
1783 |
+
}
|
1784 |
+
|
1785 |
+
/**
|
1786 |
+
* @param string $keypair
|
1787 |
+
* @param string $serverPublicKey
|
1788 |
+
* @return array{0: string, 1: string}
|
1789 |
+
* @throws SodiumException
|
1790 |
+
*/
|
1791 |
+
public static function crypto_kx_client_session_keys($keypair, $serverPublicKey)
|
1792 |
+
{
|
1793 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1);
|
1794 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($serverPublicKey, 'string', 2);
|
1795 |
+
|
1796 |
+
$keypair = (string) $keypair;
|
1797 |
+
$serverPublicKey = (string) $serverPublicKey;
|
1798 |
+
|
1799 |
+
if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_KX_KEYPAIRBYTES) {
|
1800 |
+
throw new SodiumException('keypair should be SODIUM_CRYPTO_KX_KEYPAIRBYTES bytes');
|
1801 |
+
}
|
1802 |
+
if (ParagonIE_Sodium_Core_Util::strlen($serverPublicKey) !== self::CRYPTO_KX_PUBLICKEYBYTES) {
|
1803 |
+
throw new SodiumException('public keys must be SODIUM_CRYPTO_KX_PUBLICKEYBYTES bytes');
|
1804 |
+
}
|
1805 |
+
|
1806 |
+
$sk = self::crypto_kx_secretkey($keypair);
|
1807 |
+
$pk = self::crypto_kx_publickey($keypair);
|
1808 |
+
$h = self::crypto_generichash_init(null, self::CRYPTO_KX_SESSIONKEYBYTES * 2);
|
1809 |
+
self::crypto_generichash_update($h, self::crypto_scalarmult($sk, $serverPublicKey));
|
1810 |
+
self::crypto_generichash_update($h, $pk);
|
1811 |
+
self::crypto_generichash_update($h, $serverPublicKey);
|
1812 |
+
$sessionKeys = self::crypto_generichash_final($h, self::CRYPTO_KX_SESSIONKEYBYTES * 2);
|
1813 |
+
return array(
|
1814 |
+
ParagonIE_Sodium_Core_Util::substr(
|
1815 |
+
$sessionKeys,
|
1816 |
+
0,
|
1817 |
+
self::CRYPTO_KX_SESSIONKEYBYTES
|
1818 |
+
),
|
1819 |
+
ParagonIE_Sodium_Core_Util::substr(
|
1820 |
+
$sessionKeys,
|
1821 |
+
self::CRYPTO_KX_SESSIONKEYBYTES,
|
1822 |
+
self::CRYPTO_KX_SESSIONKEYBYTES
|
1823 |
+
)
|
1824 |
+
);
|
1825 |
+
}
|
1826 |
+
|
1827 |
+
/**
|
1828 |
+
* @param string $keypair
|
1829 |
+
* @param string $clientPublicKey
|
1830 |
+
* @return array{0: string, 1: string}
|
1831 |
+
* @throws SodiumException
|
1832 |
+
*/
|
1833 |
+
public static function crypto_kx_server_session_keys($keypair, $clientPublicKey)
|
1834 |
+
{
|
1835 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1);
|
1836 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($clientPublicKey, 'string', 2);
|
1837 |
+
|
1838 |
+
$keypair = (string) $keypair;
|
1839 |
+
$clientPublicKey = (string) $clientPublicKey;
|
1840 |
+
|
1841 |
+
if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_KX_KEYPAIRBYTES) {
|
1842 |
+
throw new SodiumException('keypair should be SODIUM_CRYPTO_KX_KEYPAIRBYTES bytes');
|
1843 |
+
}
|
1844 |
+
if (ParagonIE_Sodium_Core_Util::strlen($clientPublicKey) !== self::CRYPTO_KX_PUBLICKEYBYTES) {
|
1845 |
+
throw new SodiumException('public keys must be SODIUM_CRYPTO_KX_PUBLICKEYBYTES bytes');
|
1846 |
+
}
|
1847 |
+
|
1848 |
+
$sk = self::crypto_kx_secretkey($keypair);
|
1849 |
+
$pk = self::crypto_kx_publickey($keypair);
|
1850 |
+
$h = self::crypto_generichash_init(null, self::CRYPTO_KX_SESSIONKEYBYTES * 2);
|
1851 |
+
self::crypto_generichash_update($h, self::crypto_scalarmult($sk, $clientPublicKey));
|
1852 |
+
self::crypto_generichash_update($h, $clientPublicKey);
|
1853 |
+
self::crypto_generichash_update($h, $pk);
|
1854 |
+
$sessionKeys = self::crypto_generichash_final($h, self::CRYPTO_KX_SESSIONKEYBYTES * 2);
|
1855 |
+
return array(
|
1856 |
+
ParagonIE_Sodium_Core_Util::substr(
|
1857 |
+
$sessionKeys,
|
1858 |
+
self::CRYPTO_KX_SESSIONKEYBYTES,
|
1859 |
+
self::CRYPTO_KX_SESSIONKEYBYTES
|
1860 |
+
),
|
1861 |
+
ParagonIE_Sodium_Core_Util::substr(
|
1862 |
+
$sessionKeys,
|
1863 |
+
0,
|
1864 |
+
self::CRYPTO_KX_SESSIONKEYBYTES
|
1865 |
+
)
|
1866 |
+
);
|
1867 |
+
}
|
1868 |
+
|
1869 |
+
/**
|
1870 |
+
* @param string $kp
|
1871 |
+
* @return string
|
1872 |
+
* @throws SodiumException
|
1873 |
+
*/
|
1874 |
+
public static function crypto_kx_secretkey($kp)
|
1875 |
+
{
|
1876 |
+
return ParagonIE_Sodium_Core_Util::substr(
|
1877 |
+
$kp,
|
1878 |
+
0,
|
1879 |
+
self::CRYPTO_KX_SECRETKEYBYTES
|
1880 |
+
);
|
1881 |
+
}
|
1882 |
+
|
1883 |
+
/**
|
1884 |
+
* @param string $kp
|
1885 |
+
* @return string
|
1886 |
+
* @throws SodiumException
|
1887 |
+
*/
|
1888 |
+
public static function crypto_kx_publickey($kp)
|
1889 |
+
{
|
1890 |
+
return ParagonIE_Sodium_Core_Util::substr(
|
1891 |
+
$kp,
|
1892 |
+
self::CRYPTO_KX_SECRETKEYBYTES,
|
1893 |
+
self::CRYPTO_KX_PUBLICKEYBYTES
|
1894 |
+
);
|
1895 |
+
}
|
1896 |
+
|
1897 |
/**
|
1898 |
* @param int $outlen
|
1899 |
* @param string $passwd
|
1976 |
);
|
1977 |
}
|
1978 |
|
1979 |
+
/**
|
1980 |
+
* Do we need to rehash this password?
|
1981 |
+
*
|
1982 |
+
* @param string $hash
|
1983 |
+
* @param int $opslimit
|
1984 |
+
* @param int $memlimit
|
1985 |
+
* @return bool
|
1986 |
+
* @throws SodiumException
|
1987 |
+
*/
|
1988 |
+
public static function crypto_pwhash_str_needs_rehash($hash, $opslimit, $memlimit)
|
1989 |
+
{
|
1990 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($hash, 'string', 1);
|
1991 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($opslimit, 'int', 2);
|
1992 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($memlimit, 'int', 3);
|
1993 |
+
|
1994 |
+
// Just grab the first 4 pieces.
|
1995 |
+
$pieces = explode('$', (string) $hash);
|
1996 |
+
$prefix = implode('$', array_slice($pieces, 0, 4));
|
1997 |
+
|
1998 |
+
// Rebuild the expected header.
|
1999 |
+
/** @var int $ops */
|
2000 |
+
$ops = (int) $opslimit;
|
2001 |
+
/** @var int $mem */
|
2002 |
+
$mem = (int) $memlimit >> 10;
|
2003 |
+
$encoded = self::CRYPTO_PWHASH_STRPREFIX . 'v=19$m=' . $mem . ',t=' . $ops . ',p=1';
|
2004 |
+
|
2005 |
+
// Do they match? If so, we don't need to rehash, so return false.
|
2006 |
+
return !ParagonIE_Sodium_Core_Util::hashEquals($encoded, $prefix);
|
2007 |
+
}
|
2008 |
+
|
2009 |
/**
|
2010 |
* @param string $passwd
|
2011 |
* @param string $hash
|
2401 |
return ParagonIE_Sodium_Crypto::secretbox_xchacha20poly1305_open($ciphertext, $nonce, $key);
|
2402 |
}
|
2403 |
|
2404 |
+
/**
|
2405 |
+
* @param string $key
|
2406 |
+
* @return array<int, string> Returns a state and a header.
|
2407 |
+
* @throws Exception
|
2408 |
+
* @throws SodiumException
|
2409 |
+
*/
|
2410 |
+
public static function crypto_secretstream_xchacha20poly1305_init_push($key)
|
2411 |
+
{
|
2412 |
+
if (PHP_INT_SIZE === 4) {
|
2413 |
+
return ParagonIE_Sodium_Crypto32::secretstream_xchacha20poly1305_init_push($key);
|
2414 |
+
}
|
2415 |
+
return ParagonIE_Sodium_Crypto::secretstream_xchacha20poly1305_init_push($key);
|
2416 |
+
}
|
2417 |
+
|
2418 |
+
/**
|
2419 |
+
* @param string $header
|
2420 |
+
* @param string $key
|
2421 |
+
* @return string Returns a state.
|
2422 |
+
* @throws Exception
|
2423 |
+
*/
|
2424 |
+
public static function crypto_secretstream_xchacha20poly1305_init_pull($header, $key)
|
2425 |
+
{
|
2426 |
+
if (ParagonIE_Sodium_Core_Util::strlen($header) < self::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES) {
|
2427 |
+
throw new SodiumException(
|
2428 |
+
'header size should be SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES bytes'
|
2429 |
+
);
|
2430 |
+
}
|
2431 |
+
if (PHP_INT_SIZE === 4) {
|
2432 |
+
return ParagonIE_Sodium_Crypto32::secretstream_xchacha20poly1305_init_pull($key, $header);
|
2433 |
+
}
|
2434 |
+
return ParagonIE_Sodium_Crypto::secretstream_xchacha20poly1305_init_pull($key, $header);
|
2435 |
+
}
|
2436 |
+
|
2437 |
+
/**
|
2438 |
+
* @param string $state
|
2439 |
+
* @param string $msg
|
2440 |
+
* @param string $aad
|
2441 |
+
* @param int $tag
|
2442 |
+
* @return string
|
2443 |
+
* @throws SodiumException
|
2444 |
+
*/
|
2445 |
+
public static function crypto_secretstream_xchacha20poly1305_push(&$state, $msg, $aad = '', $tag = 0)
|
2446 |
+
{
|
2447 |
+
if (PHP_INT_SIZE === 4) {
|
2448 |
+
return ParagonIE_Sodium_Crypto32::secretstream_xchacha20poly1305_push(
|
2449 |
+
$state,
|
2450 |
+
$msg,
|
2451 |
+
$aad,
|
2452 |
+
$tag
|
2453 |
+
);
|
2454 |
+
}
|
2455 |
+
return ParagonIE_Sodium_Crypto::secretstream_xchacha20poly1305_push(
|
2456 |
+
$state,
|
2457 |
+
$msg,
|
2458 |
+
$aad,
|
2459 |
+
$tag
|
2460 |
+
);
|
2461 |
+
}
|
2462 |
+
|
2463 |
+
/**
|
2464 |
+
* @param string $state
|
2465 |
+
* @param string $msg
|
2466 |
+
* @param string $aad
|
2467 |
+
* @return bool|array{0: string, 1: int}
|
2468 |
+
* @throws SodiumException
|
2469 |
+
*/
|
2470 |
+
public static function crypto_secretstream_xchacha20poly1305_pull(&$state, $msg, $aad = '')
|
2471 |
+
{
|
2472 |
+
if (PHP_INT_SIZE === 4) {
|
2473 |
+
return ParagonIE_Sodium_Crypto32::secretstream_xchacha20poly1305_pull(
|
2474 |
+
$state,
|
2475 |
+
$msg,
|
2476 |
+
$aad
|
2477 |
+
);
|
2478 |
+
}
|
2479 |
+
return ParagonIE_Sodium_Crypto::secretstream_xchacha20poly1305_pull(
|
2480 |
+
$state,
|
2481 |
+
$msg,
|
2482 |
+
$aad
|
2483 |
+
);
|
2484 |
+
}
|
2485 |
+
|
2486 |
+
/**
|
2487 |
+
* @return string
|
2488 |
+
* @throws Exception
|
2489 |
+
*/
|
2490 |
+
public static function crypto_secretstream_xchacha20poly1305_keygen()
|
2491 |
+
{
|
2492 |
+
return random_bytes(self::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES);
|
2493 |
+
}
|
2494 |
+
|
2495 |
+
/**
|
2496 |
+
* @param string $state
|
2497 |
+
* @return void
|
2498 |
+
* @throws SodiumException
|
2499 |
+
*/
|
2500 |
+
public static function crypto_secretstream_xchacha20poly1305_rekey(&$state)
|
2501 |
+
{
|
2502 |
+
if (PHP_INT_SIZE === 4) {
|
2503 |
+
ParagonIE_Sodium_Crypto32::secretstream_xchacha20poly1305_rekey($state);
|
2504 |
+
} else {
|
2505 |
+
ParagonIE_Sodium_Crypto::secretstream_xchacha20poly1305_rekey($state);
|
2506 |
+
}
|
2507 |
+
}
|
2508 |
+
|
2509 |
/**
|
2510 |
* Calculates a SipHash-2-4 hash of a message for a given key.
|
2511 |
*
|
2655 |
return ParagonIE_Sodium_Core_Ed25519::keypair();
|
2656 |
}
|
2657 |
|
2658 |
+
/**
|
2659 |
+
* @param string $sk
|
2660 |
+
* @param string $pk
|
2661 |
+
* @return string
|
2662 |
+
* @throws SodiumException
|
2663 |
+
*/
|
2664 |
+
public static function crypto_sign_keypair_from_secretkey_and_publickey($sk, $pk)
|
2665 |
+
{
|
2666 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($sk, 'string', 1);
|
2667 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($pk, 'string', 1);
|
2668 |
+
$sk = (string) $sk;
|
2669 |
+
$pk = (string) $pk;
|
2670 |
+
|
2671 |
+
if (ParagonIE_Sodium_Core_Util::strlen($sk) !== self::CRYPTO_SIGN_SECRETKEYBYTES) {
|
2672 |
+
throw new SodiumException('secretkey should be SODIUM_CRYPTO_SIGN_SECRETKEYBYTES bytes');
|
2673 |
+
}
|
2674 |
+
if (ParagonIE_Sodium_Core_Util::strlen($pk) !== self::CRYPTO_SIGN_PUBLICKEYBYTES) {
|
2675 |
+
throw new SodiumException('publickey should be SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES bytes');
|
2676 |
+
}
|
2677 |
+
|
2678 |
+
if (self::useNewSodiumAPI()) {
|
2679 |
+
return sodium_crypto_sign_keypair_from_secretkey_and_publickey($sk, $pk);
|
2680 |
+
}
|
2681 |
+
return $sk . $pk;
|
2682 |
+
}
|
2683 |
+
|
2684 |
/**
|
2685 |
* Generate an Ed25519 keypair from a seed.
|
2686 |
*
|
3120 |
* with (sans pwhash and memzero).
|
3121 |
*
|
3122 |
* @return int
|
|
|
|
|
3123 |
*/
|
3124 |
public static function library_version_major()
|
3125 |
{
|
3126 |
+
if (self::useNewSodiumAPI() && defined('SODIUM_LIBRARY_MAJOR_VERSION')) {
|
3127 |
+
return SODIUM_LIBRARY_MAJOR_VERSION;
|
3128 |
}
|
3129 |
if (self::use_fallback('library_version_major')) {
|
3130 |
+
/** @psalm-suppress UndefinedFunction */
|
3131 |
return (int) call_user_func('\\Sodium\\library_version_major');
|
3132 |
}
|
3133 |
return self::LIBRARY_VERSION_MAJOR;
|
3138 |
* with (sans pwhash and memzero).
|
3139 |
*
|
3140 |
* @return int
|
|
|
|
|
3141 |
*/
|
3142 |
public static function library_version_minor()
|
3143 |
{
|
3144 |
+
if (self::useNewSodiumAPI() && defined('SODIUM_LIBRARY_MINOR_VERSION')) {
|
3145 |
+
return SODIUM_LIBRARY_MINOR_VERSION;
|
3146 |
}
|
3147 |
if (self::use_fallback('library_version_minor')) {
|
3148 |
+
/** @psalm-suppress UndefinedFunction */
|
3149 |
return (int) call_user_func('\\Sodium\\library_version_minor');
|
3150 |
}
|
3151 |
return self::LIBRARY_VERSION_MINOR;
|
3167 |
ParagonIE_Sodium_Core_Util::declareScalarType($left, 'string', 1);
|
3168 |
ParagonIE_Sodium_Core_Util::declareScalarType($right, 'string', 2);
|
3169 |
|
3170 |
+
if (self::useNewSodiumAPI()) {
|
3171 |
+
return sodium_memcmp($left, $right);
|
3172 |
+
}
|
3173 |
if (self::use_fallback('memcmp')) {
|
3174 |
return (int) call_user_func('\\Sodium\\memcmp', $left, $right);
|
3175 |
}
|
3214 |
);
|
3215 |
}
|
3216 |
|
3217 |
+
/**
|
3218 |
+
* @param string $unpadded
|
3219 |
+
* @param int $blockSize
|
3220 |
+
* @param bool $dontFallback
|
3221 |
+
* @return string
|
3222 |
+
* @throws SodiumException
|
3223 |
+
*/
|
3224 |
+
public static function pad($unpadded, $blockSize, $dontFallback = false)
|
3225 |
+
{
|
3226 |
+
/* Type checks: */
|
3227 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($unpadded, 'string', 1);
|
3228 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($blockSize, 'int', 2);
|
3229 |
+
|
3230 |
+
$unpadded = (string) $unpadded;
|
3231 |
+
$blockSize = (int) $blockSize;
|
3232 |
+
|
3233 |
+
if (self::useNewSodiumAPI() && !$dontFallback) {
|
3234 |
+
return (string) sodium_pad($unpadded, $blockSize);
|
3235 |
+
}
|
3236 |
+
|
3237 |
+
if ($blockSize <= 0) {
|
3238 |
+
throw new SodiumException(
|
3239 |
+
'block size cannot be less than 1'
|
3240 |
+
);
|
3241 |
+
}
|
3242 |
+
$unpadded_len = ParagonIE_Sodium_Core_Util::strlen($unpadded);
|
3243 |
+
$xpadlen = ($blockSize - 1);
|
3244 |
+
if (($blockSize & ($blockSize - 1)) === 0) {
|
3245 |
+
$xpadlen -= $unpadded_len & ($blockSize - 1);
|
3246 |
+
} else {
|
3247 |
+
$xpadlen -= $unpadded_len % $blockSize;
|
3248 |
+
}
|
3249 |
+
|
3250 |
+
$xpadded_len = $unpadded_len + $xpadlen;
|
3251 |
+
$padded = str_repeat("\0", $xpadded_len - 1);
|
3252 |
+
if ($unpadded_len > 0) {
|
3253 |
+
$st = 1;
|
3254 |
+
$i = 0;
|
3255 |
+
$k = $unpadded_len;
|
3256 |
+
for ($j = 0; $j <= $xpadded_len; ++$j) {
|
3257 |
+
$i = (int) $i;
|
3258 |
+
$k = (int) $k;
|
3259 |
+
$st = (int) $st;
|
3260 |
+
if ($j >= $unpadded_len) {
|
3261 |
+
$padded[$j] = "\0";
|
3262 |
+
} else {
|
3263 |
+
$padded[$j] = $unpadded[$j];
|
3264 |
+
}
|
3265 |
+
/** @var int $k */
|
3266 |
+
$k -= $st;
|
3267 |
+
$st = (int) (~(
|
3268 |
+
(
|
3269 |
+
(
|
3270 |
+
($k >> 48)
|
3271 |
+
|
|
3272 |
+
($k >> 32)
|
3273 |
+
|
|
3274 |
+
($k >> 16)
|
3275 |
+
|
|
3276 |
+
$k
|
3277 |
+
) - 1
|
3278 |
+
) >> 16
|
3279 |
+
)
|
3280 |
+
) & 1;
|
3281 |
+
$i += $st;
|
3282 |
+
}
|
3283 |
+
}
|
3284 |
+
|
3285 |
+
$mask = 0;
|
3286 |
+
$tail = $xpadded_len;
|
3287 |
+
for ($i = 0; $i < $blockSize; ++$i) {
|
3288 |
+
# barrier_mask = (unsigned char)
|
3289 |
+
# (((i ^ xpadlen) - 1U) >> ((sizeof(size_t) - 1U) * CHAR_BIT));
|
3290 |
+
$barrier_mask = (($i ^ $xpadlen) -1) >> ((PHP_INT_SIZE << 3) - 1);
|
3291 |
+
# tail[-i] = (tail[-i] & mask) | (0x80 & barrier_mask);
|
3292 |
+
$padded[$tail - $i] = ParagonIE_Sodium_Core_Util::intToChr(
|
3293 |
+
(ParagonIE_Sodium_Core_Util::chrToInt($padded[$tail - $i]) & $mask)
|
3294 |
+
|
|
3295 |
+
(0x80 & $barrier_mask)
|
3296 |
+
);
|
3297 |
+
# mask |= barrier_mask;
|
3298 |
+
$mask |= $barrier_mask;
|
3299 |
+
}
|
3300 |
+
return $padded;
|
3301 |
+
}
|
3302 |
+
|
3303 |
+
/**
|
3304 |
+
* @param string $padded
|
3305 |
+
* @param int $blockSize
|
3306 |
+
* @param bool $dontFallback
|
3307 |
+
* @return string
|
3308 |
+
* @throws SodiumException
|
3309 |
+
*/
|
3310 |
+
public static function unpad($padded, $blockSize, $dontFallback = false)
|
3311 |
+
{
|
3312 |
+
/* Type checks: */
|
3313 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($padded, 'string', 1);
|
3314 |
+
ParagonIE_Sodium_Core_Util::declareScalarType($blockSize, 'int', 2);
|
3315 |
+
|
3316 |
+
$padded = (string) $padded;
|
3317 |
+
$blockSize = (int) $blockSize;
|
3318 |
+
|
3319 |
+
if (self::useNewSodiumAPI() && !$dontFallback) {
|
3320 |
+
return (string) sodium_unpad($padded, $blockSize);
|
3321 |
+
}
|
3322 |
+
if ($blockSize <= 0) {
|
3323 |
+
throw new SodiumException('block size cannot be less than 1');
|
3324 |
+
}
|
3325 |
+
$padded_len = ParagonIE_Sodium_Core_Util::strlen($padded);
|
3326 |
+
if ($padded_len < $blockSize) {
|
3327 |
+
throw new SodiumException('invalid padding');
|
3328 |
+
}
|
3329 |
+
|
3330 |
+
# tail = &padded[padded_len - 1U];
|
3331 |
+
$tail = $padded_len - 1;
|
3332 |
+
|
3333 |
+
$acc = 0;
|
3334 |
+
$valid = 0;
|
3335 |
+
$pad_len = 0;
|
3336 |
+
|
3337 |
+
$found = 0;
|
3338 |
+
for ($i = 0; $i < $blockSize; ++$i) {
|
3339 |
+
# c = tail[-i];
|
3340 |
+
$c = ParagonIE_Sodium_Core_Util::chrToInt($padded[$tail - $i]);
|
3341 |
+
|
3342 |
+
# is_barrier =
|
3343 |
+
# (( (acc - 1U) & (pad_len - 1U) & ((c ^ 0x80) - 1U) ) >> 8) & 1U;
|
3344 |
+
$is_barrier = (
|
3345 |
+
(
|
3346 |
+
($acc - 1) & ($pad_len - 1) & (($c ^ 80) - 1)
|
3347 |
+
) >> 7
|
3348 |
+
) & 1;
|
3349 |
+
$is_barrier &= ~$found;
|
3350 |
+
$found |= $is_barrier;
|
3351 |
+
|
3352 |
+
# acc |= c;
|
3353 |
+
$acc |= $c;
|
3354 |
+
|
3355 |
+
# pad_len |= i & (1U + ~is_barrier);
|
3356 |
+
$pad_len |= $i & (1 + ~$is_barrier);
|
3357 |
+
|
3358 |
+
# valid |= (unsigned char) is_barrier;
|
3359 |
+
$valid |= ($is_barrier & 0xff);
|
3360 |
+
}
|
3361 |
+
# unpadded_len = padded_len - 1U - pad_len;
|
3362 |
+
$unpadded_len = $padded_len - 1 - $pad_len;
|
3363 |
+
if ($valid !== 1) {
|
3364 |
+
throw new SodiumException('invalid padding');
|
3365 |
+
}
|
3366 |
+
return ParagonIE_Sodium_Core_Util::substr($padded, 0, $unpadded_len);
|
3367 |
+
}
|
3368 |
+
|
3369 |
/**
|
3370 |
* Will sodium_compat run fast on the current hardware and PHP configuration?
|
3371 |
*
|
crypto/vendor/paragonie/sodium_compat/src/Core/BLAKE2b.php
CHANGED
@@ -89,10 +89,10 @@ abstract class ParagonIE_Sodium_Core_BLAKE2b extends ParagonIE_Sodium_Core_Util
|
|
89 |
{
|
90 |
$l = ($x[1] + $y[1]) & 0xffffffff;
|
91 |
return self::new64(
|
92 |
-
$x[0] + $y[0] + (
|
93 |
($l < $x[1]) ? 1 : 0
|
94 |
-
),
|
95 |
-
$l
|
96 |
);
|
97 |
}
|
98 |
|
@@ -133,8 +133,8 @@ abstract class ParagonIE_Sodium_Core_BLAKE2b extends ParagonIE_Sodium_Core_Util
|
|
133 |
throw new SodiumException('y[1] is not an integer');
|
134 |
}
|
135 |
return self::new64(
|
136 |
-
(int) ($x[0] ^ $y[0]),
|
137 |
-
(int) ($x[1] ^ $y[1])
|
138 |
);
|
139 |
}
|
140 |
|
@@ -300,12 +300,13 @@ abstract class ParagonIE_Sodium_Core_BLAKE2b extends ParagonIE_Sodium_Core_Util
|
|
300 |
*/
|
301 |
protected static function context()
|
302 |
{
|
303 |
-
$ctx = new SplFixedArray(
|
304 |
$ctx[0] = new SplFixedArray(8); // h
|
305 |
$ctx[1] = new SplFixedArray(2); // t
|
306 |
$ctx[2] = new SplFixedArray(2); // f
|
307 |
$ctx[3] = new SplFixedArray(256); // buf
|
308 |
$ctx[4] = 0; // buflen
|
|
|
309 |
|
310 |
for ($i = 8; $i--;) {
|
311 |
$ctx[0][$i] = self::$iv[$i];
|
@@ -551,6 +552,8 @@ abstract class ParagonIE_Sodium_Core_BLAKE2b extends ParagonIE_Sodium_Core_Util
|
|
551 |
*
|
552 |
* @param SplFixedArray|null $key
|
553 |
* @param int $outlen
|
|
|
|
|
554 |
* @return SplFixedArray
|
555 |
* @throws SodiumException
|
556 |
* @throws TypeError
|
@@ -560,8 +563,12 @@ abstract class ParagonIE_Sodium_Core_BLAKE2b extends ParagonIE_Sodium_Core_Util
|
|
560 |
* @psalm-suppress MixedArrayAssignment
|
561 |
* @psalm-suppress MixedArrayOffset
|
562 |
*/
|
563 |
-
public static function init(
|
564 |
-
|
|
|
|
|
|
|
|
|
565 |
self::pseudoConstructor();
|
566 |
$klen = 0;
|
567 |
|
@@ -579,6 +586,7 @@ abstract class ParagonIE_Sodium_Core_BLAKE2b extends ParagonIE_Sodium_Core_Util
|
|
579 |
$ctx = self::context();
|
580 |
|
581 |
$p = new SplFixedArray(64);
|
|
|
582 |
for ($i = 64; --$i;) {
|
583 |
$p[$i] = 0;
|
584 |
}
|
@@ -588,10 +596,32 @@ abstract class ParagonIE_Sodium_Core_BLAKE2b extends ParagonIE_Sodium_Core_Util
|
|
588 |
$p[2] = 1; // fanout
|
589 |
$p[3] = 1; // depth
|
590 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
591 |
$ctx[0][0] = self::xor64(
|
592 |
$ctx[0][0],
|
593 |
self::load64($p, 0)
|
594 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
595 |
|
596 |
if ($klen > 0 && $key instanceof SplFixedArray) {
|
597 |
$block = new SplFixedArray(128);
|
@@ -602,6 +632,7 @@ abstract class ParagonIE_Sodium_Core_BLAKE2b extends ParagonIE_Sodium_Core_Util
|
|
602 |
$block[$i] = $key[$i];
|
603 |
}
|
604 |
self::update($ctx, $block, 128);
|
|
|
605 |
}
|
606 |
|
607 |
return $ctx;
|
@@ -694,7 +725,7 @@ abstract class ParagonIE_Sodium_Core_BLAKE2b extends ParagonIE_Sodium_Core_Util
|
|
694 |
self::intToChr(($ctx4 >> 56) & 0xff)
|
695 |
));
|
696 |
# uint8_t last_node;
|
697 |
-
return $str . "\x00";
|
698 |
}
|
699 |
|
700 |
/**
|
@@ -747,7 +778,6 @@ abstract class ParagonIE_Sodium_Core_BLAKE2b extends ParagonIE_Sodium_Core_Util
|
|
747 |
# uint8_t buf[2 * 128];
|
748 |
$ctx[3] = self::stringToSplFixedArray(self::substr($string, 96, 256));
|
749 |
|
750 |
-
|
751 |
# uint8_t buf[2 * 128];
|
752 |
$int = 0;
|
753 |
for ($i = 0; $i < 8; ++$i) {
|
89 |
{
|
90 |
$l = ($x[1] + $y[1]) & 0xffffffff;
|
91 |
return self::new64(
|
92 |
+
(int) ($x[0] + $y[0] + (
|
93 |
($l < $x[1]) ? 1 : 0
|
94 |
+
)),
|
95 |
+
(int) $l
|
96 |
);
|
97 |
}
|
98 |
|
133 |
throw new SodiumException('y[1] is not an integer');
|
134 |
}
|
135 |
return self::new64(
|
136 |
+
(int) (($x[0] ^ $y[0]) & 0xffffffff),
|
137 |
+
(int) (($x[1] ^ $y[1]) & 0xffffffff)
|
138 |
);
|
139 |
}
|
140 |
|
300 |
*/
|
301 |
protected static function context()
|
302 |
{
|
303 |
+
$ctx = new SplFixedArray(6);
|
304 |
$ctx[0] = new SplFixedArray(8); // h
|
305 |
$ctx[1] = new SplFixedArray(2); // t
|
306 |
$ctx[2] = new SplFixedArray(2); // f
|
307 |
$ctx[3] = new SplFixedArray(256); // buf
|
308 |
$ctx[4] = 0; // buflen
|
309 |
+
$ctx[5] = 0; // last_node (uint8_t)
|
310 |
|
311 |
for ($i = 8; $i--;) {
|
312 |
$ctx[0][$i] = self::$iv[$i];
|
552 |
*
|
553 |
* @param SplFixedArray|null $key
|
554 |
* @param int $outlen
|
555 |
+
* @param SplFixedArray|null $salt
|
556 |
+
* @param SplFixedArray|null $personal
|
557 |
* @return SplFixedArray
|
558 |
* @throws SodiumException
|
559 |
* @throws TypeError
|
563 |
* @psalm-suppress MixedArrayAssignment
|
564 |
* @psalm-suppress MixedArrayOffset
|
565 |
*/
|
566 |
+
public static function init(
|
567 |
+
$key = null,
|
568 |
+
$outlen = 64,
|
569 |
+
$salt = null,
|
570 |
+
$personal = null
|
571 |
+
) {
|
572 |
self::pseudoConstructor();
|
573 |
$klen = 0;
|
574 |
|
586 |
$ctx = self::context();
|
587 |
|
588 |
$p = new SplFixedArray(64);
|
589 |
+
// Zero our param buffer...
|
590 |
for ($i = 64; --$i;) {
|
591 |
$p[$i] = 0;
|
592 |
}
|
596 |
$p[2] = 1; // fanout
|
597 |
$p[3] = 1; // depth
|
598 |
|
599 |
+
if ($salt instanceof SplFixedArray) {
|
600 |
+
// salt: [32] through [47]
|
601 |
+
for ($i = 0; $i < 16; ++$i) {
|
602 |
+
$p[32 + $i] = (int) $salt[$i];
|
603 |
+
}
|
604 |
+
}
|
605 |
+
if ($personal instanceof SplFixedArray) {
|
606 |
+
// personal: [48] through [63]
|
607 |
+
for ($i = 0; $i < 16; ++$i) {
|
608 |
+
$p[48 + $i] = (int) $personal[$i];
|
609 |
+
}
|
610 |
+
}
|
611 |
+
|
612 |
$ctx[0][0] = self::xor64(
|
613 |
$ctx[0][0],
|
614 |
self::load64($p, 0)
|
615 |
);
|
616 |
+
if ($salt instanceof SplFixedArray || $personal instanceof SplFixedArray) {
|
617 |
+
// We need to do what blake2b_init_param() does:
|
618 |
+
for ($i = 1; $i < 8; ++$i) {
|
619 |
+
$ctx[0][$i] = self::xor64(
|
620 |
+
$ctx[0][$i],
|
621 |
+
self::load64($p, $i << 3)
|
622 |
+
);
|
623 |
+
}
|
624 |
+
}
|
625 |
|
626 |
if ($klen > 0 && $key instanceof SplFixedArray) {
|
627 |
$block = new SplFixedArray(128);
|
632 |
$block[$i] = $key[$i];
|
633 |
}
|
634 |
self::update($ctx, $block, 128);
|
635 |
+
$ctx[4] = 128;
|
636 |
}
|
637 |
|
638 |
return $ctx;
|
725 |
self::intToChr(($ctx4 >> 56) & 0xff)
|
726 |
));
|
727 |
# uint8_t last_node;
|
728 |
+
return $str . self::intToChr($ctx[5]) . str_repeat("\x00", 23);
|
729 |
}
|
730 |
|
731 |
/**
|
778 |
# uint8_t buf[2 * 128];
|
779 |
$ctx[3] = self::stringToSplFixedArray(self::substr($string, 96, 256));
|
780 |
|
|
|
781 |
# uint8_t buf[2 * 128];
|
782 |
$int = 0;
|
783 |
for ($i = 0; $i < 8; ++$i) {
|
crypto/vendor/paragonie/sodium_compat/src/Core/Base64/Common.php
ADDED
@@ -0,0 +1,214 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Class ParagonIE_Sodium_Core_Base64
|
6 |
+
*
|
7 |
+
* Copyright (c) 2016 - 2018 Paragon Initiative Enterprises.
|
8 |
+
* Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
|
9 |
+
*
|
10 |
+
* We have to copy/paste the contents into the variant files because PHP 5.2
|
11 |
+
* doesn't support late static binding, and we have no better workaround
|
12 |
+
* available that won't break PHP 7+. Therefore, we're forced to duplicate code.
|
13 |
+
*/
|
14 |
+
abstract class ParagonIE_Sodium_Core_Base64_Common
|
15 |
+
{
|
16 |
+
/**
|
17 |
+
* Encode into Base64
|
18 |
+
*
|
19 |
+
* Base64 character set "[A-Z][a-z][0-9]+/"
|
20 |
+
*
|
21 |
+
* @param string $src
|
22 |
+
* @return string
|
23 |
+
* @throws TypeError
|
24 |
+
*/
|
25 |
+
public static function encode($src)
|
26 |
+
{
|
27 |
+
return self::doEncode($src, true);
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Encode into Base64, no = padding
|
32 |
+
*
|
33 |
+
* Base64 character set "[A-Z][a-z][0-9]+/"
|
34 |
+
*
|
35 |
+
* @param string $src
|
36 |
+
* @return string
|
37 |
+
* @throws TypeError
|
38 |
+
*/
|
39 |
+
public static function encodeUnpadded($src)
|
40 |
+
{
|
41 |
+
return self::doEncode($src, false);
|
42 |
+
}
|
43 |
+
|
44 |
+
/**
|
45 |
+
* @param string $src
|
46 |
+
* @param bool $pad Include = padding?
|
47 |
+
* @return string
|
48 |
+
* @throws TypeError
|
49 |
+
*/
|
50 |
+
protected static function doEncode($src, $pad = true)
|
51 |
+
{
|
52 |
+
$dest = '';
|
53 |
+
$srcLen = ParagonIE_Sodium_Core_Util::strlen($src);
|
54 |
+
// Main loop (no padding):
|
55 |
+
for ($i = 0; $i + 3 <= $srcLen; $i += 3) {
|
56 |
+
/** @var array<int, int> $chunk */
|
57 |
+
$chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 3));
|
58 |
+
$b0 = $chunk[1];
|
59 |
+
$b1 = $chunk[2];
|
60 |
+
$b2 = $chunk[3];
|
61 |
+
|
62 |
+
$dest .=
|
63 |
+
self::encode6Bits( $b0 >> 2 ) .
|
64 |
+
self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
|
65 |
+
self::encode6Bits((($b1 << 2) | ($b2 >> 6)) & 63) .
|
66 |
+
self::encode6Bits( $b2 & 63);
|
67 |
+
}
|
68 |
+
// The last chunk, which may have padding:
|
69 |
+
if ($i < $srcLen) {
|
70 |
+
/** @var array<int, int> $chunk */
|
71 |
+
$chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i));
|
72 |
+
$b0 = $chunk[1];
|
73 |
+
if ($i + 1 < $srcLen) {
|
74 |
+
$b1 = $chunk[2];
|
75 |
+
$dest .=
|
76 |
+
self::encode6Bits($b0 >> 2) .
|
77 |
+
self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
|
78 |
+
self::encode6Bits(($b1 << 2) & 63);
|
79 |
+
if ($pad) {
|
80 |
+
$dest .= '=';
|
81 |
+
}
|
82 |
+
} else {
|
83 |
+
$dest .=
|
84 |
+
self::encode6Bits( $b0 >> 2) .
|
85 |
+
self::encode6Bits(($b0 << 4) & 63);
|
86 |
+
if ($pad) {
|
87 |
+
$dest .= '==';
|
88 |
+
}
|
89 |
+
}
|
90 |
+
}
|
91 |
+
return $dest;
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* decode from base64 into binary
|
96 |
+
*
|
97 |
+
* Base64 character set "./[A-Z][a-z][0-9]"
|
98 |
+
*
|
99 |
+
* @param string $src
|
100 |
+
* @param bool $strictPadding
|
101 |
+
* @return string
|
102 |
+
* @throws RangeException
|
103 |
+
* @throws TypeError
|
104 |
+
* @psalm-suppress RedundantCondition
|
105 |
+
*/
|
106 |
+
public static function decode($src, $strictPadding = false)
|
107 |
+
{
|
108 |
+
// Remove padding
|
109 |
+
$srcLen = ParagonIE_Sodium_Core_Util::strlen($src);
|
110 |
+
if ($srcLen === 0) {
|
111 |
+
return '';
|
112 |
+
}
|
113 |
+
|
114 |
+
if ($strictPadding) {
|
115 |
+
if (($srcLen & 3) === 0) {
|
116 |
+
if ($src[$srcLen - 1] === '=') {
|
117 |
+
$srcLen--;
|
118 |
+
if ($src[$srcLen - 1] === '=') {
|
119 |
+
$srcLen--;
|
120 |
+
}
|
121 |
+
}
|
122 |
+
}
|
123 |
+
if (($srcLen & 3) === 1) {
|
124 |
+
throw new RangeException(
|
125 |
+
'Incorrect padding'
|
126 |
+
);
|
127 |
+
}
|
128 |
+
if ($src[$srcLen - 1] === '=') {
|
129 |
+
throw new RangeException(
|
130 |
+
'Incorrect padding'
|
131 |
+
);
|
132 |
+
}
|
133 |
+
} else {
|
134 |
+
$src = rtrim($src, '=');
|
135 |
+
$srcLen = ParagonIE_Sodium_Core_Util::strlen($src);
|
136 |
+
}
|
137 |
+
|
138 |
+
$err = 0;
|
139 |
+
$dest = '';
|
140 |
+
// Main loop (no padding):
|
141 |
+
for ($i = 0; $i + 4 <= $srcLen; $i += 4) {
|
142 |
+
/** @var array<int, int> $chunk */
|
143 |
+
$chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 4));
|
144 |
+
$c0 = self::decode6Bits($chunk[1]);
|
145 |
+
$c1 = self::decode6Bits($chunk[2]);
|
146 |
+
$c2 = self::decode6Bits($chunk[3]);
|
147 |
+
$c3 = self::decode6Bits($chunk[4]);
|
148 |
+
|
149 |
+
$dest .= pack(
|
150 |
+
'CCC',
|
151 |
+
((($c0 << 2) | ($c1 >> 4)) & 0xff),
|
152 |
+
((($c1 << 4) | ($c2 >> 2)) & 0xff),
|
153 |
+
((($c2 << 6) | $c3 ) & 0xff)
|
154 |
+
);
|
155 |
+
$err |= ($c0 | $c1 | $c2 | $c3) >> 8;
|
156 |
+
}
|
157 |
+
// The last chunk, which may have padding:
|
158 |
+
if ($i < $srcLen) {
|
159 |
+
/** @var array<int, int> $chunk */
|
160 |
+
$chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i));
|
161 |
+
$c0 = self::decode6Bits($chunk[1]);
|
162 |
+
|
163 |
+
if ($i + 2 < $srcLen) {
|
164 |
+
$c1 = self::decode6Bits($chunk[2]);
|
165 |
+
$c2 = self::decode6Bits($chunk[3]);
|
166 |
+
$dest .= pack(
|
167 |
+
'CC',
|
168 |
+
((($c0 << 2) | ($c1 >> 4)) & 0xff),
|
169 |
+
((($c1 << 4) | ($c2 >> 2)) & 0xff)
|
170 |
+
);
|
171 |
+
$err |= ($c0 | $c1 | $c2) >> 8;
|
172 |
+
} elseif ($i + 1 < $srcLen) {
|
173 |
+
$c1 = self::decode6Bits($chunk[2]);
|
174 |
+
$dest .= pack(
|
175 |
+
'C',
|
176 |
+
((($c0 << 2) | ($c1 >> 4)) & 0xff)
|
177 |
+
);
|
178 |
+
$err |= ($c0 | $c1) >> 8;
|
179 |
+
} elseif ($i < $srcLen && $strictPadding) {
|
180 |
+
$err |= 1;
|
181 |
+
}
|
182 |
+
}
|
183 |
+
/** @var bool $check */
|
184 |
+
$check = ($err === 0);
|
185 |
+
if (!$check) {
|
186 |
+
throw new RangeException(
|
187 |
+
'Base64::decode() only expects characters in the correct base64 alphabet'
|
188 |
+
);
|
189 |
+
}
|
190 |
+
return $dest;
|
191 |
+
}
|
192 |
+
|
193 |
+
/**
|
194 |
+
* Uses bitwise operators instead of table-lookups to turn 6-bit integers
|
195 |
+
* into 8-bit integers.
|
196 |
+
*
|
197 |
+
* Base64 character set:
|
198 |
+
* [A-Z] [a-z] [0-9] + /
|
199 |
+
* 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2b, 0x2f
|
200 |
+
*
|
201 |
+
* @param int $src
|
202 |
+
* @return int
|
203 |
+
*/
|
204 |
+
abstract protected static function decode6Bits($src);
|
205 |
+
|
206 |
+
/**
|
207 |
+
* Uses bitwise operators instead of table-lookups to turn 8-bit integers
|
208 |
+
* into 6-bit integers.
|
209 |
+
*
|
210 |
+
* @param int $src
|
211 |
+
* @return string
|
212 |
+
*/
|
213 |
+
abstract protected static function encode6Bits($src);
|
214 |
+
}
|
crypto/vendor/paragonie/sodium_compat/src/Core/Base64/Original.php
ADDED
@@ -0,0 +1,249 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Class ParagonIE_Sodium_Core_Base64
|
6 |
+
*
|
7 |
+
* Copyright (c) 2016 - 2018 Paragon Initiative Enterprises.
|
8 |
+
* Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
|
9 |
+
*/
|
10 |
+
class ParagonIE_Sodium_Core_Base64_Original
|
11 |
+
{
|
12 |
+
// COPY ParagonIE_Sodium_Core_Base64_Common STARTING HERE
|
13 |
+
/**
|
14 |
+
* Encode into Base64
|
15 |
+
*
|
16 |
+
* Base64 character set "[A-Z][a-z][0-9]+/"
|
17 |
+
*
|
18 |
+
* @param string $src
|
19 |
+
* @return string
|
20 |
+
* @throws TypeError
|
21 |
+
*/
|
22 |
+
public static function encode($src)
|
23 |
+
{
|
24 |
+
return self::doEncode($src, true);
|
25 |
+
}
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Encode into Base64, no = padding
|
29 |
+
*
|
30 |
+
* Base64 character set "[A-Z][a-z][0-9]+/"
|
31 |
+
*
|
32 |
+
* @param string $src
|
33 |
+
* @return string
|
34 |
+
* @throws TypeError
|
35 |
+
*/
|
36 |
+
public static function encodeUnpadded($src)
|
37 |
+
{
|
38 |
+
return self::doEncode($src, false);
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @param string $src
|
43 |
+
* @param bool $pad Include = padding?
|
44 |
+
* @return string
|
45 |
+
* @throws TypeError
|
46 |
+
*/
|
47 |
+
protected static function doEncode($src, $pad = true)
|
48 |
+
{
|
49 |
+
$dest = '';
|
50 |
+
$srcLen = ParagonIE_Sodium_Core_Util::strlen($src);
|
51 |
+
// Main loop (no padding):
|
52 |
+
for ($i = 0; $i + 3 <= $srcLen; $i += 3) {
|
53 |
+
/** @var array<int, int> $chunk */
|
54 |
+
$chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 3));
|
55 |
+
$b0 = $chunk[1];
|
56 |
+
$b1 = $chunk[2];
|
57 |
+
$b2 = $chunk[3];
|
58 |
+
|
59 |
+
$dest .=
|
60 |
+
self::encode6Bits( $b0 >> 2 ) .
|
61 |
+
self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
|
62 |
+
self::encode6Bits((($b1 << 2) | ($b2 >> 6)) & 63) .
|
63 |
+
self::encode6Bits( $b2 & 63);
|
64 |
+
}
|
65 |
+
// The last chunk, which may have padding:
|
66 |
+
if ($i < $srcLen) {
|
67 |
+
/** @var array<int, int> $chunk */
|
68 |
+
$chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i));
|
69 |
+
$b0 = $chunk[1];
|
70 |
+
if ($i + 1 < $srcLen) {
|
71 |
+
$b1 = $chunk[2];
|
72 |
+
$dest .=
|
73 |
+
self::encode6Bits($b0 >> 2) .
|
74 |
+
self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
|
75 |
+
self::encode6Bits(($b1 << 2) & 63);
|
76 |
+
if ($pad) {
|
77 |
+
$dest .= '=';
|
78 |
+
}
|
79 |
+
} else {
|
80 |
+
$dest .=
|
81 |
+
self::encode6Bits( $b0 >> 2) .
|
82 |
+
self::encode6Bits(($b0 << 4) & 63);
|
83 |
+
if ($pad) {
|
84 |
+
$dest .= '==';
|
85 |
+
}
|
86 |
+
}
|
87 |
+
}
|
88 |
+
return $dest;
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* decode from base64 into binary
|
93 |
+
*
|
94 |
+
* Base64 character set "./[A-Z][a-z][0-9]"
|
95 |
+
*
|
96 |
+
* @param string $src
|
97 |
+
* @param bool $strictPadding
|
98 |
+
* @return string
|
99 |
+
* @throws RangeException
|
100 |
+
* @throws TypeError
|
101 |
+
* @psalm-suppress RedundantCondition
|
102 |
+
*/
|
103 |
+
public static function decode($src, $strictPadding = false)
|
104 |
+
{
|
105 |
+
// Remove padding
|
106 |
+
$srcLen = ParagonIE_Sodium_Core_Util::strlen($src);
|
107 |
+
if ($srcLen === 0) {
|
108 |
+
return '';
|
109 |
+
}
|
110 |
+
|
111 |
+
if ($strictPadding) {
|
112 |
+
if (($srcLen & 3) === 0) {
|
113 |
+
if ($src[$srcLen - 1] === '=') {
|
114 |
+
$srcLen--;
|
115 |
+
if ($src[$srcLen - 1] === '=') {
|
116 |
+
$srcLen--;
|
117 |
+
}
|
118 |
+
}
|
119 |
+
}
|
120 |
+
if (($srcLen & 3) === 1) {
|
121 |
+
throw new RangeException(
|
122 |
+
'Incorrect padding'
|
123 |
+
);
|
124 |
+
}
|
125 |
+
if ($src[$srcLen - 1] === '=') {
|
126 |
+
throw new RangeException(
|
127 |
+
'Incorrect padding'
|
128 |
+
);
|
129 |
+
}
|
130 |
+
} else {
|
131 |
+
$src = rtrim($src, '=');
|
132 |
+
$srcLen = ParagonIE_Sodium_Core_Util::strlen($src);
|
133 |
+
}
|
134 |
+
|
135 |
+
$err = 0;
|
136 |
+
$dest = '';
|
137 |
+
// Main loop (no padding):
|
138 |
+
for ($i = 0; $i + 4 <= $srcLen; $i += 4) {
|
139 |
+
/** @var array<int, int> $chunk */
|
140 |
+
$chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 4));
|
141 |
+
$c0 = self::decode6Bits($chunk[1]);
|
142 |
+
$c1 = self::decode6Bits($chunk[2]);
|
143 |
+
$c2 = self::decode6Bits($chunk[3]);
|
144 |
+
$c3 = self::decode6Bits($chunk[4]);
|
145 |
+
|
146 |
+
$dest .= pack(
|
147 |
+
'CCC',
|
148 |
+
((($c0 << 2) | ($c1 >> 4)) & 0xff),
|
149 |
+
((($c1 << 4) | ($c2 >> 2)) & 0xff),
|
150 |
+
((($c2 << 6) | $c3) & 0xff)
|
151 |
+
);
|
152 |
+
$err |= ($c0 | $c1 | $c2 | $c3) >> 8;
|
153 |
+
}
|
154 |
+
// The last chunk, which may have padding:
|
155 |
+
if ($i < $srcLen) {
|
156 |
+
/** @var array<int, int> $chunk */
|
157 |
+
$chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i));
|
158 |
+
$c0 = self::decode6Bits($chunk[1]);
|
159 |
+
|
160 |
+
if ($i + 2 < $srcLen) {
|
161 |
+
$c1 = self::decode6Bits($chunk[2]);
|
162 |
+
$c2 = self::decode6Bits($chunk[3]);
|
163 |
+
$dest .= pack(
|
164 |
+
'CC',
|
165 |
+
((($c0 << 2) | ($c1 >> 4)) & 0xff),
|
166 |
+
((($c1 << 4) | ($c2 >> 2)) & 0xff)
|
167 |
+
);
|
168 |
+
$err |= ($c0 | $c1 | $c2) >> 8;
|
169 |
+
} elseif ($i + 1 < $srcLen) {
|
170 |
+
$c1 = self::decode6Bits($chunk[2]);
|
171 |
+
$dest .= pack(
|
172 |
+
'C',
|
173 |
+
((($c0 << 2) | ($c1 >> 4)) & 0xff)
|
174 |
+
);
|
175 |
+
$err |= ($c0 | $c1) >> 8;
|
176 |
+
} elseif ($i < $srcLen && $strictPadding) {
|
177 |
+
$err |= 1;
|
178 |
+
}
|
179 |
+
}
|
180 |
+
/** @var bool $check */
|
181 |
+
$check = ($err === 0);
|
182 |
+
if (!$check) {
|
183 |
+
throw new RangeException(
|
184 |
+
'Base64::decode() only expects characters in the correct base64 alphabet'
|
185 |
+
);
|
186 |
+
}
|
187 |
+
return $dest;
|
188 |
+
}
|
189 |
+
// COPY ParagonIE_Sodium_Core_Base64_Common ENDING HERE
|
190 |
+
|
191 |
+
/**
|
192 |
+
* Uses bitwise operators instead of table-lookups to turn 6-bit integers
|
193 |
+
* into 8-bit integers.
|
194 |
+
*
|
195 |
+
* Base64 character set:
|
196 |
+
* [A-Z] [a-z] [0-9] + /
|
197 |
+
* 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2b, 0x2f
|
198 |
+
*
|
199 |
+
* @param int $src
|
200 |
+
* @return int
|
201 |
+
*/
|
202 |
+
protected static function decode6Bits($src)
|
203 |
+
{
|
204 |
+
$ret = -1;
|
205 |
+
|
206 |
+
// if ($src > 0x40 && $src < 0x5b) $ret += $src - 0x41 + 1; // -64
|
207 |
+
$ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64);
|
208 |
+
|
209 |
+
// if ($src > 0x60 && $src < 0x7b) $ret += $src - 0x61 + 26 + 1; // -70
|
210 |
+
$ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 70);
|
211 |
+
|
212 |
+
// if ($src > 0x2f && $src < 0x3a) $ret += $src - 0x30 + 52 + 1; // 5
|
213 |
+
$ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 5);
|
214 |
+
|
215 |
+
// if ($src == 0x2b) $ret += 62 + 1;
|
216 |
+
$ret += (((0x2a - $src) & ($src - 0x2c)) >> 8) & 63;
|
217 |
+
|
218 |
+
// if ($src == 0x2f) ret += 63 + 1;
|
219 |
+
$ret += (((0x2e - $src) & ($src - 0x30)) >> 8) & 64;
|
220 |
+
|
221 |
+
return $ret;
|
222 |
+
}
|
223 |
+
|
224 |
+
/**
|
225 |
+
* Uses bitwise operators instead of table-lookups to turn 8-bit integers
|
226 |
+
* into 6-bit integers.
|
227 |
+
*
|
228 |
+
* @param int $src
|
229 |
+
* @return string
|
230 |
+
*/
|
231 |
+
protected static function encode6Bits($src)
|
232 |
+
{
|
233 |
+
$diff = 0x41;
|
234 |
+
|
235 |
+
// if ($src > 25) $diff += 0x61 - 0x41 - 26; // 6
|
236 |
+
$diff += ((25 - $src) >> 8) & 6;
|
237 |
+
|
238 |
+
// if ($src > 51) $diff += 0x30 - 0x61 - 26; // -75
|
239 |
+
$diff -= ((51 - $src) >> 8) & 75;
|
240 |
+
|
241 |
+
// if ($src > 61) $diff += 0x2b - 0x30 - 10; // -15
|
242 |
+
$diff -= ((61 - $src) >> 8) & 15;
|
243 |
+
|
244 |
+
// if ($src > 62) $diff += 0x2f - 0x2b - 1; // 3
|
245 |
+
$diff += ((62 - $src) >> 8) & 3;
|
246 |
+
|
247 |
+
return pack('C', $src + $diff);
|
248 |
+
}
|
249 |
+
}
|
crypto/vendor/paragonie/sodium_compat/src/Core/Base64/UrlSafe.php
ADDED
@@ -0,0 +1,248 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Class ParagonIE_Sodium_Core_Base64UrlSafe
|
6 |
+
*
|
7 |
+
* Copyright (c) 2016 - 2018 Paragon Initiative Enterprises.
|
8 |
+
* Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
|
9 |
+
*/
|
10 |
+
class ParagonIE_Sodium_Core_Base64_UrlSafe
|
11 |
+
{
|
12 |
+
// COPY ParagonIE_Sodium_Core_Base64_Common STARTING HERE
|
13 |
+
/**
|
14 |
+
* Encode into Base64
|
15 |
+
*
|
16 |
+
* Base64 character set "[A-Z][a-z][0-9]+/"
|
17 |
+
*
|
18 |
+
* @param string $src
|
19 |
+
* @return string
|
20 |
+
* @throws TypeError
|
21 |
+
*/
|
22 |
+
public static function encode($src)
|
23 |
+
{
|
24 |
+
return self::doEncode($src, true);
|
25 |
+
}
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Encode into Base64, no = padding
|
29 |
+
*
|
30 |
+
* Base64 character set "[A-Z][a-z][0-9]+/"
|
31 |
+
*
|
32 |
+
* @param string $src
|
33 |
+
* @return string
|
34 |
+
* @throws TypeError
|
35 |
+
*/
|
36 |
+
public static function encodeUnpadded($src)
|
37 |
+
{
|
38 |
+
return self::doEncode($src, false);
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @param string $src
|
43 |
+
* @param bool $pad Include = padding?
|
44 |
+
* @return string
|
45 |
+
* @throws TypeError
|
46 |
+
*/
|
47 |
+
protected static function doEncode($src, $pad = true)
|
48 |
+
{
|
49 |
+
$dest = '';
|
50 |
+
$srcLen = ParagonIE_Sodium_Core_Util::strlen($src);
|
51 |
+
// Main loop (no padding):
|
52 |
+
for ($i = 0; $i + 3 <= $srcLen; $i += 3) {
|
53 |
+
/** @var array<int, int> $chunk */
|
54 |
+
$chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 3));
|
55 |
+
$b0 = $chunk[1];
|
56 |
+
$b1 = $chunk[2];
|
57 |
+
$b2 = $chunk[3];
|
58 |
+
|
59 |
+
$dest .=
|
60 |
+
self::encode6Bits( $b0 >> 2 ) .
|
61 |
+
self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
|
62 |
+
self::encode6Bits((($b1 << 2) | ($b2 >> 6)) & 63) .
|
63 |
+
self::encode6Bits( $b2 & 63);
|
64 |
+
}
|
65 |
+
// The last chunk, which may have padding:
|
66 |
+
if ($i < $srcLen) {
|
67 |
+
/** @var array<int, int> $chunk */
|
68 |
+
$chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i));
|
69 |
+
$b0 = $chunk[1];
|
70 |
+
if ($i + 1 < $srcLen) {
|
71 |
+
$b1 = $chunk[2];
|
72 |
+
$dest .=
|
73 |
+
self::encode6Bits($b0 >> 2) .
|
74 |
+
self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
|
75 |
+
self::encode6Bits(($b1 << 2) & 63);
|
76 |
+
if ($pad) {
|
77 |
+
$dest .= '=';
|
78 |
+
}
|
79 |
+
} else {
|
80 |
+
$dest .=
|
81 |
+
self::encode6Bits( $b0 >> 2) .
|
82 |
+
self::encode6Bits(($b0 << 4) & 63);
|
83 |
+
if ($pad) {
|
84 |
+
$dest .= '==';
|
85 |
+
}
|
86 |
+
}
|
87 |
+
}
|
88 |
+
return $dest;
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* decode from base64 into binary
|
93 |
+
*
|
94 |
+
* Base64 character set "./[A-Z][a-z][0-9]"
|
95 |
+
*
|
96 |
+
* @param string $src
|
97 |
+
* @param bool $strictPadding
|
98 |
+
* @return string
|
99 |
+
* @throws RangeException
|
100 |
+
* @throws TypeError
|
101 |
+
* @psalm-suppress RedundantCondition
|
102 |
+
*/
|
103 |
+
public static function decode($src, $strictPadding = false)
|
104 |
+
{
|
105 |
+
// Remove padding
|
106 |
+
$srcLen = ParagonIE_Sodium_Core_Util::strlen($src);
|
107 |
+
if ($srcLen === 0) {
|
108 |
+
return '';
|
109 |
+
}
|
110 |
+
|
111 |
+
if ($strictPadding) {
|
112 |
+
if (($srcLen & 3) === 0) {
|
113 |
+
if ($src[$srcLen - 1] === '=') {
|
114 |
+
$srcLen--;
|
115 |
+
if ($src[$srcLen - 1] === '=') {
|
116 |
+
$srcLen--;
|
117 |
+
}
|
118 |
+
}
|
119 |
+
}
|
120 |
+
if (($srcLen & 3) === 1) {
|
121 |
+
throw new RangeException(
|
122 |
+
'Incorrect padding'
|
123 |
+
);
|
124 |
+
}
|
125 |
+
if ($src[$srcLen - 1] === '=') {
|
126 |
+
throw new RangeException(
|
127 |
+
'Incorrect padding'
|
128 |
+
);
|
129 |
+
}
|
130 |
+
} else {
|
131 |
+
$src = rtrim($src, '=');
|
132 |
+
$srcLen = ParagonIE_Sodium_Core_Util::strlen($src);
|
133 |
+
}
|
134 |
+
|
135 |
+
$err = 0;
|
136 |
+
$dest = '';
|
137 |
+
// Main loop (no padding):
|
138 |
+
for ($i = 0; $i + 4 <= $srcLen; $i += 4) {
|
139 |
+
/** @var array<int, int> $chunk */
|
140 |
+
$chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 4));
|
141 |
+
$c0 = self::decode6Bits($chunk[1]);
|
142 |
+
$c1 = self::decode6Bits($chunk[2]);
|
143 |
+
$c2 = self::decode6Bits($chunk[3]);
|
144 |
+
$c3 = self::decode6Bits($chunk[4]);
|
145 |
+
|
146 |
+
$dest .= pack(
|
147 |
+
'CCC',
|
148 |
+
((($c0 << 2) | ($c1 >> 4)) & 0xff),
|
149 |
+
((($c1 << 4) | ($c2 >> 2)) & 0xff),
|
150 |
+
((($c2 << 6) | $c3) & 0xff)
|
151 |
+
);
|
152 |
+
$err |= ($c0 | $c1 | $c2 | $c3) >> 8;
|
153 |
+
}
|
154 |
+
// The last chunk, which may have padding:
|
155 |
+
if ($i < $srcLen) {
|
156 |
+
/** @var array<int, int> $chunk */
|
157 |
+
$chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i));
|
158 |
+
$c0 = self::decode6Bits($chunk[1]);
|
159 |
+
|
160 |
+
if ($i + 2 < $srcLen) {
|
161 |
+
$c1 = self::decode6Bits($chunk[2]);
|
162 |
+
$c2 = self::decode6Bits($chunk[3]);
|
163 |
+
$dest .= pack(
|
164 |
+
'CC',
|
165 |
+
((($c0 << 2) | ($c1 >> 4)) & 0xff),
|
166 |
+
((($c1 << 4) | ($c2 >> 2)) & 0xff)
|
167 |
+
);
|
168 |
+
$err |= ($c0 | $c1 | $c2) >> 8;
|
169 |
+
} elseif ($i + 1 < $srcLen) {
|
170 |
+
$c1 = self::decode6Bits($chunk[2]);
|
171 |
+
$dest .= pack(
|
172 |
+
'C',
|
173 |
+
((($c0 << 2) | ($c1 >> 4)) & 0xff)
|
174 |
+
);
|
175 |
+
$err |= ($c0 | $c1) >> 8;
|
176 |
+
} elseif ($i < $srcLen && $strictPadding) {
|
177 |
+
$err |= 1;
|
178 |
+
}
|
179 |
+
}
|
180 |
+
/** @var bool $check */
|
181 |
+
$check = ($err === 0);
|
182 |
+
if (!$check) {
|
183 |
+
throw new RangeException(
|
184 |
+
'Base64::decode() only expects characters in the correct base64 alphabet'
|
185 |
+
);
|
186 |
+
}
|
187 |
+
return $dest;
|
188 |
+
}
|
189 |
+
// COPY ParagonIE_Sodium_Core_Base64_Common ENDING HERE
|
190 |
+
/**
|
191 |
+
* Uses bitwise operators instead of table-lookups to turn 6-bit integers
|
192 |
+
* into 8-bit integers.
|
193 |
+
*
|
194 |
+
* Base64 character set:
|
195 |
+
* [A-Z] [a-z] [0-9] + /
|
196 |
+
* 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2b, 0x2f
|
197 |
+
*
|
198 |
+
* @param int $src
|
199 |
+
* @return int
|
200 |
+
*/
|
201 |
+
protected static function decode6Bits($src)
|
202 |
+
{
|
203 |
+
$ret = -1;
|
204 |
+
|
205 |
+
// if ($src > 0x40 && $src < 0x5b) $ret += $src - 0x41 + 1; // -64
|
206 |
+
$ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64);
|
207 |
+
|
208 |
+
// if ($src > 0x60 && $src < 0x7b) $ret += $src - 0x61 + 26 + 1; // -70
|
209 |
+
$ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 70);
|
210 |
+
|
211 |
+
// if ($src > 0x2f && $src < 0x3a) $ret += $src - 0x30 + 52 + 1; // 5
|
212 |
+
$ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 5);
|
213 |
+
|
214 |
+
// if ($src == 0x2c) $ret += 62 + 1;
|
215 |
+
$ret += (((0x2c - $src) & ($src - 0x2e)) >> 8) & 63;
|
216 |
+
|
217 |
+
// if ($src == 0x5f) ret += 63 + 1;
|
218 |
+
$ret += (((0x5e - $src) & ($src - 0x60)) >> 8) & 64;
|
219 |
+
|
220 |
+
return $ret;
|
221 |
+
}
|
222 |
+
|
223 |
+
/**
|
224 |
+
* Uses bitwise operators instead of table-lookups to turn 8-bit integers
|
225 |
+
* into 6-bit integers.
|
226 |
+
*
|
227 |
+
* @param int $src
|
228 |
+
* @return string
|
229 |
+
*/
|
230 |
+
protected static function encode6Bits($src)
|
231 |
+
{
|
232 |
+
$diff = 0x41;
|
233 |
+
|
234 |
+
// if ($src > 25) $diff += 0x61 - 0x41 - 26; // 6
|
235 |
+
$diff += ((25 - $src) >> 8) & 6;
|
236 |
+
|
237 |
+
// if ($src > 51) $diff += 0x30 - 0x61 - 26; // -75
|
238 |
+
$diff -= ((51 - $src) >> 8) & 75;
|
239 |
+
|
240 |
+
// if ($src > 61) $diff += 0x2d - 0x30 - 10; // -13
|
241 |
+
$diff -= ((61 - $src) >> 8) & 13;
|
242 |
+
|
243 |
+
// if ($src > 62) $diff += 0x5f - 0x2b - 1; // 3
|
244 |
+
$diff += ((62 - $src) >> 8) & 49;
|
245 |
+
|
246 |
+
return pack('C', $src + $diff);
|
247 |
+
}
|
248 |
+
}
|
crypto/vendor/paragonie/sodium_compat/src/Core/Ed25519.php
CHANGED
@@ -277,7 +277,7 @@ abstract class ParagonIE_Sodium_Core_Ed25519 extends ParagonIE_Sodium_Core_Curve
|
|
277 |
if (self::strlen($sig) < 64) {
|
278 |
throw new SodiumException('Signature is too short');
|
279 |
}
|
280 |
-
if (self::check_S_lt_L(self::substr($sig, 32, 32))) {
|
281 |
throw new SodiumException('S < L - Invalid signature');
|
282 |
}
|
283 |
if (self::small_order($sig)) {
|
277 |
if (self::strlen($sig) < 64) {
|
278 |
throw new SodiumException('Signature is too short');
|
279 |
}
|
280 |
+
if ((self::chrToInt($sig[63]) & 240) && self::check_S_lt_L(self::substr($sig, 32, 32))) {
|
281 |
throw new SodiumException('S < L - Invalid signature');
|
282 |
}
|
283 |
if (self::small_order($sig)) {
|
crypto/vendor/paragonie/sodium_compat/src/Core/Poly1305/State.php
CHANGED
@@ -80,6 +80,29 @@ class ParagonIE_Sodium_Core_Poly1305_State extends ParagonIE_Sodium_Core_Util
|
|
80 |
$this->final = false;
|
81 |
}
|
82 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
/**
|
84 |
* @internal You should not use this directly from another application
|
85 |
*
|
@@ -91,6 +114,9 @@ class ParagonIE_Sodium_Core_Poly1305_State extends ParagonIE_Sodium_Core_Util
|
|
91 |
public function update($message = '')
|
92 |
{
|
93 |
$bytes = self::strlen($message);
|
|
|
|
|
|
|
94 |
|
95 |
/* handle leftover */
|
96 |
if ($this->leftover) {
|
@@ -112,7 +138,7 @@ class ParagonIE_Sodium_Core_Poly1305_State extends ParagonIE_Sodium_Core_Util
|
|
112 |
}
|
113 |
|
114 |
$this->blocks(
|
115 |
-
|
116 |
ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE
|
117 |
);
|
118 |
$this->leftover = 0;
|
@@ -297,7 +323,7 @@ class ParagonIE_Sodium_Core_Poly1305_State extends ParagonIE_Sodium_Core_Util
|
|
297 |
$this->final = true;
|
298 |
$this->blocks(
|
299 |
self::substr(
|
300 |
-
|
301 |
0,
|
302 |
ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE
|
303 |
),
|
80 |
$this->final = false;
|
81 |
}
|
82 |
|
83 |
+
/**
|
84 |
+
* Zero internal buffer upon destruction
|
85 |
+
*/
|
86 |
+
public function __destruct()
|
87 |
+
{
|
88 |
+
$this->r[0] ^= $this->r[0];
|
89 |
+
$this->r[1] ^= $this->r[1];
|
90 |
+
$this->r[2] ^= $this->r[2];
|
91 |
+
$this->r[3] ^= $this->r[3];
|
92 |
+
$this->r[4] ^= $this->r[4];
|
93 |
+
$this->h[0] ^= $this->h[0];
|
94 |
+
$this->h[1] ^= $this->h[1];
|
95 |
+
$this->h[2] ^= $this->h[2];
|
96 |
+
$this->h[3] ^= $this->h[3];
|
97 |
+
$this->h[4] ^= $this->h[4];
|
98 |
+
$this->pad[0] ^= $this->pad[0];
|
99 |
+
$this->pad[1] ^= $this->pad[1];
|
100 |
+
$this->pad[2] ^= $this->pad[2];
|
101 |
+
$this->pad[3] ^= $this->pad[3];
|
102 |
+
$this->leftover = 0;
|
103 |
+
$this->final = true;
|
104 |
+
}
|
105 |
+
|
106 |
/**
|
107 |
* @internal You should not use this directly from another application
|
108 |
*
|
114 |
public function update($message = '')
|
115 |
{
|
116 |
$bytes = self::strlen($message);
|
117 |
+
if ($bytes < 1) {
|
118 |
+
return $this;
|
119 |
+
}
|
120 |
|
121 |
/* handle leftover */
|
122 |
if ($this->leftover) {
|
138 |
}
|
139 |
|
140 |
$this->blocks(
|
141 |
+
self::intArrayToString($this->buffer),
|
142 |
ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE
|
143 |
);
|
144 |
$this->leftover = 0;
|
323 |
$this->final = true;
|
324 |
$this->blocks(
|
325 |
self::substr(
|
326 |
+
self::intArrayToString($this->buffer),
|
327 |
0,
|
328 |
ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE
|
329 |
),
|
crypto/vendor/paragonie/sodium_compat/src/Core/SecretStream/State.php
ADDED
@@ -0,0 +1,164 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Class ParagonIE_Sodium_Core_SecretStream_State
|
6 |
+
*/
|
7 |
+
class ParagonIE_Sodium_Core_SecretStream_State
|
8 |
+
{
|
9 |
+
/** @var string $key */
|
10 |
+
protected $key;
|
11 |
+
|
12 |
+
/** @var int $counter */
|
13 |
+
protected $counter;
|
14 |
+
|
15 |
+
/** @var string $nonce */
|
16 |
+
protected $nonce;
|
17 |
+
|
18 |
+
/** @var string $_pad */
|
19 |
+
protected $_pad;
|
20 |
+
|
21 |
+
/**
|
22 |
+
* ParagonIE_Sodium_Core_SecretStream_State constructor.
|
23 |
+
* @param string $key
|
24 |
+
* @param string|null $nonce
|
25 |
+
*/
|
26 |
+
public function __construct($key, $nonce = null)
|
27 |
+
{
|
28 |
+
$this->key = $key;
|
29 |
+
$this->counter = 1;
|
30 |
+
if (is_null($nonce)) {
|
31 |
+
$nonce = str_repeat("\0", 12);
|
32 |
+
}
|
33 |
+
$this->nonce = str_pad($nonce, 12, "\0", STR_PAD_RIGHT);;
|
34 |
+
$this->_pad = str_repeat("\0", 4);
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* @return self
|
39 |
+
*/
|
40 |
+
public function counterReset()
|
41 |
+
{
|
42 |
+
$this->counter = 1;
|
43 |
+
$this->_pad = str_repeat("\0", 4);
|
44 |
+
return $this;
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* @return string
|
49 |
+
*/
|
50 |
+
public function getKey()
|
51 |
+
{
|
52 |
+
return $this->key;
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* @return string
|
57 |
+
*/
|
58 |
+
public function getCounter()
|
59 |
+
{
|
60 |
+
return ParagonIE_Sodium_Core_Util::store32_le($this->counter);
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* @return string
|
65 |
+
*/
|
66 |
+
public function getNonce()
|
67 |
+
{
|
68 |
+
if (!is_string($this->nonce)) {
|
69 |
+
$this->nonce = str_repeat("\0", 12);
|
70 |
+
}
|
71 |
+
if (ParagonIE_Sodium_Core_Util::strlen($this->nonce) !== 12) {
|
72 |
+
$this->nonce = str_pad($this->nonce, 12, "\0", STR_PAD_RIGHT);
|
73 |
+
}
|
74 |
+
return $this->nonce;
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* @return string
|
79 |
+
*/
|
80 |
+
public function getCombinedNonce()
|
81 |
+
{
|
82 |
+
return $this->getCounter() .
|
83 |
+
ParagonIE_Sodium_Core_Util::substr($this->getNonce(), 0, 8);
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* @return self
|
88 |
+
*/
|
89 |
+
public function incrementCounter()
|
90 |
+
{
|
91 |
+
++$this->counter;
|
92 |
+
return $this;
|
93 |
+
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* @return bool
|
97 |
+
*/
|
98 |
+
public function needsRekey()
|
99 |
+
{
|
100 |
+
return ($this->counter & 0xffff) === 0;
|
101 |
+
}
|
102 |
+
|
103 |
+
/**
|
104 |
+
* @param string $newKeyAndNonce
|
105 |
+
* @return self
|
106 |
+
*/
|
107 |
+
public function rekey($newKeyAndNonce)
|
108 |
+
{
|
109 |
+
$this->key = ParagonIE_Sodium_Core_Util::substr($newKeyAndNonce, 0, 32);
|
110 |
+
$this->nonce = str_pad(
|
111 |
+
ParagonIE_Sodium_Core_Util::substr($newKeyAndNonce, 32),
|
112 |
+
12,
|
113 |
+
"\0",
|
114 |
+
STR_PAD_RIGHT
|
115 |
+
);
|
116 |
+
return $this;
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* @param string $str
|
121 |
+
* @return self
|
122 |
+
*/
|
123 |
+
public function xorNonce($str)
|
124 |
+
{
|
125 |
+
$this->nonce = ParagonIE_Sodium_Core_Util::xorStrings(
|
126 |
+
$this->getNonce(),
|
127 |
+
str_pad(
|
128 |
+
ParagonIE_Sodium_Core_Util::substr($str, 0, 8),
|
129 |
+
12,
|
130 |
+
"\0",
|
131 |
+
STR_PAD_RIGHT
|
132 |
+
)
|
133 |
+
);
|
134 |
+
return $this;
|
135 |
+
}
|
136 |
+
|
137 |
+
/**
|
138 |
+
* @param string $string
|
139 |
+
* @return self
|
140 |
+
*/
|
141 |
+
public static function fromString($string)
|
142 |
+
{
|
143 |
+
$state = new ParagonIE_Sodium_Core_SecretStream_State(
|
144 |
+
ParagonIE_Sodium_Core_Util::substr($string, 0, 32)
|
145 |
+
);
|
146 |
+
$state->counter = ParagonIE_Sodium_Core_Util::load_4(
|
147 |
+
ParagonIE_Sodium_Core_Util::substr($string, 32, 4)
|
148 |
+
);
|
149 |
+
$state->nonce = ParagonIE_Sodium_Core_Util::substr($string, 36, 12);
|
150 |
+
$state->_pad = ParagonIE_Sodium_Core_Util::substr($string, 48, 8);
|
151 |
+
return $state;
|
152 |
+
}
|
153 |
+
|
154 |
+
/**
|
155 |
+
* @return string
|
156 |
+
*/
|
157 |
+
public function toString()
|
158 |
+
{
|
159 |
+
return $this->key .
|
160 |
+
$this->getCounter() .
|
161 |
+
$this->nonce .
|
162 |
+
$this->_pad;
|
163 |
+
}
|
164 |
+
}
|
crypto/vendor/paragonie/sodium_compat/src/Core/Util.php
CHANGED
@@ -912,6 +912,7 @@ abstract class ParagonIE_Sodium_Core_Util
|
|
912 |
|
913 |
if ($mbstring === null) {
|
914 |
$mbstring = extension_loaded('mbstring')
|
|
|
915 |
&&
|
916 |
((int) (ini_get('mbstring.func_overload')) & MB_OVERLOAD_STRING);
|
917 |
}
|
912 |
|
913 |
if ($mbstring === null) {
|
914 |
$mbstring = extension_loaded('mbstring')
|
915 |
+
&& defined('MB_OVERLOAD_STRING')
|
916 |
&&
|
917 |
((int) (ini_get('mbstring.func_overload')) & MB_OVERLOAD_STRING);
|
918 |
}
|
crypto/vendor/paragonie/sodium_compat/src/Core/XChaCha20.php
CHANGED
@@ -37,6 +37,33 @@ class ParagonIE_Sodium_Core_XChaCha20 extends ParagonIE_Sodium_Core_HChaCha20
|
|
37 |
);
|
38 |
}
|
39 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
/**
|
41 |
* @internal You should not use this directly from another application
|
42 |
*
|
@@ -62,4 +89,30 @@ class ParagonIE_Sodium_Core_XChaCha20 extends ParagonIE_Sodium_Core_HChaCha20
|
|
62 |
$message
|
63 |
);
|
64 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
}
|
37 |
);
|
38 |
}
|
39 |
|
40 |
+
/**
|
41 |
+
* @internal You should not use this directly from another application
|
42 |
+
*
|
43 |
+
* @param int $len
|
44 |
+
* @param string $nonce
|
45 |
+
* @param string $key
|
46 |
+
* @return string
|
47 |
+
* @throws SodiumException
|
48 |
+
* @throws TypeError
|
49 |
+
*/
|
50 |
+
public static function ietfStream($len = 64, $nonce = '', $key = '')
|
51 |
+
{
|
52 |
+
if (self::strlen($nonce) !== 24) {
|
53 |
+
throw new SodiumException('Nonce must be 24 bytes long');
|
54 |
+
}
|
55 |
+
return self::encryptBytes(
|
56 |
+
new ParagonIE_Sodium_Core_ChaCha20_IetfCtx(
|
57 |
+
self::hChaCha20(
|
58 |
+
self::substr($nonce, 0, 16),
|
59 |
+
$key
|
60 |
+
),
|
61 |
+
"\x00\x00\x00\x00" . self::substr($nonce, 16, 8)
|
62 |
+
),
|
63 |
+
str_repeat("\x00", $len)
|
64 |
+
);
|
65 |
+
}
|
66 |
+
|
67 |
/**
|
68 |
* @internal You should not use this directly from another application
|
69 |
*
|
89 |
$message
|
90 |
);
|
91 |
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* @internal You should not use this directly from another application
|
95 |
+
*
|
96 |
+
* @param string $message
|
97 |
+
* @param string $nonce
|
98 |
+
* @param string $key
|
99 |
+
* @param string $ic
|
100 |
+
* @return string
|
101 |
+
* @throws SodiumException
|
102 |
+
* @throws TypeError
|
103 |
+
*/
|
104 |
+
public static function ietfStreamXorIc($message, $nonce = '', $key = '', $ic = '')
|
105 |
+
{
|
106 |
+
if (self::strlen($nonce) !== 24) {
|
107 |
+
throw new SodiumException('Nonce must be 24 bytes long');
|
108 |
+
}
|
109 |
+
return self::encryptBytes(
|
110 |
+
new ParagonIE_Sodium_Core_ChaCha20_IetfCtx(
|
111 |
+
self::hChaCha20(self::substr($nonce, 0, 16), $key),
|
112 |
+
"\x00\x00\x00\x00" . self::substr($nonce, 16, 8),
|
113 |
+
$ic
|
114 |
+
),
|
115 |
+
$message
|
116 |
+
);
|
117 |
+
}
|
118 |
}
|
crypto/vendor/paragonie/sodium_compat/src/Core32/BLAKE2b.php
CHANGED
@@ -224,12 +224,13 @@ abstract class ParagonIE_Sodium_Core32_BLAKE2b extends ParagonIE_Sodium_Core_Uti
|
|
224 |
*/
|
225 |
protected static function context()
|
226 |
{
|
227 |
-
$ctx = new SplFixedArray(
|
228 |
$ctx[0] = new SplFixedArray(8); // h
|
229 |
$ctx[1] = new SplFixedArray(2); // t
|
230 |
$ctx[2] = new SplFixedArray(2); // f
|
231 |
$ctx[3] = new SplFixedArray(256); // buf
|
232 |
$ctx[4] = 0; // buflen
|
|
|
233 |
|
234 |
for ($i = 8; $i--;) {
|
235 |
$ctx[0][$i] = self::$iv[$i];
|
@@ -483,6 +484,8 @@ abstract class ParagonIE_Sodium_Core32_BLAKE2b extends ParagonIE_Sodium_Core_Uti
|
|
483 |
*
|
484 |
* @param SplFixedArray|null $key
|
485 |
* @param int $outlen
|
|
|
|
|
486 |
* @return SplFixedArray
|
487 |
* @throws SodiumException
|
488 |
* @throws TypeError
|
@@ -492,8 +495,12 @@ abstract class ParagonIE_Sodium_Core32_BLAKE2b extends ParagonIE_Sodium_Core_Uti
|
|
492 |
* @psalm-suppress MixedArrayAssignment
|
493 |
* @psalm-suppress MixedMethodCall
|
494 |
*/
|
495 |
-
public static function init(
|
496 |
-
|
|
|
|
|
|
|
|
|
497 |
self::pseudoConstructor();
|
498 |
$klen = 0;
|
499 |
|
@@ -511,6 +518,7 @@ abstract class ParagonIE_Sodium_Core32_BLAKE2b extends ParagonIE_Sodium_Core_Uti
|
|
511 |
$ctx = self::context();
|
512 |
|
513 |
$p = new SplFixedArray(64);
|
|
|
514 |
for ($i = 64; --$i;) {
|
515 |
$p[$i] = 0;
|
516 |
}
|
@@ -520,11 +528,34 @@ abstract class ParagonIE_Sodium_Core32_BLAKE2b extends ParagonIE_Sodium_Core_Uti
|
|
520 |
$p[2] = 1; // fanout
|
521 |
$p[3] = 1; // depth
|
522 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
523 |
$ctx[0][0] = self::xor64(
|
524 |
$ctx[0][0],
|
525 |
self::load64($p, 0)
|
526 |
);
|
527 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
528 |
if ($klen > 0 && $key instanceof SplFixedArray) {
|
529 |
$block = new SplFixedArray(128);
|
530 |
for ($i = 128; $i--;) {
|
@@ -534,6 +565,7 @@ abstract class ParagonIE_Sodium_Core32_BLAKE2b extends ParagonIE_Sodium_Core_Uti
|
|
534 |
$block[$i] = $key[$i];
|
535 |
}
|
536 |
self::update($ctx, $block, 128);
|
|
|
537 |
}
|
538 |
|
539 |
return $ctx;
|
@@ -596,7 +628,7 @@ abstract class ParagonIE_Sodium_Core32_BLAKE2b extends ParagonIE_Sodium_Core_Uti
|
|
596 |
}
|
597 |
/** @var ParagonIE_Sodium_Core32_Int64 $ctxAi */
|
598 |
$ctxAi = $ctxA[$i];
|
599 |
-
$str .= $ctxAi->
|
600 |
}
|
601 |
|
602 |
# uint64_t t[2];
|
@@ -609,8 +641,8 @@ abstract class ParagonIE_Sodium_Core32_BLAKE2b extends ParagonIE_Sodium_Core_Uti
|
|
609 |
/** @var ParagonIE_Sodium_Core32_Int64 $ctxA2 */
|
610 |
$ctxA2 = $ctxA[1];
|
611 |
|
612 |
-
$str .= $ctxA1->
|
613 |
-
$str .= $ctxA2->
|
614 |
}
|
615 |
|
616 |
# uint8_t buf[2 * 128];
|
@@ -625,13 +657,16 @@ abstract class ParagonIE_Sodium_Core32_BLAKE2b extends ParagonIE_Sodium_Core_Uti
|
|
625 |
self::intToChr(($ctx4 >> 8) & 0xff),
|
626 |
self::intToChr(($ctx4 >> 16) & 0xff),
|
627 |
self::intToChr(($ctx4 >> 24) & 0xff),
|
|
|
|
|
628 |
self::intToChr(($ctx4 >> 32) & 0xff),
|
629 |
self::intToChr(($ctx4 >> 40) & 0xff),
|
630 |
self::intToChr(($ctx4 >> 48) & 0xff),
|
631 |
self::intToChr(($ctx4 >> 56) & 0xff)
|
|
|
632 |
));
|
633 |
# uint8_t last_node;
|
634 |
-
return $str . "\x00";
|
635 |
}
|
636 |
|
637 |
/**
|
@@ -653,7 +688,7 @@ abstract class ParagonIE_Sodium_Core32_BLAKE2b extends ParagonIE_Sodium_Core_Uti
|
|
653 |
|
654 |
# uint64_t h[8];
|
655 |
for ($i = 0; $i < 8; ++$i) {
|
656 |
-
$ctx[0][$i] = ParagonIE_Sodium_Core32_Int64::
|
657 |
self::substr($string, (($i << 3) + 0), 8)
|
658 |
);
|
659 |
}
|
@@ -661,10 +696,10 @@ abstract class ParagonIE_Sodium_Core32_BLAKE2b extends ParagonIE_Sodium_Core_Uti
|
|
661 |
# uint64_t t[2];
|
662 |
# uint64_t f[2];
|
663 |
for ($i = 1; $i < 3; ++$i) {
|
664 |
-
$ctx[$i][1] = ParagonIE_Sodium_Core32_Int64::
|
665 |
self::substr($string, 72 + (($i - 1) << 4), 8)
|
666 |
);
|
667 |
-
$ctx[$i][0] = ParagonIE_Sodium_Core32_Int64::
|
668 |
self::substr($string, 64 + (($i - 1) << 4), 8)
|
669 |
);
|
670 |
}
|
@@ -672,7 +707,6 @@ abstract class ParagonIE_Sodium_Core32_BLAKE2b extends ParagonIE_Sodium_Core_Uti
|
|
672 |
# uint8_t buf[2 * 128];
|
673 |
$ctx[3] = self::stringToSplFixedArray(self::substr($string, 96, 256));
|
674 |
|
675 |
-
|
676 |
# uint8_t buf[2 * 128];
|
677 |
$int = 0;
|
678 |
for ($i = 0; $i < 8; ++$i) {
|
224 |
*/
|
225 |
protected static function context()
|
226 |
{
|
227 |
+
$ctx = new SplFixedArray(6);
|
228 |
$ctx[0] = new SplFixedArray(8); // h
|
229 |
$ctx[1] = new SplFixedArray(2); // t
|
230 |
$ctx[2] = new SplFixedArray(2); // f
|
231 |
$ctx[3] = new SplFixedArray(256); // buf
|
232 |
$ctx[4] = 0; // buflen
|
233 |
+
$ctx[5] = 0; // last_node (uint8_t)
|
234 |
|
235 |
for ($i = 8; $i--;) {
|
236 |
$ctx[0][$i] = self::$iv[$i];
|
484 |
*
|
485 |
* @param SplFixedArray|null $key
|
486 |
* @param int $outlen
|
487 |
+
* @param SplFixedArray|null $salt
|
488 |
+
* @param SplFixedArray|null $personal
|
489 |
* @return SplFixedArray
|
490 |
* @throws SodiumException
|
491 |
* @throws TypeError
|
495 |
* @psalm-suppress MixedArrayAssignment
|
496 |
* @psalm-suppress MixedMethodCall
|
497 |
*/
|
498 |
+
public static function init(
|
499 |
+
$key = null,
|
500 |
+
$outlen = 64,
|
501 |
+
$salt = null,
|
502 |
+
$personal = null
|
503 |
+
) {
|
504 |
self::pseudoConstructor();
|
505 |
$klen = 0;
|
506 |
|
518 |
$ctx = self::context();
|
519 |
|
520 |
$p = new SplFixedArray(64);
|
521 |
+
// Zero our param buffer...
|
522 |
for ($i = 64; --$i;) {
|
523 |
$p[$i] = 0;
|
524 |
}
|
528 |
$p[2] = 1; // fanout
|
529 |
$p[3] = 1; // depth
|
530 |
|
531 |
+
if ($salt instanceof SplFixedArray) {
|
532 |
+
// salt: [32] through [47]
|
533 |
+
for ($i = 0; $i < 16; ++$i) {
|
534 |
+
$p[32 + $i] = (int) $salt[$i];
|
535 |
+
}
|
536 |
+
}
|
537 |
+
if ($personal instanceof SplFixedArray) {
|
538 |
+
// personal: [48] through [63]
|
539 |
+
for ($i = 0; $i < 16; ++$i) {
|
540 |
+
$p[48 + $i] = (int) $personal[$i];
|
541 |
+
}
|
542 |
+
}
|
543 |
+
|
544 |
$ctx[0][0] = self::xor64(
|
545 |
$ctx[0][0],
|
546 |
self::load64($p, 0)
|
547 |
);
|
548 |
|
549 |
+
if ($salt instanceof SplFixedArray || $personal instanceof SplFixedArray) {
|
550 |
+
// We need to do what blake2b_init_param() does:
|
551 |
+
for ($i = 1; $i < 8; ++$i) {
|
552 |
+
$ctx[0][$i] = self::xor64(
|
553 |
+
$ctx[0][$i],
|
554 |
+
self::load64($p, $i << 3)
|
555 |
+
);
|
556 |
+
}
|
557 |
+
}
|
558 |
+
|
559 |
if ($klen > 0 && $key instanceof SplFixedArray) {
|
560 |
$block = new SplFixedArray(128);
|
561 |
for ($i = 128; $i--;) {
|
565 |
$block[$i] = $key[$i];
|
566 |
}
|
567 |
self::update($ctx, $block, 128);
|
568 |
+
$ctx[4] = 128;
|
569 |
}
|
570 |
|
571 |
return $ctx;
|
628 |
}
|
629 |
/** @var ParagonIE_Sodium_Core32_Int64 $ctxAi */
|
630 |
$ctxAi = $ctxA[$i];
|
631 |
+
$str .= $ctxAi->toReverseString();
|
632 |
}
|
633 |
|
634 |
# uint64_t t[2];
|
641 |
/** @var ParagonIE_Sodium_Core32_Int64 $ctxA2 */
|
642 |
$ctxA2 = $ctxA[1];
|
643 |
|
644 |
+
$str .= $ctxA1->toReverseString();
|
645 |
+
$str .= $ctxA2->toReverseString();
|
646 |
}
|
647 |
|
648 |
# uint8_t buf[2 * 128];
|
657 |
self::intToChr(($ctx4 >> 8) & 0xff),
|
658 |
self::intToChr(($ctx4 >> 16) & 0xff),
|
659 |
self::intToChr(($ctx4 >> 24) & 0xff),
|
660 |
+
"\x00\x00\x00\x00"
|
661 |
+
/*
|
662 |
self::intToChr(($ctx4 >> 32) & 0xff),
|
663 |
self::intToChr(($ctx4 >> 40) & 0xff),
|
664 |
self::intToChr(($ctx4 >> 48) & 0xff),
|
665 |
self::intToChr(($ctx4 >> 56) & 0xff)
|
666 |
+
*/
|
667 |
));
|
668 |
# uint8_t last_node;
|
669 |
+
return $str . self::intToChr($ctx[5]) . str_repeat("\x00", 23);
|
670 |
}
|
671 |
|
672 |
/**
|
688 |
|
689 |
# uint64_t h[8];
|
690 |
for ($i = 0; $i < 8; ++$i) {
|
691 |
+
$ctx[0][$i] = ParagonIE_Sodium_Core32_Int64::fromReverseString(
|
692 |
self::substr($string, (($i << 3) + 0), 8)
|
693 |
);
|
694 |
}
|
696 |
# uint64_t t[2];
|
697 |
# uint64_t f[2];
|
698 |
for ($i = 1; $i < 3; ++$i) {
|
699 |
+
$ctx[$i][1] = ParagonIE_Sodium_Core32_Int64::fromReverseString(
|
700 |
self::substr($string, 72 + (($i - 1) << 4), 8)
|
701 |
);
|
702 |
+
$ctx[$i][0] = ParagonIE_Sodium_Core32_Int64::fromReverseString(
|
703 |
self::substr($string, 64 + (($i - 1) << 4), 8)
|
704 |
);
|
705 |
}
|
707 |
# uint8_t buf[2 * 128];
|
708 |
$ctx[3] = self::stringToSplFixedArray(self::substr($string, 96, 256));
|
709 |
|
|
|
710 |
# uint8_t buf[2 * 128];
|
711 |
$int = 0;
|
712 |
for ($i = 0; $i < 8; ++$i) {
|
crypto/vendor/paragonie/sodium_compat/src/Core32/Ed25519.php
CHANGED
@@ -279,7 +279,7 @@ abstract class ParagonIE_Sodium_Core32_Ed25519 extends ParagonIE_Sodium_Core32_C
|
|
279 |
if (self::strlen($sig) < 64) {
|
280 |
throw new SodiumException('Signature is too short');
|
281 |
}
|
282 |
-
if (self::check_S_lt_L(self::substr($sig, 32, 32))) {
|
283 |
throw new SodiumException('S < L - Invalid signature');
|
284 |
}
|
285 |
if (self::small_order($sig)) {
|
279 |
if (self::strlen($sig) < 64) {
|
280 |
throw new SodiumException('Signature is too short');
|
281 |
}
|
282 |
+
if ((self::chrToInt($sig[63]) & 240) && self::check_S_lt_L(self::substr($sig, 32, 32))) {
|
283 |
throw new SodiumException('S < L - Invalid signature');
|
284 |
}
|
285 |
if (self::small_order($sig)) {
|
crypto/vendor/paragonie/sodium_compat/src/Core32/Poly1305/State.php
CHANGED
@@ -143,7 +143,7 @@ class ParagonIE_Sodium_Core32_Poly1305_State extends ParagonIE_Sodium_Core32_Uti
|
|
143 |
}
|
144 |
|
145 |
$this->blocks(
|
146 |
-
|
147 |
ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE
|
148 |
);
|
149 |
$this->leftover = 0;
|
@@ -347,7 +347,7 @@ class ParagonIE_Sodium_Core32_Poly1305_State extends ParagonIE_Sodium_Core32_Uti
|
|
347 |
$this->final = true;
|
348 |
$this->blocks(
|
349 |
self::substr(
|
350 |
-
|
351 |
0,
|
352 |
ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE
|
353 |
),
|
143 |
}
|
144 |
|
145 |
$this->blocks(
|
146 |
+
self::intArrayToString($this->buffer),
|
147 |
ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE
|
148 |
);
|
149 |
$this->leftover = 0;
|
347 |
$this->final = true;
|
348 |
$this->blocks(
|
349 |
self::substr(
|
350 |
+
self::intArrayToString($this->buffer),
|
351 |
0,
|
352 |
ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE
|
353 |
),
|
crypto/vendor/paragonie/sodium_compat/src/Core32/SecretStream/State.php
ADDED
@@ -0,0 +1,164 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Class ParagonIE_Sodium_Core32_SecretStream_State
|
6 |
+
*/
|
7 |
+
class ParagonIE_Sodium_Core32_SecretStream_State
|
8 |
+
{
|
9 |
+
/** @var string $key */
|
10 |
+
protected $key;
|
11 |
+
|
12 |
+
/** @var int $counter */
|
13 |
+
protected $counter;
|
14 |
+
|
15 |
+
/** @var string $nonce */
|
16 |
+
protected $nonce;
|
17 |
+
|
18 |
+
/** @var string $_pad */
|
19 |
+
protected $_pad;
|
20 |
+
|
21 |
+
/**
|
22 |
+
* ParagonIE_Sodium_Core32_SecretStream_State constructor.
|
23 |
+
* @param string $key
|
24 |
+
* @param string|null $nonce
|
25 |
+
*/
|
26 |
+
public function __construct($key, $nonce = null)
|
27 |
+
{
|
28 |
+
$this->key = $key;
|
29 |
+
$this->counter = 1;
|
30 |
+
if (is_null($nonce)) {
|
31 |
+
$nonce = str_repeat("\0", 12);
|
32 |
+
}
|
33 |
+
$this->nonce = str_pad($nonce, 12, "\0", STR_PAD_RIGHT);;
|
34 |
+
$this->_pad = str_repeat("\0", 4);
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* @return self
|
39 |
+
*/
|
40 |
+
public function counterReset()
|
41 |
+
{
|
42 |
+
$this->counter = 1;
|
43 |
+
$this->_pad = str_repeat("\0", 4);
|
44 |
+
return $this;
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* @return string
|
49 |
+
*/
|
50 |
+
public function getKey()
|
51 |
+
{
|
52 |
+
return $this->key;
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* @return string
|
57 |
+
*/
|
58 |
+
public function getCounter()
|
59 |
+
{
|
60 |
+
return ParagonIE_Sodium_Core32_Util::store32_le($this->counter);
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* @return string
|
65 |
+
*/
|
66 |
+
public function getNonce()
|
67 |
+
{
|
68 |
+
if (!is_string($this->nonce)) {
|
69 |
+
$this->nonce = str_repeat("\0", 12);
|
70 |
+
}
|
71 |
+
if (ParagonIE_Sodium_Core32_Util::strlen($this->nonce) !== 12) {
|
72 |
+
$this->nonce = str_pad($this->nonce, 12, "\0", STR_PAD_RIGHT);
|
73 |
+
}
|
74 |
+
return $this->nonce;
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* @return string
|
79 |
+
*/
|
80 |
+
public function getCombinedNonce()
|
81 |
+
{
|
82 |
+
return $this->getCounter() .
|
83 |
+
ParagonIE_Sodium_Core32_Util::substr($this->getNonce(), 0, 8);
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* @return self
|
88 |
+
*/
|
89 |
+
public function incrementCounter()
|
90 |
+
{
|
91 |
+
++$this->counter;
|
92 |
+
return $this;
|
93 |
+
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* @return bool
|
97 |
+
*/
|
98 |
+
public function needsRekey()
|
99 |
+
{
|
100 |
+
return ($this->counter & 0xffff) === 0;
|
101 |
+
}
|
102 |
+
|
103 |
+
/**
|
104 |
+
* @param string $newKeyAndNonce
|
105 |
+
* @return self
|
106 |
+
*/
|
107 |
+
public function rekey($newKeyAndNonce)
|
108 |
+
{
|
109 |
+
$this->key = ParagonIE_Sodium_Core32_Util::substr($newKeyAndNonce, 0, 32);
|
110 |
+
$this->nonce = str_pad(
|
111 |
+
ParagonIE_Sodium_Core32_Util::substr($newKeyAndNonce, 32),
|
112 |
+
12,
|
113 |
+
"\0",
|
114 |
+
STR_PAD_RIGHT
|
115 |
+
);
|
116 |
+
return $this;
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* @param string $str
|
121 |
+
* @return self
|
122 |
+
*/
|
123 |
+
public function xorNonce($str)
|
124 |
+
{
|
125 |
+
$this->nonce = ParagonIE_Sodium_Core32_Util::xorStrings(
|
126 |
+
$this->getNonce(),
|
127 |
+
str_pad(
|
128 |
+
ParagonIE_Sodium_Core32_Util::substr($str, 0, 8),
|
129 |
+
12,
|
130 |
+
"\0",
|
131 |
+
STR_PAD_RIGHT
|
132 |
+
)
|
133 |
+
);
|
134 |
+
return $this;
|
135 |
+
}
|
136 |
+
|
137 |
+
/**
|
138 |
+
* @param string $string
|
139 |
+
* @return self
|
140 |
+
*/
|
141 |
+
public static function fromString($string)
|
142 |
+
{
|
143 |
+
$state = new ParagonIE_Sodium_Core32_SecretStream_State(
|
144 |
+
ParagonIE_Sodium_Core32_Util::substr($string, 0, 32)
|
145 |
+
);
|
146 |
+
$state->counter = ParagonIE_Sodium_Core32_Util::load_4(
|
147 |
+
ParagonIE_Sodium_Core32_Util::substr($string, 32, 4)
|
148 |
+
);
|
149 |
+
$state->nonce = ParagonIE_Sodium_Core32_Util::substr($string, 36, 12);
|
150 |
+
$state->_pad = ParagonIE_Sodium_Core32_Util::substr($string, 48, 8);
|
151 |
+
return $state;
|
152 |
+
}
|
153 |
+
|
154 |
+
/**
|
155 |
+
* @return string
|
156 |
+
*/
|
157 |
+
public function toString()
|
158 |
+
{
|
159 |
+
return $this->key .
|
160 |
+
$this->getCounter() .
|
161 |
+
$this->nonce .
|
162 |
+
$this->_pad;
|
163 |
+
}
|
164 |
+
}
|
crypto/vendor/paragonie/sodium_compat/src/Core32/X25519.php
CHANGED
@@ -152,8 +152,9 @@ abstract class ParagonIE_Sodium_Core32_X25519 extends ParagonIE_Sodium_Core32_Cu
|
|
152 |
for ($i = 0; $i < 10; ++$i) {
|
153 |
$h[$i] = $h[$i]->toInt32();
|
154 |
}
|
155 |
-
/** @var array<int, ParagonIE_Sodium_Core32_Int32> $
|
156 |
-
|
|
|
157 |
}
|
158 |
|
159 |
/**
|
152 |
for ($i = 0; $i < 10; ++$i) {
|
153 |
$h[$i] = $h[$i]->toInt32();
|
154 |
}
|
155 |
+
/** @var array<int, ParagonIE_Sodium_Core32_Int32> $h2 */
|
156 |
+
$h2 = $h;
|
157 |
+
return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray($h2);
|
158 |
}
|
159 |
|
160 |
/**
|
crypto/vendor/paragonie/sodium_compat/src/Crypto.php
CHANGED
@@ -778,6 +778,53 @@ abstract class ParagonIE_Sodium_Crypto
|
|
778 |
return ParagonIE_Sodium_Core_BLAKE2b::contextToString($ctx);
|
779 |
}
|
780 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
781 |
/**
|
782 |
* Update a hashing context for BLAKE2b with $message
|
783 |
*
|
@@ -1186,6 +1233,362 @@ abstract class ParagonIE_Sodium_Crypto
|
|
1186 |
return $m;
|
1187 |
}
|
1188 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1189 |
/**
|
1190 |
* Detached Ed25519 signature.
|
1191 |
*
|
778 |
return ParagonIE_Sodium_Core_BLAKE2b::contextToString($ctx);
|
779 |
}
|
780 |
|
781 |
+
/**
|
782 |
+
* Initialize a hashing context for BLAKE2b.
|
783 |
+
*
|
784 |
+
* @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
|
785 |
+
*
|
786 |
+
* @param string $key
|
787 |
+
* @param int $outputLength
|
788 |
+
* @param string $salt
|
789 |
+
* @param string $personal
|
790 |
+
* @return string
|
791 |
+
* @throws RangeException
|
792 |
+
* @throws SodiumException
|
793 |
+
* @throws TypeError
|
794 |
+
*/
|
795 |
+
public static function generichash_init_salt_personal(
|
796 |
+
$key = '',
|
797 |
+
$outputLength = 32,
|
798 |
+
$salt = '',
|
799 |
+
$personal = ''
|
800 |
+
) {
|
801 |
+
// This ensures that ParagonIE_Sodium_Core_BLAKE2b::$iv is initialized
|
802 |
+
ParagonIE_Sodium_Core_BLAKE2b::pseudoConstructor();
|
803 |
+
|
804 |
+
$k = null;
|
805 |
+
if (!empty($key)) {
|
806 |
+
$k = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($key);
|
807 |
+
if ($k->count() > ParagonIE_Sodium_Core_BLAKE2b::KEYBYTES) {
|
808 |
+
throw new RangeException('Invalid key size');
|
809 |
+
}
|
810 |
+
}
|
811 |
+
if (!empty($salt)) {
|
812 |
+
$s = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($salt);
|
813 |
+
} else {
|
814 |
+
$s = null;
|
815 |
+
}
|
816 |
+
if (!empty($salt)) {
|
817 |
+
$p = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($personal);
|
818 |
+
} else {
|
819 |
+
$p = null;
|
820 |
+
}
|
821 |
+
|
822 |
+
/** @var SplFixedArray $ctx */
|
823 |
+
$ctx = ParagonIE_Sodium_Core_BLAKE2b::init($k, $outputLength, $s, $p);
|
824 |
+
|
825 |
+
return ParagonIE_Sodium_Core_BLAKE2b::contextToString($ctx);
|
826 |
+
}
|
827 |
+
|
828 |
/**
|
829 |
* Update a hashing context for BLAKE2b with $message
|
830 |
*
|
1233 |
return $m;
|
1234 |
}
|
1235 |
|
1236 |
+
/**
|
1237 |
+
* @param string $key
|
1238 |
+
* @return array<int, string> Returns a state and a header.
|
1239 |
+
* @throws Exception
|
1240 |
+
* @throws SodiumException
|
1241 |
+
*/
|
1242 |
+
public static function secretstream_xchacha20poly1305_init_push($key)
|
1243 |
+
{
|
1244 |
+
# randombytes_buf(out, crypto_secretstream_xchacha20poly1305_HEADERBYTES);
|
1245 |
+
$out = random_bytes(24);
|
1246 |
+
|
1247 |
+
# crypto_core_hchacha20(state->k, out, k, NULL);
|
1248 |
+
$subkey = ParagonIE_Sodium_Core_HChaCha20::hChaCha20($out, $key);
|
1249 |
+
$state = new ParagonIE_Sodium_Core_SecretStream_State(
|
1250 |
+
$subkey,
|
1251 |
+
ParagonIE_Sodium_Core_Util::substr($out, 16, 8) . str_repeat("\0", 4)
|
1252 |
+
);
|
1253 |
+
|
1254 |
+
# _crypto_secretstream_xchacha20poly1305_counter_reset(state);
|
1255 |
+
$state->counterReset();
|
1256 |
+
|
1257 |
+
# memcpy(STATE_INONCE(state), out + crypto_core_hchacha20_INPUTBYTES,
|
1258 |
+
# crypto_secretstream_xchacha20poly1305_INONCEBYTES);
|
1259 |
+
# memset(state->_pad, 0, sizeof state->_pad);
|
1260 |
+
return array(
|
1261 |
+
$state->toString(),
|
1262 |
+
$out
|
1263 |
+
);
|
1264 |
+
}
|
1265 |
+
|
1266 |
+
/**
|
1267 |
+
* @param string $key
|
1268 |
+
* @param string $header
|
1269 |
+
* @return string Returns a state.
|
1270 |
+
* @throws Exception
|
1271 |
+
*/
|
1272 |
+
public static function secretstream_xchacha20poly1305_init_pull($key, $header)
|
1273 |
+
{
|
1274 |
+
# crypto_core_hchacha20(state->k, in, k, NULL);
|
1275 |
+
$subkey = ParagonIE_Sodium_Core_HChaCha20::hChaCha20(
|
1276 |
+
ParagonIE_Sodium_Core_Util::substr($header, 0, 16),
|
1277 |
+
$key
|
1278 |
+
);
|
1279 |
+
$state = new ParagonIE_Sodium_Core_SecretStream_State(
|
1280 |
+
$subkey,
|
1281 |
+
ParagonIE_Sodium_Core_Util::substr($header, 16)
|
1282 |
+
);
|
1283 |
+
$state->counterReset();
|
1284 |
+
# memcpy(STATE_INONCE(state), in + crypto_core_hchacha20_INPUTBYTES,
|
1285 |
+
# crypto_secretstream_xchacha20poly1305_INONCEBYTES);
|
1286 |
+
# memset(state->_pad, 0, sizeof state->_pad);
|
1287 |
+
# return 0;
|
1288 |
+
return $state->toString();
|
1289 |
+
}
|
1290 |
+
|
1291 |
+
/**
|
1292 |
+
* @param string $state
|
1293 |
+
* @param string $msg
|
1294 |
+
* @param string $aad
|
1295 |
+
* @param int $tag
|
1296 |
+
* @return string
|
1297 |
+
* @throws SodiumException
|
1298 |
+
*/
|
1299 |
+
public static function secretstream_xchacha20poly1305_push(&$state, $msg, $aad = '', $tag = 0)
|
1300 |
+
{
|
1301 |
+
$st = ParagonIE_Sodium_Core_SecretStream_State::fromString($state);
|
1302 |
+
# crypto_onetimeauth_poly1305_state poly1305_state;
|
1303 |
+
# unsigned char block[64U];
|
1304 |
+
# unsigned char slen[8U];
|
1305 |
+
# unsigned char *c;
|
1306 |
+
# unsigned char *mac;
|
1307 |
+
|
1308 |
+
$msglen = ParagonIE_Sodium_Core_Util::strlen($msg);
|
1309 |
+
$aadlen = ParagonIE_Sodium_Core_Util::strlen($aad);
|
1310 |
+
|
1311 |
+
if ((($msglen + 63) >> 6) > 0xfffffffe) {
|
1312 |
+
throw new SodiumException(
|
1313 |
+
'message cannot be larger than SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX bytes'
|
1314 |
+
);
|
1315 |
+
}
|
1316 |
+
|
1317 |
+
# if (outlen_p != NULL) {
|
1318 |
+
# *outlen_p = 0U;
|
1319 |
+
# }
|
1320 |
+
# if (mlen > crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX) {
|
1321 |
+
# sodium_misuse();
|
1322 |
+
# }
|
1323 |
+
|
1324 |
+
# crypto_stream_chacha20_ietf(block, sizeof block, state->nonce, state->k);
|
1325 |
+
# crypto_onetimeauth_poly1305_init(&poly1305_state, block);
|
1326 |
+
# sodium_memzero(block, sizeof block);
|
1327 |
+
$auth = new ParagonIE_Sodium_Core_Poly1305_State(
|
1328 |
+
ParagonIE_Sodium_Core_ChaCha20::ietfStream(32, $st->getCombinedNonce(), $st->getKey())
|
1329 |
+
);
|
1330 |
+
|
1331 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, ad, adlen);
|
1332 |
+
$auth->update($aad);
|
1333 |
+
|
1334 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, _pad0,
|
1335 |
+
# (0x10 - adlen) & 0xf);
|
1336 |
+
$auth->update(str_repeat("\0", ((0x10 - $aadlen) & 0xf)));
|
1337 |
+
|
1338 |
+
# memset(block, 0, sizeof block);
|
1339 |
+
# block[0] = tag;
|
1340 |
+
# crypto_stream_chacha20_ietf_xor_ic(block, block, sizeof block,
|
1341 |
+
# state->nonce, 1U, state->k);
|
1342 |
+
$block = ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc(
|
1343 |
+
ParagonIE_Sodium_Core_Util::intToChr($tag) . str_repeat("\0", 63),
|
1344 |
+
$st->getCombinedNonce(),
|
1345 |
+
$st->getKey(),
|
1346 |
+
ParagonIE_Sodium_Core_Util::store64_le(1)
|
1347 |
+
);
|
1348 |
+
|
1349 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, block, sizeof block);
|
1350 |
+
$auth->update($block);
|
1351 |
+
|
1352 |
+
# out[0] = block[0];
|
1353 |
+
$out = $block[0];
|
1354 |
+
# c = out + (sizeof tag);
|
1355 |
+
# crypto_stream_chacha20_ietf_xor_ic(c, m, mlen, state->nonce, 2U, state->k);
|
1356 |
+
$cipher = ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc(
|
1357 |
+
$msg,
|
1358 |
+
$st->getCombinedNonce(),
|
1359 |
+
$st->getKey(),
|
1360 |
+
ParagonIE_Sodium_Core_Util::store64_le(2)
|
1361 |
+
);
|
1362 |
+
|
1363 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, c, mlen);
|
1364 |
+
$auth->update($cipher);
|
1365 |
+
|
1366 |
+
$out .= $cipher;
|
1367 |
+
unset($cipher);
|
1368 |
+
|
1369 |
+
# crypto_onetimeauth_poly1305_update
|
1370 |
+
# (&poly1305_state, _pad0, (0x10 - (sizeof block) + mlen) & 0xf);
|
1371 |
+
$auth->update(str_repeat("\0", ((0x10 - 64 + $msglen) & 0xf)));
|
1372 |
+
|
1373 |
+
# STORE64_LE(slen, (uint64_t) adlen);
|
1374 |
+
$slen = ParagonIE_Sodium_Core_Util::store64_le($aadlen);
|
1375 |
+
|
1376 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen);
|
1377 |
+
$auth->update($slen);
|
1378 |
+
|
1379 |
+
# STORE64_LE(slen, (sizeof block) + mlen);
|
1380 |
+
$slen = ParagonIE_Sodium_Core_Util::store64_le(64 + $msglen);
|
1381 |
+
|
1382 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen);
|
1383 |
+
$auth->update($slen);
|
1384 |
+
|
1385 |
+
# mac = c + mlen;
|
1386 |
+
# crypto_onetimeauth_poly1305_final(&poly1305_state, mac);
|
1387 |
+
$mac = $auth->finish();
|
1388 |
+
$out .= $mac;
|
1389 |
+
|
1390 |
+
# sodium_memzero(&poly1305_state, sizeof poly1305_state);
|
1391 |
+
unset($auth);
|
1392 |
+
|
1393 |
+
|
1394 |
+
# XOR_BUF(STATE_INONCE(state), mac,
|
1395 |
+
# crypto_secretstream_xchacha20poly1305_INONCEBYTES);
|
1396 |
+
$st->xorNonce($mac);
|
1397 |
+
|
1398 |
+
# sodium_increment(STATE_COUNTER(state),
|
1399 |
+
# crypto_secretstream_xchacha20poly1305_COUNTERBYTES);
|
1400 |
+
$st->incrementCounter();
|
1401 |
+
// Overwrite by reference:
|
1402 |
+
$state = $st->toString();
|
1403 |
+
|
1404 |
+
/** @var bool $rekey */
|
1405 |
+
$rekey = ($tag & ParagonIE_Sodium_Compat::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY) !== 0;
|
1406 |
+
# if ((tag & crypto_secretstream_xchacha20poly1305_TAG_REKEY) != 0 ||
|
1407 |
+
# sodium_is_zero(STATE_COUNTER(state),
|
1408 |
+
# crypto_secretstream_xchacha20poly1305_COUNTERBYTES)) {
|
1409 |
+
# crypto_secretstream_xchacha20poly1305_rekey(state);
|
1410 |
+
# }
|
1411 |
+
if ($rekey || $st->needsRekey()) {
|
1412 |
+
// DO REKEY
|
1413 |
+
self::secretstream_xchacha20poly1305_rekey($state);
|
1414 |
+
}
|
1415 |
+
# if (outlen_p != NULL) {
|
1416 |
+
# *outlen_p = crypto_secretstream_xchacha20poly1305_ABYTES + mlen;
|
1417 |
+
# }
|
1418 |
+
return $out;
|
1419 |
+
}
|
1420 |
+
|
1421 |
+
/**
|
1422 |
+
* @param string $state
|
1423 |
+
* @param string $cipher
|
1424 |
+
* @param string $aad
|
1425 |
+
* @return bool|array{0: string, 1: int}
|
1426 |
+
* @throws SodiumException
|
1427 |
+
*/
|
1428 |
+
public static function secretstream_xchacha20poly1305_pull(&$state, $cipher, $aad = '')
|
1429 |
+
{
|
1430 |
+
$st = ParagonIE_Sodium_Core_SecretStream_State::fromString($state);
|
1431 |
+
|
1432 |
+
$cipherlen = ParagonIE_Sodium_Core_Util::strlen($cipher);
|
1433 |
+
# mlen = inlen - crypto_secretstream_xchacha20poly1305_ABYTES;
|
1434 |
+
$msglen = $cipherlen - ParagonIE_Sodium_Compat::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES;
|
1435 |
+
$aadlen = ParagonIE_Sodium_Core_Util::strlen($aad);
|
1436 |
+
|
1437 |
+
# if (mlen > crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX) {
|
1438 |
+
# sodium_misuse();
|
1439 |
+
# }
|
1440 |
+
if ((($msglen + 63) >> 6) > 0xfffffffe) {
|
1441 |
+
throw new SodiumException(
|
1442 |
+
'message cannot be larger than SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX bytes'
|
1443 |
+
);
|
1444 |
+
}
|
1445 |
+
|
1446 |
+
# crypto_stream_chacha20_ietf(block, sizeof block, state->nonce, state->k);
|
1447 |
+
# crypto_onetimeauth_poly1305_init(&poly1305_state, block);
|
1448 |
+
# sodium_memzero(block, sizeof block);
|
1449 |
+
$auth = new ParagonIE_Sodium_Core_Poly1305_State(
|
1450 |
+
ParagonIE_Sodium_Core_ChaCha20::ietfStream(32, $st->getCombinedNonce(), $st->getKey())
|
1451 |
+
);
|
1452 |
+
|
1453 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, ad, adlen);
|
1454 |
+
$auth->update($aad);
|
1455 |
+
|
1456 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, _pad0,
|
1457 |
+
# (0x10 - adlen) & 0xf);
|
1458 |
+
$auth->update(str_repeat("\0", ((0x10 - $aadlen) & 0xf)));
|
1459 |
+
|
1460 |
+
|
1461 |
+
# memset(block, 0, sizeof block);
|
1462 |
+
# block[0] = in[0];
|
1463 |
+
# crypto_stream_chacha20_ietf_xor_ic(block, block, sizeof block,
|
1464 |
+
# state->nonce, 1U, state->k);
|
1465 |
+
$block = ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc(
|
1466 |
+
$cipher[0] . str_repeat("\0", 63),
|
1467 |
+
$st->getCombinedNonce(),
|
1468 |
+
$st->getKey(),
|
1469 |
+
ParagonIE_Sodium_Core_Util::store64_le(1)
|
1470 |
+
);
|
1471 |
+
# tag = block[0];
|
1472 |
+
# block[0] = in[0];
|
1473 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, block, sizeof block);
|
1474 |
+
$tag = ParagonIE_Sodium_Core_Util::chrToInt($block[0]);
|
1475 |
+
$block[0] = $cipher[0];
|
1476 |
+
$auth->update($block);
|
1477 |
+
|
1478 |
+
|
1479 |
+
# c = in + (sizeof tag);
|
1480 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, c, mlen);
|
1481 |
+
$auth->update(ParagonIE_Sodium_Core_Util::substr($cipher, 1, $msglen));
|
1482 |
+
|
1483 |
+
# crypto_onetimeauth_poly1305_update
|
1484 |
+
# (&poly1305_state, _pad0, (0x10 - (sizeof block) + mlen) & 0xf);
|
1485 |
+
$auth->update(str_repeat("\0", ((0x10 - 64 + $msglen) & 0xf)));
|
1486 |
+
|
1487 |
+
# STORE64_LE(slen, (uint64_t) adlen);
|
1488 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen);
|
1489 |
+
$slen = ParagonIE_Sodium_Core_Util::store64_le($aadlen);
|
1490 |
+
$auth->update($slen);
|
1491 |
+
|
1492 |
+
# STORE64_LE(slen, (sizeof block) + mlen);
|
1493 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen);
|
1494 |
+
$slen = ParagonIE_Sodium_Core_Util::store64_le(64 + $msglen);
|
1495 |
+
$auth->update($slen);
|
1496 |
+
|
1497 |
+
# crypto_onetimeauth_poly1305_final(&poly1305_state, mac);
|
1498 |
+
# sodium_memzero(&poly1305_state, sizeof poly1305_state);
|
1499 |
+
$mac = $auth->finish();
|
1500 |
+
|
1501 |
+
# stored_mac = c + mlen;
|
1502 |
+
# if (sodium_memcmp(mac, stored_mac, sizeof mac) != 0) {
|
1503 |
+
# sodium_memzero(mac, sizeof mac);
|
1504 |
+
# return -1;
|
1505 |
+
# }
|
1506 |
+
|
1507 |
+
$stored = ParagonIE_Sodium_Core_Util::substr($cipher, $msglen + 1, 16);
|
1508 |
+
if (!ParagonIE_Sodium_Core_Util::hashEquals($mac, $stored)) {
|
1509 |
+
return false;
|
1510 |
+
}
|
1511 |
+
|
1512 |
+
# crypto_stream_chacha20_ietf_xor_ic(m, c, mlen, state->nonce, 2U, state->k);
|
1513 |
+
$out = ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc(
|
1514 |
+
ParagonIE_Sodium_Core_Util::substr($cipher, 1, $msglen),
|
1515 |
+
$st->getCombinedNonce(),
|
1516 |
+
$st->getKey(),
|
1517 |
+
ParagonIE_Sodium_Core_Util::store64_le(2)
|
1518 |
+
);
|
1519 |
+
|
1520 |
+
# XOR_BUF(STATE_INONCE(state), mac,
|
1521 |
+
# crypto_secretstream_xchacha20poly1305_INONCEBYTES);
|
1522 |
+
$st->xorNonce($mac);
|
1523 |
+
|
1524 |
+
# sodium_increment(STATE_COUNTER(state),
|
1525 |
+
# crypto_secretstream_xchacha20poly1305_COUNTERBYTES);
|
1526 |
+
$st->incrementCounter();
|
1527 |
+
|
1528 |
+
# if ((tag & crypto_secretstream_xchacha20poly1305_TAG_REKEY) != 0 ||
|
1529 |
+
# sodium_is_zero(STATE_COUNTER(state),
|
1530 |
+
# crypto_secretstream_xchacha20poly1305_COUNTERBYTES)) {
|
1531 |
+
# crypto_secretstream_xchacha20poly1305_rekey(state);
|
1532 |
+
# }
|
1533 |
+
|
1534 |
+
// Overwrite by reference:
|
1535 |
+
$state = $st->toString();
|
1536 |
+
|
1537 |
+
/** @var bool $rekey */
|
1538 |
+
$rekey = ($tag & ParagonIE_Sodium_Compat::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY) !== 0;
|
1539 |
+
if ($rekey || $st->needsRekey()) {
|
1540 |
+
// DO REKEY
|
1541 |
+
self::secretstream_xchacha20poly1305_rekey($state);
|
1542 |
+
}
|
1543 |
+
return array($out, $tag);
|
1544 |
+
}
|
1545 |
+
|
1546 |
+
/**
|
1547 |
+
* @param string $state
|
1548 |
+
* @return void
|
1549 |
+
* @throws SodiumException
|
1550 |
+
*/
|
1551 |
+
public static function secretstream_xchacha20poly1305_rekey(&$state)
|
1552 |
+
{
|
1553 |
+
$st = ParagonIE_Sodium_Core_SecretStream_State::fromString($state);
|
1554 |
+
# unsigned char new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES +
|
1555 |
+
# crypto_secretstream_xchacha20poly1305_INONCEBYTES];
|
1556 |
+
# size_t i;
|
1557 |
+
# for (i = 0U; i < crypto_stream_chacha20_ietf_KEYBYTES; i++) {
|
1558 |
+
# new_key_and_inonce[i] = state->k[i];
|
1559 |
+
# }
|
1560 |
+
$new_key_and_inonce = $st->getKey();
|
1561 |
+
|
1562 |
+
# for (i = 0U; i < crypto_secretstream_xchacha20poly1305_INONCEBYTES; i++) {
|
1563 |
+
# new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES + i] =
|
1564 |
+
# STATE_INONCE(state)[i];
|
1565 |
+
# }
|
1566 |
+
$new_key_and_inonce .= ParagonIE_Sodium_Core_Util::substR($st->getNonce(), 0, 8);
|
1567 |
+
|
1568 |
+
# crypto_stream_chacha20_ietf_xor(new_key_and_inonce, new_key_and_inonce,
|
1569 |
+
# sizeof new_key_and_inonce,
|
1570 |
+
# state->nonce, state->k);
|
1571 |
+
|
1572 |
+
$st->rekey(ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc(
|
1573 |
+
$new_key_and_inonce,
|
1574 |
+
$st->getCombinedNonce(),
|
1575 |
+
$st->getKey(),
|
1576 |
+
ParagonIE_Sodium_Core_Util::store64_le(0)
|
1577 |
+
));
|
1578 |
+
|
1579 |
+
# for (i = 0U; i < crypto_stream_chacha20_ietf_KEYBYTES; i++) {
|
1580 |
+
# state->k[i] = new_key_and_inonce[i];
|
1581 |
+
# }
|
1582 |
+
# for (i = 0U; i < crypto_secretstream_xchacha20poly1305_INONCEBYTES; i++) {
|
1583 |
+
# STATE_INONCE(state)[i] =
|
1584 |
+
# new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES + i];
|
1585 |
+
# }
|
1586 |
+
# _crypto_secretstream_xchacha20poly1305_counter_reset(state);
|
1587 |
+
$st->counterReset();
|
1588 |
+
|
1589 |
+
$state = $st->toString();
|
1590 |
+
}
|
1591 |
+
|
1592 |
/**
|
1593 |
* Detached Ed25519 signature.
|
1594 |
*
|
crypto/vendor/paragonie/sodium_compat/src/Crypto32.php
CHANGED
@@ -777,6 +777,53 @@ abstract class ParagonIE_Sodium_Crypto32
|
|
777 |
return ParagonIE_Sodium_Core32_BLAKE2b::contextToString($ctx);
|
778 |
}
|
779 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
780 |
/**
|
781 |
* Update a hashing context for BLAKE2b with $message
|
782 |
*
|
@@ -1185,6 +1232,362 @@ abstract class ParagonIE_Sodium_Crypto32
|
|
1185 |
return $m;
|
1186 |
}
|
1187 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1188 |
/**
|
1189 |
* Detached Ed25519 signature.
|
1190 |
*
|
777 |
return ParagonIE_Sodium_Core32_BLAKE2b::contextToString($ctx);
|
778 |
}
|
779 |
|
780 |
+
/**
|
781 |
+
* Initialize a hashing context for BLAKE2b.
|
782 |
+
*
|
783 |
+
* @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
|
784 |
+
*
|
785 |
+
* @param string $key
|
786 |
+
* @param int $outputLength
|
787 |
+
* @param string $salt
|
788 |
+
* @param string $personal
|
789 |
+
* @return string
|
790 |
+
* @throws RangeException
|
791 |
+
* @throws SodiumException
|
792 |
+
* @throws TypeError
|
793 |
+
*/
|
794 |
+
public static function generichash_init_salt_personal(
|
795 |
+
$key = '',
|
796 |
+
$outputLength = 32,
|
797 |
+
$salt = '',
|
798 |
+
$personal = ''
|
799 |
+
) {
|
800 |
+
// This ensures that ParagonIE_Sodium_Core32_BLAKE2b::$iv is initialized
|
801 |
+
ParagonIE_Sodium_Core32_BLAKE2b::pseudoConstructor();
|
802 |
+
|
803 |
+
$k = null;
|
804 |
+
if (!empty($key)) {
|
805 |
+
$k = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($key);
|
806 |
+
if ($k->count() > ParagonIE_Sodium_Core32_BLAKE2b::KEYBYTES) {
|
807 |
+
throw new RangeException('Invalid key size');
|
808 |
+
}
|
809 |
+
}
|
810 |
+
if (!empty($salt)) {
|
811 |
+
$s = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($salt);
|
812 |
+
} else {
|
813 |
+
$s = null;
|
814 |
+
}
|
815 |
+
if (!empty($salt)) {
|
816 |
+
$p = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($personal);
|
817 |
+
} else {
|
818 |
+
$p = null;
|
819 |
+
}
|
820 |
+
|
821 |
+
/** @var SplFixedArray $ctx */
|
822 |
+
$ctx = ParagonIE_Sodium_Core32_BLAKE2b::init($k, $outputLength, $s, $p);
|
823 |
+
|
824 |
+
return ParagonIE_Sodium_Core32_BLAKE2b::contextToString($ctx);
|
825 |
+
}
|
826 |
+
|
827 |
/**
|
828 |
* Update a hashing context for BLAKE2b with $message
|
829 |
*
|
1232 |
return $m;
|
1233 |
}
|
1234 |
|
1235 |
+
/**
|
1236 |
+
* @param string $key
|
1237 |
+
* @return array<int, string> Returns a state and a header.
|
1238 |
+
* @throws Exception
|
1239 |
+
* @throws SodiumException
|
1240 |
+
*/
|
1241 |
+
public static function secretstream_xchacha20poly1305_init_push($key)
|
1242 |
+
{
|
1243 |
+
# randombytes_buf(out, crypto_secretstream_xchacha20poly1305_HEADERBYTES);
|
1244 |
+
$out = random_bytes(24);
|
1245 |
+
|
1246 |
+
# crypto_core_hchacha20(state->k, out, k, NULL);
|
1247 |
+
$subkey = ParagonIE_Sodium_Core32_HChaCha20::hChaCha20($out, $key);
|
1248 |
+
$state = new ParagonIE_Sodium_Core32_SecretStream_State(
|
1249 |
+
$subkey,
|
1250 |
+
ParagonIE_Sodium_Core32_Util::substr($out, 16, 8) . str_repeat("\0", 4)
|
1251 |
+
);
|
1252 |
+
|
1253 |
+
# _crypto_secretstream_xchacha20poly1305_counter_reset(state);
|
1254 |
+
$state->counterReset();
|
1255 |
+
|
1256 |
+
# memcpy(STATE_INONCE(state), out + crypto_core_hchacha20_INPUTBYTES,
|
1257 |
+
# crypto_secretstream_xchacha20poly1305_INONCEBYTES);
|
1258 |
+
# memset(state->_pad, 0, sizeof state->_pad);
|
1259 |
+
return array(
|
1260 |
+
$state->toString(),
|
1261 |
+
$out
|
1262 |
+
);
|
1263 |
+
}
|
1264 |
+
|
1265 |
+
/**
|
1266 |
+
* @param string $key
|
1267 |
+
* @param string $header
|
1268 |
+
* @return string Returns a state.
|
1269 |
+
* @throws Exception
|
1270 |
+
*/
|
1271 |
+
public static function secretstream_xchacha20poly1305_init_pull($key, $header)
|
1272 |
+
{
|
1273 |
+
# crypto_core_hchacha20(state->k, in, k, NULL);
|
1274 |
+
$subkey = ParagonIE_Sodium_Core32_HChaCha20::hChaCha20(
|
1275 |
+
ParagonIE_Sodium_Core32_Util::substr($header, 0, 16),
|
1276 |
+
$key
|
1277 |
+
);
|
1278 |
+
$state = new ParagonIE_Sodium_Core32_SecretStream_State(
|
1279 |
+
$subkey,
|
1280 |
+
ParagonIE_Sodium_Core32_Util::substr($header, 16)
|
1281 |
+
);
|
1282 |
+
$state->counterReset();
|
1283 |
+
# memcpy(STATE_INONCE(state), in + crypto_core_hchacha20_INPUTBYTES,
|
1284 |
+
# crypto_secretstream_xchacha20poly1305_INONCEBYTES);
|
1285 |
+
# memset(state->_pad, 0, sizeof state->_pad);
|
1286 |
+
# return 0;
|
1287 |
+
return $state->toString();
|
1288 |
+
}
|
1289 |
+
|
1290 |
+
/**
|
1291 |
+
* @param string $state
|
1292 |
+
* @param string $msg
|
1293 |
+
* @param string $aad
|
1294 |
+
* @param int $tag
|
1295 |
+
* @return string
|
1296 |
+
* @throws SodiumException
|
1297 |
+
*/
|
1298 |
+
public static function secretstream_xchacha20poly1305_push(&$state, $msg, $aad = '', $tag = 0)
|
1299 |
+
{
|
1300 |
+
$st = ParagonIE_Sodium_Core32_SecretStream_State::fromString($state);
|
1301 |
+
# crypto_onetimeauth_poly1305_state poly1305_state;
|
1302 |
+
# unsigned char block[64U];
|
1303 |
+
# unsigned char slen[8U];
|
1304 |
+
# unsigned char *c;
|
1305 |
+
# unsigned char *mac;
|
1306 |
+
|
1307 |
+
$msglen = ParagonIE_Sodium_Core32_Util::strlen($msg);
|
1308 |
+
$aadlen = ParagonIE_Sodium_Core32_Util::strlen($aad);
|
1309 |
+
|
1310 |
+
if ((($msglen + 63) >> 6) > 0xfffffffe) {
|
1311 |
+
throw new SodiumException(
|
1312 |
+
'message cannot be larger than SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX bytes'
|
1313 |
+
);
|
1314 |
+
}
|
1315 |
+
|
1316 |
+
# if (outlen_p != NULL) {
|
1317 |
+
# *outlen_p = 0U;
|
1318 |
+
# }
|
1319 |
+
# if (mlen > crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX) {
|
1320 |
+
# sodium_misuse();
|
1321 |
+
# }
|
1322 |
+
|
1323 |
+
# crypto_stream_chacha20_ietf(block, sizeof block, state->nonce, state->k);
|
1324 |
+
# crypto_onetimeauth_poly1305_init(&poly1305_state, block);
|
1325 |
+
# sodium_memzero(block, sizeof block);
|
1326 |
+
$auth = new ParagonIE_Sodium_Core32_Poly1305_State(
|
1327 |
+
ParagonIE_Sodium_Core32_ChaCha20::ietfStream(32, $st->getCombinedNonce(), $st->getKey())
|
1328 |
+
);
|
1329 |
+
|
1330 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, ad, adlen);
|
1331 |
+
$auth->update($aad);
|
1332 |
+
|
1333 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, _pad0,
|
1334 |
+
# (0x10 - adlen) & 0xf);
|
1335 |
+
$auth->update(str_repeat("\0", ((0x10 - $aadlen) & 0xf)));
|
1336 |
+
|
1337 |
+
# memset(block, 0, sizeof block);
|
1338 |
+
# block[0] = tag;
|
1339 |
+
# crypto_stream_chacha20_ietf_xor_ic(block, block, sizeof block,
|
1340 |
+
# state->nonce, 1U, state->k);
|
1341 |
+
$block = ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc(
|
1342 |
+
ParagonIE_Sodium_Core32_Util::intToChr($tag) . str_repeat("\0", 63),
|
1343 |
+
$st->getCombinedNonce(),
|
1344 |
+
$st->getKey(),
|
1345 |
+
ParagonIE_Sodium_Core32_Util::store64_le(1)
|
1346 |
+
);
|
1347 |
+
|
1348 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, block, sizeof block);
|
1349 |
+
$auth->update($block);
|
1350 |
+
|
1351 |
+
# out[0] = block[0];
|
1352 |
+
$out = $block[0];
|
1353 |
+
# c = out + (sizeof tag);
|
1354 |
+
# crypto_stream_chacha20_ietf_xor_ic(c, m, mlen, state->nonce, 2U, state->k);
|
1355 |
+
$cipher = ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc(
|
1356 |
+
$msg,
|
1357 |
+
$st->getCombinedNonce(),
|
1358 |
+
$st->getKey(),
|
1359 |
+
ParagonIE_Sodium_Core32_Util::store64_le(2)
|
1360 |
+
);
|
1361 |
+
|
1362 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, c, mlen);
|
1363 |
+
$auth->update($cipher);
|
1364 |
+
|
1365 |
+
$out .= $cipher;
|
1366 |
+
unset($cipher);
|
1367 |
+
|
1368 |
+
# crypto_onetimeauth_poly1305_update
|
1369 |
+
# (&poly1305_state, _pad0, (0x10 - (sizeof block) + mlen) & 0xf);
|
1370 |
+
$auth->update(str_repeat("\0", ((0x10 - 64 + $msglen) & 0xf)));
|
1371 |
+
|
1372 |
+
# STORE64_LE(slen, (uint64_t) adlen);
|
1373 |
+
$slen = ParagonIE_Sodium_Core32_Util::store64_le($aadlen);
|
1374 |
+
|
1375 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen);
|
1376 |
+
$auth->update($slen);
|
1377 |
+
|
1378 |
+
# STORE64_LE(slen, (sizeof block) + mlen);
|
1379 |
+
$slen = ParagonIE_Sodium_Core32_Util::store64_le(64 + $msglen);
|
1380 |
+
|
1381 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen);
|
1382 |
+
$auth->update($slen);
|
1383 |
+
|
1384 |
+
# mac = c + mlen;
|
1385 |
+
# crypto_onetimeauth_poly1305_final(&poly1305_state, mac);
|
1386 |
+
$mac = $auth->finish();
|
1387 |
+
$out .= $mac;
|
1388 |
+
|
1389 |
+
# sodium_memzero(&poly1305_state, sizeof poly1305_state);
|
1390 |
+
unset($auth);
|
1391 |
+
|
1392 |
+
|
1393 |
+
# XOR_BUF(STATE_INONCE(state), mac,
|
1394 |
+
# crypto_secretstream_xchacha20poly1305_INONCEBYTES);
|
1395 |
+
$st->xorNonce($mac);
|
1396 |
+
|
1397 |
+
# sodium_increment(STATE_COUNTER(state),
|
1398 |
+
# crypto_secretstream_xchacha20poly1305_COUNTERBYTES);
|
1399 |
+
$st->incrementCounter();
|
1400 |
+
// Overwrite by reference:
|
1401 |
+
$state = $st->toString();
|
1402 |
+
|
1403 |
+
/** @var bool $rekey */
|
1404 |
+
$rekey = ($tag & ParagonIE_Sodium_Compat::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY) !== 0;
|
1405 |
+
# if ((tag & crypto_secretstream_xchacha20poly1305_TAG_REKEY) != 0 ||
|
1406 |
+
# sodium_is_zero(STATE_COUNTER(state),
|
1407 |
+
# crypto_secretstream_xchacha20poly1305_COUNTERBYTES)) {
|
1408 |
+
# crypto_secretstream_xchacha20poly1305_rekey(state);
|
1409 |
+
# }
|
1410 |
+
if ($rekey || $st->needsRekey()) {
|
1411 |
+
// DO REKEY
|
1412 |
+
self::secretstream_xchacha20poly1305_rekey($state);
|
1413 |
+
}
|
1414 |
+
# if (outlen_p != NULL) {
|
1415 |
+
# *outlen_p = crypto_secretstream_xchacha20poly1305_ABYTES + mlen;
|
1416 |
+
# }
|
1417 |
+
return $out;
|
1418 |
+
}
|
1419 |
+
|
1420 |
+
/**
|
1421 |
+
* @param string $state
|
1422 |
+
* @param string $cipher
|
1423 |
+
* @param string $aad
|
1424 |
+
* @return bool|array{0: string, 1: int}
|
1425 |
+
* @throws SodiumException
|
1426 |
+
*/
|
1427 |
+
public static function secretstream_xchacha20poly1305_pull(&$state, $cipher, $aad = '')
|
1428 |
+
{
|
1429 |
+
$st = ParagonIE_Sodium_Core32_SecretStream_State::fromString($state);
|
1430 |
+
|
1431 |
+
$cipherlen = ParagonIE_Sodium_Core32_Util::strlen($cipher);
|
1432 |
+
# mlen = inlen - crypto_secretstream_xchacha20poly1305_ABYTES;
|
1433 |
+
$msglen = $cipherlen - ParagonIE_Sodium_Compat::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES;
|
1434 |
+
$aadlen = ParagonIE_Sodium_Core32_Util::strlen($aad);
|
1435 |
+
|
1436 |
+
# if (mlen > crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX) {
|
1437 |
+
# sodium_misuse();
|
1438 |
+
# }
|
1439 |
+
if ((($msglen + 63) >> 6) > 0xfffffffe) {
|
1440 |
+
throw new SodiumException(
|
1441 |
+
'message cannot be larger than SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX bytes'
|
1442 |
+
);
|
1443 |
+
}
|
1444 |
+
|
1445 |
+
# crypto_stream_chacha20_ietf(block, sizeof block, state->nonce, state->k);
|
1446 |
+
# crypto_onetimeauth_poly1305_init(&poly1305_state, block);
|
1447 |
+
# sodium_memzero(block, sizeof block);
|
1448 |
+
$auth = new ParagonIE_Sodium_Core32_Poly1305_State(
|
1449 |
+
ParagonIE_Sodium_Core32_ChaCha20::ietfStream(32, $st->getCombinedNonce(), $st->getKey())
|
1450 |
+
);
|
1451 |
+
|
1452 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, ad, adlen);
|
1453 |
+
$auth->update($aad);
|
1454 |
+
|
1455 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, _pad0,
|
1456 |
+
# (0x10 - adlen) & 0xf);
|
1457 |
+
$auth->update(str_repeat("\0", ((0x10 - $aadlen) & 0xf)));
|
1458 |
+
|
1459 |
+
|
1460 |
+
# memset(block, 0, sizeof block);
|
1461 |
+
# block[0] = in[0];
|
1462 |
+
# crypto_stream_chacha20_ietf_xor_ic(block, block, sizeof block,
|
1463 |
+
# state->nonce, 1U, state->k);
|
1464 |
+
$block = ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc(
|
1465 |
+
$cipher[0] . str_repeat("\0", 63),
|
1466 |
+
$st->getCombinedNonce(),
|
1467 |
+
$st->getKey(),
|
1468 |
+
ParagonIE_Sodium_Core32_Util::store64_le(1)
|
1469 |
+
);
|
1470 |
+
# tag = block[0];
|
1471 |
+
# block[0] = in[0];
|
1472 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, block, sizeof block);
|
1473 |
+
$tag = ParagonIE_Sodium_Core32_Util::chrToInt($block[0]);
|
1474 |
+
$block[0] = $cipher[0];
|
1475 |
+
$auth->update($block);
|
1476 |
+
|
1477 |
+
|
1478 |
+
# c = in + (sizeof tag);
|
1479 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, c, mlen);
|
1480 |
+
$auth->update(ParagonIE_Sodium_Core32_Util::substr($cipher, 1, $msglen));
|
1481 |
+
|
1482 |
+
# crypto_onetimeauth_poly1305_update
|
1483 |
+
# (&poly1305_state, _pad0, (0x10 - (sizeof block) + mlen) & 0xf);
|
1484 |
+
$auth->update(str_repeat("\0", ((0x10 - 64 + $msglen) & 0xf)));
|
1485 |
+
|
1486 |
+
# STORE64_LE(slen, (uint64_t) adlen);
|
1487 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen);
|
1488 |
+
$slen = ParagonIE_Sodium_Core32_Util::store64_le($aadlen);
|
1489 |
+
$auth->update($slen);
|
1490 |
+
|
1491 |
+
# STORE64_LE(slen, (sizeof block) + mlen);
|
1492 |
+
# crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen);
|
1493 |
+
$slen = ParagonIE_Sodium_Core32_Util::store64_le(64 + $msglen);
|
1494 |
+
$auth->update($slen);
|
1495 |
+
|
1496 |
+
# crypto_onetimeauth_poly1305_final(&poly1305_state, mac);
|
1497 |
+
# sodium_memzero(&poly1305_state, sizeof poly1305_state);
|
1498 |
+
$mac = $auth->finish();
|
1499 |
+
|
1500 |
+
# stored_mac = c + mlen;
|
1501 |
+
# if (sodium_memcmp(mac, stored_mac, sizeof mac) != 0) {
|
1502 |
+
# sodium_memzero(mac, sizeof mac);
|
1503 |
+
# return -1;
|
1504 |
+
# }
|
1505 |
+
|
1506 |
+
$stored = ParagonIE_Sodium_Core32_Util::substr($cipher, $msglen + 1, 16);
|
1507 |
+
if (!ParagonIE_Sodium_Core32_Util::hashEquals($mac, $stored)) {
|
1508 |
+
return false;
|
1509 |
+
}
|
1510 |
+
|
1511 |
+
# crypto_stream_chacha20_ietf_xor_ic(m, c, mlen, state->nonce, 2U, state->k);
|
1512 |
+
$out = ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc(
|
1513 |
+
ParagonIE_Sodium_Core32_Util::substr($cipher, 1, $msglen),
|
1514 |
+
$st->getCombinedNonce(),
|
1515 |
+
$st->getKey(),
|
1516 |
+
ParagonIE_Sodium_Core32_Util::store64_le(2)
|
1517 |
+
);
|
1518 |
+
|
1519 |
+
# XOR_BUF(STATE_INONCE(state), mac,
|
1520 |
+
# crypto_secretstream_xchacha20poly1305_INONCEBYTES);
|
1521 |
+
$st->xorNonce($mac);
|
1522 |
+
|
1523 |
+
# sodium_increment(STATE_COUNTER(state),
|
1524 |
+
# crypto_secretstream_xchacha20poly1305_COUNTERBYTES);
|
1525 |
+
$st->incrementCounter();
|
1526 |
+
|
1527 |
+
# if ((tag & crypto_secretstream_xchacha20poly1305_TAG_REKEY) != 0 ||
|
1528 |
+
# sodium_is_zero(STATE_COUNTER(state),
|
1529 |
+
# crypto_secretstream_xchacha20poly1305_COUNTERBYTES)) {
|
1530 |
+
# crypto_secretstream_xchacha20poly1305_rekey(state);
|
1531 |
+
# }
|
1532 |
+
|
1533 |
+
// Overwrite by reference:
|
1534 |
+
$state = $st->toString();
|
1535 |
+
|
1536 |
+
/** @var bool $rekey */
|
1537 |
+
$rekey = ($tag & ParagonIE_Sodium_Compat::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY) !== 0;
|
1538 |
+
if ($rekey || $st->needsRekey()) {
|
1539 |
+
// DO REKEY
|
1540 |
+
self::secretstream_xchacha20poly1305_rekey($state);
|
1541 |
+
}
|
1542 |
+
return array($out, $tag);
|
1543 |
+
}
|
1544 |
+
|
1545 |
+
/**
|
1546 |
+
* @param string $state
|
1547 |
+
* @return void
|
1548 |
+
* @throws SodiumException
|
1549 |
+
*/
|
1550 |
+
public static function secretstream_xchacha20poly1305_rekey(&$state)
|
1551 |
+
{
|
1552 |
+
$st = ParagonIE_Sodium_Core32_SecretStream_State::fromString($state);
|
1553 |
+
# unsigned char new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES +
|
1554 |
+
# crypto_secretstream_xchacha20poly1305_INONCEBYTES];
|
1555 |
+
# size_t i;
|
1556 |
+
# for (i = 0U; i < crypto_stream_chacha20_ietf_KEYBYTES; i++) {
|
1557 |
+
# new_key_and_inonce[i] = state->k[i];
|
1558 |
+
# }
|
1559 |
+
$new_key_and_inonce = $st->getKey();
|
1560 |
+
|
1561 |
+
# for (i = 0U; i < crypto_secretstream_xchacha20poly1305_INONCEBYTES; i++) {
|
1562 |
+
# new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES + i] =
|
1563 |
+
# STATE_INONCE(state)[i];
|
1564 |
+
# }
|
1565 |
+
$new_key_and_inonce .= ParagonIE_Sodium_Core32_Util::substR($st->getNonce(), 0, 8);
|
1566 |
+
|
1567 |
+
# crypto_stream_chacha20_ietf_xor(new_key_and_inonce, new_key_and_inonce,
|
1568 |
+
# sizeof new_key_and_inonce,
|
1569 |
+
# state->nonce, state->k);
|
1570 |
+
|
1571 |
+
$st->rekey(ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc(
|
1572 |
+
$new_key_and_inonce,
|
1573 |
+
$st->getCombinedNonce(),
|
1574 |
+
$st->getKey(),
|
1575 |
+
ParagonIE_Sodium_Core32_Util::store64_le(0)
|
1576 |
+
));
|
1577 |
+
|
1578 |
+
# for (i = 0U; i < crypto_stream_chacha20_ietf_KEYBYTES; i++) {
|
1579 |
+
# state->k[i] = new_key_and_inonce[i];
|
1580 |
+
# }
|
1581 |
+
# for (i = 0U; i < crypto_secretstream_xchacha20poly1305_INONCEBYTES; i++) {
|
1582 |
+
# STATE_INONCE(state)[i] =
|
1583 |
+
# new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES + i];
|
1584 |
+
# }
|
1585 |
+
# _crypto_secretstream_xchacha20poly1305_counter_reset(state);
|
1586 |
+
$st->counterReset();
|
1587 |
+
|
1588 |
+
$state = $st->toString();
|
1589 |
+
}
|
1590 |
+
|
1591 |
/**
|
1592 |
* Detached Ed25519 signature.
|
1593 |
*
|
crypto/vendor/paragonie/sodium_compat/src/File.php
CHANGED
@@ -142,7 +142,9 @@ class ParagonIE_Sodium_File extends ParagonIE_Sodium_Core_Util
|
|
142 |
ParagonIE_Sodium_Compat::memzero($nonce);
|
143 |
ParagonIE_Sodium_Compat::memzero($ephKeypair);
|
144 |
} catch (SodiumException $ex) {
|
145 |
-
|
|
|
|
|
146 |
}
|
147 |
return $res;
|
148 |
}
|
@@ -329,7 +331,9 @@ class ParagonIE_Sodium_File extends ParagonIE_Sodium_Core_Util
|
|
329 |
ParagonIE_Sodium_Compat::memzero($nonce);
|
330 |
ParagonIE_Sodium_Compat::memzero($ephKeypair);
|
331 |
} catch (SodiumException $ex) {
|
332 |
-
|
|
|
|
|
333 |
}
|
334 |
return $res;
|
335 |
}
|
@@ -680,7 +684,11 @@ class ParagonIE_Sodium_File extends ParagonIE_Sodium_Core_Util
|
|
680 |
}
|
681 |
|
682 |
/* Security checks */
|
683 |
-
if (
|
|
|
|
|
|
|
|
|
684 |
throw new SodiumException('S < L - Invalid signature');
|
685 |
}
|
686 |
if (ParagonIE_Sodium_Core_Ed25519::small_order($sig)) {
|
@@ -842,7 +850,7 @@ class ParagonIE_Sodium_File extends ParagonIE_Sodium_Core_Util
|
|
842 |
if (!is_string($plaintext)) {
|
843 |
throw new SodiumException('Could not read input file');
|
844 |
}
|
845 |
-
$first32 = ftell($ifp);
|
846 |
|
847 |
/** @var string $subkey */
|
848 |
$subkey = ParagonIE_Sodium_Core_HSalsa20::hsalsa20($nonce, $key);
|
@@ -876,7 +884,7 @@ class ParagonIE_Sodium_File extends ParagonIE_Sodium_Core_Util
|
|
876 |
);
|
877 |
|
878 |
// Pre-write 16 blank bytes for the Poly1305 tag
|
879 |
-
$start = ftell($ofp);
|
880 |
fwrite($ofp, str_repeat("\x00", 16));
|
881 |
|
882 |
/** @var string $c */
|
@@ -927,7 +935,7 @@ class ParagonIE_Sodium_File extends ParagonIE_Sodium_Core_Util
|
|
927 |
$block0 = null;
|
928 |
$subkey = null;
|
929 |
}
|
930 |
-
$end = ftell($ofp);
|
931 |
|
932 |
/*
|
933 |
* Write the Poly1305 authentication tag that provides integrity
|
@@ -1044,7 +1052,7 @@ class ParagonIE_Sodium_File extends ParagonIE_Sodium_Core_Util
|
|
1044 |
$mlen = 0
|
1045 |
) {
|
1046 |
/** @var int $pos */
|
1047 |
-
$pos = ftell($ifp);
|
1048 |
|
1049 |
/** @var int $iter */
|
1050 |
$iter = 1;
|
@@ -1107,7 +1115,7 @@ class ParagonIE_Sodium_File extends ParagonIE_Sodium_Core_Util
|
|
1107 |
}
|
1108 |
|
1109 |
/** @var int $originalPosition */
|
1110 |
-
$originalPosition = ftell($fp);
|
1111 |
|
1112 |
// Move file pointer to beginning of file
|
1113 |
fseek($fp, 0, SEEK_SET);
|
@@ -1315,7 +1323,7 @@ class ParagonIE_Sodium_File extends ParagonIE_Sodium_Core_Util
|
|
1315 |
if (!is_string($plaintext)) {
|
1316 |
throw new SodiumException('Could not read input file');
|
1317 |
}
|
1318 |
-
$first32 = ftell($ifp);
|
1319 |
|
1320 |
/** @var string $subkey */
|
1321 |
$subkey = ParagonIE_Sodium_Core32_HSalsa20::hsalsa20($nonce, $key);
|
@@ -1349,7 +1357,7 @@ class ParagonIE_Sodium_File extends ParagonIE_Sodium_Core_Util
|
|
1349 |
);
|
1350 |
|
1351 |
// Pre-write 16 blank bytes for the Poly1305 tag
|
1352 |
-
$start = ftell($ofp);
|
1353 |
fwrite($ofp, str_repeat("\x00", 16));
|
1354 |
|
1355 |
/** @var string $c */
|
@@ -1400,7 +1408,7 @@ class ParagonIE_Sodium_File extends ParagonIE_Sodium_Core_Util
|
|
1400 |
$block0 = null;
|
1401 |
$subkey = null;
|
1402 |
}
|
1403 |
-
$end = ftell($ofp);
|
1404 |
|
1405 |
/*
|
1406 |
* Write the Poly1305 authentication tag that provides integrity
|
@@ -1516,7 +1524,7 @@ class ParagonIE_Sodium_File extends ParagonIE_Sodium_Core_Util
|
|
1516 |
$mlen = 0
|
1517 |
) {
|
1518 |
/** @var int $pos */
|
1519 |
-
$pos = ftell($ifp);
|
1520 |
|
1521 |
/** @var int $iter */
|
1522 |
$iter = 1;
|
@@ -1541,4 +1549,18 @@ class ParagonIE_Sodium_File extends ParagonIE_Sodium_Core_Util
|
|
1541 |
fseek($ifp, $pos, SEEK_SET);
|
1542 |
return $res;
|
1543 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1544 |
}
|
142 |
ParagonIE_Sodium_Compat::memzero($nonce);
|
143 |
ParagonIE_Sodium_Compat::memzero($ephKeypair);
|
144 |
} catch (SodiumException $ex) {
|
145 |
+
if (isset($ephKeypair)) {
|
146 |
+
unset($ephKeypair);
|
147 |
+
}
|
148 |
}
|
149 |
return $res;
|
150 |
}
|
331 |
ParagonIE_Sodium_Compat::memzero($nonce);
|
332 |
ParagonIE_Sodium_Compat::memzero($ephKeypair);
|
333 |
} catch (SodiumException $ex) {
|
334 |
+
if (isset($ephKeypair)) {
|
335 |
+
unset($ephKeypair);
|
336 |
+
}
|
337 |
}
|
338 |
return $res;
|
339 |
}
|
684 |
}
|
685 |
|
686 |
/* Security checks */
|
687 |
+
if (
|
688 |
+
(ParagonIE_Sodium_Core_Ed25519::chrToInt($sig[63]) & 240)
|
689 |
+
&&
|
690 |
+
ParagonIE_Sodium_Core_Ed25519::check_S_lt_L(self::substr($sig, 32, 32))
|
691 |
+
) {
|
692 |
throw new SodiumException('S < L - Invalid signature');
|
693 |
}
|
694 |
if (ParagonIE_Sodium_Core_Ed25519::small_order($sig)) {
|
850 |
if (!is_string($plaintext)) {
|
851 |
throw new SodiumException('Could not read input file');
|
852 |
}
|
853 |
+
$first32 = self::ftell($ifp);
|
854 |
|
855 |
/** @var string $subkey */
|
856 |
$subkey = ParagonIE_Sodium_Core_HSalsa20::hsalsa20($nonce, $key);
|
884 |
);
|
885 |
|
886 |
// Pre-write 16 blank bytes for the Poly1305 tag
|
887 |
+
$start = self::ftell($ofp);
|
888 |
fwrite($ofp, str_repeat("\x00", 16));
|
889 |
|
890 |
/** @var string $c */
|
935 |
$block0 = null;
|
936 |
$subkey = null;
|
937 |
}
|
938 |
+
$end = self::ftell($ofp);
|
939 |
|
940 |
/*
|
941 |
* Write the Poly1305 authentication tag that provides integrity
|
1052 |
$mlen = 0
|
1053 |
) {
|
1054 |
/** @var int $pos */
|
1055 |
+
$pos = self::ftell($ifp);
|
1056 |
|
1057 |
/** @var int $iter */
|
1058 |
$iter = 1;
|
1115 |
}
|
1116 |
|
1117 |
/** @var int $originalPosition */
|
1118 |
+
$originalPosition = self::ftell($fp);
|
1119 |
|
1120 |
// Move file pointer to beginning of file
|
1121 |
fseek($fp, 0, SEEK_SET);
|
1323 |
if (!is_string($plaintext)) {
|
1324 |
throw new SodiumException('Could not read input file');
|
1325 |
}
|
1326 |
+
$first32 = self::ftell($ifp);
|
1327 |
|
1328 |
/** @var string $subkey */
|
1329 |
$subkey = ParagonIE_Sodium_Core32_HSalsa20::hsalsa20($nonce, $key);
|
1357 |
);
|
1358 |
|
1359 |
// Pre-write 16 blank bytes for the Poly1305 tag
|
1360 |
+
$start = self::ftell($ofp);
|
1361 |
fwrite($ofp, str_repeat("\x00", 16));
|
1362 |
|
1363 |
/** @var string $c */
|
1408 |
$block0 = null;
|
1409 |
$subkey = null;
|
1410 |
}
|
1411 |
+
$end = self::ftell($ofp);
|
1412 |
|
1413 |
/*
|
1414 |
* Write the Poly1305 authentication tag that provides integrity
|
1524 |
$mlen = 0
|
1525 |
) {
|
1526 |
/** @var int $pos */
|
1527 |
+
$pos = self::ftell($ifp);
|
1528 |
|
1529 |
/** @var int $iter */
|
1530 |
$iter = 1;
|
1549 |
fseek($ifp, $pos, SEEK_SET);
|
1550 |
return $res;
|
1551 |
}
|
1552 |
+
|
1553 |
+
/**
|
1554 |
+
* @param resource $resource
|
1555 |
+
* @return int
|
1556 |
+
* @throws SodiumException
|
1557 |
+
*/
|
1558 |
+
private static function ftell($resource)
|
1559 |
+
{
|
1560 |
+
$return = ftell($resource);
|
1561 |
+
if (!is_int($return)) {
|
1562 |
+
throw new SodiumException('ftell() returned false');
|
1563 |
+
}
|
1564 |
+
return (int) $return;
|
1565 |
+
}
|
1566 |
}
|
crypto/vendor/paragonie/sodium_compat/src/PHP52/SplFixedArray.php
ADDED
@@ -0,0 +1,188 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
+
|
4 |
+
if (class_exists('SplFixedArray')) {
|
5 |
+
return;
|
6 |
+
}
|
7 |
+
|
8 |
+
/**
|
9 |
+
* The SplFixedArray class provides the main functionalities of array. The
|
10 |
+
* main differences between a SplFixedArray and a normal PHP array is that
|
11 |
+
* the SplFixedArray is of fixed length and allows only integers within
|
12 |
+
* the range as indexes. The advantage is that it allows a faster array
|
13 |
+
* implementation.
|
14 |
+
*/
|
15 |
+
class SplFixedArray implements Iterator, ArrayAccess, Countable
|
16 |
+
{
|
17 |
+
/** @var array<int, mixed> */
|
18 |
+
private $internalArray = array();
|
19 |
+
|
20 |
+
/** @var int $size */
|
21 |
+
private $size = 0;
|
22 |
+
|
23 |
+
/**
|
24 |
+
* SplFixedArray constructor.
|
25 |
+
* @param int $size
|
26 |
+
*/
|
27 |
+
public function __construct($size = 0)
|
28 |
+
{
|
29 |
+
$this->size = $size;
|
30 |
+
$this->internalArray = array();
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* @return int
|
35 |
+
*/
|
36 |
+
public function count()
|
37 |
+
{
|
38 |
+
return count($this->internalArray);
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @return array
|
43 |
+
*/
|
44 |
+
public function toArray()
|
45 |
+
{
|
46 |
+
ksort($this->internalArray);
|
47 |
+
return (array) $this->internalArray;
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* @param array $array
|
52 |
+
* @param bool $save_indexes
|
53 |
+
* @return SplFixedArray
|
54 |
+
* @psalm-suppress MixedAssignment
|
55 |
+
*/
|
56 |
+
public static function fromArray(array $array, $save_indexes = true)
|
57 |
+
{
|
58 |
+
$self = new SplFixedArray(count($array));
|
59 |
+
if($save_indexes) {
|
60 |
+
foreach($array as $key => $value) {
|
61 |
+
$self[(int) $key] = $value;
|
62 |
+
}
|
63 |
+
} else {
|
64 |
+
$i = 0;
|
65 |
+
foreach (array_values($array) as $value) {
|
66 |
+
$self[$i] = $value;
|
67 |
+
$i++;
|
68 |
+
}
|
69 |
+
}
|
70 |
+
return $self;
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* @return int
|
75 |
+
*/
|
76 |
+
public function getSize()
|
77 |
+
{
|
78 |
+
return $this->size;
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* @param int $size
|
83 |
+
* @return bool
|
84 |
+
*/
|
85 |
+
public function setSize($size)
|
86 |
+
{
|
87 |
+
$this->size = $size;
|
88 |
+
return true;
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* @param string|int $index
|
93 |
+
* @return bool
|
94 |
+
*/
|
95 |
+
public function offsetExists($index)
|
96 |
+
{
|
97 |
+
return array_key_exists((int) $index, $this->internalArray);
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* @param string|int $index
|
102 |
+
* @return mixed
|
103 |
+
*/
|
104 |
+
public function offsetGet($index)
|
105 |
+
{
|
106 |
+
return $this->internalArray[(int) $index];
|
107 |
+
}
|
108 |
+
|
109 |
+
/**
|
110 |
+
* @param string|int $index
|
111 |
+
* @param mixed $newval
|
112 |
+
* @psalm-suppress MixedAssignment
|
113 |
+
*/
|
114 |
+
public function offsetSet($index, $newval)
|
115 |
+
{
|
116 |
+
$this->internalArray[(int) $index] = $newval;
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* @param string|int $index
|
121 |
+
*/
|
122 |
+
public function offsetUnset($index)
|
123 |
+
{
|
124 |
+
unset($this->internalArray[(int) $index]);
|
125 |
+
}
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Rewind iterator back to the start
|
129 |
+
* @link https://php.net/manual/en/splfixedarray.rewind.php
|
130 |
+
* @return void
|
131 |
+
* @since 5.3.0
|
132 |
+
*/
|
133 |
+
public function rewind()
|
134 |
+
{
|
135 |
+
reset($this->internalArray);
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Return current array entry
|
140 |
+
* @link https://php.net/manual/en/splfixedarray.current.php
|
141 |
+
* @return mixed The current element value.
|
142 |
+
* @since 5.3.0
|
143 |
+
*/
|
144 |
+
public function current()
|
145 |
+
{
|
146 |
+
return current($this->internalArray);
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Return current array index
|
151 |
+
* @return int The current array index.
|
152 |
+
*/
|
153 |
+
public function key()
|
154 |
+
{
|
155 |
+
return key($this->internalArray);
|
156 |
+
}
|
157 |
+
|
158 |
+
/**
|
159 |
+
* @return void
|
160 |
+
*/
|
161 |
+
public function next()
|
162 |
+
{
|
163 |
+
next($this->internalArray);
|
164 |
+
}
|
165 |
+
|
166 |
+
/**
|
167 |
+
* Check whether the array contains more elements
|
168 |
+
* @link https://php.net/manual/en/splfixedarray.valid.php
|
169 |
+
* @return bool true if the array contains any more elements, false otherwise.
|
170 |
+
*/
|
171 |
+
public function valid()
|
172 |
+
{
|
173 |
+
if (empty($this->internalArray)) {
|
174 |
+
return false;
|
175 |
+
}
|
176 |
+
$result = next($this->internalArray) !== false;
|
177 |
+
prev($this->internalArray);
|
178 |
+
return $result;
|
179 |
+
}
|
180 |
+
|
181 |
+
/**
|
182 |
+
* Do nothing.
|
183 |
+
*/
|
184 |
+
public function __wakeup()
|
185 |
+
{
|
186 |
+
// NOP
|
187 |
+
}
|
188 |
+
}
|
css/{activity-report-widget.1603293147.css → activity-report-widget.1607007971.css}
RENAMED
File without changes
|
css/{diff.1603293147.css → diff.1607007971.css}
RENAMED
File without changes
|
css/{dt_table.1603293147.css → dt_table.1607007971.css}
RENAMED
File without changes
|
css/{fullLog.1603293147.css → fullLog.1607007971.css}
RENAMED
File without changes
|
css/{iptraf.1603293147.css → iptraf.1607007971.css}
RENAMED
File without changes
|
css/{jquery-ui-timepicker-addon.1603293147.css → jquery-ui-timepicker-addon.1607007971.css}
RENAMED
File without changes
|
css/{jquery-ui.min.1603293147.css → jquery-ui.min.1607007971.css}
RENAMED
File without changes
|
css/{jquery-ui.structure.min.1603293147.css → jquery-ui.structure.min.1607007971.css}
RENAMED
File without changes
|
css/{jquery-ui.theme.min.1603293147.css → jquery-ui.theme.min.1607007971.css}
RENAMED
File without changes
|
css/main.1603293147.css
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
.wf-clearfix:before,.wf-clearfix:after{content:" ";display:table}.wf-clearfix:after{clear:both}.wf-btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;text-transform:uppercase;padding:.4rem 1rem;font-size:.875rem;line-height:1.3125rem;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media (min-width: 768px){.wf-btn{padding:.5rem 1.25rem;font-size:.875rem;line-height:1.3125rem;border-radius:4px}}.wf-btn:focus,.wf-btn.wf-focus,.wf-btn:active:focus,.wf-btn:active.wf-focus,.wf-btn.wf-active:focus,.wf-btn.wf-active.wf-focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.wf-btn:hover,.wf-btn:focus,.wf-btn.wf-focus{color:#00709e;text-decoration:none}.wf-btn:active,.wf-btn.wf-active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.wf-btn.wf-disabled,.wf-btn[disabled],.wf-btn[readonly],fieldset[disabled] .wf-btn{cursor:not-allowed;-webkit-box-shadow:none;box-shadow:none}a.wf-btn{text-decoration:none}a.wf-btn.wf-disabled,fieldset[disabled] a.wf-btn{cursor:not-allowed;pointer-events:none}.wf-btn-default{color:#00709e;background-color:#fff;border-color:#00709e}.wf-btn-default:focus,.wf-btn-default.focus{color:#00709e;background-color:#e6e6e6;border-color:#00161f}.wf-btn-default:hover{color:#00709e;background-color:#e6e6e6;border-color:#004561}.wf-btn-default:active,.wf-btn-default.active,.wf-open>.wf-btn-default.wf-dropdown-toggle{color:#00709e;background-color:#e6e6e6;border-color:#004561}.wf-btn-default:active:hover,.wf-btn-default:active:focus,.wf-btn-default:active.focus,.wf-btn-default.active:hover,.wf-btn-default.active:focus,.wf-btn-default.active.focus,.wf-open>.wf-btn-default.wf-dropdown-toggle:hover,.wf-open>.wf-btn-default.wf-dropdown-toggle:focus,.wf-open>.wf-btn-default.wf-dropdown-toggle.focus{color:#00709e;background-color:#d4d4d4;border-color:#00161f}.wf-btn-default:active,.wf-btn-default.wf-active,.wf-open>.wf-btn-default.wf-dropdown-toggle{background-image:none}.wf-btn-default.wf-disabled,.wf-btn-default[disabled],.wf-btn-default[readonly],fieldset[disabled] .wf-btn-default{color:#777;background-color:#fff;border-color:#e2e2e2;cursor:not-allowed}.wf-btn-default.wf-disabled:hover,.wf-btn-default.wf-disabled:focus,.wf-btn-default.wf-disabled.wf-focus,.wf-btn-default[disabled]:hover,.wf-btn-default[disabled]:focus,.wf-btn-default[disabled].wf-focus,.wf-btn-default[readonly]:hover,.wf-btn-default[readonly]:focus,.wf-btn-default[readonly].wf-focus,fieldset[disabled] .wf-btn-default:hover,fieldset[disabled] .wf-btn-default:focus,fieldset[disabled] .wf-btn-default.wf-focus{background-color:#fff;border-color:#00709e}.wf-btn-default .wf-badge{color:#fff;background-color:#00709e}.wf-btn-primary{color:#fff;background-color:#00709e;border-color:#005e85}.wf-btn-primary:focus,.wf-btn-primary.focus{color:#fff;background-color:#004c6b;border-color:#000405}.wf-btn-primary:hover{color:#fff;background-color:#004c6b;border-color:#003347}.wf-btn-primary:active,.wf-btn-primary.active,.wf-open>.wf-btn-primary.wf-dropdown-toggle{color:#fff;background-color:#004c6b;border-color:#003347}.wf-btn-primary:active:hover,.wf-btn-primary:active:focus,.wf-btn-primary:active.focus,.wf-btn-primary.active:hover,.wf-btn-primary.active:focus,.wf-btn-primary.active.focus,.wf-open>.wf-btn-primary.wf-dropdown-toggle:hover,.wf-open>.wf-btn-primary.wf-dropdown-toggle:focus,.wf-open>.wf-btn-primary.wf-dropdown-toggle.focus{color:#fff;background-color:#003347;border-color:#000405}.wf-btn-primary:active,.wf-btn-primary.wf-active,.wf-open>.wf-btn-primary.wf-dropdown-toggle{background-image:none}.wf-btn-primary.wf-disabled,.wf-btn-primary[disabled],.wf-btn-primary[readonly],fieldset[disabled] .wf-btn-primary{color:#fff;background-color:#59a2c0;border-color:#5996b0;cursor:not-allowed}.wf-btn-primary.wf-disabled:hover,.wf-btn-primary.wf-disabled:focus,.wf-btn-primary.wf-disabled.wf-focus,.wf-btn-primary[disabled]:hover,.wf-btn-primary[disabled]:focus,.wf-btn-primary[disabled].wf-focus,.wf-btn-primary[readonly]:hover,.wf-btn-primary[readonly]:focus,.wf-btn-primary[readonly].wf-focus,fieldset[disabled] .wf-btn-primary:hover,fieldset[disabled] .wf-btn-primary:focus,fieldset[disabled] .wf-btn-primary.wf-focus{background-color:#00709e;border-color:#005e85}.wf-btn-primary .wf-badge{color:#00709e;background-color:#fff}.wf-btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.wf-btn-success:focus,.wf-btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.wf-btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.wf-btn-success:active,.wf-btn-success.active,.wf-open>.wf-btn-success.wf-dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.wf-btn-success:active:hover,.wf-btn-success:active:focus,.wf-btn-success:active.focus,.wf-btn-success.active:hover,.wf-btn-success.active:focus,.wf-btn-success.active.focus,.wf-open>.wf-btn-success.wf-dropdown-toggle:hover,.wf-open>.wf-btn-success.wf-dropdown-toggle:focus,.wf-open>.wf-btn-success.wf-dropdown-toggle.focus{color:#fff;background-color:#398439;border-color:#255625}.wf-btn-success:active,.wf-btn-success.wf-active,.wf-open>.wf-btn-success.wf-dropdown-toggle{background-image:none}.wf-btn-success.wf-disabled,.wf-btn-success[disabled],.wf-btn-success[readonly],fieldset[disabled] .wf-btn-success{color:#fff;background-color:#95d195;border-color:#8bca8b;cursor:not-allowed}.wf-btn-success.wf-disabled:hover,.wf-btn-success.wf-disabled:focus,.wf-btn-success.wf-disabled.wf-focus,.wf-btn-success[disabled]:hover,.wf-btn-success[disabled]:focus,.wf-btn-success[disabled].wf-focus,.wf-btn-success[readonly]:hover,.wf-btn-success[readonly]:focus,.wf-btn-success[readonly].wf-focus,fieldset[disabled] .wf-btn-success:hover,fieldset[disabled] .wf-btn-success:focus,fieldset[disabled] .wf-btn-success.wf-focus{background-color:#5cb85c;border-color:#4cae4c}.wf-btn-success .wf-badge{color:#5cb85c;background-color:#fff}.wf-btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.wf-btn-info:focus,.wf-btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.wf-btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.wf-btn-info:active,.wf-btn-info.active,.wf-open>.wf-btn-info.wf-dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.wf-btn-info:active:hover,.wf-btn-info:active:focus,.wf-btn-info:active.focus,.wf-btn-info.active:hover,.wf-btn-info.active:focus,.wf-btn-info.active.focus,.wf-open>.wf-btn-info.wf-dropdown-toggle:hover,.wf-open>.wf-btn-info.wf-dropdown-toggle:focus,.wf-open>.wf-btn-info.wf-dropdown-toggle.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.wf-btn-info:active,.wf-btn-info.wf-active,.wf-open>.wf-btn-info.wf-dropdown-toggle{background-image:none}.wf-btn-info.wf-disabled,.wf-btn-info[disabled],.wf-btn-info[readonly],fieldset[disabled] .wf-btn-info{color:#fff;background-color:#94d6ea;border-color:#87d1e7;cursor:not-allowed}.wf-btn-info.wf-disabled:hover,.wf-btn-info.wf-disabled:focus,.wf-btn-info.wf-disabled.wf-focus,.wf-btn-info[disabled]:hover,.wf-btn-info[disabled]:focus,.wf-btn-info[disabled].wf-focus,.wf-btn-info[readonly]:hover,.wf-btn-info[readonly]:focus,.wf-btn-info[readonly].wf-focus,fieldset[disabled] .wf-btn-info:hover,fieldset[disabled] .wf-btn-info:focus,fieldset[disabled] .wf-btn-info.wf-focus{background-color:#5bc0de;border-color:#46b8da}.wf-btn-info .wf-badge{color:#5bc0de;background-color:#fff}.wf-btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.wf-btn-warning:focus,.wf-btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.wf-btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.wf-btn-warning:active,.wf-btn-warning.active,.wf-open>.wf-btn-warning.wf-dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.wf-btn-warning:active:hover,.wf-btn-warning:active:focus,.wf-btn-warning:active.focus,.wf-btn-warning.active:hover,.wf-btn-warning.active:focus,.wf-btn-warning.active.focus,.wf-open>.wf-btn-warning.wf-dropdown-toggle:hover,.wf-open>.wf-btn-warning.wf-dropdown-toggle:focus,.wf-open>.wf-btn-warning.wf-dropdown-toggle.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.wf-btn-warning:active,.wf-btn-warning.wf-active,.wf-open>.wf-btn-warning.wf-dropdown-toggle{background-image:none}.wf-btn-warning.wf-disabled,.wf-btn-warning[disabled],.wf-btn-warning[readonly],fieldset[disabled] .wf-btn-warning{color:#fff;background-color:#f5ca8c;border-color:#f4c37c;cursor:not-allowed}.wf-btn-warning.wf-disabled:hover,.wf-btn-warning.wf-disabled:focus,.wf-btn-warning.wf-disabled.wf-focus,.wf-btn-warning[disabled]:hover,.wf-btn-warning[disabled]:focus,.wf-btn-warning[disabled].wf-focus,.wf-btn-warning[readonly]:hover,.wf-btn-warning[readonly]:focus,.wf-btn-warning[readonly].wf-focus,fieldset[disabled] .wf-btn-warning:hover,fieldset[disabled] .wf-btn-warning:focus,fieldset[disabled] .wf-btn-warning.wf-focus{background-color:#f0ad4e;border-color:#eea236}.wf-btn-warning .wf-badge{color:#f0ad4e;background-color:#fff}.wf-btn-danger{color:#fff;background-color:#930000;border-color:#7a0000}.wf-btn-danger:focus,.wf-btn-danger.focus{color:#fff;background-color:#600000;border-color:#000}.wf-btn-danger:hover{color:#fff;background-color:#600000;border-color:#3c0000}.wf-btn-danger:active,.wf-btn-danger.active,.wf-open>.wf-btn-danger.wf-dropdown-toggle{color:#fff;background-color:#600000;border-color:#3c0000}.wf-btn-danger:active:hover,.wf-btn-danger:active:focus,.wf-btn-danger:active.focus,.wf-btn-danger.active:hover,.wf-btn-danger.active:focus,.wf-btn-danger.active.focus,.wf-open>.wf-btn-danger.wf-dropdown-toggle:hover,.wf-open>.wf-btn-danger.wf-dropdown-toggle:focus,.wf-open>.wf-btn-danger.wf-dropdown-toggle.focus{color:#fff;background-color:#3c0000;border-color:#000}.wf-btn-danger:active,.wf-btn-danger.wf-active,.wf-open>.wf-btn-danger.wf-dropdown-toggle{background-image:none}.wf-btn-danger.wf-disabled,.wf-btn-danger[disabled],.wf-btn-danger[readonly],fieldset[disabled] .wf-btn-danger{color:#fff;background-color:#b95959;border-color:#a95959;cursor:not-allowed}.wf-btn-danger.wf-disabled:hover,.wf-btn-danger.wf-disabled:focus,.wf-btn-danger.wf-disabled.wf-focus,.wf-btn-danger[disabled]:hover,.wf-btn-danger[disabled]:focus,.wf-btn-danger[disabled].wf-focus,.wf-btn-danger[readonly]:hover,.wf-btn-danger[readonly]:focus,.wf-btn-danger[readonly].wf-focus,fieldset[disabled] .wf-btn-danger:hover,fieldset[disabled] .wf-btn-danger:focus,fieldset[disabled] .wf-btn-danger.wf-focus{background-color:#930000;border-color:#7a0000}.wf-btn-danger .wf-badge{color:#930000;background-color:#fff}.wf-btn-callout{font-weight:600;text-transform:uppercase}.wf-btn-callout-subtle{font-weight:400;text-transform:uppercase}.wf-btn-link{color:#00709e;font-weight:normal;border-radius:0}.wf-btn-link,.wf-btn-link:active,.wf-btn-link.wf-active,.wf-btn-link[disabled],fieldset[disabled] .wf-btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.wf-btn-link,.wf-btn-link:hover,.wf-btn-link:focus,.wf-btn-link:active{border-color:transparent}.wf-btn-link:hover,.wf-btn-link:focus{color:#003a52;text-decoration:underline;background-color:transparent}.wf-btn-link[disabled]:hover,.wf-btn-link[disabled]:focus,fieldset[disabled] .wf-btn-link:hover,fieldset[disabled] .wf-btn-link:focus{color:#777;text-decoration:none}.wf-btn-lg,.wf-btn-group-lg>.wf-btn{padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.wf-btn-sm,.wf-btn-group-sm>.wf-btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.wf-btn-xs,.wf-btn-group-xs>.wf-btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.wf-btn-block{display:block;width:100%}.wf-btn-block+.wf-btn-block{margin-top:5px}input[type="submit"].wf-btn-block,input[type="reset"].wf-btn-block,input[type="button"].wf-btn-block{width:100%}.wf-btn-group,.wf-btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.wf-btn-group>.wf-btn,.wf-btn-group-vertical>.wf-btn{position:relative;float:left}.wf-btn-group>.wf-btn:hover,.wf-btn-group>.wf-btn:focus,.wf-btn-group>.wf-btn:active,.wf-btn-group>.wf-btn.wf-active,.wf-btn-group-vertical>.wf-btn:hover,.wf-btn-group-vertical>.wf-btn:focus,.wf-btn-group-vertical>.wf-btn:active,.wf-btn-group-vertical>.wf-btn.wf-active{z-index:2}.wf-btn-group .wf-btn+.wf-btn,.wf-btn-group .wf-btn+.wf-btn-group,.wf-btn-group .wf-btn-group+.wf-btn,.wf-btn-group .wf-btn-group+.wf-btn-group{margin-left:-1px}.wf-btn-toolbar{margin-left:-5px}.wf-btn-toolbar:before,.wf-btn-toolbar:after{content:" ";display:table}.wf-btn-toolbar:after{clear:both}.wf-btn-toolbar .wf-btn,.wf-btn-toolbar .wf-btn-group,.wf-btn-toolbar .wf-input-group{float:left}.wf-btn-toolbar>.wf-btn,.wf-btn-toolbar>.wf-btn-group,.wf-btn-toolbar>.wf-input-group{margin-left:5px}.wf-btn-group>.wf-btn:not(:first-child):not(:last-child):not(.wf-dropdown-toggle){border-radius:0}.wf-btn-group>.wf-btn:first-child{margin-left:0}.wf-btn-group>.wf-btn:first-child:not(:last-child):not(.wf-dropdown-toggle){-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0}.wf-btn-group>.wf-btn:last-child:not(:first-child),.wf-btn-group>.wf-dropdown-toggle:not(:first-child){-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0}.wf-btn-group>.wf-btn-group{float:left}.wf-btn-group>.wf-btn-group:not(:first-child):not(:last-child)>.wf-btn{border-radius:0}.wf-btn-group>.wf-btn-group:first-child:not(:last-child)>.wf-btn:last-child,.wf-btn-group>.wf-btn-group:first-child:not(:last-child)>.wf-dropdown-toggle{-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0}.wf-btn-group>.wf-btn-group:last-child:not(:first-child)>.wf-btn:first-child{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0}.wf-btn-group .wf-dropdown-toggle:active,.wf-btn-group.wf-open .wf-dropdown-toggle{outline:0}.wf-btn-group>.wf-btn+.wf-dropdown-toggle{padding-left:8px;padding-right:8px}.wf-btn-group>.wf-btn-lg+.wf-dropdown-toggle,.wf-btn-group-lg.wf-btn-group>.wf-btn+.wf-dropdown-toggle{padding-left:12px;padding-right:12px}.wf-btn-group.open .wf-dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.wf-btn-group.open .wf-dropdown-toggle.wf-btn-link{-webkit-box-shadow:none;box-shadow:none}.wf-btn .wf-caret{margin-left:0}.wf-btn-lg .wf-caret,.wf-btn-group-lg>.wf-btn .wf-caret{border-width:5px 5px 0;border-bottom-width:0}.wf-dropup .wf-btn-lg .wf-caret,.wf-dropup .wf-btn-group-lg>.wf-btn .wf-caret{border-width:0 5px 5px}.wf-btn-group-vertical>.wf-btn,.wf-btn-group-vertical>.wf-btn-group,.wf-btn-group-vertical>.wf-btn-group>.wf-btn{display:block;float:none;width:100%;max-width:100%}.wf-btn-group-vertical>.wf-btn-group:before,.wf-btn-group-vertical>.wf-btn-group:after{content:" ";display:table}.wf-btn-group-vertical>.wf-btn-group:after{clear:both}.wf-btn-group-vertical>.wf-btn-group>.wf-btn{float:none}.wf-btn-group-vertical>.wf-btn+.wf-btn,.wf-btn-group-vertical>.wf-btn+.wf-btn-group,.wf-btn-group-vertical>.wf-btn-group+.wf-btn,.wf-btn-group-vertical>.wf-btn-group+.wf-btn-group{margin-top:-1px;margin-left:0}.wf-btn-group-vertical>.wf-btn:not(:first-child):not(:last-child){border-radius:0}.wf-btn-group-vertical>.wf-btn:first-child:not(:last-child){-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0}.wf-btn-group-vertical>.wf-btn:last-child:not(:first-child){-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.wf-btn-group-vertical>.wf-btn-group:not(:first-child):not(:last-child)>.wf-btn{border-radius:0}.wf-btn-group-vertical>.wf-btn-group:first-child:not(:last-child)>.wf-btn:last-child,.wf-btn-group-vertical>.wf-btn-group:first-child:not(:last-child)>.wf-dropdown-toggle{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0}.wf-btn-group-vertical>.wf-btn-group:last-child:not(:first-child)>.wf-btn:first-child{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0}.wf-btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.wf-btn-group-justified>.wf-btn,.wf-btn-group-justified>.wf-btn-group{float:none;display:table-cell;width:1%}.wf-btn-group-justified>.wf-btn-group .wf-btn{width:100%}.wf-btn-group-justified>.wf-btn-group .wf-dropdown-menu{left:auto}[data-toggle="buttons"]>.wf-btn input[type="radio"],[data-toggle="buttons"]>.wf-btn input[type="checkbox"],[data-toggle="buttons"]>.wf-btn-group>.wf-btn input[type="radio"],[data-toggle="buttons"]>.wf-btn-group>.wf-btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.wf-pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.wf-pagination>li{display:inline}.wf-pagination>li>a,.wf-pagination>li>span{position:relative;float:left;padding:.5rem 1.25rem;line-height:1.42857;text-decoration:none;color:#00709e;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.wf-pagination>li:first-child>a,.wf-pagination>li:first-child>span{margin-left:0;-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.wf-pagination>li:last-child>a,.wf-pagination>li:last-child>span{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.wf-pagination>li>a:hover,.wf-pagination>li>a:focus,.wf-pagination>li>span:hover,.wf-pagination>li>span:focus{z-index:2;color:#003a52;background-color:#e2e2e2;border-color:#ddd}.wf-pagination>.wf-active>a,.wf-pagination>.wf-active>a:hover,.wf-pagination>.wf-active>a:focus,.wf-pagination>.wf-active>span,.wf-pagination>.wf-active>span:hover,.wf-pagination>.wf-active>span:focus{z-index:3;color:#fff;background-color:#00709e;border-color:#00709e;cursor:default}.wf-pagination>.wf-disabled>span,.wf-pagination>.wf-disabled>span:hover,.wf-pagination>.wf-disabled>span:focus,.wf-pagination>.wf-disabled>a,.wf-pagination>.wf-disabled>a:hover,.wf-pagination>.wf-disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.wf-pagination-lg>li>a,.wf-pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.33333}.wf-pagination-lg>li:first-child>a,.wf-pagination-lg>li:first-child>span{-moz-border-radius-topleft:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px}.wf-pagination-lg>li:last-child>a,.wf-pagination-lg>li:last-child>span{-moz-border-radius-topright:6px;-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-moz-border-radius-bottomright:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px}.wf-pagination-sm>li>a,.wf-pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.wf-pagination-sm>li:first-child>a,.wf-pagination-sm>li:first-child>span{-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.wf-pagination-sm>li:last-child>a,.wf-pagination-sm>li:last-child>span{-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}@-ms-viewport{width:device-width}.wf-visible-xs{display:none !important}.wf-visible-sm{display:none !important}.wf-visible-md{display:none !important}.wf-visible-lg{display:none !important}.wf-visible-xs-block,.wf-visible-xs-inline,.wf-visible-xs-inline-block,.wf-visible-sm-block,.wf-visible-sm-inline,.wf-visible-sm-inline-block,.wf-visible-md-block,.wf-visible-md-inline,.wf-visible-md-inline-block,.wf-visible-lg-block,.wf-visible-lg-inline,.wf-visible-lg-inline-block{display:none !important}@media (max-width: 767px){.wf-visible-xs{display:block !important}table.wf-visible-xs{display:table !important}tr.wf-visible-xs{display:table-row !important}th.wf-visible-xs,td.wf-visible-xs{display:table-cell !important}}@media (max-width: 767px){.wf-visible-xs-block{display:block !important}}@media (max-width: 767px){.wf-visible-xs-inline{display:inline !important}}@media (max-width: 767px){.wf-visible-xs-inline-block{display:inline-block !important}}@media (min-width: 768px) and (max-width: 991px){.wf-visible-sm{display:block !important}table.wf-visible-sm{display:table !important}tr.wf-visible-sm{display:table-row !important}th.wf-visible-sm,td.wf-visible-sm{display:table-cell !important}}@media (min-width: 768px) and (max-width: 991px){.wf-visible-sm-block{display:block !important}}@media (min-width: 768px) and (max-width: 991px){.wf-visible-sm-inline{display:inline !important}}@media (min-width: 768px) and (max-width: 991px){.wf-visible-sm-inline-block{display:inline-block !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-visible-md{display:block !important}table.wf-visible-md{display:table !important}tr.wf-visible-md{display:table-row !important}th.wf-visible-md,td.wf-visible-md{display:table-cell !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-visible-md-block{display:block !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-visible-md-inline{display:inline !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-visible-md-inline-block{display:inline-block !important}}@media (min-width: 1200px){.wf-visible-lg{display:block !important}table.wf-visible-lg{display:table !important}tr.wf-visible-lg{display:table-row !important}th.wf-visible-lg,td.wf-visible-lg{display:table-cell !important}}@media (min-width: 1200px){.wf-visible-lg-block{display:block !important}}@media (min-width: 1200px){.wf-visible-lg-inline{display:inline !important}}@media (min-width: 1200px){.wf-visible-lg-inline-block{display:inline-block !important}}@media (max-width: 767px){.wf-hidden-xs{display:none !important}}@media (min-width: 768px) and (max-width: 991px){.wf-hidden-sm{display:none !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-hidden-md{display:none !important}}@media (min-width: 1200px){.wf-hidden-lg{display:none !important}}.wf-visible-print{display:none !important}@media print{.wf-visible-print{display:block !important}table.wf-visible-print{display:table !important}tr.wf-visible-print{display:table-row !important}th.wf-visible-print,td.wf-visible-print{display:table-cell !important}}.wf-visible-print-block{display:none !important}@media print{.wf-visible-print-block{display:block !important}}.wf-visible-print-inline{display:none !important}@media print{.wf-visible-print-inline{display:inline !important}}.wf-visible-print-inline-block{display:none !important}@media print{.wf-visible-print-inline-block{display:inline-block !important}}@media print{.wf-hidden-print{display:none !important}}.wf-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.wf-container:before,.wf-container:after{content:" ";display:table}.wf-container:after{clear:both}@media (min-width: 768px){.wf-container{width:750px}}@media (min-width: 992px){.wf-container{width:970px}}@media (min-width: 1200px){.wf-container{width:1170px}}.wf-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.wf-container-fluid:before,.wf-container-fluid:after{content:" ";display:table}.wf-container-fluid:after{clear:both}.wf-row{margin-left:-15px;margin-right:-15px}.wf-row:before,.wf-row:after{content:" ";display:table}.wf-row:after{clear:both}.wf-col-xs-1,.wf-col-sm-1,.wf-col-md-1,.wf-col-lg-1,.wf-col-xs-2,.wf-col-sm-2,.wf-col-md-2,.wf-col-lg-2,.wf-col-xs-3,.wf-col-sm-3,.wf-col-md-3,.wf-col-lg-3,.wf-col-xs-4,.wf-col-sm-4,.wf-col-md-4,.wf-col-lg-4,.wf-col-xs-5,.wf-col-sm-5,.wf-col-md-5,.wf-col-lg-5,.wf-col-xs-6,.wf-col-sm-6,.wf-col-md-6,.wf-col-lg-6,.wf-col-xs-7,.wf-col-sm-7,.wf-col-md-7,.wf-col-lg-7,.wf-col-xs-8,.wf-col-sm-8,.wf-col-md-8,.wf-col-lg-8,.wf-col-xs-9,.wf-col-sm-9,.wf-col-md-9,.wf-col-lg-9,.wf-col-xs-10,.wf-col-sm-10,.wf-col-md-10,.wf-col-lg-10,.wf-col-xs-11,.wf-col-sm-11,.wf-col-md-11,.wf-col-lg-11,.wf-col-xs-12,.wf-col-sm-12,.wf-col-md-12,.wf-col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px;box-sizing:border-box}.wf-col-xs-1,.wf-col-xs-2,.wf-col-xs-3,.wf-col-xs-4,.wf-col-xs-5,.wf-col-xs-6,.wf-col-xs-7,.wf-col-xs-8,.wf-col-xs-9,.wf-col-xs-10,.wf-col-xs-11,.wf-col-xs-12{float:left}.wf-col-xs-1{width:8.33333%}.wf-col-xs-2{width:16.66667%}.wf-col-xs-3{width:25%}.wf-col-xs-4{width:33.33333%}.wf-col-xs-5{width:41.66667%}.wf-col-xs-6{width:50%}.wf-col-xs-7{width:58.33333%}.wf-col-xs-8{width:66.66667%}.wf-col-xs-9{width:75%}.wf-col-xs-10{width:83.33333%}.wf-col-xs-11{width:91.66667%}.wf-col-xs-12{width:100%}.wf-col-xs-pull-0{right:auto}.wf-col-xs-pull-1{right:8.33333%}.wf-col-xs-pull-2{right:16.66667%}.wf-col-xs-pull-3{right:25%}.wf-col-xs-pull-4{right:33.33333%}.wf-col-xs-pull-5{right:41.66667%}.wf-col-xs-pull-6{right:50%}.wf-col-xs-pull-7{right:58.33333%}.wf-col-xs-pull-8{right:66.66667%}.wf-col-xs-pull-9{right:75%}.wf-col-xs-pull-10{right:83.33333%}.wf-col-xs-pull-11{right:91.66667%}.wf-col-xs-pull-12{right:100%}.wf-col-xs-push-0{left:auto}.wf-col-xs-push-1{left:8.33333%}.wf-col-xs-push-2{left:16.66667%}.wf-col-xs-push-3{left:25%}.wf-col-xs-push-4{left:33.33333%}.wf-col-xs-push-5{left:41.66667%}.wf-col-xs-push-6{left:50%}.wf-col-xs-push-7{left:58.33333%}.wf-col-xs-push-8{left:66.66667%}.wf-col-xs-push-9{left:75%}.wf-col-xs-push-10{left:83.33333%}.wf-col-xs-push-11{left:91.66667%}.wf-col-xs-push-12{left:100%}.wf-col-xs-offset-0{margin-left:0%}.wf-col-xs-offset-1{margin-left:8.33333%}.wf-col-xs-offset-2{margin-left:16.66667%}.wf-col-xs-offset-3{margin-left:25%}.wf-col-xs-offset-4{margin-left:33.33333%}.wf-col-xs-offset-5{margin-left:41.66667%}.wf-col-xs-offset-6{margin-left:50%}.wf-col-xs-offset-7{margin-left:58.33333%}.wf-col-xs-offset-8{margin-left:66.66667%}.wf-col-xs-offset-9{margin-left:75%}.wf-col-xs-offset-10{margin-left:83.33333%}.wf-col-xs-offset-11{margin-left:91.66667%}.wf-col-xs-offset-12{margin-left:100%}.wf-col-xs-half-padding-left{padding-left:8px}.wf-col-xs-half-padding-right{padding-right:7px}@media (min-width: 768px){.wf-col-sm-1,.wf-col-sm-2,.wf-col-sm-3,.wf-col-sm-4,.wf-col-sm-5,.wf-col-sm-6,.wf-col-sm-7,.wf-col-sm-8,.wf-col-sm-9,.wf-col-sm-10,.wf-col-sm-11,.wf-col-sm-12{float:left}.wf-col-sm-1{width:8.33333%}.wf-col-sm-2{width:16.66667%}.wf-col-sm-3{width:25%}.wf-col-sm-4{width:33.33333%}.wf-col-sm-5{width:41.66667%}.wf-col-sm-6{width:50%}.wf-col-sm-7{width:58.33333%}.wf-col-sm-8{width:66.66667%}.wf-col-sm-9{width:75%}.wf-col-sm-10{width:83.33333%}.wf-col-sm-11{width:91.66667%}.wf-col-sm-12{width:100%}.wf-col-sm-pull-0{right:auto}.wf-col-sm-pull-1{right:8.33333%}.wf-col-sm-pull-2{right:16.66667%}.wf-col-sm-pull-3{right:25%}.wf-col-sm-pull-4{right:33.33333%}.wf-col-sm-pull-5{right:41.66667%}.wf-col-sm-pull-6{right:50%}.wf-col-sm-pull-7{right:58.33333%}.wf-col-sm-pull-8{right:66.66667%}.wf-col-sm-pull-9{right:75%}.wf-col-sm-pull-10{right:83.33333%}.wf-col-sm-pull-11{right:91.66667%}.wf-col-sm-pull-12{right:100%}.wf-col-sm-push-0{left:auto}.wf-col-sm-push-1{left:8.33333%}.wf-col-sm-push-2{left:16.66667%}.wf-col-sm-push-3{left:25%}.wf-col-sm-push-4{left:33.33333%}.wf-col-sm-push-5{left:41.66667%}.wf-col-sm-push-6{left:50%}.wf-col-sm-push-7{left:58.33333%}.wf-col-sm-push-8{left:66.66667%}.wf-col-sm-push-9{left:75%}.wf-col-sm-push-10{left:83.33333%}.wf-col-sm-push-11{left:91.66667%}.wf-col-sm-push-12{left:100%}.wf-col-sm-offset-0{margin-left:0%}.wf-col-sm-offset-1{margin-left:8.33333%}.wf-col-sm-offset-2{margin-left:16.66667%}.wf-col-sm-offset-3{margin-left:25%}.wf-col-sm-offset-4{margin-left:33.33333%}.wf-col-sm-offset-5{margin-left:41.66667%}.wf-col-sm-offset-6{margin-left:50%}.wf-col-sm-offset-7{margin-left:58.33333%}.wf-col-sm-offset-8{margin-left:66.66667%}.wf-col-sm-offset-9{margin-left:75%}.wf-col-sm-offset-10{margin-left:83.33333%}.wf-col-sm-offset-11{margin-left:91.66667%}.wf-col-sm-offset-12{margin-left:100%}.wf-col-sm-half-padding-left{padding-left:8px}.wf-col-sm-half-padding-right{padding-right:7px}}@media (min-width: 992px){.wf-col-md-1,.wf-col-md-2,.wf-col-md-3,.wf-col-md-4,.wf-col-md-5,.wf-col-md-6,.wf-col-md-7,.wf-col-md-8,.wf-col-md-9,.wf-col-md-10,.wf-col-md-11,.wf-col-md-12{float:left}.wf-col-md-1{width:8.33333%}.wf-col-md-2{width:16.66667%}.wf-col-md-3{width:25%}.wf-col-md-4{width:33.33333%}.wf-col-md-5{width:41.66667%}.wf-col-md-6{width:50%}.wf-col-md-7{width:58.33333%}.wf-col-md-8{width:66.66667%}.wf-col-md-9{width:75%}.wf-col-md-10{width:83.33333%}.wf-col-md-11{width:91.66667%}.wf-col-md-12{width:100%}.wf-col-md-pull-0{right:auto}.wf-col-md-pull-1{right:8.33333%}.wf-col-md-pull-2{right:16.66667%}.wf-col-md-pull-3{right:25%}.wf-col-md-pull-4{right:33.33333%}.wf-col-md-pull-5{right:41.66667%}.wf-col-md-pull-6{right:50%}.wf-col-md-pull-7{right:58.33333%}.wf-col-md-pull-8{right:66.66667%}.wf-col-md-pull-9{right:75%}.wf-col-md-pull-10{right:83.33333%}.wf-col-md-pull-11{right:91.66667%}.wf-col-md-pull-12{right:100%}.wf-col-md-push-0{left:auto}.wf-col-md-push-1{left:8.33333%}.wf-col-md-push-2{left:16.66667%}.wf-col-md-push-3{left:25%}.wf-col-md-push-4{left:33.33333%}.wf-col-md-push-5{left:41.66667%}.wf-col-md-push-6{left:50%}.wf-col-md-push-7{left:58.33333%}.wf-col-md-push-8{left:66.66667%}.wf-col-md-push-9{left:75%}.wf-col-md-push-10{left:83.33333%}.wf-col-md-push-11{left:91.66667%}.wf-col-md-push-12{left:100%}.wf-col-md-offset-0{margin-left:0%}.wf-col-md-offset-1{margin-left:8.33333%}.wf-col-md-offset-2{margin-left:16.66667%}.wf-col-md-offset-3{margin-left:25%}.wf-col-md-offset-4{margin-left:33.33333%}.wf-col-md-offset-5{margin-left:41.66667%}.wf-col-md-offset-6{margin-left:50%}.wf-col-md-offset-7{margin-left:58.33333%}.wf-col-md-offset-8{margin-left:66.66667%}.wf-col-md-offset-9{margin-left:75%}.wf-col-md-offset-10{margin-left:83.33333%}.wf-col-md-offset-11{margin-left:91.66667%}.wf-col-md-offset-12{margin-left:100%}.wf-col-md-half-padding-left{padding-left:8px}.wf-col-md-half-padding-right{padding-right:7px}}@media (min-width: 1200px){.wf-col-lg-1,.wf-col-lg-2,.wf-col-lg-3,.wf-col-lg-4,.wf-col-lg-5,.wf-col-lg-6,.wf-col-lg-7,.wf-col-lg-8,.wf-col-lg-9,.wf-col-lg-10,.wf-col-lg-11,.wf-col-lg-12{float:left}.wf-col-lg-1{width:8.33333%}.wf-col-lg-2{width:16.66667%}.wf-col-lg-3{width:25%}.wf-col-lg-4{width:33.33333%}.wf-col-lg-5{width:41.66667%}.wf-col-lg-6{width:50%}.wf-col-lg-7{width:58.33333%}.wf-col-lg-8{width:66.66667%}.wf-col-lg-9{width:75%}.wf-col-lg-10{width:83.33333%}.wf-col-lg-11{width:91.66667%}.wf-col-lg-12{width:100%}.wf-col-lg-pull-0{right:auto}.wf-col-lg-pull-1{right:8.33333%}.wf-col-lg-pull-2{right:16.66667%}.wf-col-lg-pull-3{right:25%}.wf-col-lg-pull-4{right:33.33333%}.wf-col-lg-pull-5{right:41.66667%}.wf-col-lg-pull-6{right:50%}.wf-col-lg-pull-7{right:58.33333%}.wf-col-lg-pull-8{right:66.66667%}.wf-col-lg-pull-9{right:75%}.wf-col-lg-pull-10{right:83.33333%}.wf-col-lg-pull-11{right:91.66667%}.wf-col-lg-pull-12{right:100%}.wf-col-lg-push-0{left:auto}.wf-col-lg-push-1{left:8.33333%}.wf-col-lg-push-2{left:16.66667%}.wf-col-lg-push-3{left:25%}.wf-col-lg-push-4{left:33.33333%}.wf-col-lg-push-5{left:41.66667%}.wf-col-lg-push-6{left:50%}.wf-col-lg-push-7{left:58.33333%}.wf-col-lg-push-8{left:66.66667%}.wf-col-lg-push-9{left:75%}.wf-col-lg-push-10{left:83.33333%}.wf-col-lg-push-11{left:91.66667%}.wf-col-lg-push-12{left:100%}.wf-col-lg-offset-0{margin-left:0%}.wf-col-lg-offset-1{margin-left:8.33333%}.wf-col-lg-offset-2{margin-left:16.66667%}.wf-col-lg-offset-3{margin-left:25%}.wf-col-lg-offset-4{margin-left:33.33333%}.wf-col-lg-offset-5{margin-left:41.66667%}.wf-col-lg-offset-6{margin-left:50%}.wf-col-lg-offset-7{margin-left:58.33333%}.wf-col-lg-offset-8{margin-left:66.66667%}.wf-col-lg-offset-9{margin-left:75%}.wf-col-lg-offset-10{margin-left:83.33333%}.wf-col-lg-offset-11{margin-left:91.66667%}.wf-col-lg-offset-12{margin-left:100%}.wf-col-lg-half-padding-left{padding-left:8px}.wf-col-lg-half-padding-right{padding-right:7px}}.wrap.wordfence{direction:ltr}@media (min-width: 768px){.wrap.wordfence{max-width:750px}}@media (min-width: 992px){.wrap.wordfence{max-width:970px}}@media (min-width: 1200px){.wrap.wordfence{max-width:1170px}}.wrap.wordfence>.wf-container-fluid{padding-left:0px;padding-right:0px}.wrap.wordfence .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709e}.wrap.wordfence a{text-decoration:none}.wrap.wordfence a:hover{text-decoration:underline}.wrap.wordfence a.wf-btn:hover{text-decoration:none}.wrap.wordfence p,.wrap.wordfence td,.wrap.wordfence li{font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.875rem;color:#2d2d2d;line-height:1.3125;font-weight:normal}.wrap.wordfence p strong,.wrap.wordfence td strong,.wrap.wordfence li strong{font-weight:600}.wrap.wordfence p em,.wrap.wordfence td em,.wrap.wordfence li em{font-weight:normal}.wrap.wordfence h1,.wrap.wordfence h2,.wrap.wordfence h3,.wrap.wordfence h4,.wrap.wordfence h5,.wrap.wordfence h6{font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;color:#2d2d2d;font-weight:700}.wrap.wordfence h2{font-size:1.3125rem;line-height:1.5}.wrap.wordfence h3{font-size:1.125rem}.wrap.wordfence h4{font-size:1rem}a{color:#00709e}.wf-inline-help{color:#9f9fa0}.wf-inline-help:hover{color:#00709e}.wordfenceWrap{margin:20px 0 0 20px}.wordfence-icon32{width:32px;height:32px;background-position:0 0;background-repeat:no-repeat;padding:0;margin:7px 5px 0 0;float:left}#wfHeading:after{content:'.';visibility:hidden;display:block;clear:both;height:0px}.wordfence-lock-icon{width:32px;height:32px;background-image:url(../images/wordfence-logo.svg)}a.wfhelp{margin:0 3px 0 3px;text-decoration:none;display:inline-block;vertical-align:middle;font:normal normal normal 14px/1 FontAwesome;text-rendering:auto;-webkit-font-smoothing:antialiased}a.wfhelp:before{content:'\f29c'}.wordfence .resulticon{display:block;float:left;width:16px;height:16px;background-position:0 0;background-repeat:no-repeat;border-width:0;padding:0;margin:0 3px 0 0;background-image:url(../images/icons/bullet_yellow.png)}.wordfenceBoldTD{font-weight:bold}.wfAjax24{display:none;width:24px;height:24px;background-image:url(../images/icons/ajax24.gif);margin:0;padding:0}div.wfLoadingWhite32{width:32px;height:32px;background-image:url(../images/icons/ajaxWhite32x32.gif);margin:0;padding:0}.wfTabsContainer{background-color:#FFF;overflow:hidden;border:1px solid #CCC;padding:15px;min-height:200px;-webkit-font-smoothing:antialiased}#wfTabs::after{content:".";display:block;height:0;width:0;line-height:0;clear:both;visibility:hidden}#wfTabs a{float:left;z-index:10;height:18px;margin:0 5px -1px 0;padding:5px 8px;border:1px solid #CCC;text-decoration:none;background-color:#EFEFEF;color:#21759B;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px}#wfTabs a.selected{border-bottom:1px solid #FFF;background-color:#FFF;color:#777}.wordfenceTopTab{display:none;margin-top:15px}.wordfenceTopTab.active{display:block}.wordfenceHelpLink{margin-top:15px}.wfAjaxLight128{background-image:url(../images/icons/ajax3.gif)}.wfStrong{font-weight:bold}.wordfenceModeElem{width:1px;height:1px;opacity:0}.wfWarn{color:#F00}.wf-flag{display:inline-block;vertical-align:middle;margin:0px 2px 0 0;background-repeat:no-repeat;background-position:center center;width:16px;height:11px;background-image:url(../images/flags.png);-webkit-flex-shrink:0;flex-shrink:0;-webkit-flex-grow:0;flex-grow:0}.wfHitTime{font-style:italic}.wfAvatar img{vertical-align:middle;margin-right:0.5rem}.wf-hex-sequence{color:#587ECB}.wfLoadMoreButton.disabled,.wfLoadMoreButton[disabled]{pointer-events:none;opacity:0.65}table.wfConfigForm th{font-weight:normal;text-align:left;padding:2px 3px 1px 0;vertical-align:middle}table.wfConfigForm td{vertical-align:middle}table.wfConfigForm td.align-top{vertical-align:top}table th.wfConfigEnable{font-weight:bold;min-width:25%}.wfSavedMsg{display:none;color:#A00}table th.wfSubheading{font-weight:bold;padding-top:10px}h3.wfConfigHeading{font-size:22px;color:#777;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:italic;font-weight:normal}.wfTipText{color:#777;font-family:Georgia,Times New Roman,Times,serif;font-style:italic}.wfBlackCursor{color:#FFF}.wf-spinner{display:inline-block;width:4px}.wferror{color:#F00}#wordfenceWorking{padding:10px 40px 6px 16px;z-index:100000;position:fixed;right:16px;bottom:0px;background-color:#fcb214;border:5px solid #fcb214;border-width:6px 15px 6px 6px;color:#525355;font-size:12px;font-weight:bold;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;background-image:url("../images/icons/working-indicator.gif");background-position:100% 50%;background-repeat:no-repeat}@media (max-width: 960px){#wordfenceWorking{left:auto;right:0px}}#paidWrap{position:relative}.paidInnerMsg{width:500px;margin:150px auto 0 auto;color:#000;font-size:18px;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:1.8em;text-align:center;-webkit-font-smoothing:antialiased}.wfMarker{height:1px;width:1px}.wfPaidOnlyNotice{width:500px;background-color:#FFFFE0;border:1px solid #000;padding:10px;margin:20px}.wfOnOffSwitch{display:inline-block;position:relative !important;width:69px !important;-webkit-user-select:none !important;-moz-user-select:none !important;-ms-user-select:none !important;user-select:none !important}.wfOnOffSwitch-checkbox{display:none !important}.wfOnOffSwitch-label{display:block !important;overflow:hidden !important;cursor:pointer !important;border:2px solid #999999 !important;border-radius:19px !important;margin:0}.wfOnOffSwitch-inner{width:200% !important;margin-left:-100% !important;-webkit-transition:margin 0.3s ease-in !important;-o-transition:margin 0.3s ease-in !important;transition:margin 0.3s ease-in !important;-webkit-transition-delay:0s !important;transition-delay:0s !important}.wfOnOffSwitch-inner:before,.wfOnOffSwitch-inner:after{float:left !important;width:50% !important;height:19px !important;padding:0 !important;line-height:19px !important;font-size:14px !important;color:white !important;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif !important;font-weight:bold !important;-webkit-box-sizing:border-box !important;-moz-box-sizing:border-box !important;box-sizing:border-box !important;-moz-border-radius:19px !important;-webkit-border-radius:19px;border-radius:19px !important;-webkit-box-shadow:0 9.5px 0 rgba(0,0,0,0.08) inset !important;box-shadow:0 9.5px 0 rgba(0,0,0,0.08) inset !important}.wfOnOffSwitch-inner:before{content:"ON" !important;padding-left:10px !important;background-color:#30D965 !important;color:#FFFFFF !important;-moz-border-radius:19px 0 0 19px !important;-webkit-border-radius:19px;border-radius:19px 0 0 19px !important}.wfOnOffSwitch-inner:after{content:"OFF" !important;padding-right:10px !important;background-color:#EEEEEE !important;color:#999999 !important;text-align:right !important;-moz-border-radius:0 19px 19px 0 !important;-webkit-border-radius:0;border-radius:0 19px 19px 0 !important}.wfOnOffSwitch-switch{width:19px !important;margin:0 !important;background:#FFFFFF !important;border:2px solid #999999 !important;-moz-border-radius:19px !important;-webkit-border-radius:19px;border-radius:19px !important;position:absolute !important;top:0 !important;bottom:0 !important;right:46px !important;-webkit-transition:all 0.3s ease-in !important;-o-transition:all 0.3s ease-in !important;transition:all 0.3s ease-in !important;-webkit-transition-delay:0s !important;transition-delay:0s !important;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjEiLz48c3RvcCBvZmZzZXQ9IjgwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=') !important;background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(0,0,0,0.1)),color-stop(80%, rgba(0,0,0,0))) !important;background-image:-moz-linear-gradient(center top, rgba(0,0,0,0.1) 0%,rgba(0,0,0,0) 80%) !important;background-image:-webkit-linear-gradient(center top, rgba(0,0,0,0.1) 0%,rgba(0,0,0,0) 80%) !important;background-image:linear-gradient(to center bottom, rgba(0,0,0,0.1) 0%,rgba(0,0,0,0) 80%) !important;box-shadow:0 1px 1px white inset !important}.wfOnOffSwitch-checkbox:checked+.wfOnOffSwitch-label .wfOnOffSwitch-inner{margin-left:0 !important}.wfOnOffSwitch-checkbox:checked+.wfOnOffSwitch-label .wfOnOffSwitch-switch{right:0 !important}#wordfenceConfigWarning,#wordfenceAdminEmailWarning{clear:left;margin-top:5px}.wf-striped-table{width:100%;max-width:100%;border-collapse:collapse}.wf-striped-table th{border-left:1px solid #bdbdbd}.wf-striped-table th:first-of-type{border-left:0}.wf-striped-table th,.wf-striped-table td{padding:1rem}.wf-striped-table thead th,.wf-striped-table thead td,.wf-striped-table tfoot th,.wf-striped-table tfoot td,.wf-striped-table tbody.thead th,.wf-striped-table tbody.thead td{background-color:#ebebeb;color:#777;font-weight:bold;text-align:left}.wf-striped-table tbody tr.even td,.wf-striped-table tbody tr:nth-child(2n) td{background-color:#ffffff}.wf-striped-table tbody tr td,.wf-striped-table tbody tr.odd td{background-color:#fafafa}.wf-striped-table tbody tr:hover>td{background-color:#fffbd8}.wf-striped-table tbody.empty-row tr td{border-width:0;padding:8px 0;background-color:transparent}.wf-striped-table .wf-result-error,.wf-block-list .wf-result-error{color:#d0514c !important;font-weight:bold}.wf-striped-table .wf-result-error:before,.wf-block-list .wf-result-error:before{content:"\2718"}.wf-striped-table .wf-result-success{max-width:20%}.wf-striped-table .wf-result-success,.wf-block-list .wf-result-success{color:#008c10 !important;font-weight:bold}.wf-striped-table .wf-result-success:before,.wf-block-list .wf-result-success:before{content:"\2713"}.wf-striped-table .wf-result-success:before,.wf-block-list .wf-result-success:before,.wf-striped-table .wf-result-error:before,.wf-block-list .wf-result-error:before{font-size:16px;display:inline-block;margin:0px 8px 0px 0px}.wf-striped-table .wf-result-inactive,.wf-block-list .wf-result-inactive{font-weight:bold;color:#666666 !important}.wf-fixed-table{table-layout:fixed}pre.wf-pre{margin:8px 0 20px;padding:12px;background:#ffffff;border:1px solid #999999;overflow:auto}.wf-center{text-align:center}#wfConfigForm,.wf-diagnostics-wrapper{max-width:1035px}.wf-hidden{display:none !important}.wf-card{position:relative;margin:0 auto .625rem;padding:1rem;box-sizing:border-box;background:#fff;box-shadow:0 0 0 1px rgba(200,215,225,0.5),0 1px 2px #e9eff3}.wf-card .wf-card-inner{min-height:76px;width:100%;padding:8px;box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;position:relative}.wf-card .wf-card-inner .wf-card-content{max-width:75%}.wf-card .wf-card-inner .wf-card-content .wf-card-title{font-size:1.125rem;width:100%}.wf-card .wf-card-inner .wf-card-content .wf-card-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:.875rem;color:#4f748e}.wf-card .wf-card-inner .wf-card-action{position:absolute;top:0;right:0;height:100%;background:none;border:0;outline:0;width:48px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;vertical-align:middle;transition:transform 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275),color 0.2s ease-in}.wf-card .wf-card-inner .wf-card-action .wf-card-action-chevron{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJjaGV2cm9uLW9iamVjdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBhdGggaWQ9ImNoZXZyb24iIGQ9Ik0yMCA5bC04IDgtOC04IDEuNDE0LTEuNDE0TDEyIDE0LjE3Mmw2LjU4Ni02LjU4NiIvPgo8L3N2Zz4K");background-repeat:no-repeat;background-position:center center;width:24px;height:24px;fill:#87a6bc}.wf-card .wf-card-inner .wf-card-action .wf-card-action-checkbox{background-image:url(../images/checkbox.png);background-repeat:no-repeat;background-position:left center;width:29px;height:29px}.wf-card .wf-card-inner .wf-card-action .wf-card-action-checkbox.checked{background-position:right center}.wf-card .wf-card-extra{display:none;padding:0.5rem;margin-top:1rem;border-top:1px solid #f3f6f8}@media (min-width: 768px){.wf-card .wf-card-extra{padding:1rem}}.wf-card.active .wf-card-extra{display:block}.wf-card.wf-card-left .wf-card-content{margin-left:48px}.wf-card.wf-card-left .wf-card-action{right:auto;left:0px}.wf-card.disabled .wf-card-content .wf-card-title{color:#aaaaaa}.wf-card.disabled .wf-card-content .wf-card-subtitle{color:#8ea6be}.wf-inline-block{display:inline-block}@media (max-width: 767px){.wf-inline-block-xs{display:inline-block}}.wf-full-width{width:100%;max-width:100%}.wf-no-top{margin-top:0 !important}.wf-add-top{margin-top:1rem !important}.wf-add-top-large{margin-top:1.5rem !important}.wf-add-top-medium{margin-top:0.75rem !important}.wf-add-top-small{margin-top:0.5rem !important}.wf-add-top-smaller{margin-top:0.25rem !important}.wf-no-bottom{margin-bottom:0 !important}.wf-add-bottom{margin-bottom:1rem !important}.wf-add-bottom-large{margin-bottom:1.5rem !important}.wf-add-bottom-medium{margin-bottom:0.75rem !important}.wf-add-bottom-small{margin-bottom:0.5rem !important}.wf-add-bottom-smaller{margin-bottom:0.25rem !important}.wf-padding-no-top{padding-top:0 !important}.wf-no-right{margin-right:0 !important}.wf-padding-no-bottom{padding-bottom:0 !important}.wf-padding-no-left{padding-left:0 !important}.wf-padding-no-right{padding-right:0 !important}.wf-padding-add-top{padding-top:1rem !important}.wf-padding-add-top-small{padding-top:0.5rem !important}.wf-padding-add-top-medium{padding-top:0.75rem !important}.wf-padding-add-top-large{padding-top:1.5rem !important}.wf-padding-add-bottom{padding-bottom:1rem !important}.wf-padding-add-bottom-small{padding-bottom:0.5rem !important}.wf-padding-add-bottom-medium{padding-bottom:0.75rem !important}.wf-padding-add-bottom-large{padding-bottom:1.5rem !important}.wf-padding-add-left{padding-left:1rem !important}.wf-padding-add-left-small{padding-left:0.5rem !important}.wf-padding-add-left-medium{padding-left:0.75rem !important}.wf-padding-add-left-large{padding-left:1.5rem !important}.wf-padding-add-right{padding-right:1rem !important}.wf-padding-add-right-small{padding-right:0.5rem !important}.wf-padding-add-right-medium{padding-right:0.75rem !important}.wf-padding-add-right-large{padding-right:1.5rem !important}.wf-left{text-align:left !important}.wf-center{text-align:center !important}.wf-block-center{margin:0 auto}.wf-right{text-align:right !important}.wf-block-right{margin:0 0 0 auto}@media (max-width: 767px){.wf-left-xs{text-align:left !important}.wf-center-xs{text-align:center !important}.wf-padding-add-top-xs{padding-top:1rem !important}.wf-padding-add-top-xs-small{padding-top:0.5rem !important}.wf-padding-add-top-xs-large{padding-top:1.5rem !important}.wf-padding-add-bottom-xs{padding-bottom:1rem !important}.wf-padding-add-bottom-xs-small{padding-bottom:0.5rem !important}.wf-padding-add-bottom-xs-large{padding-bottom:1.5rem !important}}@media (min-width: 768px) and (max-width: 991px){.wf-left-sm{text-align:left !important}.wf-center-sm{text-align:center !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-left-md{text-align:left !important}.wf-center-md{text-align:center !important}.wf-right-md{text-align:right !important}}@media (min-width: 1200px){.wf-left-lg{text-align:left !important}.wf-center-lg{text-align:center !important}.wf-right-lg{text-align:right !important}}.wf-border-no-top{border-top:none !important}.wf-border-no-right{border-right:none !important}.wf-border-no-bottom{border-bottom:none !important}.wf-border-no-left{border-left:none !important}.wf-overflow-x-auto{overflow-x:auto}.wf-overflow-y-auto{overflow-y:auto}@media (max-width: 767px){.wf-overflow-x-auto-xs{overflow-x:auto}.wf-overflow-y-auto-xs{overflow-y:auto}}.wf-blue{color:#00709e !important}.wf-blue-light{color:#008cc1 !important}.wf-gray-dark{color:#2d2d2d !important}.wf-gray-blue{color:#3f596b !important}.wf-green-dark{color:#11967a !important}.wf-green-light{color:#16bc9b !important}.wf-red-dark{color:#930000 !important}.wf-red-light{color:#c10000 !important}.wf-yellow-dark{color:#fcb214 !important}.wf-yellow-light{color:#ffd10a !important}.wf-gray{color:#525355 !important}.wf-gray-light{color:#9f9fa0 !important}.wf-nowrap{white-space:nowrap}.wf-tip{color:#fcb214;font-size:1.1rem;margin-right:0.25rem}.wf-text-small{font-size:80%}.wf-scroll-x::-webkit-scrollbar,.wf-scroll-y::-webkit-scrollbar{-webkit-appearance:none;width:7px;height:7px}.wf-scroll-x::-webkit-scrollbar-thumb,.wf-scroll-y::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgba(0,0,0,0.194);-webkit-box-shadow:0 0 1px rgba(255,255,255,0.5)}.wf-split-word{word-wrap:break-word;word-break:break-all}@media (max-width: 767px){.wf-split-word-xs{word-wrap:break-word;word-break:break-all;white-space:normal !important}}.wfselect2-container{font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;min-width:200px}@media (min-width: 768px){.wfselect2-container{min-width:280px}}@media (min-width: 992px){.wfselect2-container{min-width:320px}}@media (max-width: 767px){.wfselect2-container .wfselect2-search.wfselect2-search--inline{margin:0 !important}}.wf-select2-placeholder-fix .wfselect2-search__field{width:auto !important}#wf-all-options-search .wfselect2-container{min-width:250px}#wf-all-options-search .wf-select2-placeholder-fix .wfselect2-search__field{margin-top:10px !important}.wf-page-title{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;margin-top:0.5rem}.wf-page-title>*{-webkit-flex-grow:0;flex-grow:0;min-width:0}.wf-page-title>*:first-child{-webkit-flex-grow:0;flex-grow:0;min-width:32px;-webkit-flex-basis:32px;flex-basis:32px;padding-right:0.25rem}.wf-page-title .wordfence-icon32{margin:0;margin-right:0.5rem}.wf-page-title h2{padding:0 !important}.wf-page-title .wfOnOffSwitch{-webkit-flex-basis:69px;flex-basis:69px;-webkit-flex-shrink:0;flex-shrink:0;margin-left:0.5rem}.wf-tab-container{background-color:#fff}@media (min-width: 768px){.wf-tab-container{background-color:unset}}.wf-page-tabs,.wf-page-fixed-tabs{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;border-bottom:1px solid #d0d0d0;margin:0;margin-top:0.5rem;margin-left:-10px;margin-right:-10px}@media (min-width: 768px){.wf-page-tabs,.wf-page-fixed-tabs{margin-left:0;margin-right:0}}.wf-page-tabs>*,.wf-page-fixed-tabs>*{-webkit-flex-grow:0;flex-grow:0;min-width:0}.wf-page-tabs>*:first-child,.wf-page-fixed-tabs>*:first-child{-webkit-flex-grow:0;flex-grow:0;min-width:32px;-webkit-flex-basis:32px;flex-basis:32px}.wf-page-tabs .wordfence-icon32,.wf-page-fixed-tabs .wordfence-icon32{margin:0;margin-right:0.5rem;margin-left:0.5rem}@media (min-width: 768px){.wf-page-tabs .wordfence-icon32,.wf-page-fixed-tabs .wordfence-icon32{margin-left:0}}.wf-page-tabs .wf-text-tab,.wf-page-fixed-tabs .wf-text-tab{margin:0;margin-left:0.5rem;color:#333}.wf-page-tabs .wf-tab,.wf-page-fixed-tabs .wf-tab{border:1px solid #fff;border-top-right-radius:0.5rem;border-top-left-radius:0.5rem;border-bottom:none;margin-bottom:-1px;margin-right:0.5rem;color:#333}@media (min-width: 768px){.wf-page-tabs .wf-tab,.wf-page-fixed-tabs .wf-tab{border:1px solid #d0d0d0;background:#e6e6e6}}.wf-page-tabs .wf-tab a,.wf-page-fixed-tabs .wf-tab a{display:block;padding:0.5rem 1rem;font-size:14px;line-height:24px;text-decoration:none;font-weight:bold;color:#333}.wf-page-tabs .wf-tab.wf-active,.wf-page-tabs .wf-tab:hover,.wf-page-fixed-tabs .wf-tab.wf-active,.wf-page-fixed-tabs .wf-tab:hover{border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#00709e;-webkit-box-shadow:none;box-shadow:none}.wf-page-tabs .wf-tab.wf-active a,.wf-page-tabs .wf-tab:hover a,.wf-page-fixed-tabs .wf-tab.wf-active a,.wf-page-fixed-tabs .wf-tab:hover a{color:#00709e}.wf-tab-content{display:none;margin-top:15px}.wf-tab-content.wf-active{display:block}.wf-fixed-tab-content{margin-top:15px}.wf-section-title{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start}.wf-section-title>*{-webkit-flex-grow:0;flex-grow:0;min-width:0}.wf-section-title>h1,.wf-section-title>h2,.wf-section-title>h3,.wf-section-title>h4,.wf-section-title>h5,.wf-section-title>h6{-webkit-flex-grow:1;flex-grow:1;color:#2d2d2d !important;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif !important;line-height:1.5rem !important;font-weight:700 !important;padding:0 !important;margin:0 !important}@media (min-width: 768px){.wf-section-title>h1,.wf-section-title>h2,.wf-section-title>h3,.wf-section-title>h4,.wf-section-title>h5,.wf-section-title>h6{padding-right:0.25rem !important}}.wf-section-title h2{font-size:1.3125rem;line-height:1.5}.wf-section-title h3{font-size:1.125rem}.wf-section-title h4{font-size:1rem}.wf-section-title .wordfence-icon32{margin:0;margin-right:0.5rem}.wf-status-circular{position:relative}.wf-status-circular-text{position:absolute;left:50%;top:50%;padding:0;margin:0;transform:translate(-50%, -50%);color:#aaa;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:1.3125rem;font-weight:300;line-height:1.5}.wf-status-circular .wf-status-overlay-text{position:absolute;left:50%;top:50%;padding:0;margin:0;width:200%;text-align:center;transform:translate(-50%, -50%);font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.875rem;font-weight:normal;line-height:1.3125;opacity:0.0;color:#777}.wf-status-warning,.wf-status-critical,.wf-status-payment-expiring,.wf-status-renewing{width:100px;height:100px;margin-bottom:1rem}.wf-status-warning svg path{fill:#fcb214}.wf-status-critical svg path{fill:#930000}.wf-status-payment-expiring svg rect,.wf-status-payment-expiring svg path{fill:#930000}.wf-status-renewing svg rect,.wf-status-renewing svg path{fill:#11967a}#howGetIPs-preview{color:#8c8c8c}#howGetIPs-preview strong{color:#666}.wf-scrollTop{background:#424242;bottom:30px;right:15px;position:fixed;z-index:999;display:none}.wf-scrollTop a{background:#959595;display:block;padding:4px 5px;line-height:32px;width:32px;color:#ffffff;text-align:center}.wf-back-icon{color:#00709e;margin-right:0.75rem;font-size:1.5rem !important}.wf-back-link-chevron{margin-left:1rem}.wf-back-link-chevron:first-of-type{margin-left:0}.wf-back-link{font-weight:bold;text-decoration:none}.wf-premium-link{font-weight:bold}.wf-boolean-switch{border:1px solid #aaa;display:block;cursor:pointer;width:54px;height:30px;min-width:54px;min-height:30px;-moz-border-radius:15px;-webkit-border-radius:15px;border-radius:15px;line-height:30px !important;background-color:#ffffff;position:relative;box-sizing:border-box;transition:background-color 0.2s ease-in-out, border-color 0.2s ease-in-out}@media (min-width: 768px){.wf-boolean-switch{width:34px;height:20px;min-width:34px;min-height:20px;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;line-height:20px !important}}.wf-boolean-switch .wf-boolean-switch-handle{position:relative;display:block;border:1px solid #aaa;background-color:#fff;width:30px;height:30px;min-width:30px;min-height:30px;-moz-border-radius:15px;-webkit-border-radius:15px;border-radius:15px;margin-top:-1px;box-sizing:border-box;left:-1px;transition:border-color 0.2s ease-in-out, left 0.2s ease-in-out}@media (min-width: 768px){.wf-boolean-switch .wf-boolean-switch-handle{width:20px;height:20px;min-width:20px;min-height:20px;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px}}.wf-boolean-switch.wf-active{border:1px solid #00709e;background-color:#00709e}.wf-boolean-switch.wf-active .wf-boolean-switch-handle{border:1px solid #00709e;left:25px}@media (min-width: 768px){.wf-boolean-switch.wf-active .wf-boolean-switch-handle{left:15px}}.wf-boolean-switch.wf-disabled{pointer-events:none;border-color:#e2e2e2}.wf-boolean-switch.wf-disabled .wf-boolean-switch-handle{border-color:#e2e2e2}.wf-boolean-switch.wf-disabled.wf-active{border-color:#e2e2e2;background-color:#e2e2e2}.wf-boolean-switch.wf-disabled.wf-active .wf-boolean-switch-handle{border-color:#e2e2e2}.wf-option-checkbox,[type=checkbox].wf-option-checkbox+label:before{content:'\f3fd';font-family:"Ionicons" !important;display:block;cursor:pointer;width:30px;height:30px;min-width:30px;min-height:30px;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;line-height:30px !important;text-align:center !important;background-color:#ffffff !important;box-shadow:0px 0px 0px 1px #aaa;color:#ffffff !important;font-size:30px !important;font-weight:normal !important}@media (min-width: 768px){.wf-option-checkbox,[type=checkbox].wf-option-checkbox+label:before{width:20px;height:20px;min-width:20px;min-height:20px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;line-height:21px !important;font-size:25px !important}}@media (min-width: 768px){.wf-option-checkbox{position:relative}.wf-option-checkbox>*{position:absolute;top:9px;left:50%;transform:translateX(-50%) translateY(-50%)}}.wf-option-radio,[type=radio].wf-option-radio+label:before{content:"\f401";font-family:"Ionicons" !important;display:block;cursor:pointer;width:30px;height:30px;min-width:30px;min-height:30px;line-height:30px !important;text-align:center !important;color:#ccc !important;font-size:30px !important;font-weight:normal !important}@media (min-width: 768px){.wf-option-radio,[type=radio].wf-option-radio+label:before{width:20px;height:20px;min-width:20px;min-height:20px;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;line-height:20px !important}}[type=checkbox].wf-option-checkbox.wf-small+label:before{width:20px;height:20px;min-width:20px;min-height:20px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;line-height:21px !important;font-size:20px !important}[type=radio].wf-option-radio.wf-small+label:before{width:20px;height:20px;min-width:20px;min-height:20px;line-height:21px !important;font-size:20px !important}[type=checkbox].wf-option-checkbox+label:before,[type=radio].wf-option-radio+label:before{text-align:center !important;text-indent:0px;display:inline-block;vertical-align:-6px;margin:0px 5px 0px 0px;font-weight:normal;font-style:normal}[type=checkbox].wf-option-checkbox.wf-small+label:before,[type=radio].wf-option-radio.wf-small+label:before{text-indent:0px;vertical-align:-3px}.wf-option-checkbox.wf-checked,[type=checkbox].wf-option-checkbox:checked+label:before{color:#ffffff !important;box-shadow:0px 0px 0px 1px #00709e !important;background-color:#00709e !important}.wf-option-checkbox.wf-disabled,[type=checkbox].wf-option-checkbox:disabled+label:before{color:#f1f1f1 !important;box-shadow:0px 0px 0px 1px #e2e2e2 !important;background-color:#f1f1f1 !important}.wf-option-checkbox.wf-checked.wf-disabled,[type=checkbox].wf-option-checkbox:disabled:checked+label:before{color:#777 !important;box-shadow:0px 0px 0px 1px #e2e2e2 !important;background-color:#f1f1f1 !important}.wf-option-radio.wf-checked,[type=radio].wf-option-radio:checked+label:before{content:"\f3a7";color:#00709e !important}.wf-option-checkbox[type=checkbox],.wf-option-checkbox[type=radio],.wf-option-radio[type=checkbox],.wf-option-radio[type=radio]{position:absolute;left:-9999px}.wf-option-text input[type="text"],input.wf-input-text{text-align:left;width:100%;height:40px;border-radius:0;border:0;background-color:#ffffff;box-shadow:1px 1px 1px 2px rgba(215,215,215,0.65)}.wf-option-text input[type="text"]:placeholder-shown,input.wf-input-text:placeholder-shown{font-style:italic;color:#bfbfbf}::-webkit-input-placeholder{color:#bfbfbf}:-moz-placeholder{color:#bfbfbf;opacity:1}::-moz-placeholder{color:#bfbfbf;opacity:1}:-ms-input-placeholder{color:#bfbfbf}::-ms-input-placeholder{color:#bfbfbf}::placeholder{color:#bfbfbf}.wf-option-premium .wf-option-title,.wf-option-premium .wf-option-title>ul>li,.wf-option.wf-disabled .wf-option-title,.wf-option.wf-disabled .wf-option-title>ul>li{color:#aaa !important}.wf-option-premium .wf-option-checkbox,.wf-option-premium .wf-option-radio,.wf-option.wf-disabled .wf-option-checkbox,.wf-option.wf-disabled .wf-option-radio{opacity:0.5}.wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-value{padding-top:0}.wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-value .wf-fa{font-size:8rem}.wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-value svg{width:160px}.wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-label{font-size:1.35rem;font-weight:300;padding-bottom:0}.wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status-premium .wf-block-labeled-value-value{color:#9f9fa0}.wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status-premium .wf-block-labeled-value-value svg{fill:#9f9fa0}.wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status-premium .wf-block-labeled-value-label{color:#9f9fa0}.wf-indeterminate-progress{-webkit-animation:wf-indeterminate-progress-keyframes 1s steps(8, end) infinite;-o-animation:wf-indeterminate-progress-keyframes 1s steps(8, end) infinite;animation:wf-indeterminate-progress-keyframes 1s steps(8, end) infinite}.wf-indeterminate-progress path{fill:#00709e}@-moz-keyframes wf-indeterminate-progress-keyframes{to{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes wf-indeterminate-progress-keyframes{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes wf-indeterminate-progress-keyframes{to{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.wf-flex-row{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row}.wf-flex-row.wf-flex-row-full-height{-webkit-align-items:stretch;align-items:stretch}.wf-flex-row.wf-flex-row-vertical-xs{-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.wf-flex-row.wf-flex-row-vertical-xs{-webkit-flex-direction:row;flex-direction:row}}.wf-flex-row .wf-flex-row-1{-webkit-flex-grow:1;flex-grow:1}.wf-flex-row .wf-flex-row-0{-webkit-flex-grow:0;flex-grow:0}.wf-flex-row .wf-flex-col-100,.wf-flex-row .wf-flex-col-xs-100{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-basis:100%;flex-basis:100%;width:100%}@media (min-width: 768px){.wf-flex-row .wf-flex-col-sm-100{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-basis:100%;flex-basis:100%;width:100%}}@media (min-width: 992px){.wf-flex-row .wf-flex-col-md-100{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-basis:100%;flex-basis:100%;width:100%}}@media (min-width: 1200px){.wf-flex-row .wf-flex-col-lg-100{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-basis:100%;flex-basis:100%;width:100%}}.wf-flex-row .wf-flex-col-50,.wf-flex-row .wf-flex-col-xs-50{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-basis:50%;flex-basis:50%;width:50%}@media (min-width: 768px){.wf-flex-row .wf-flex-col-sm-50{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-basis:50%;flex-basis:50%;width:50%}}@media (min-width: 992px){.wf-flex-row .wf-flex-col-md-50{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-basis:50%;flex-basis:50%;width:50%}}@media (min-width: 1200px){.wf-flex-row .wf-flex-col-lg-50{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-basis:50%;flex-basis:50%;width:50%}}.wf-switch{display:-webkit-flex !important;display:flex !important;-webkit-align-items:stretch !important;align-items:stretch !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important;-webkit-flex-direction:row !important;flex-direction:row !important;margin:0;padding:0}.wf-switch>li{margin:0 !important;padding:0.5rem 0.7rem !important;text-transform:uppercase;cursor:pointer;color:#aaa;font-weight:400;border-top:1px solid #bfbfbf;border-bottom:1px solid #bfbfbf;border-right:1px solid #bfbfbf}.wf-switch>li:first-of-type{border-left:1px solid #bfbfbf;-moz-border-radius-topleft:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px}.wf-switch>li:last-of-type{-moz-border-radius-topright:6px;-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-moz-border-radius-bottomright:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px}.wf-switch>li.wf-active{color:#ffffff;background-color:#00709e}.wf-tooltip,.ui-widget.wf-tooltip{max-width:600px;font-size:0.75rem;overflow-wrap:break-word}.wf-widget-learning-mode{border-top:1px solid #eee;margin:0 -1rem;padding:1rem;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;-webkit-flex-direction:row;flex-direction:row}@media (min-width: 768px){.wf-widget-learning-mode{padding:1.5rem}}.wf-widget-learning-mode svg{width:18px}.wf-widget-learning-mode svg path{fill:#aaa}.wf-widget-learning-mode span{padding-left:0.5rem;font-size:.875rem;line-height:1.3125;font-weight:600}.wf-drawer-overlay{position:fixed;top:0px;right:0px;bottom:0px;left:160px;background-color:rgba(0,0,0,0.5);z-index:9980;padding:5rem 0}.folded .wf-drawer-overlay{left:36px}@media only screen and (max-width: 960px){.auto-fold .wf-drawer-overlay{left:36px}}.rtl .wf-drawer-overlay{right:160px;left:0px}.rtl .folded .wf-drawer-overlay{right:36px}@media only screen and (max-width: 960px){.rtl .auto-fold .wf-drawer-overlay{right:36px}}@media screen and (max-width: 782px){.wf-drawer-overlay,.folded .wf-drawer-overlay,.auto-fold .wf-drawer-overlay,.rtl .wf-drawer-overlay,.rtl .folded .wf-drawer-overlay,.rtl .auto-fold .wf-drawer-overlay{left:0px;right:0px}}.wf-drawer{background-color:#ffffff;position:fixed;top:32px;bottom:0px;right:0px;z-index:9981}.wf-drawer .wf-modal{display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column;height:100%}.wf-drawer .wf-modal ul,.wf-drawer .wf-modal li{padding:0;margin:0}.wf-drawer .wf-modal .wf-modal-header{-webkit-flex-shrink:0;flex-shrink:0;min-height:44px;padding:1rem;width:100%;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;position:relative;background-color:#00709e;color:#ffffff}.wf-drawer .wf-modal .wf-modal-header .wf-modal-header-content{max-width:75%}.wf-drawer .wf-modal .wf-modal-header .wf-modal-header-content .wf-modal-title{font-size:1.3125rem;line-height:1.5;font-weight:300;width:100%;transition:color 0.2s ease-in}.wf-drawer .wf-modal .wf-modal-header .wf-modal-header-content .wf-modal-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:.575rem;color:#4f748e}.wf-drawer .wf-modal .wf-modal-content{-webkit-flex-grow:1;flex-grow:1;display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column;padding:1rem}.wf-drawer .wf-modal .wf-modal-content>*:first-child{margin-top:0}.wf-drawer .wf-modal .wf-modal-content select,.wf-drawer .wf-modal .wf-modal-content select option,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default{font-size:0.7rem;font-weight:bold}@media (min-width: 768px){.wf-drawer .wf-modal .wf-modal-content select,.wf-drawer .wf-modal .wf-modal-content select option,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default{font-size:0.8rem}}@media (min-width: 992px){.wf-drawer .wf-modal .wf-modal-content select,.wf-drawer .wf-modal .wf-modal-content select option,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default{font-size:0.9rem}}.wf-drawer .wf-modal .wf-modal-content .wf-option-select-option,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default .wfselect2-selection--single{text-align:left;height:40px;border-radius:0;border:0;background-color:#ffffff;box-shadow:1px 1px 1px 2px rgba(215,215,215,0.35)}.wf-drawer .wf-modal .wf-modal-content .wf-option-select-option .wfselect2-selection__rendered,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default .wfselect2-selection__rendered,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered{color:#333;line-height:40px}.wf-drawer .wf-modal .wf-modal-content .wf-option-select-option .wfselect2-selection__arrow,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default .wfselect2-selection__arrow,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow{height:38px}.wf-drawer .wf-modal .wf-modal-content .wf-option-select-option.wfselect2-container--disabled .wfselect2-selection__rendered,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default.wfselect2-container--disabled .wfselect2-selection__rendered,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default .wfselect2-selection--single.wfselect2-container--disabled .wfselect2-selection__rendered{color:#aaa}.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:#333 transparent transparent}.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default.wfselect2-container--open .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:transparent transparent #333}.wf-drawer .wf-modal .wf-modal-footer{-webkit-flex-shrink:0;flex-shrink:0;min-height:44px;padding:1rem;width:100%;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;position:relative;background-color:#f1f1f1;border-top:1px solid #d9d9d9}.wf-mobile-menu-overlay{position:fixed;top:0px;right:0px;bottom:0px;left:0px;background-color:rgba(0,0,0,0.5);z-index:100000}.wf-mobile-menu-overlay>.wf-mobile-menu-tap-hint{position:absolute;top:25%;left:50%;transform:translateX(-50%);color:#ffffff;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:1.3125rem;font-weight:300;line-height:1.5}.wf-mobile-menu{position:fixed;left:50%;transform:translateX(-50%);z-index:100001}.wf-mobile-menu>.wf-mobile-menu-items{margin:0;padding:0 0 0.25rem 0;list-style:none}.wf-mobile-menu>.wf-mobile-menu-items>li{margin:0;padding:0.25rem 0}.wf-mobile-menu>.wf-mobile-menu-items>li>a{box-sizing:border-box}.wf-circle-tooltip.ui-tooltip{padding:0;font-size:0.7rem;max-width:400px;border:1px solid #9f9fa0;position:absolute !important;z-index:3000;-moz-border-radius:6px;-webkit-border-radius:6px;border-radius:6px}.wf-circle-tooltip.ui-tooltip h4{margin:0 0 10px}.wf-circle-tooltip.ui-tooltip ul{margin:10px 0}.wf-circle-tooltip.ui-tooltip p{font-size:0.7rem;margin:10px 0 0}.wf-circle-tooltip.ui-tooltip a{color:#00709e;text-decoration:none}.wf-circle-tooltip.ui-tooltip a:hover{text-decoration:underline}.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-header,.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-body{padding:12px}.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-header{-moz-border-radius:6px 6px 0px 0px;-webkit-border-radius:6px;border-radius:6px 6px 0px 0px;background-color:#f1f1f1}.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-header h4{margin:0;font-size:0.8rem}.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-body .wf-tooltip-status-circle{position:relative;padding:0 10px 0 0}.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-body .wf-tooltip-status-circle .wf-status-overlay-text{display:none}.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-body ul li strong{width:20%}.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-body ul li span{width:80%}.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-block{position:relative;background-color:#fff;z-index:3001;-moz-border-radius:6px;-webkit-border-radius:6px;border-radius:6px}.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-block:after{content:'';position:absolute;bottom:-20px;left:20px;width:0;height:0;border-left:20px solid transparent;border-right:20px solid transparent;border-top:20px solid #fff}.wf-circle-tooltip.ui-tooltip:after{content:'';position:absolute;bottom:-22px;left:18px;width:0;height:0;border-left:22px solid transparent;border-right:22px solid transparent;border-top:22px solid rgba(0,0,0,0.5);filter:blur(2px)}.wf-circle-tooltip.ui-tooltip.wf-tooltip-vertical-top:after{top:-22px;bottom:auto;border-left:22px solid transparent;border-right:22px solid transparent;border-bottom:22px solid rgba(0,0,0,0.5);border-top-width:0}.wf-circle-tooltip.ui-tooltip.wf-tooltip-vertical-top .wf-circle-tooltip-block:after{top:-20px;bottom:auto;border-left:20px solid transparent;border-right:20px solid transparent;border-bottom:20px solid #f1f1f1;border-top-width:0}.wf-circle-tooltip.ui-tooltip.wf-tooltip-vertical-top.wf-tooltip-horizontal-right:after{left:auto;right:18px}.wf-circle-tooltip.ui-tooltip.wf-tooltip-vertical-top.wf-tooltip-horizontal-right .wf-circle-tooltip-block:after{left:auto;right:20px}.wf-circle-tooltip.ui-tooltip.wf-tooltip-vertical-bottom.wf-tooltip-horizontal-right:after{left:auto;right:18px}.wf-circle-tooltip.ui-tooltip.wf-tooltip-vertical-bottom.wf-tooltip-horizontal-right .wf-circle-tooltip-block:after{left:auto;right:20px}#wf-mobile-controls{white-space:nowrap;font-size:1.2rem}.wf-callout-warning{background-color:#feecc4;padding:0.8rem 1.25rem}.wf-tip-light-bulb{color:#fcb214;font-size:1.5rem;font-weight:bold}.wf-tip-info-message{padding-left:0.5rem !important;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.875rem;color:#2d2d2d;line-height:1.3125;font-weight:normal}.wf-overdue-cron td{background-color:#fff4f4 !important}.wf-inline-notice{background:#ffffff;border:1px solid #ccd0d4;border-left-color:#ffb900;border-left-width:4px;box-shadow:0 1px 1px rgba(0,0,0,0.04);padding:8px 12px;display:flex;justify-content:flex-start;align-items:center}.wf-inline-notice>*{flex-grow:1}.wf-inline-notice:first-child{flex-grow:0;flex-shrink:0}.wf-inline-notice span{padding-left:0.5rem}.wf-block{position:relative;margin:0 auto 0.5rem;padding:0 1rem;box-sizing:border-box;background-color:#fff;box-shadow:0 0 0 1px rgba(200,215,225,0.25),0 1px 2px #e9eff3}@media (min-width: 768px){.wf-block{padding:0 1.5rem}}.wf-block.wf-block-no-padding{padding:0}.wf-block.wf-block-transparent{background-color:transparent;box-shadow:none}.wf-block .wf-block-banner{min-height:44px;margin:0 -1rem;padding:0;box-sizing:border-box;position:relative;background-color:#fcb214;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:row;flex-direction:row}.wf-block .wf-block-banner>li{margin:0;padding:0.75rem 1rem}@media (min-width: 768px){.wf-block .wf-block-banner{margin:0 -1.5rem}.wf-block .wf-block-banner>li{padding:0.75rem 1.5rem}}.wf-block .wf-block-header{min-height:44px;padding:1rem 0;width:100%;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;position:relative}.wf-block .wf-block-header .wf-block-header-content{max-width:75%}.wf-block .wf-block-header .wf-block-header-content .wf-block-title{font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.9rem;width:100%;transition:color 0.2s ease-in}.wf-block .wf-block-header .wf-block-header-content .wf-block-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:0.775rem}.wf-block .wf-block-header .wf-block-header-action{position:absolute;top:0;right:0;height:100%;background:none;border:0;outline:0;width:48px;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-end;justify-content:flex-end;vertical-align:middle;transition:transform 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275),color 0.2s ease-in}.wf-block .wf-block-header .wf-block-header-action.wf-block-header-action-text{width:auto}.wf-block .wf-block-header .wf-block-header-action.wf-block-header-action-text.wf-block-header-action-text-success{color:#11967a}.wf-block .wf-block-header .wf-block-header-action.wf-block-header-action-text.wf-block-header-action-text-warning{color:#930000}.wf-block .wf-block-header .wf-block-header-action.wf-block-header-action-text.wf-block-header-action-text-warning a{color:#930000}.wf-block .wf-block-header .wf-block-header-action .wf-block-header-action-chevron{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJjaGV2cm9uLW9iamVjdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBhdGggaWQ9ImNoZXZyb24iIGQ9Ik0yMCA5bC04IDgtOC04IDEuNDE0LTEuNDE0TDEyIDE0LjE3Mmw2LjU4Ni02LjU4NiIvPgo8L3N2Zz4K");background-repeat:no-repeat;background-position:center center;width:24px;height:24px}.wf-block .wf-block-header .wf-block-header-action .wf-block-header-action-disclosure{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJkaXNjbG9zdXJlLWNsb3NlZC1vYmplY3QiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIxMnB4IiBoZWlnaHQ9IjEycHgiIHZpZXdCb3g9IjAgMCAxMiAxMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTIgMTIiCgkgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxwYXRoIGlkPSJkaXNjbG9zdXJlLWNsb3NlZCIgZD0iTSA2IDAgbCA2IDYgLTYgNiAwIC0xMiIgZmlsbD0iIzc3NyIvPgo8L3N2Zz4=");background-repeat:no-repeat;background-position:center center;width:12px;height:12px;transition:transform 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275),background 0.2s ease-in}.wf-block .wf-block-header .wf-block-header-action .wf-block-header-action-checkbox{background-image:url(../images/checkbox.png);background-repeat:no-repeat;background-position:left center;width:29px;height:29px}.wf-block .wf-block-header .wf-block-header-action .wf-block-header-action-checkbox.wf-checked{background-position:right center}.wf-block .wf-block-content{display:none;margin:0 -1rem;padding:0 1rem}@media (min-width: 768px){.wf-block .wf-block-content{margin:0 -1.5rem;padding:0 1.5rem}}.wf-block .wf-block-content .wf-block-list{margin:0 -1rem;padding:0;list-style:none}@media (min-width: 768px){.wf-block .wf-block-content .wf-block-list{margin:0 -1.5rem}}.wf-block .wf-block-content .wf-block-list.wf-block-list-striped>li:nth-of-type(odd){background-color:#f9f9f9}.wf-block .wf-block-content .wf-block-list.wf-block-list-striped>li:nth-of-type(even){background-color:#ffffff}.wf-block .wf-block-content .wf-block-list>li{display:block;min-height:44px;padding:0 1rem;margin:0;border-top:1px solid #e2e2e2;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between}@media (min-width: 768px){.wf-block .wf-block-content .wf-block-list>li{padding:0 1.5rem}}.wf-block .wf-block-content .wf-block-list>li>*:first-child{-webkit-flex-grow:1;flex-grow:1;min-width:0}.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal{box-sizing:border-box;margin-top:-1px;display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-wrap:wrap;flex-wrap:wrap}.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal>li{-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:100%;flex-basis:100%;border-left:1px solid #e2e2e2}@media (min-width: 768px){.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal>li{-webkit-flex-basis:50%;flex-basis:50%}}@media (min-width: 992px){.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal>li{-webkit-flex-basis:25%;flex-basis:25%}}.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal.wf-block-list-nowrap{overflow-y:auto;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal.wf-block-list-nowrap>li{-webkit-flex-shrink:0;flex-shrink:0}.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal.wf-block-list-horizontal-5>li{-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:20%;flex-basis:20%}.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal>*:first-child{border-left:0}@media (min-width: 768px){.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal.wf-block-list-equal>li{max-width:50%}}@media (min-width: 992px){.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal.wf-block-list-equal>li{max-width:25%}}.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal.wf-block-list-horizontal-5.wf-block-list-equal>li{max-width:20%}.wf-block .wf-block-content .wf-block-list .wf-block-list-state{text-align:center}@media (min-width: 1200px){.wf-block .wf-block-content .wf-block-list .wf-block-list-state{text-align:left}}.wf-block .wf-block-content .wf-block-list .wf-block-list-state-enabled .wf-fa{color:#11967a}.wf-block .wf-block-content .wf-block-list .wf-block-list-state-disabled .wf-fa{color:#525355}.wf-block .wf-block-content .wf-block-list .wf-block-list-state-premium{color:#9f9fa0}.wf-block .wf-block-content .wf-block-list .wf-block-list-dismiss{padding-left:2rem;font-size:1.25rem}.wf-block .wf-block-content .wf-block-list .wf-block-list-dismiss a{color:#525355}.wf-block .wf-block-content:first-child>.wf-block-list>li:first-child{border-top:none}.wf-block .wf-block-content .wf-block-left-right{margin:0 -1rem;padding:0;list-style:none;display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-wrap:wrap;flex-wrap:wrap}@media (min-width: 768px){.wf-block .wf-block-content .wf-block-left-right{margin:0 -1.5rem}}.wf-block .wf-block-content .wf-block-left-right.wf-block-left-right-nowrap{-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wf-block .wf-block-content .wf-block-left-right>li{display:block;min-height:44px;padding:0;margin:0;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between}.wf-block .wf-block-content .wf-block-left-right>li>*:first-child{-webkit-flex-grow:1;flex-grow:1;min-width:0}.wf-block .wf-block-content .wf-block-left-right>li.wf-left{text-align:left}.wf-block .wf-block-content .wf-block-left-right>li.wf-right{text-align:right}.wf-block .wf-block-content .wf-block-left-center-right{margin:0 -1rem;padding:0;list-style:none;display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-align-content:center;align-content:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wf-block .wf-block-content .wf-block-left-center-right>li{display:block;min-height:44px;padding:0;margin:0;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:33.3333%;flex-basis:33.3333%;max-width:33.3333%}.wf-block .wf-block-content .wf-block-left-center-right>li a{text-decoration:none;font-size:.875rem}.wf-block .wf-block-content .wf-block-left-center-right>li.wf-left{text-align:left}.wf-block .wf-block-content .wf-block-left-center-right>li.wf-center{text-align:center;-webkit-justify-content:center;justify-content:center}.wf-block .wf-block-content .wf-block-left-center-right>li.wf-center .wordfence-icon32{margin:0}.wf-block .wf-block-content .wf-block-left-center-right>li.wf-right{text-align:right;-webkit-justify-content:flex-end;justify-content:flex-end}.wf-block .wf-block-content .wf-block-labeled-value{box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:column;flex-direction:column;margin:0 -1rem;padding:1rem}@media (min-width: 768px){.wf-block .wf-block-content .wf-block-labeled-value{margin:0 -1.5rem;padding:1.5rem}}.wf-block .wf-block-content .wf-block-labeled-value-value{font-size:3rem;line-height:3rem;color:#9f9fa0;padding:1rem}.wf-block .wf-block-content .wf-block-labeled-value-label{font-size:0.75rem;color:#9f9fa0;padding:0 1rem 1rem 1rem}.wf-block.wf-block-no-header .wf-block-content .wf-block-list>li{border-top:none}.wf-block.wf-active .wf-block-content,.wf-block.wf-always-active .wf-block-content{display:block}.wf-block.wf-active>.wf-block-header>.wf-block-header-content>.wf-block-title{color:#00709e}.wf-block.wf-active>.wf-block-header>.wf-block-header-content>.wf-block-header-action>.wf-block-header-action-disclosure{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJkaXNjbG9zdXJlLWNsb3NlZC1vYmplY3QiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIxMnB4IiBoZWlnaHQ9IjEycHgiIHZpZXdCb3g9IjAgMCAxMiAxMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTIgMTIiCgkgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxwYXRoIGlkPSJkaXNjbG9zdXJlLWNsb3NlZCIgZD0iTSA2IDAgbCA2IDYgLTYgNiAwIC0xMiIgZmlsbD0iIzAwNzA5ZSIvPgo8L3N2Zz4=") !important;transform:rotate(90deg)}.wf-block.wf-disabled>.wf-block-header>.wf-block-header-content>.wf-block-title,.wf-block.wf-disabled>.wf-block-header>.wf-block-header-content>.wf-block-subtitle{color:#bfbfbf !important}.wf-block.wf-disabled>.wf-block-header>.wf-block-header-content>.wf-block-header-action>.wf-block-header-action-disclosure{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJkaXNjbG9zdXJlLWNsb3NlZC1vYmplY3QiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIxMnB4IiBoZWlnaHQ9IjEycHgiIHZpZXdCb3g9IjAgMCAxMiAxMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTIgMTIiCgkgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxwYXRoIGlkPSJkaXNjbG9zdXJlLWNsb3NlZCIgZD0iTSA2IDAgbCA2IDYgLTYgNiAwIC0xMiIgZmlsbD0iI2JkYmRiZCIvPgo8L3N2Zz4=") !important;transform:rotate(0deg)}.wf-block.wf-disabled>.wf-block-content{display:none !important}.wf-block.wf-block-header-left .wf-block-header-content{margin-left:48px}.wf-block.wf-block-header-left .wf-block-header-action{right:auto;left:0px}.wf-block.wf-disabled .wf-dashboard-item-content .wf-block-title{color:#aaaaaa}.wf-block.wf-disabled .wf-dashboard-item-content .wf-block-subtitle{color:#8ea6be}.wf-section-title{margin-bottom:1rem}.wf-status-detail{box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:column;flex-direction:column;margin:0 -1rem;padding:1rem}.wf-status-detail p{margin:0 0 0.45rem 0}.wf-status-detail .wf-status-circular{margin-bottom:1rem}.wf-status-detail .wf-status-detail-title{font-weight:700 !important;font-size:1rem !important;line-height:1.3125 !important}.wf-status-detail .wf-status-detail-subtitle{font-size:.875rem !important;line-height:1.3125 !important;font-weight:normal !important;text-align:center}.wf-status-detail .wf-status-detail-link>a{font-weight:600 !important;font-size:0.85rem !important}.wf-block-navigation-option{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wf-block-navigation-option svg.wf-block-navigation-option-icon{width:50px;min-width:50px;fill:#9f9fa0}.wf-block-navigation-option:hover{cursor:pointer}.wf-block-navigation-option:hover a{text-decoration:underline}.wf-block-navigation-option:hover svg.wf-block-navigation-option-icon{fill:#00709e}.wf-select-group{display:-webkit-flex !important;display:flex !important;-webkit-align-items:center !important;align-items:center !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important;-webkit-flex-direction:row !important;flex-direction:row !important;-webkit-flex-grow:0 !important;flex-grow:0 !important}.wf-select-group .wfselect2-container{min-width:200px}@media (max-width: 767px){.wf-select-group .wfselect2-container{max-width:100px}}.wf-select-group .wfselect2-container--default .wfselect2-selection--single{display:block;width:100%;height:38px;padding:.5rem 1.25rem;font-size:14px;line-height:1.42857;color:#2b2b2b;background-color:#fff;background-image:none;border:1px solid #ddd;border-radius:4px;border-top-right-radius:0;border-bottom-right-radius:0;border-right:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,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}.wf-select-group .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered{color:#2b2b2b;line-height:inherit}.wf-select-group .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow{height:38px}.wf-select-group .wf-form-control{display:inline-block;width:auto;border-top-left-radius:0;border-bottom-left-radius:0;margin-left:0}.wf-flex-horizontal{display:-webkit-flex !important;display:flex !important;-webkit-align-items:center !important;align-items:center !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important;-webkit-flex-direction:row !important;flex-direction:row !important}.wf-flex-horizontal>*:first-child{-webkit-flex-grow:0 !important;flex-grow:0 !important}.wf-flex-horizontal.wf-flex-align-left{-webkit-align-items:flex-start !important;align-items:flex-start !important}.wf-flex-horizontal.wf-flex-align-right{-webkit-justify-content:flex-end !important;justify-content:flex-end !important}.wf-flex-horizontal.wf-flex-full-width{width:100%}.wf-flex-horizontal.wf-flex-full-width>*:last-child{-webkit-flex-grow:1 !important;flex-grow:1 !important}.wf-flex-horizontal.wf-flex-full-width.wf-flex-grow-first>*:first-child{-webkit-flex-grow:1 !important;flex-grow:1 !important}.wf-flex-horizontal.wf-flex-full-width.wf-flex-grow-first>*:last-child{-webkit-flex-grow:0 !important;flex-grow:0 !important}.wf-flex-horizontal.wf-flex-full-width.wf-flex-grow-all>*:first-child,.wf-flex-horizontal.wf-flex-full-width.wf-flex-grow-all>*{-webkit-flex-grow:1 !important;flex-grow:1 !important}.wf-flex-horizontal>li{padding:0;margin:0}.wf-flex-vertical{display:-webkit-flex !important;display:flex !important;-webkit-align-items:center !important;align-items:center !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important;-webkit-flex-direction:column !important;flex-direction:column !important}.wf-flex-vertical>*:first-child{-webkit-flex-grow:0 !important;flex-grow:0 !important}.wf-flex-vertical.wf-flex-align-left{-webkit-align-items:flex-start !important;align-items:flex-start !important}.wf-flex-vertical.wf-flex-align-right{-webkit-align-items:flex-end !important;align-items:flex-end !important}.wf-flex-vertical.wf-flex-full-width{-webkit-align-items:stretch !important;align-items:stretch !important}@media (max-width: 767px){.wf-flex-vertical.wf-flex-align-left-xs{-webkit-align-items:flex-start !important;align-items:flex-start !important}}@media (min-width: 768px) and (max-width: 991px){.wf-flex-vertical.wf-flex-align-left-sm{-webkit-align-items:flex-start !important;align-items:flex-start !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-flex-vertical.wf-flex-align-left-md{-webkit-align-items:flex-start !important;align-items:flex-start !important}}@media (min-width: 1200px){.wf-flex-vertical.wf-flex-align-left-lg{-webkit-align-items:flex-start !important;align-items:flex-start !important}}.wf-flex-vertical>li{padding:0;margin:0}@media (max-width: 767px){.wf-flex-vertical-xs{display:-webkit-flex !important;display:flex !important;-webkit-align-items:center !important;align-items:center !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important;-webkit-flex-direction:column !important;flex-direction:column !important}.wf-flex-vertical-xs>*:first-child{-webkit-flex-grow:0 !important;flex-grow:0 !important}.wf-flex-vertical-xs.wf-flex-align-left{-webkit-align-items:flex-start !important;align-items:flex-start !important}.wf-flex-vertical-xs.wf-flex-align-right{-webkit-align-items:flex-end !important;align-items:flex-end !important}.wf-flex-vertical-xs.wf-flex-full-width{-webkit-align-items:stretch !important;align-items:stretch !important}}ul.wf-option,.wf-form-field{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;padding:1rem 0;position:relative}ul.wf-option li,.wf-form-field li{margin:0;padding:0}ul.wf-option.wf-option-no-spacing,.wf-form-field.wf-option-no-spacing{padding:0;margin:0}ul.wf-option.wf-option-toggled>*:last-child,ul.wf-option.wf-option-footer>*:last-child,.wf-form-field.wf-option-toggled>*:last-child,.wf-form-field.wf-option-footer>*:last-child{margin-right:1rem}@media (max-width: 768px){ul.wf-option.wf-option-footer,.wf-form-field.wf-option-footer{-webkit-flex-direction:column;flex-direction:column}}ul.wf-option>.wf-option-content,.wf-form-field>.wf-option-content{-webkit-flex-grow:1;flex-grow:1}ul.wf-option>.wf-option-content>ul,.wf-form-field>.wf-option-content>ul{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;width:100%}ul.wf-option>.wf-option-content>ul>*:first-child,.wf-form-field>.wf-option-content>ul>*:first-child{-webkit-flex-grow:1;flex-grow:1}@media (min-width: 768px){ul.wf-option>.wf-option-content>ul,.wf-form-field>.wf-option-content>ul{-webkit-flex-direction:row;flex-direction:row;-webkit-align-items:center;align-items:center}}ul.wf-option.wf-option-toggled-segmented *,.wf-form-field.wf-option-toggled-segmented *{-webkit-flex-grow:0;flex-grow:0}ul.wf-option.wf-option-toggled-segmented *:first-child,.wf-form-field.wf-option-toggled-segmented *:first-child{-webkit-flex-grow:1;flex-grow:1}ul.wf-option.wf-option-toggled-segmented>*:last-child,.wf-form-field.wf-option-toggled-segmented>*:last-child{margin-left:1rem}ul.wf-option.wf-option-toggled-segmented .wf-option-title,.wf-form-field.wf-option-toggled-segmented .wf-option-title{font-size:.8rem}ul.wf-option.wf-option-toggled-segmented .wf-option-segments,.wf-form-field.wf-option-toggled-segmented .wf-option-segments{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:stretch;align-content:stretch;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label{-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:50%;flex-basis:50%;display:block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;text-transform:uppercase;padding:.5rem 1.25rem;font-size:14px;line-height:1.42857;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#00709e;background-color:#fff;border-color:#00709e;border-radius:0}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.focus{color:#00709e;background-color:#e6e6e6;border-color:#00161f}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label:hover{color:#00709e;background-color:#e6e6e6;border-color:#004561}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label:active,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.active,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label:active,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.active,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle{color:#00709e;background-color:#e6e6e6;border-color:#004561}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label:active:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label:active:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label:active.focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.active:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.active:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.active.focus,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle:hover,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle:focus,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle.focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label:active:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label:active:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label:active.focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.active:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.active:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.active.focus,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle:hover,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle:focus,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle.focus{color:#00709e;background-color:#d4d4d4;border-color:#00161f}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label:active,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-active,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label:active,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-active,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle{background-image:none}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-disabled,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label[disabled],ul.wf-option.wf-option-toggled-segmented .wf-option-segments label[readonly],fieldset[disabled] ul.wf-option.wf-option-toggled-segmented .wf-option-segments label,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-disabled,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label[disabled],.wf-form-field.wf-option-toggled-segmented .wf-option-segments label[readonly],fieldset[disabled] .wf-form-field.wf-option-toggled-segmented .wf-option-segments label{color:#777;background-color:#fff;border-color:#e2e2e2;cursor:not-allowed}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-disabled:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-disabled:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-disabled.wf-focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label[disabled]:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label[disabled]:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label[disabled].wf-focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label[readonly]:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label[readonly]:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label[readonly].wf-focus,fieldset[disabled] ul.wf-option.wf-option-toggled-segmented .wf-option-segments label:hover,fieldset[disabled] ul.wf-option.wf-option-toggled-segmented .wf-option-segments label:focus,fieldset[disabled] ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-disabled:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-disabled:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-disabled.wf-focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label[disabled]:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label[disabled]:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label[disabled].wf-focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label[readonly]:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label[readonly]:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label[readonly].wf-focus,fieldset[disabled] .wf-form-field.wf-option-toggled-segmented .wf-option-segments label:hover,fieldset[disabled] .wf-form-field.wf-option-toggled-segmented .wf-option-segments label:focus,fieldset[disabled] .wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-focus{background-color:#fff;border-color:#00709e}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label .wf-badge,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label .wf-badge{color:#fff;background-color:#00709e}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-segment-first,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-segment-first{border-radius:4px 0 0 4px}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-segment-last,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-segment-last{border-radius:0 4px 4px 0}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio],.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]{position:absolute;left:-9999px}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label{color:#fff;background-color:#00709e;border-color:#005e85}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.focus{color:#fff;background-color:#004c6b;border-color:#000405}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:hover{color:#fff;background-color:#004c6b;border-color:#003347}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.active,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.active,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle{color:#fff;background-color:#004c6b;border-color:#003347}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active.focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.active:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.active:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.active.focus,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle:hover,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle:focus,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle.focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active.focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.active:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.active:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.active.focus,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle:hover,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle:focus,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle.focus{color:#fff;background-color:#003347;border-color:#000405}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-active,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-active,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle{background-image:none}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-disabled,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[disabled],ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[readonly],fieldset[disabled] ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-disabled,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[disabled],.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[readonly],fieldset[disabled] .wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label{color:#fff;background-color:#59a2c0;border-color:#5996b0;cursor:not-allowed}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-disabled:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-disabled:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-disabled.wf-focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[disabled]:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[disabled]:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[disabled].wf-focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[readonly]:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[readonly]:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[readonly].wf-focus,fieldset[disabled] ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:hover,fieldset[disabled] ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:focus,fieldset[disabled] ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-disabled:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-disabled:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-disabled.wf-focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[disabled]:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[disabled]:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[disabled].wf-focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[readonly]:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[readonly]:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[readonly].wf-focus,fieldset[disabled] .wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:hover,fieldset[disabled] .wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:focus,fieldset[disabled] .wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-focus{background-color:#00709e;border-color:#005e85}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label .wf-badge,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label .wf-badge{color:#00709e;background-color:#fff}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:disabled+label,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:disabled+label{cursor:not-allowed;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);opacity:.65}ul.wf-option.wf-option-toggled-multiple>.wf-option-content>ul,.wf-form-field.wf-option-toggled-multiple>.wf-option-content>ul{-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:flex-start;align-items:flex-start}ul.wf-option>.wf-option-spacer,.wf-form-field>.wf-option-spacer{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-shrink:0;flex-shrink:0;margin:0 1rem 0 0;width:30px;height:30px}@media (min-width: 768px){ul.wf-option>.wf-option-spacer,.wf-form-field>.wf-option-spacer{margin:0 2rem 0 1rem;width:20px;height:20px}}ul.wf-option>.wf-option-premium-lock,.wf-form-field>.wf-option-premium-lock{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-shrink:0;flex-shrink:0;background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB3aWR0aD0iMjRweCIgaGVpZ2h0PSIzMHB4IiB2aWV3Qm94PSIwIDAgMjQgMzAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxwYXRoIGQ9Ik0yMy45NDksMTQuMjMzYy0wLjM3OSwtMC4zOSAtMC45MDQsLTAuNjA2IC0xLjQ0OCwtMC41OTVsLTAuNjgzLDBsMCwtNC4wOTJjMC4wMzIsLTIuNTM1IC0wLjk4NiwtNC45NzMgLTIuODEyLC02LjczMWMtMS43NTksLTEuODI4IC00LjE5OCwtMi44NDcgLTYuNzM0LC0yLjgxNWMtMi41MzYsLTAuMDMyIC00Ljk3NiwwLjk4NyAtNi43MzQsMi44MTVjLTEuODI2LDEuNzU4IC0yLjg0NCw0LjE5NiAtMi44MTIsNi43MzFsMCw0LjA4OWwtMC42OCwwYy0wLjU0NCwtMC4wMTEgLTEuMDY5LDAuMjA1IC0xLjQ0OCwwLjU5NWMtMC4zOTUsMC4zODIgLTAuNjEyLDAuOTEyIC0wLjU5OCwxLjQ2MWwwLDEyLjI2NmMtMC4wMTEsMC41NDQgMC4yMDQsMS4wNjkgMC41OTUsMS40NDhjMC4zNzksMC4zOTEgMC45MDQsMC42MDYgMS40NDgsMC41OTVsMjAuNDU4LDBjMC4wMDMsMCAwLjAwNiwwIDAuMDEsMGMxLjExNywwIDIuMDM2LC0wLjkxOSAyLjAzNiwtMi4wMzdjMCwtMC4wMDMgMCwtMC4wMDYgMCwtMC4wMDlsMCwtMTIuMjYzYzAuMDExLC0wLjU0NCAtMC4yMDYsLTEuMDY5IC0wLjU5OCwtMS40NDhsMCwtMC4wMVptLTYuMjExLC0wLjU5NWwtMTAuOTE5LDBsMCwtNC4wOTJjLTAuMDIyLC0xLjQ1MSAwLjU1NywtMi44NDggMS41OTksLTMuODU4YzEuMDA5LC0xLjA0MiAyLjQwNywtMS42MjEgMy44NTcsLTEuNTk4YzEuNDUxLC0wLjAyMyAyLjg0OCwwLjU1NiAzLjg1OCwxLjU5OGMxLjA0MiwxLjAwOSAxLjYyMSwyLjQwNyAxLjU5OCwzLjg1OGwwLjAwNyw0LjA5MloiIGZpbGw9IiNkMWQxZDEiLz4KPC9zdmc+");background-repeat:no-repeat;background-position:center center;background-size:contain;margin:0 1rem 0 0;width:30px;height:30px}@media (min-width: 768px){ul.wf-option>.wf-option-premium-lock,.wf-form-field>.wf-option-premium-lock{margin:0 2rem 0 1rem;width:20px;height:20px}}ul.wf-option>.wf-option-checkbox,.wf-form-field>.wf-option-checkbox{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-shrink:0;flex-shrink:0;margin:0 1rem 0 0}@media (min-width: 768px){ul.wf-option>.wf-option-checkbox,.wf-form-field>.wf-option-checkbox{margin:0 2rem 0 1rem}}ul.wf-option>.wf-boolean-switch,.wf-form-field>.wf-boolean-switch{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-shrink:0;flex-shrink:0;margin:0 1rem 0 0}@media (min-width: 768px){ul.wf-option>.wf-boolean-switch,.wf-form-field>.wf-boolean-switch{margin:0 1rem 0 1rem}}ul.wf-option.wf-option-no-spacing>.wf-boolean-switch,.wf-form-field.wf-option-no-spacing>.wf-boolean-switch{margin:0}ul.wf-option>.wf-option-radio-container,.wf-form-field>.wf-option-radio-container{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-shrink:0;flex-shrink:0;margin:0 1rem 0 0}@media (min-width: 768px){ul.wf-option>.wf-option-radio-container,.wf-form-field>.wf-option-radio-container{margin:0 2rem 0 1rem}}ul.wf-option>.wf-option-radio-container [type=radio].wf-option-radio+label:before,.wf-form-field>.wf-option-radio-container [type=radio].wf-option-radio+label:before{margin:0}ul.wf-option>li>.wf-option-title,ul.wf-option>.wf-option-title,ul.wf-option>.wf-option-content>ul>.wf-option-title,.wf-form-field>li>.wf-option-title,.wf-form-field>.wf-option-title,.wf-form-field>.wf-option-content>ul>.wf-option-title{font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.9rem;color:#2b2b2b;padding-right:0.5rem}ul.wf-option>li>.wf-option-title.wf-option-title-top,ul.wf-option>.wf-option-title.wf-option-title-top,ul.wf-option>.wf-option-content>ul>.wf-option-title.wf-option-title-top,.wf-form-field>li>.wf-option-title.wf-option-title-top,.wf-form-field>.wf-option-title.wf-option-title-top,.wf-form-field>.wf-option-content>ul>.wf-option-title.wf-option-title-top{-webkit-align-self:flex-start;align-self:flex-start}ul.wf-option>li>.wf-option-title.wf-option-title-bottom,ul.wf-option>.wf-option-title.wf-option-title-bottom,ul.wf-option>.wf-option-content>ul>.wf-option-title.wf-option-title-bottom,.wf-form-field>li>.wf-option-title.wf-option-title-bottom,.wf-form-field>.wf-option-title.wf-option-title-bottom,.wf-form-field>.wf-option-content>ul>.wf-option-title.wf-option-title-bottom{-webkit-align-self:flex-end;align-self:flex-end}ul.wf-option .wf-option-subtitle,.wf-form-field .wf-option-subtitle{padding-top:0.25rem;font-size:0.75rem}ul.wf-option .wf-flex-vertical .wf-option-title,.wf-form-field .wf-flex-vertical .wf-option-title{padding-bottom:0.75rem}ul.wf-option.wf-flex-vertical>.wf-option-subtitle,.wf-form-field.wf-flex-vertical>.wf-option-subtitle{padding-top:0.25rem !important;font-size:0.75rem !important}ul.wf-option .wf-option-checkboxes,ul.wf-option .wf-option-checkboxes>ul,.wf-form-field .wf-option-checkboxes,.wf-form-field .wf-option-checkboxes>ul{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}ul.wf-option .wf-option-checkboxes,.wf-form-field .wf-option-checkboxes{margin-top:1rem}ul.wf-option .wf-option-checkboxes>ul,.wf-form-field .wf-option-checkboxes>ul{margin-left:1rem}@media (min-width: 768px){ul.wf-option .wf-option-checkboxes>ul,.wf-form-field .wf-option-checkboxes>ul{margin-left:1.5rem}}ul.wf-option .wf-option-checkboxes>ul:first-of-type,.wf-form-field .wf-option-checkboxes>ul:first-of-type{margin-left:0}ul.wf-option .wf-option-checkboxes>ul>.wf-option-checkbox,.wf-form-field .wf-option-checkboxes>ul>.wf-option-checkbox{margin:0 1rem 0 0}ul.wf-option li.wf-option-text,ul.wf-option li.wf-option-textarea,ul.wf-option td.wf-option-text,.wf-form-field li.wf-option-text,.wf-form-field li.wf-option-textarea,.wf-form-field td.wf-option-text{padding-top:0.5rem}@media (min-width: 768px){ul.wf-option li.wf-option-text,ul.wf-option li.wf-option-textarea,ul.wf-option td.wf-option-text,.wf-form-field li.wf-option-text,.wf-form-field li.wf-option-textarea,.wf-form-field td.wf-option-text{-webkit-flex-grow:1;flex-grow:1;text-align:right;padding-left:1rem;padding-top:0}}ul.wf-option li.wf-option-text>input[type="text"],.wf-form-field li.wf-option-text>input[type="text"]{max-width:240px}@media (min-width: 768px){ul.wf-option li.wf-option-text>input[type="text"],.wf-form-field li.wf-option-text>input[type="text"]{max-width:280px}}@media (min-width: 992px){ul.wf-option li.wf-option-text>input[type="text"],.wf-form-field li.wf-option-text>input[type="text"]{max-width:340px}}ul.wf-option li.wf-option-text.wf-option-full-width>input[type="text"],.wf-form-field li.wf-option-text.wf-option-full-width>input[type="text"]{max-width:100%;width:100%}ul.wf-option li.wf-option-textarea,.wf-form-field li.wf-option-textarea{min-width:150px;max-width:240px}@media (min-width: 768px){ul.wf-option li.wf-option-textarea,.wf-form-field li.wf-option-textarea{min-width:200px;max-width:400px}}@media (min-width: 992px){ul.wf-option li.wf-option-textarea,.wf-form-field li.wf-option-textarea{min-width:250px;max-width:500px}}ul.wf-option li.wf-option-textarea>textarea,.wf-form-field li.wf-option-textarea>textarea{width:100%;height:80px;min-width:150px;max-width:240px}@media (min-width: 768px){ul.wf-option li.wf-option-textarea>textarea,.wf-form-field li.wf-option-textarea>textarea{min-width:200px;max-width:280px}}@media (min-width: 992px){ul.wf-option li.wf-option-textarea>textarea,.wf-form-field li.wf-option-textarea>textarea{min-width:250px;max-width:340px}}ul.wf-option li.wf-option-textarea>.wf-flex-vertical>li>textarea,.wf-form-field li.wf-option-textarea>.wf-flex-vertical>li>textarea{width:100%;height:80px;box-sizing:border-box}ul.wf-option li.wf-option-textarea>.wf-flex-vertical>li.wf-option-subtitle,.wf-form-field li.wf-option-textarea>.wf-flex-vertical>li.wf-option-subtitle{width:100%;text-align:left}ul.wf-option li.wf-option-switch,.wf-form-field li.wf-option-switch{-webkit-flex-grow:1;flex-grow:1}ul.wf-option li.wf-option-switch.wf-right .wf-switch,.wf-form-field li.wf-option-switch.wf-right .wf-switch{justify-content:flex-end !important}ul.wf-option li.wf-option-select,.wf-form-field li.wf-option-select{-webkit-flex-grow:1;flex-grow:1;text-align:right}ul.wf-option li.wf-option-select select,ul.wf-option li.wf-option-select select option,ul.wf-option li.wf-option-select .wfselect2-container--default,.wf-form-field li.wf-option-select select,.wf-form-field li.wf-option-select select option,.wf-form-field li.wf-option-select .wfselect2-container--default{font-size:0.7rem;font-weight:bold}@media (min-width: 768px){ul.wf-option li.wf-option-select select,ul.wf-option li.wf-option-select select option,ul.wf-option li.wf-option-select .wfselect2-container--default,.wf-form-field li.wf-option-select select,.wf-form-field li.wf-option-select select option,.wf-form-field li.wf-option-select .wfselect2-container--default{font-size:0.8rem}}@media (min-width: 992px){ul.wf-option li.wf-option-select select,ul.wf-option li.wf-option-select select option,ul.wf-option li.wf-option-select .wfselect2-container--default,.wf-form-field li.wf-option-select select,.wf-form-field li.wf-option-select select option,.wf-form-field li.wf-option-select .wfselect2-container--default{font-size:0.9rem}}ul.wf-option li.wf-option-select .wf-option-select-option,ul.wf-option li.wf-option-select .wfselect2-container--default,ul.wf-option li.wf-option-select .wfselect2-container--default .wfselect2-selection--single,.wf-form-field li.wf-option-select .wf-option-select-option,.wf-form-field li.wf-option-select .wfselect2-container--default,.wf-form-field li.wf-option-select .wfselect2-container--default .wfselect2-selection--single{text-align:left;height:40px;border-radius:0;border:0;background-color:#fff;box-shadow:1px 1px 1px 2px rgba(215,215,215,0.35)}ul.wf-option li.wf-option-select .wf-option-select-option .wfselect2-selection__rendered,ul.wf-option li.wf-option-select .wfselect2-container--default .wfselect2-selection__rendered,ul.wf-option li.wf-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered,.wf-form-field li.wf-option-select .wf-option-select-option .wfselect2-selection__rendered,.wf-form-field li.wf-option-select .wfselect2-container--default .wfselect2-selection__rendered,.wf-form-field li.wf-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered{color:#333;line-height:40px}ul.wf-option li.wf-option-select .wf-option-select-option .wfselect2-selection__arrow,ul.wf-option li.wf-option-select .wfselect2-container--default .wfselect2-selection__arrow,ul.wf-option li.wf-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow,.wf-form-field li.wf-option-select .wf-option-select-option .wfselect2-selection__arrow,.wf-form-field li.wf-option-select .wfselect2-container--default .wfselect2-selection__arrow,.wf-form-field li.wf-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow{height:38px}ul.wf-option li.wf-option-select .wf-option-select-option.wfselect2-container--disabled .wfselect2-selection__rendered,ul.wf-option li.wf-option-select .wfselect2-container--default.wfselect2-container--disabled .wfselect2-selection__rendered,ul.wf-option li.wf-option-select .wfselect2-container--default .wfselect2-selection--single.wfselect2-container--disabled .wfselect2-selection__rendered,.wf-form-field li.wf-option-select .wf-option-select-option.wfselect2-container--disabled .wfselect2-selection__rendered,.wf-form-field li.wf-option-select .wfselect2-container--default.wfselect2-container--disabled .wfselect2-selection__rendered,.wf-form-field li.wf-option-select .wfselect2-container--default .wfselect2-selection--single.wfselect2-container--disabled .wfselect2-selection__rendered{color:#aaa}ul.wf-option li.wf-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow b,.wf-form-field li.wf-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:#333 transparent transparent}ul.wf-option li.wf-option-select .wfselect2-container--default.wfselect2-container--open .wfselect2-selection--single .wfselect2-selection__arrow b,.wf-form-field li.wf-option-select .wfselect2-container--default.wfselect2-container--open .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:transparent transparent #333}ul.wf-option.wf-option-token select,.wf-form-field.wf-option-token select{width:240px}@media (min-width: 768px){ul.wf-option.wf-option-token select,.wf-form-field.wf-option-token select{width:280px}}@media (min-width: 992px){ul.wf-option.wf-option-token select,.wf-form-field.wf-option-token select{width:320px}}ul.wf-option.wf-option-token .wfselect2-container--default,ul.wf-option.wf-option-token .wfselect2-container--default .wfselect2-selection--multiple,.wf-form-field.wf-option-token .wfselect2-container--default,.wf-form-field.wf-option-token .wfselect2-container--default .wfselect2-selection--multiple{border-color:#e2e2e2}ul.wf-option.wf-option-token .wfselect2-container--default .wfselect2-selection__choice,ul.wf-option.wf-option-token .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-selection__choice,.wf-form-field.wf-option-token .wfselect2-container--default .wfselect2-selection__choice,.wf-form-field.wf-option-token .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-selection__choice{background-color:#fff;border-color:#e2e2e2;padding:0.5rem}ul.wf-option.wf-option-token .wfselect2-container--default .wfselect2-search__field,ul.wf-option.wf-option-token .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-search__field,.wf-form-field.wf-option-token .wfselect2-container--default .wfselect2-search__field,.wf-form-field.wf-option-token .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-search__field{margin-right:5px;margin-top:5px;padding:0.5rem 0}.wf-option-sub{padding-left:2rem !important;margin-left:30px !important}.wf-select2-suppress-dropdown .wfselect2-results,.wf-select2-suppress-dropdown .wfselect2-dropdown{display:none}.wf-options-controls{direction:ltr;background:#ffffff;border-bottom:1px solid #e2e2e2;position:absolute;left:160px;right:0px;top:46px;z-index:900;padding-left:15px;padding-right:15px}@media (min-width: 616px){.wf-options-controls{position:fixed}}.wf-options-controls .wf-block{margin:0}@media (min-width: 782px){.wf-options-controls .wf-block{margin:0.5rem 0}}.wf-options-controls,.sticky-menu .wf-options-controls{top:32px}.folded .wf-options-controls{left:36px}@media only screen and (max-width: 960px){.auto-fold .wf-options-controls{left:36px}}.rtl .wf-options-controls{right:160px;left:0px}.rtl .folded .wf-options-controls{right:36px}@media only screen and (max-width: 960px){.rtl .auto-fold .wf-options-controls{right:36px}}@media screen and (max-width: 782px){.wf-options-controls,.folded .wf-options-controls,.auto-fold .wf-options-controls,.rtl .wf-options-controls,.rtl .folded .wf-options-controls,.rtl .auto-fold .wf-options-controls{left:-10px;right:0px}}.wf-options-controls-spacer{height:45px}@media (min-width: 782px){.wf-options-controls-spacer{height:75px}}.wf-options-controls-spacer,.sticky-menu .wf-options-controls-spacer{top:61px}.wordfence .wfselect2-container .wfselect2-selection--single{border:1px solid #dadada;font-weight:normal;font-size:0.8rem}#wf-notices{margin-top:15px}#wf-notices .wf-admin-notice{margin-left:0px;margin-right:0px}.wf-success-text,.wf-notice-text{display:inline-block;vertical-align:middle;line-height:1.3;font-size:16px;font-weight:bold;font-style:italic}.wf-notice{margin:12px 0;padding:8px;background-color:#ffffe0;border:1px solid #ffd975;border-width:1px 1px 1px 10px}.wf-notice-text{color:#6d798c}.wf-success{margin:12px 0;padding:8px;background-color:#ffffff;border:1px solid #16bc9b;border-width:1px 1px 1px 10px}.wf-success-text{color:#11967a}.wf-premium-callout{border:1px solid #dfdfdf;background-color:#ffffff;padding:16px;margin:20px 0 0;text-align:center}.wf-premium-callout ul{margin:8px 0;padding:0 0 0 15px}.wf-premium-callout ul li{list-style-type:disc;margin:0;padding:0}.wf-premium-callout .center{text-align:center;margin:0}.wf-premium-callout .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709e}#wfLiveTrafficOverlayAnchor::after{position:absolute;z-index:3002;top:0;right:0;width:0;height:0;background:rgba(241,241,241,0.6);content:'';opacity:0;-webkit-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;-o-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s}.wordfenceLiveActivityPaused #wfLiveTrafficOverlayAnchor::after{width:100%;height:100%;opacity:1;-webkit-transition:opacity 0.5s;-o-transition:opacity 0.5s;transition:opacity 0.5s}#wordfenceLiveActivitySecurityOnly,#wordfenceLiveActivityAll{background:#fff;border-left:4px solid #00709e;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);margin-bottom:0.5rem;padding:1px 13px}#wfLiveTrafficDisabledMessage{display:none;position:fixed;z-index:3003;left:0;width:100%;top:50%;transform:translateY(-50%);text-align:center;color:#666666;opacity:0;-webkit-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;-o-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s}#wfLiveTrafficDisabledMessage h2{background-color:#00709e;color:#fff;overflow:hidden;max-width:350px;margin:0 auto;padding:20px;font-size:2.0em}#wfLiveTrafficDisabledMessage h2 small{font-size:0.5em;font-weight:normal;margin-top:12px;display:block}.wordfenceLiveActivityPaused #wfLiveTrafficDisabledMessage{display:block;opacity:1;-webkit-transition:opacity 0.5s;transition:opacity 0.5s}.wf-live-activity{position:relative;margin:20px 0 10px 0;padding:0.75rem;box-sizing:border-box;background:#FFFCEF;box-shadow:0 0 0 1px rgba(153,155,135,0.5),0 1px 2px #e8f3e0}.wf-live-activity .wf-live-activity-inner{width:100%;box-sizing:border-box;position:relative}.wf-live-activity .wf-live-activity-inner .wf-live-activity-content{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:flex-start}.wf-live-activity .wf-live-activity-inner .wf-live-activity-content .wf-live-activity-title{color:#888888;font-size:0.85rem;font-weight:bold;padding-right:0.5rem}.wf-live-activity .wf-live-activity-inner .wf-live-activity-content .wf-live-activity-message{font-size:0.80rem;color:#000000}.wf-live-activity .wf-live-activity-inner .wf-live-activity-state{position:absolute;top:0px;right:0px;bottom:0px;left:0px;background:rgba(255,252,239,0.9);display:none;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:center;z-index:3001;-webkit-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;-o-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s}.wordfenceLiveActivityPaused .wf-live-activity .wf-live-activity-inner .wf-live-activity-state{display:-ms-flexbox;display:flex;opacity:1;-webkit-transition:opacity 0.5s;-webkit-transition:opacity 0.5s;-o-transition:opacity 0.5s;transition:opacity 0.5s}.wordfence .wordfenceScanButton{margin:20px 0 20px 0}.wordfence .wordfenceScanButton input.button-wf-grey{background:#EFEFEF url(../images/button-grad-grey.png) repeat-x scroll left top;border-color:#EFEFEF}.wordfence .wordfenceScanButton table td{vertical-align:top}.wordfence .wordfenceScanButton .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709E;height:44px;line-height:44px;padding:0px 20px}table.wfSummaryParent{font-family:sans-serif;font-size:14px;color:#000;z-index:9}table.wfSummaryParent td{vertical-align:top;padding:0;margin:0}table.wfSummaryParent table.wfSummaryChild th{font-weight:bold;text-align:right;font-family:Georgia,Times New Roman,Times,serif;color:#000;padding:5px 10px 5px 0;border-top:1px solid #CCC}table.wfSummaryParent table.wfSummaryChild td{font-weight:normal;text-align:left;padding:5px 0 5px 0;border-top:1px solid #CCC}table.wfSummaryParent table.wfSC1 td{width:300px;padding:0 25px 10px 0}table.wfSummaryParent table.wfSC2 th{width:80px}table.wfSummaryParent table.wfSC2 td{width:100px}table.wfSummaryParent table.wfSC3 th{width:80px}table.wfSummaryParent table.wfSC3 td{width:250px}table.wfSummaryParent th.wfHead{font-size:22px;font-family:Georgia,Times New Roman,Times,serif;font-style:italic;color:#555;font-weight:bold;text-align:left;padding:20px 0 20px 0;-webkit-font-smoothing:antialiased}.wf-issues-table{table-layout:fixed;width:100%}div.wfIssue{width:100%}div.wfIssue table.wfIssue td{padding:2px;margin:0;border-width:0;text-align:left;width:100%}div.wfIssue table.wfIssue th{padding:2px;margin:0;font-weight:bold;text-align:left;color:#777;white-space:nowrap}div.wfIssue table.wfIssueLinks td{border-width:0;text-align:left;padding-right:10px}div.wfIssue h2{margin:0 0 5px 0;padding:0;font-size:0.9rem}@media (min-width: 768px){div.wfIssue h2{font-size:1.05rem}}.wfIssueOptions{border-top:1px solid #CCC;padding:10px}.wfIssueOptions h3{font-size:0.8rem;margin:0}@media (min-width: 768px){.wfIssueOptions h3{display:inline-block}}.wfIssueOptions ul{margin-bottom:0;padding-left:0;list-style:none;display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.wfIssueOptions ul{-webkit-flex-direction:row;flex-direction:row;-webkit-align-items:center;align-items:center}}.wfIssueOptions ul>li>a{position:relative;display:block;padding:8px 12px/2}.wfIssueOptions ul>li>a:hover,.wfIssueOptions ul>li>a:focus{text-decoration:none;background-color:#e2e2e2}.wfIssueOptions a{margin-left:10px}.wfIssueOptions strong{float:left;display:block;width:60px}.wfIssueOptions p{margin:6px 0px 0px}.wfProbSev1,.wfProbSev2,.wfAjaxLight128,.wfResolved{width:128px;height:128px;border:0;margin:0 auto;background-repeat:no-repeat;background-position:0 0;text-decoration:none;display:block}.wfProbSev1{background-image:url(../images/icons/error128.png)}.wfProbSev2{background-image:url(../images/icons/warning128.png)}.wfResolved{background-image:url(../images/icons/tick128.png)}.wfIssuesContainer{width:100%;display:none}.wfIssuesContainer p{max-width:550px}.wfALogTime{color:#999}.wfALogMailLink,.wfALogViewLink{display:block;position:absolute;padding:0 0 0 18px;margin:0;right:10px;top:0;background-repeat:no-repeat;font-weight:normal}.wfALogMailLink{background-image:url(../images/icons/email_go.png)}.wfALogViewLink{background-image:url(../images/icons/magnifier.png)}#wfActivity{position:relative}.consoleHead{position:relative;padding:0 0 0 3px;font-weight:bold;width:100%}.consoleHeadText{margin-bottom:4px;font-size:18px;font-family:Georgia,Times New Roman,Times,serif;color:#555;font-weight:bold;-webkit-font-smoothing:antialiased}.consoleFooter{position:relative}.consoleOuter{width:100%}.consoleInner{height:116px;overflow:auto;z-index:1}.bevelDiv1{border:1px solid #EFEFEF}.bevelDiv2{border:1px solid #AAA}.bevelDiv3{background-color:#ffffed;padding:5px;font-family:Roboto,Helvetica Neue,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased}.wfSecure{color:#0A0;font-weight:bold}.wfSummaryLine{display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.wfSummaryLine{-webkit-flex-direction:row;flex-direction:row}}.wfSummaryLine .wfSummaryDate{padding-left:3px}.wfSummaryLine .wfSummaryMsg{padding-left:3px;-webkit-flex-grow:1;flex-grow:1;min-width:0}.wfSummaryLoading{width:16px;height:11px;background-image:url("../images/icons/ajaxScan.gif")}.wfSummaryBad,.wfSummaryErr{color:#930000}.wfSummaryOK{color:#11967a}.wfSummaryIgnored{color:#a87302}.wfClear{content:".";display:block;height:0;width:0;line-height:0;clear:both;visibility:hidden}.wfSummaryFinal{-webkit-font-smoothing:antialiased;font-weight:bold;color:#555}.wfStartScanButton{text-align:center}.wordfenceScanHelp{border:1px solid #CCC;padding:4px}.wf-scan-no-issues{font-size:1.25rem;color:#11967a}.wf-scan-severity{position:relative;width:10px}@media (min-width: 768px){.wf-scan-severity{width:144px}}.wf-scan-severity-1,.wf-scan-severity-2{position:absolute;top:0px;right:0px;bottom:0px;left:0px}.wf-scan-severity-1{background-color:#c10000}.wf-scan-severity-2{background-color:#ffd10a}.scan-schedule{border-collapse:collapse;border-spacing:0}.scan-schedule tr:first-of-type th{padding-top:0}.scan-schedule td{padding:0}.scan-schedule th{padding:1.5rem 0.5rem 0.75rem 0;font-size:1rem;text-align:left}@media (min-width: 768px){.scan-schedule th{padding:0 0.5rem 0 0;font-size:0.8125rem;text-align:center}}.next-scan{font-size:1em;display:block;position:relative;width:7em;height:7em;background-color:#fff;border-radius:0.6em;box-shadow:0 1px 0 rgba(189,189,189,0.6);overflow:hidden}.next-scan *{display:block;width:100%;font-size:1em;font-weight:bold;font-style:normal;text-align:center}.next-scan strong{position:absolute;top:0;padding:0.4em 0;color:#fff;background-color:#00709E;box-shadow:0 2px 0 #00709E}.next-scan em{position:absolute;bottom:0.3em;color:#00709E}.next-scan span{width:100%;font-size:2.8em;padding-top:1.15em;color:#2f2f2f}#wf-lt-listings .wfActEvent{padding-left:15px;border-left:5px solid #cccccc}#wf-lt-listings .wfActEvent.wfHuman{border-left:5px solid #16bc9b}#wf-lt-listings .wfActEvent.wfActionBlocked{border-left:5px solid #d03935}#wf-lt-listings .wfActEvent.wfNotice{border-left:5px solid #c10000}#wf-lt-listings .wfActEvent.wfWarning,#wf-lt-listings .wfActEvent.wf404,#wf-lt-listings .wfActEvent.wfFailedLogin{border-left:5px solid #ffd10a}#wf-lt-listings .wfActEvent:hover{background-color:#fff9e9 !important}.wf-live-traffic-controls{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column;width:100%;margin-bottom:0}.wf-live-traffic-controls>*:first-child{-webkit-flex-grow:1;flex-grow:1}.wf-live-traffic-controls>*:last-child{-webkit-flex-grow:0;flex-grow:0}@media (min-width: 768px){.wf-live-traffic-controls{-webkit-flex-direction:row;flex-direction:row}}.wf-live-traffic-filter{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start}@media (min-width: 768px){.wf-live-traffic-filter{-webkit-flex-direction:row;flex-direction:row}}.wf-live-traffic-filter>*{padding:0.5rem}.wf-live-traffic-filter h2{margin:0;padding-bottom:0.5rem}@media (min-width: 768px){.wf-live-traffic-filter h2{padding-bottom:0;padding-right:0.5rem}}.wf-live-traffic-show-expanded{text-align:right;padding:0.5rem}@media (max-width: 1330px){.wf-live-traffic-show-expanded{display:none}}#wf-lt-advanced-filters{padding-left:0;padding-right:0;overflow:hidden}.wf-live-traffic-filter-detail{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.wf-live-traffic-filter-detail{-webkit-flex-direction:row;flex-direction:row}.wf-live-traffic-filter-detail *{-webkit-flex-grow:1;flex-grow:1}}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-remove{margin-left:0.5rem;font-size:1.5rem;color:#333}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters div{padding:0.25rem 0}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters select{font-size:0.75rem !important}@media (min-width: 768px){.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters{-webkit-flex-direction:row;flex-direction:row;-webkit-align-items:center;align-items:center}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters div{padding:0}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters select{font-size:1rem !important}}.wf-filtered-traffic .wf-filtered-traffic-hits{font-size:1.75rem;color:#999999;margin-top:10px}#wf-live-traffic{position:relative;overflow:visible}#wf-live-traffic-legend{white-space:nowrap;background-color:#fff;padding:0.75rem 0px;position:fixed;width:320px;height:17px;top:auto;bottom:0px;right:auto;left:10px;z-index:2000;box-shadow:0px 0px 5px rgba(0,0,0,0.5);padding-left:1rem}@media (min-width: 768px){#wf-live-traffic-legend{left:182px}}@media (max-width: 1330px){#wf-live-traffic-legend{display:none}}#wf-live-traffic-legend-placeholder{display:none;padding:12px}#wf-live-traffic-legend-placeholder.sticky{display:block}#wf-live-traffic-legend ul{margin:0;padding:0}#wf-live-traffic-legend ul:before,#wf-live-traffic-legend ul:after{content:" ";display:table}#wf-live-traffic-legend ul:after{clear:both}#wf-live-traffic-legend ul li{margin:0 1rem 0 0;padding:0;position:relative;float:left;font-size:0.7185rem}@media (min-width: 768px){#wf-live-traffic-legend ul li{font-size:0.8125rem}}#wf-live-traffic-legend ul li+li{margin-left:0.5rem}#wf-live-traffic-legend ul li:before,.wf-live-traffic-hit-type:before{content:'';display:inline-block;margin:3px 6px 0 0;width:12px;height:12px;background-color:#CCCCCC;border-radius:10px;vertical-align:-2px}#wf-live-traffic-legend ul li.wfHuman:before,.wf-live-traffic-hit-type.wfHuman:before{background-color:#16bc9b}#wf-live-traffic-legend ul li.wfNotice:before,.wf-live-traffic-hit-type.wfNotice:before,#wf-live-traffic-legend ul li.wf404:before,.wf-live-traffic-hit-type.wf404:before,#wf-live-traffic-legend ul li.wfFailedLogin:before,.wf-live-traffic-hit-type.wfFailedLogin:before{background-color:#ffd10a}#wf-live-traffic-legend ul li.wfBlocked:before,.wf-live-traffic-hit-type.wfBlocked:before,#wf-live-traffic-legend ul li.wfActionBlocked:before,.wf-live-traffic-hit-type.wfActionBlocked:before{background-color:#d03935}.wfTimeAgo{font-family:Georgia,Times New Roman,Times,serif;color:#999;font-weight:bold;font-style:italic}.wfActEvent{border-bottom:1px solid #CCC;padding:10px 20px;overflow:auto}.wf-pad-small{margin:8px 0}#wf-lt-listings{margin:0 0 0}#wf-lt-listings a{cursor:pointer;text-decoration:none}#wf-lt-listings a:hover{text-decoration:underline}#wf-lt-listings a.button,#wf-lt-listings a.wf-btn{text-decoration:none}[class*="span"]{float:left;min-height:1px;margin-left:30px}.highlighted,.highlighted td,#wf-live-traffic .wf-striped-table .highlighted td{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-moz-keyframes highlighted{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#ffffff}}@-webkit-keyframes highlighted{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#ffffff}}@keyframes highlighted{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#ffffff}}@-moz-keyframes highlightedBlocked{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#fff6f6}}@-webkit-keyframes highlightedBlocked{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#fff6f6}}@keyframes highlightedBlocked{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#fff6f6}}.highlighted,.highlighted td,#wf-live-traffic .wf-striped-table .highlighted td{-webkit-animation-name:highlighted;animation-name:highlighted}.highlighted.wfActionBlocked,.highlighted td.wfActionBlocked,#wf-live-traffic .wf-striped-table .highlighted td.wfActionBlocked{-webkit-animation-name:highlightedBlocked;animation-name:highlightedBlocked}#wf-lt-preset-filters{min-width:250px}#wf-lt-advanced-filters>table{width:100%}#wf-lt-advanced-filters>table>tr>td{vertical-align:top}.wf-lt-url{white-space:nowrap}.wf-live-traffic-filter label{font-weight:normal}#wf-live-traffic .wf-striped-table th,#wf-live-traffic .wf-striped-table td{padding:.5rem .6rem}#wf-live-traffic .wf-striped-table th{white-space:nowrap}#wf-live-traffic .wf-striped-table tbody tr:hover>td{background-color:#e7f5ff}#wf-live-traffic .wf-live-traffic-show-details{font-size:1.5rem;color:#9a9a9a;text-align:center;cursor:hand}#wf-live-traffic .wf-live-traffic-show-details .wf-ion-eye-disabled{display:none}#wf-live-traffic .wf-details-open .wf-live-traffic-show-details .wf-ion-eye-disabled{display:inline-block}#wf-live-traffic .wf-details-open .wf-live-traffic-show-details .wf-ion-eye{display:none}#wf-live-traffic.wf-live-traffic-display-expanded .wf-summary-row{display:none}#wf-live-traffic.wf-live-traffic-display-expanded .wf-live-traffic-activity-detail h2{display:none}#wf-live-traffic.wf-live-traffic-display-expanded .wf-striped-table thead{display:none}#wf-live-traffic .wf-details-hidden .wf-live-traffic-details,#wf-live-traffic .wf-details-visible .wf-live-traffic-details{transition:padding 200ms}#wf-live-traffic .wf-details-hidden .wf-live-traffic-details{padding:0 .6rem}#wf-live-traffic .wf-details-visible .wf-live-traffic-details,#wf-live-traffic.wf-live-traffic-display-expanded .wf-details-hidden .wf-live-traffic-details{padding:.8rem .6rem}#wf-live-traffic.wf-live-traffic-display-expanded .wf-details-hidden .wf-live-traffic-details{border-top:1px solid #e2e2e2}#wf-live-traffic .wf-details-hidden .wf-live-traffic-activity-detail-wrapper,#wf-live-traffic .wf-details-visible .wf-live-traffic-activity-detail-wrapper{transition:opacity 200ms, max-height 200ms ease-out;overflow:hidden}#wf-live-traffic .wf-details-hidden .wf-live-traffic-activity-detail-wrapper{opacity:0;max-height:0px}#wf-live-traffic .wf-details-visible .wf-live-traffic-activity-detail-wrapper,#wf-live-traffic.wf-live-traffic-display-expanded .wf-details-hidden .wf-live-traffic-activity-detail-wrapper{opacity:1;max-height:800px}#wf-live-traffic .wf-block-ip-btn{display:none}#wf-live-traffic-group-by{width:100%}#wf-live-traffic-no-group-by{overflow-x:auto}@media (max-width: 1330px){#wf-live-traffic .wf-summary-row{display:none}#wf-live-traffic .wf-live-traffic-activity-detail h2{display:none}#wf-live-traffic .wf-striped-table thead{display:none}#wf-live-traffic .wf-details-hidden .wf-live-traffic-details{padding:0.8rem 0.6rem}#wf-live-traffic .wf-details-hidden .wf-live-traffic-details{border-top:1px solid #e2e2e2}#wf-live-traffic .wf-details-hidden .wf-live-traffic-activity-detail-wrapper{opacity:1;max-height:300px}#wf-live-traffic-no-group-by .wf-striped-table{table-layout:fixed}}.wf-live-traffic-activity-type{text-align:center;float:left;width:65px}@media (min-width: 768px){.wf-live-traffic-activity-type{width:85px}}@media (min-width: 992px){.wf-live-traffic-activity-type{width:105px}}@media (min-width: 1200px){.wf-live-traffic-activity-type{width:125px}}.wf-live-traffic-activity-type .wf-live-traffic-type-icon{font-size:3rem;color:#CCCCCC}@media (min-width: 768px){.wf-live-traffic-activity-type .wf-live-traffic-type-icon{font-size:4rem}}@media (min-width: 992px){.wf-live-traffic-activity-type .wf-live-traffic-type-icon{font-size:5rem}}@media (min-width: 1200px){.wf-live-traffic-activity-type .wf-live-traffic-type-icon{font-size:6rem}}.wf-live-traffic-activity-type .wf-live-traffic-type-icon.wf-icon-human{color:#16bc9b}.wf-live-traffic-activity-type .wf-live-traffic-type-icon.wf-icon-warning{color:#ffd10a}.wf-live-traffic-activity-type .wf-live-traffic-type-icon.wf-icon-blocked{color:#d03935}.wf-live-traffic-activity-detail{margin:0;margin-left:90px}@media (min-width: 768px){.wf-live-traffic-activity-detail{margin-left:110px}}@media (min-width: 992px){.wf-live-traffic-activity-detail{margin-left:130px}}@media (min-width: 1200px){.wf-live-traffic-activity-detail{margin-left:150px}}.wf-live-traffic-activity-detail h2{margin:0px 0px .5rem}.wf-live-traffic-actions{margin:.5rem 0px 0px}#wf-live-traffic-util-overlay-wrapper{position:fixed;top:32px;right:0px;bottom:0px;left:0px;background-color:rgba(0,0,0,0.5);z-index:3000}#wf-live-traffic-util-overlay-wrapper .wf-live-traffic-util-overlay{position:fixed;top:32px;right:0px;bottom:0px;left:auto;max-width:800px;background-color:#ffffff;overflow:auto}#wf-live-traffic-util-overlay-wrapper .wf-live-traffic-util-overlay-header,#wf-live-traffic-util-overlay-wrapper .wf-live-traffic-util-overlay-body{padding:1rem 1.5rem}#wf-live-traffic-util-overlay-wrapper .wf-live-traffic-util-overlay-body{padding:1rem 1.5rem 1rem 3rem}#wf-live-traffic-util-overlay-wrapper .wf-live-traffic-util-overlay-header{background-color:#e9e9e9;border:1px solid #ffd10a;border-width:10px 0px}#wf-live-traffic-util-overlay-wrapper .wf-live-traffic-util-overlay-body .wf-flex-row{margin:0.6rem 0}#wf-live-traffic-util-overlay-wrapper .wf-live-traffic-actions{display:none}#wf-live-traffic-util-overlay-wrapper .wf-live-traffic-util-overlay-close{position:absolute;top:20px;right:16px;font-size:20px;cursor:pointer}#wf-live-traffic-util-overlay-wrapper .wf-live-traffic-activity-detail div{margin:0px 0px 0.6rem}#wf-live-traffic-util-overlay-wrapper .wf-block-ip-btn{display:inline-block}#wf-live-traffic-options .wf-block-list .wf-option-text .wf-option-title{width:30%}.wf-recent-traffic-table{font-size:.7rem}.wf-recent-traffic-table th,.wf-recent-traffic-table td{vertical-align:top}.wf-recent-traffic-table th{text-align:left;white-space:nowrap}.wf-recent-traffic-table td{word-wrap:break-word;word-break:break-all}.wf-recent-traffic-table .wf-recent-traffic-table-row-border td div{border-top:1px solid #e2e2e2;margin:10px 0}.wf-live-traffic-none{padding:0.5rem 0.6rem}.wf-flag.wf-flag-unspecified{width:16px;height:16px;background:none}.wf-flag.wf-flag-unspecified path{fill:#9f9fa0}table.block-ranges-table{border-collapse:collapse;margin:10px 0 0}table.block-ranges-table tr td{border:1px solid #CCC;border-width:1px 0;padding:10px 0 12px 0}#input-wafStatus,#input-wafStatus option,.wfselect2-container--default{font-size:0.7rem;font-weight:bold}@media (min-width: 768px){#input-wafStatus,#input-wafStatus option,.wfselect2-container--default{font-size:0.8rem}}@media (min-width: 992px){#input-wafStatus,#input-wafStatus option,.wfselect2-container--default{font-size:0.9rem}}.wfselect2-results__options{border-top:1px solid #e2e2e2}.wafStatus-enabled,.wafStatus-learning-mode,.wafStatus-disabled,.wafStatus-enabled.wfselect2-container--default .wfselect2-selection--single,.wafStatus-learning-mode.wfselect2-container--default .wfselect2-selection--single,.wafStatus-disabled.wfselect2-container--default .wfselect2-selection--single{height:40px;border-radius:0;border:0;background-color:#fff;box-shadow:1px 1px 1px 2px rgba(215,215,215,0.35)}.wafStatus-enabled .wfselect2-selection__rendered,.wafStatus-learning-mode .wfselect2-selection__rendered,.wafStatus-disabled .wfselect2-selection__rendered,.wafStatus-enabled.wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered,.wafStatus-learning-mode.wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered,.wafStatus-disabled.wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered{color:#333;line-height:40px}.wafStatus-enabled .wfselect2-selection__arrow,.wafStatus-learning-mode .wfselect2-selection__arrow,.wafStatus-disabled .wfselect2-selection__arrow,.wafStatus-enabled.wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow,.wafStatus-learning-mode.wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow,.wafStatus-disabled.wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow{height:38px}#waf-config-form .waf-config-label{font-size:1.3em}#waf-config-form .wfselect2-container--default .wfselect2-selection--single{padding:0.4rem;text-shadow:0 0 3px #000000;font-weight:bold}#waf-config-form .wfselect2-container .wfselect2-selection--single{height:auto}#waf-config-form .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow{height:100%;top:0}.wafStatus-enabled.wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow b,.wafStatus-learning-mode.wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow b,.wafStatus-disabled.wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:#333 transparent transparent}.wafStatus-enabled.wfselect2-container--default.wfselect2-container--open .wfselect2-selection--single .wfselect2-selection__arrow b,.wafStatus-learning-mode.wfselect2-container--default.wfselect2-container--open .wfselect2-selection--single .wfselect2-selection__arrow b,.wafStatus-disabled.wfselect2-container--default.wfselect2-container--open .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:transparent transparent #333}#waf-learning-mode-grace-period{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row}#waf-learning-mode-grace-period span{padding:0 0.5rem 0 1rem}#waf-learning-mode-grace-period input{width:auto}#whitelist-form{padding-top:0.5rem}#whitelist-form .wfselect2-container--default .wfselect2-selection--single{display:block;width:100%;height:38px;padding:.5rem 1.25rem;font-size:14px;line-height:1.42857;color:#2b2b2b;background-color:#fff;background-image:none;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,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}#whitelist-form .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered{color:#2b2b2b;line-height:inherit}#whitelist-form .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow{height:38px}#whitelist-form-separator{margin:1rem 0}#whitelist-table-controls{margin-bottom:0.5rem}#whitelist-table-controls .wfselect2-container--default{text-align:left !important}#whitelist-table-controls .wf-select-group{-webkit-justify-content:flex-end !important;justify-content:flex-end !important}.whitelist-table-container{overflow-x:auto}table.whitelist-table .whitelist-edit{display:none}table.whitelist-table .edit-mode .whitelist-display{display:none}table.whitelist-table .edit-mode .whitelist-edit{display:block}table.whitelist-table .edit-mode span.whitelist-edit,table.whitelist-table .edit-mode input.whitelist-edit{display:inline}.wf-bulk-action{margin:12px 0}tr.wf-table-filters input{max-width:120px}.wf-waf-status-disabled{padding:2rem 0}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status .wf-block-labeled-value-value{padding-top:0}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status .wf-block-labeled-value-value .wf-fa{font-size:8rem}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status .wf-block-labeled-value-value svg{width:160px}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status .wf-block-labeled-value-label{font-size:1.3125rem;font-weight:300;line-height:1.5;padding-bottom:0}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-full-enabled{background-color:#00709e}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-full-enabled .wf-block-labeled-value-value{color:#ffffff}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-full-enabled .wf-block-labeled-value-label{color:#ffffff;padding:0}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-enabled .wf-block-labeled-value-value{color:#00709e}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-enabled .wf-block-labeled-value-value svg{fill:#00709e}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-enabled .wf-block-labeled-value-label{color:#00709e}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-learning-mode .wf-block-labeled-value-value,.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-disabled .wf-block-labeled-value-value{color:#9f9fa0}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-learning-mode .wf-block-labeled-value-value svg,.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-disabled .wf-block-labeled-value-value svg{fill:#9f9fa0}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-learning-mode .wf-block-labeled-value-label,.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-disabled .wf-block-labeled-value-label{color:#9f9fa0}.wf-waf-coverage li{-webkit-align-items:flex-start !important;align-items:flex-start !important}.wf-waf-navigation .wf-block-navigation-option-content,.wf-blocking-status .wf-block-navigation-option-content{padding:1.5rem 0 1.5rem 1.0rem}.wf-waf-navigation .wf-block-navigation-option-content h4,.wf-blocking-status .wf-block-navigation-option-content h4{margin:0 0 0.25rem 0}.wf-waf-navigation .wf-block-navigation-option-content p,.wf-blocking-status .wf-block-navigation-option-content p{margin:0 0 0.45rem 0}.wf-blocking-status>li{-webkit-flex-grow:0 !important;flex-grow:0 !important;-webkit-flex-basis:66.66667% !important;flex-basis:66.66667% !important}.wf-blocking-status>li:first-of-type{-webkit-flex-basis:33.33333% !important;flex-basis:33.33333% !important}.wf-blocking-status-premium>li{-webkit-flex-grow:0 !important;flex-grow:0 !important;-webkit-flex-basis:33.33333% !important;flex-basis:33.33333% !important}ul.wf-option.wf-option-rate-limit *{-webkit-flex-grow:1;flex-grow:1}ul.wf-option.wf-option-rate-limit *:first-child{-webkit-flex-grow:0;flex-grow:0}ul.wf-option.wf-option-rate-limit .wfselect2-container{min-width:100px}@media (min-width: 768px){ul.wf-option.wf-option-rate-limit .wfselect2-container{min-width:140px}}@media (min-width: 992px){ul.wf-option.wf-option-rate-limit .wfselect2-container{min-width:140px}}#waf-rules-wrapper tbody tr:nth-of-type(n+10){display:none}#waf-rules-wrapper.wf-show-all tbody tr:nth-of-type(n+10){display:table-row}#waf-rules-wrapper.wf-show-all #waf-show-all-rules{display:none}.wf-waf-backup-file-list{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row}.wf-waf-backup-file-list>*{margin-left:0.5rem !important}.wf-waf-backup-file-list>*:first-child{margin-left:0 !important}#wf-option-loginSecurityEnabled .wf-option-subtitle{font-size:.875rem}.wf-rate-limit-warning{display:none;padding-top:1rem}.wf-rate-limit-warning .wf-inline-notice{display:inline-block}.wf-scan-status-disabled{padding:2rem 0}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status .wf-block-labeled-value-value{padding-top:0}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status .wf-block-labeled-value-value .wf-fa{font-size:8rem}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status .wf-block-labeled-value-value svg{width:160px}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status .wf-block-labeled-value-label{font-size:1.3125rem;font-weight:300;line-height:1.5;padding-bottom:0}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status-full-enabled{background-color:#00709e}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status-full-enabled .wf-block-labeled-value-value{color:#ffffff}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status-full-enabled .wf-block-labeled-value-label{color:#ffffff;padding:0}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status-enabled .wf-block-labeled-value-value{color:#00709e}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status-enabled .wf-block-labeled-value-value svg{fill:#00709e}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status-enabled .wf-block-labeled-value-label{color:#00709e}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status-disabled .wf-block-labeled-value-value{color:#9f9fa0}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status-disabled .wf-block-labeled-value-value svg{fill:#9f9fa0}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status-disabled .wf-block-labeled-value-label{color:#9f9fa0}.wf-scan-navigation .wf-block-navigation-option-content{padding:1.5rem 0 1.5rem 1.0rem}.wf-scan-navigation .wf-block-navigation-option-content h4{margin:0 0 0.25rem 0}.wf-scan-navigation .wf-block-navigation-option-content p{margin:0 0 0.45rem 0}#wf-scan-starter{-webkit-justify-content:center;justify-content:center}#wf-scan-starter:hover{cursor:unset}#wf-scan-starter:hover a{text-decoration:none}.wf-scanner-progress{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;margin-top:0.5rem;margin-bottom:0.5rem;background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB3aWR0aD0iMXB4IiBoZWlnaHQ9IjZweCIgdmlld0JveD0iMCAwIDEgNiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3BhY2U9InByZXNlcnZlIj4KCTxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiNkMWQxZDEiLz48cmVjdCB4PSIwIiB5PSI1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjZDFkMWQxIi8+Cjwvc3ZnPg==");background-repeat:repeat-x;background-position:center 24px;overflow-x:auto;overflow-y:hidden}.wf-scanner-progress>.wf-scan-step{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;-webkit-flex-direction:column;flex-direction:column;padding-left:0.5rem;padding-right:0.5rem}.wf-scanner-progress>.wf-scan-step:first-of-type{padding-left:0;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iNTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PHN0b3Agb2Zmc2V0PSI1MSUiIHN0b3AtY29sb3I9IiNmZmZmZmYiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #ffffff),color-stop(50%, #ffffff),color-stop(51%, rgba(255,255,255,0)),color-stop(100%, rgba(255,255,255,0)));background-image:-moz-linear-gradient(left, #ffffff 0%,#ffffff 50%,rgba(255,255,255,0) 51%,rgba(255,255,255,0) 100%);background-image:-webkit-linear-gradient(left, #ffffff 0%,#ffffff 50%,rgba(255,255,255,0) 51%,rgba(255,255,255,0) 100%);background-image:linear-gradient(to right, #ffffff 0%,#ffffff 50%,rgba(255,255,255,0) 51%,rgba(255,255,255,0) 100%);background-repeat:no-repeat;background-position:left center}.wf-scanner-progress>.wf-scan-step:last-of-type{padding-right:0;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjQ5JSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(49%, rgba(255,255,255,0)),color-stop(50%, #ffffff),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,rgba(255,255,255,0) 49%,#ffffff 50%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,rgba(255,255,255,0) 49%,#ffffff 50%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,rgba(255,255,255,0) 49%,#ffffff 50%,#ffffff 100%);background-repeat:no-repeat;background-position:right center}.wf-scanner-progress>.wf-scan-step>.wf-scan-step-title{font-size:0.7rem;padding-top:0.5rem;white-space:nowrap}.wf-scanner-progress>.wf-scan-step>.wf-scan-step-subtitle{font-size:0.7rem}.wf-scanner-progress>.wf-scan-step>.wf-scan-step-icon>.wf-scan-step-pending,.wf-step-pending{width:50px;height:54px;background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB3aWR0aD0iMTRweCIgaGVpZ2h0PSIxNHB4IiB2aWV3Qm94PSIwIDAgMTQgMTQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+Cgk8Y2lyY2xlIGN4PSI3IiBjeT0iNyIgcj0iNyIgZmlsbD0iI2QxZDFkMSIvPgo8L3N2Zz4=");background-repeat:no-repeat;background-position:center center}.wf-scanner-progress>.wf-scan-step>.wf-scan-step-icon>.wf-scan-step-running,.wf-step-running{display:none;background-color:#ffffff !important}.wf-scanner-progress>.wf-scan-step>.wf-scan-step-icon>.wf-scan-step-complete-success,.wf-step-complete-success{display:none;width:50px;height:54px;background:#fff url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHdpZHRoPSI1MHB4IiBoZWlnaHQ9IjUwcHgiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTk4LjI4NywyMS4wMjVsLTcuODIzLC03LjgxMmMtMS4wNjYsLTEuMDkyIC0yLjUyOCwtMS43MDggLTQuMDU0LC0xLjcwOGMtMS41MjUsMCAtMi45ODgsMC42MTYgLTQuMDUzLDEuNzA4bC00Ni4wMTIsNDYuMDEybC0xOC43MTMsLTE4LjcxMmMtMS4wNjYsLTEuMDkgLTIuNTI5LC0xLjcwNCAtNC4wNTMsLTEuNzA0Yy0xLjUyNSwwIC0yLjk4NywwLjYxNCAtNC4wNTQsMS43MDRsLTcuODEyLDcuODM0Yy0xLjA5MiwxLjA2NSAtMS43MDgsMi41MjggLTEuNzA4LDQuMDUzYzAsMS41MjYgMC42MTYsMi45ODggMS43MDgsNC4wNTRsMzAuNTUxLDMwLjU1MWMxLjA2NywxLjA4OSAyLjUyOSwxLjcwMyA0LjA1NCwxLjcwM2MxLjUyNCwwIDIuOTg2LC0wLjYxNCA0LjA1MywtMS43MDNsNTcuOTE2LC01Ny44NjJjMS4wOTIsLTEuMDY1IDEuNzA4LC0yLjUyOCAxLjcwOCwtNC4wNTNjMCwtMS41MjYgLTAuNjE2LC0yLjk4OCAtMS43MDgsLTQuMDU0bDAsLTAuMDExbDAsMFoiIGZpbGw9IiMwMDcwOWUiLz48L3N2Zz4=");background-repeat:no-repeat;background-position:center center;background-size:80%}.wf-scanner-progress>.wf-scan-step>.wf-scan-step-icon>.wf-scan-step-complete-warning,.wf-step-complete-warning{display:none;width:50px;height:54px;background:#fff url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHdpZHRoPSI1MHB4IiBoZWlnaHQ9IjUwcHgiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTk5LjA1MSw4Mi44NDJsLTQyLjgxMiwtNzguNDgzYy0wLjYxLC0xLjEzMSAtMS41MTQsLTIuMDc3IC0yLjYxNywtMi43MzdjLTIuMjI3LC0xLjMzNCAtNS4wMTcsLTEuMzM0IC03LjI0NCwwYy0xLjEwNiwwLjY1OSAtMi4wMTMsMS42MDUgLTIuNjI1LDIuNzM3bC00Mi44MDQsNzguNDgzYy0xLjI5OSwyLjE2OCAtMS4yNTYsNC44OTYgMC4xMTEsNy4wMjFjMC42MTQsMS4wNjcgMS41LDEuOTUyIDIuNTY2LDIuNTY2YzEuMDc0LDAuNjI3IDIuMjk3LDAuOTU1IDMuNTQxLDAuOTQ5bDg1LjY0MSwwYzIuNTE3LC0wLjAwOSA0Ljg1MiwtMS4zNDcgNi4xMzIsLTMuNTE1YzEuMzY3LC0yLjEyNSAxLjQxLC00Ljg1MyAwLjExMSwtNy4wMjFsMCwwWm0tNDEuOTA2LC01LjU3NmMwLjAxMSwwLjQ5IC0wLjE4MSwwLjk2NCAtMC41MywxLjMwOGMtMC4zMjUsMC4zNDIgLTAuNzc3LDAuNTM0IC0xLjI0OSwwLjUzMWwtMTAuNzE1LDBjLTAuNDcyLDAuMDAzIC0wLjkyNCwtMC4xODkgLTEuMjQ5LC0wLjUzMWMtMC4zNDksLTAuMzQ0IC0wLjU0MiwtMC44MTggLTAuNTMsLTEuMzA4bDAsLTEwLjU4OGMtMC4wMTIsLTAuNDkgMC4xODEsLTAuOTY0IDAuNTMsLTEuMzA4YzAuMzI1LC0wLjM0MSAwLjc3NywtMC41MzMgMS4yNDksLTAuNTNsMTAuNjk4LDBjMC40NzUsLTAuMDA2IDAuOTMsMC4xODcgMS4yNTgsMC41M2MwLjM0OCwwLjM0NSAwLjU0LDAuODE4IDAuNTMsMS4zMDhsMCwxMC41ODhsMC4wMDgsMFptLTAuMTExLC0yMC44NDJjLTAuMDQ1LDAuMzggLTAuMjYzLDAuNzE4IC0wLjU5LDAuOTE2Yy0wLjM4OSwwLjI1IC0wLjg0NiwwLjM3NSAtMS4zMDgsMC4zNTlsLTEwLjMyMywwYy0wLjQ3LDAuMDEzIC0wLjkzNCwtMC4xMTIgLTEuMzM0LC0wLjM1OWMtMC4zMzgsLTAuMTg1IC0wLjU1MSwtMC41MzkgLTAuNTU2LC0wLjkyNGwtMC45NDksLTI1LjQ2OGMtMC4wMywtMC40NiAwLjE4MSwtMC45MDQgMC41NTYsLTEuMTcyYzAuMzU4LC0wLjM1NSAwLjgzMSwtMC41NzMgMS4zMzQsLTAuNjE2bDEyLjI3MiwwYzAuNTA2LDAuMDQgMC45ODIsMC4yNTggMS4zNDMsMC42MTZjMC4zNTcsMC4yMzIgMC41NjgsMC42MzUgMC41NTYsMS4wNmwtMS4wMDEsMjUuNTg4WiIgZmlsbD0iI2ZjYjIxNCIvPjwvc3ZnPg==");background-repeat:no-repeat;background-position:center center;background-size:80%}.wf-scanner-progress>.wf-scan-step>.wf-scan-step-icon>.wf-scan-step-disabled,.wf-step-disabled{display:none;width:50px;height:54px;background:#fff url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHdpZHRoPSI1MHB4IiBoZWlnaHQ9IjUwcHgiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTk1Ljg5LDMwLjUyOGMtMi40OTYsLTUuOTQxIC02LjEwOCwtMTEuMzUxIC0xMC42NDIsLTE1LjkzOGMtNC41NzUsLTQuNTM4IC05Ljk5LC04LjE0OCAtMTUuOTQyLC0xMC42M2MtMTIuNDAxLC01LjI4IC0yNi40NDEsLTUuMjggLTM4Ljg0MiwwYy01Ljk2NSwyLjQ4NSAtMTEuMzg5LDYuMTAxIC0xNS45NzIsMTAuNjVjLTQuNTEsNC41ODYgLTguMTAxLDkuOTg5IC0xMC41ODIsMTUuOTE4Yy01LjI4NywxMi40MzIgLTUuMjg3LDI2LjQ5IDAsMzguOTIxYzIuNDk1LDUuOTQyIDYuMTA3LDExLjM1MyAxMC42NDIsMTUuOTM5YzQuNTgzLDQuNTQ4IDEwLjAwNyw4LjE2NSAxNS45NzIsMTAuNjQ5YzEyLjQsNS4yODQgMjYuNDQyLDUuMjg0IDM4Ljg0MiwwYzUuOTY1LC0yLjQ4NCAxMS4zODksLTYuMTAxIDE1Ljk3MiwtMTAuNjQ5YzQuNTM2LC00LjU4NSA4LjE0OSwtOS45OTYgMTAuNjQyLC0xNS45MzljNS4yODcsLTEyLjQzMSA1LjI4NywtMjYuNDg5IDAsLTM4LjkyMWwtMC4wOSwwWm0tNzUuNjA4LDM4Ljg1MWMtNy4zMDIsLTExLjIxMiAtNy42ODksLTI1LjYyIC0wLjk5OCwtMzcuMjA3YzMuMDc1LC01LjM3NSA3LjUyMiwtOS44NDQgMTIuODg3LC0xMi45NWM1LjM3NSwtMy4xMjkgMTEuNDk3LC00Ljc1NCAxNy43MTksLTQuNzAyYzYuOTU1LC0wLjA2IDEzLjc2NiwyLjAwMiAxOS41MTYsNS45MDdsLTQ5LjEyNCw0OC45NTJabTYyLjIwMSwtNS42NDhjLTEuNzU1LDQuMjI4IC00LjMxOCw4LjA3NiAtNy41NDcsMTEuMzI2Yy0zLjI0MywzLjIyOSAtNy4wNzYsNS44MDkgLTExLjI5LDcuNjAxYy00LjM0MywxLjg4MyAtOS4wMzEsMi44NDYgLTEzLjc2NiwyLjgyOWMtNi44NzIsMC4wMDggLTEzLjU5NSwtMi4wMTcgLTE5LjMxNiwtNS44MTdsNDkuMDU0LC00OC44MTNjMy43NDEsNS42ODcgNS43MTEsMTIuMzU0IDUuNjYsMTkuMTU3YzAuMDAzLDQuNzEzIC0wLjk0OCw5LjM3OSAtMi43OTUsMTMuNzE3bDAsMFoiIGZpbGw9IiNkMWQxZDEiLz48L3N2Zz4=");background-repeat:no-repeat;background-position:center center;background-size:80%}.wf-scanner-progress>.wf-scan-step>.wf-scan-step-icon>.wf-scan-step-premium,.wf-step-premium{width:50px;height:54px;background:#fff url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB3aWR0aD0iMjRweCIgaGVpZ2h0PSIzMHB4IiB2aWV3Qm94PSIwIDAgMjQgMzAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxwYXRoIGQ9Ik0yMy45NDksMTQuMjMzYy0wLjM3OSwtMC4zOSAtMC45MDQsLTAuNjA2IC0xLjQ0OCwtMC41OTVsLTAuNjgzLDBsMCwtNC4wOTJjMC4wMzIsLTIuNTM1IC0wLjk4NiwtNC45NzMgLTIuODEyLC02LjczMWMtMS43NTksLTEuODI4IC00LjE5OCwtMi44NDcgLTYuNzM0LC0yLjgxNWMtMi41MzYsLTAuMDMyIC00Ljk3NiwwLjk4NyAtNi43MzQsMi44MTVjLTEuODI2LDEuNzU4IC0yLjg0NCw0LjE5NiAtMi44MTIsNi43MzFsMCw0LjA4OWwtMC42OCwwYy0wLjU0NCwtMC4wMTEgLTEuMDY5LDAuMjA1IC0xLjQ0OCwwLjU5NWMtMC4zOTUsMC4zODIgLTAuNjEyLDAuOTEyIC0wLjU5OCwxLjQ2MWwwLDEyLjI2NmMtMC4wMTEsMC41NDQgMC4yMDQsMS4wNjkgMC41OTUsMS40NDhjMC4zNzksMC4zOTEgMC45MDQsMC42MDYgMS40NDgsMC41OTVsMjAuNDU4LDBjMC4wMDMsMCAwLjAwNiwwIDAuMDEsMGMxLjExNywwIDIuMDM2LC0wLjkxOSAyLjAzNiwtMi4wMzdjMCwtMC4wMDMgMCwtMC4wMDYgMCwtMC4wMDlsMCwtMTIuMjYzYzAuMDExLC0wLjU0NCAtMC4yMDYsLTEuMDY5IC0wLjU5OCwtMS40NDhsMCwtMC4wMVptLTYuMjExLC0wLjU5NWwtMTAuOTE5LDBsMCwtNC4wOTJjLTAuMDIyLC0xLjQ1MSAwLjU1NywtMi44NDggMS41OTksLTMuODU4YzEuMDA5LC0xLjA0MiAyLjQwNywtMS42MjEgMy44NTcsLTEuNTk4YzEuNDUxLC0wLjAyMyAyLjg0OCwwLjU1NiAzLjg1OCwxLjU5OGMxLjA0MiwxLjAwOSAxLjYyMSwyLjQwNyAxLjU5OCwzLjg1OGwwLjAwNyw0LjA5MloiIGZpbGw9IiNkMWQxZDEiLz4KPC9zdmc+");background-repeat:no-repeat;background-position:center center;background-size:40%}.wf-scanner-progress>.wf-scan-step.wf-scan-step-premium>.wf-scan-step-icon>.wf-scan-step-pending{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-premium>.wf-scan-step-icon>.wf-scan-step-running{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-premium>.wf-scan-step-icon>.wf-scan-step-complete-success{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-premium>.wf-scan-step-icon>.wf-scan-step-complete-warning{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-premium>.wf-scan-step-icon>.wf-scan-step-disabled{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-running>.wf-scan-step-icon>.wf-scan-step-pending{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-running>.wf-scan-step-icon>.wf-scan-step-running{display:block}.wf-scanner-progress>.wf-scan-step.wf-scan-step-running>.wf-scan-step-icon>.wf-scan-step-complete-success{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-running>.wf-scan-step-icon>.wf-scan-step-complete-warning{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-running>.wf-scan-step-icon>.wf-scan-step-disabled{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-success>.wf-scan-step-icon>.wf-scan-step-pending{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-success>.wf-scan-step-icon>.wf-scan-step-running{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-success>.wf-scan-step-icon>.wf-scan-step-complete-success{display:block}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-success>.wf-scan-step-icon>.wf-scan-step-complete-warning{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-success>.wf-scan-step-icon>.wf-scan-step-disabled{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-warning>.wf-scan-step-icon>.wf-scan-step-pending{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-warning>.wf-scan-step-icon>.wf-scan-step-running{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-warning>.wf-scan-step-icon>.wf-scan-step-complete-success{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-warning>.wf-scan-step-icon>.wf-scan-step-complete-warning{display:block}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-warning>.wf-scan-step-icon>.wf-scan-step-disabled{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-disabled>.wf-scan-step-icon>.wf-scan-step-pending{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-disabled>.wf-scan-step-icon>.wf-scan-step-running{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-disabled>.wf-scan-step-icon>.wf-scan-step-complete-success{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-disabled>.wf-scan-step-icon>.wf-scan-step-complete-warning{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-disabled>.wf-scan-step-icon>.wf-scan-step-disabled{display:block}#wf-scan-last-status{font-size:0.75rem;text-align:center}@media (min-width: 768px){#wf-scan-last-status{text-align:left}}#wf-scan-activity-log-controls{-webkit-flex-shrink:0;flex-shrink:0;text-align:center;white-space:nowrap}@media (min-width: 768px){#wf-scan-activity-log-controls{text-align:right}}#wf-scan-activity-log-controls a{text-transform:uppercase;font-size:0.75rem;white-space:nowrap}#wf-scan-toggle-activity-log .wf-scan-activity-log-visible{display:none}#wf-scan-toggle-activity-log .wf-scan-activity-log-hidden{display:inline}#wf-scan-toggle-activity-log.wf-active .wf-scan-activity-log-visible{display:inline}#wf-scan-toggle-activity-log.wf-active .wf-scan-activity-log-hidden{display:none}#wf-scan-running-bar{height:4px;border:1px solid #e2e2e2;background-color:#ffffff;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}#wf-scan-running-bar-pill{height:4px;background-color:#00709e;width:33.3333%;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-animation:wf-scan-running-bar-pill-keyframes 1s linear infinite alternate both;-o-animation:wf-scan-running-bar-pill-keyframes 1s linear infinite alternate both;animation:wf-scan-running-bar-pill-keyframes 1s linear infinite alternate both}@-moz-keyframes wf-scan-running-bar-pill-keyframes{from{margin-left:0%}to{margin-left:66.6667%}}@-webkit-keyframes wf-scan-running-bar-pill-keyframes{from{margin-left:0%}to{margin-left:66.6667%}}@keyframes wf-scan-running-bar-pill-keyframes{from{margin-left:0%}to{margin-left:66.6667%}}#wf-scan-activity-log{display:none;overflow-x:hidden;overflow-y:auto;background-color:#ffffff;box-shadow:0 0 0 1px rgba(200,215,225,0.25),0 1px 2px #e9eff3;padding:0.5rem;height:7rem}#wf-scan-activity-log>li{margin:0;padding:0}#wf-scan-activity-log.wf-active{display:block}.wf-scan-tabs{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;box-shadow:inset 0px 0px 0px 1px #f1f1f1,inset 0px -1px 0px 1px #e2e2e2;margin:0.5rem 0 0 0}.wf-scan-tabs>*{-webkit-flex-grow:0;flex-grow:0;min-width:0}.wf-scan-tabs .wf-tab{border:1px solid #d0d0d0;border-top-right-radius:0.5rem;border-top-left-radius:0.5rem;border-bottom:none;margin:0;margin-left:0.5rem;background:#e6e6e6;color:#333}.wf-scan-tabs .wf-tab:first-of-type{margin-left:0}.wf-scan-tabs .wf-tab a{display:block;padding:0.5rem 1rem;font-size:14px;line-height:24px;text-decoration:none;font-weight:bold;color:#333}.wf-scan-tabs .wf-tab.wf-active,.wf-scan-tabs .wf-tab:hover{border-bottom:1px solid #ffffff;background:#ffffff;color:#00709e;margin-bottom:-1px;-webkit-box-shadow:none;box-shadow:none}.wf-scan-tabs .wf-tab.wf-active a,.wf-scan-tabs .wf-tab:hover a{color:#00709e}.wf-scan-tabs #wf-scan-bulk-buttons{-webkit-flex-grow:1 !important;flex-grow:1 !important;text-align:right}.wf-scan-tab-content{display:none;margin-top:15px}.wf-scan-tab-content.wf-active{display:block}.wf-scan-results{margin:0;margin-top:-1px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-left:1px solid #e2e2e2;border-right:1px solid #e2e2e2;border-bottom:1px solid #e2e2e2}.wf-scan-results>.wf-scan-results-stats{margin:0}.wf-scan-results>.wf-scan-results-stats>.wf-block{box-shadow:none;margin:0}.wf-scan-results>.wf-scan-results-stats>.wf-block>.wf-block-content>.wf-block-list>li{border-top:0px;padding:0 1rem}.wf-scan-results>.wf-scan-results-stats>.wf-block>.wf-block-content>.wf-block-list .wf-flex-horizontal>li{font-size:0.75rem;white-space:nowrap;margin:0}.wf-scan-results>.wf-scan-results-stats>.wf-block>.wf-block-content>.wf-block-list .wf-flex-horizontal>li:last-of-type{text-align:right}.wf-scan-results-issues{padding:0;margin:0;display:none}.wf-scan-results-issues.wf-active{display:block}.wf-issue,.wf-issue-site-cleaning{display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column;border-top:1px solid #e2e2e2}.wf-issue:nth-of-type(2n),.wf-issue-site-cleaning:nth-of-type(2n){background-color:#fff}.wf-issue>li,.wf-issue-site-cleaning>li{margin:0}.wf-issue.wf-issue-severity-critical,.wf-issue-site-cleaning.wf-issue-severity-critical{border-left:4px solid #930000}.wf-issue.wf-issue-severity-high,.wf-issue-site-cleaning.wf-issue-severity-high{border-left:4px solid #c10000}.wf-issue.wf-issue-severity-warning,.wf-issue.wf-issue-severity-medium,.wf-issue-site-cleaning.wf-issue-severity-warning,.wf-issue-site-cleaning.wf-issue-severity-medium{border-left:4px solid #fcb214}.wf-issue.wf-issue-severity-low,.wf-issue-site-cleaning.wf-issue-severity-low{border-left:4px solid #3f596b}.wf-issue.wf-issue-severity-good,.wf-issue-site-cleaning.wf-issue-severity-good{border-left:4px solid #16bc9b}.wf-issue>.wf-issue-summary>ul,.wf-issue-site-cleaning>.wf-issue-summary>ul{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row;padding:1.5rem}.wf-issue>.wf-issue-summary>ul>li,.wf-issue-site-cleaning>.wf-issue-summary>ul>li{margin:0;padding:0;padding-left:1.5rem}@media (max-width: 767px){.wf-issue>.wf-issue-summary>ul>li,.wf-issue-site-cleaning>.wf-issue-summary>ul>li{padding-left:0.5rem}}.wf-issue>.wf-issue-summary>ul>li:first-of-type,.wf-issue-site-cleaning>.wf-issue-summary>ul>li:first-of-type{padding-left:0}.wf-issue>.wf-issue-summary>ul>.wf-issue-icon,.wf-issue>.wf-issue-summary>ul>.wf-issue-icon-colored,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-icon,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-icon-colored{text-align:left;-webkit-flex-basis:50px;flex-basis:50px;-webkit-flex-shrink:0;flex-shrink:0}.wf-issue>.wf-issue-summary>ul>.wf-issue-icon>*,.wf-issue>.wf-issue-summary>ul>.wf-issue-icon-colored>*,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-icon>*,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-icon-colored>*{height:40px}.wf-issue>.wf-issue-summary>ul>.wf-issue-icon svg path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-icon svg path{fill:#9e9e9e}.wf-issue>.wf-issue-summary>ul>.wf-issue-short,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short{-webkit-flex-basis:40%;flex-basis:40%}.wf-issue>.wf-issue-summary>ul>.wf-issue-stats,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-stats{-webkit-flex-basis:25%;flex-basis:25%}.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats{-webkit-flex-grow:1;flex-grow:1}.wf-issue>.wf-issue-summary>ul .wf-issue-severity-critical,.wf-issue>.wf-issue-summary>ul .wf-issue-severity-high,.wf-issue>.wf-issue-summary>ul .wf-issue-severity-medium,.wf-issue>.wf-issue-summary>ul .wf-issue-severity-low,.wf-issue>.wf-issue-summary>ul .wf-issue-severity-warning,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-critical,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-high,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-medium,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-low,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-warning{padding-left:18px;position:relative}.wf-issue>.wf-issue-summary>ul .wf-issue-severity-critical:before,.wf-issue>.wf-issue-summary>ul .wf-issue-severity-high:before,.wf-issue>.wf-issue-summary>ul .wf-issue-severity-medium:before,.wf-issue>.wf-issue-summary>ul .wf-issue-severity-low:before,.wf-issue>.wf-issue-summary>ul .wf-issue-severity-warning:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-critical:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-high:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-medium:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-low:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-warning:before{content:'';display:block;position:absolute;top:50%;left:0;margin-top:-5px;border:5px solid #9f9fa0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.wf-issue>.wf-issue-summary>ul .wf-issue-severity-critical:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-critical:before{border-color:#930000}.wf-issue>.wf-issue-summary>ul .wf-issue-severity-high:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-high:before{border-color:#c10000}.wf-issue>.wf-issue-summary>ul .wf-issue-severity-medium:before,.wf-issue>.wf-issue-summary>ul .wf-issue-severity-warning:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-medium:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-warning:before{border-color:#fcb214}.wf-issue>.wf-issue-summary>ul .wf-issue-severity-low:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-low:before{border-color:#3f596b}.wf-issue>.wf-issue-summary>ul>.wf-issue-controls,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls{-webkit-flex-grow:1;flex-grow:1;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-end;justify-content:flex-end;-webkit-flex-direction:row;flex-direction:row}.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;-webkit-flex-direction:column;flex-direction:column;padding-left:2rem;text-decoration:none}.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:first-of-type,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:first-of-type,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:first-of-type,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:first-of-type{padding-left:0}.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control>.wf-issue-control-icon,.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-inactive,.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-active,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control>.wf-issue-control-icon,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-inactive,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-active,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control>.wf-issue-control-icon,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-inactive,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-active,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control>.wf-issue-control-icon,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-inactive,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-active{height:20px}.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control>.wf-issue-control-icon path,.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-inactive path,.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-active path,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control>.wf-issue-control-icon path,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-inactive path,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-active path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control>.wf-issue-control-icon path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-inactive path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-active path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control>.wf-issue-control-icon path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-inactive path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-active path{fill:#9e9e9e;fill-rule:nonzero}.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control>.wf-issue-control-label,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control>.wf-issue-control-label,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control>.wf-issue-control-label,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control>.wf-issue-control-label{padding-top:0.65rem;font-size:0.7rem;font-weight:500;text-transform:uppercase;color:#9e9e9e}.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:hover>.wf-issue-control-icon path,.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:hover .wf-issue-control-icon-inactive path,.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:hover .wf-issue-control-icon-active path,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:hover>.wf-issue-control-icon path,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:hover .wf-issue-control-icon-inactive path,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:hover .wf-issue-control-icon-active path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:hover>.wf-issue-control-icon path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:hover .wf-issue-control-icon-inactive path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:hover .wf-issue-control-icon-active path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:hover>.wf-issue-control-icon path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:hover .wf-issue-control-icon-inactive path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:hover .wf-issue-control-icon-active path{fill:#00709e}.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:hover>.wf-issue-control-label,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:hover>.wf-issue-control-label,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:hover>.wf-issue-control-label,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:hover>.wf-issue-control-label{color:#00709e}.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls{margin-top:1rem;-webkit-justify-content:flex-start;justify-content:flex-start}.wf-issue .wf-issue-control-icon-active,.wf-issue-site-cleaning .wf-issue-control-icon-active{display:none}.wf-issue .wf-issue-control-icon-inactive,.wf-issue-site-cleaning .wf-issue-control-icon-inactive{display:block}.wf-issue>.wf-issue-detail,.wf-issue-site-cleaning>.wf-issue-detail{display:none;padding:1.5rem;border-top:1px solid #e2e2e2}.wf-issue>.wf-issue-detail .wf-issue-detail-spacer,.wf-issue-site-cleaning>.wf-issue-detail .wf-issue-detail-spacer{height:1rem;margin:0;padding:0}.wf-issue>.wf-issue-detail .wf-issue-detail-controls,.wf-issue-site-cleaning>.wf-issue-detail .wf-issue-detail-controls{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row;margin:0;margin-top:1rem}.wf-issue>.wf-issue-detail .wf-issue-detail-controls>*,.wf-issue-site-cleaning>.wf-issue-detail .wf-issue-detail-controls>*{margin-left:1rem}.wf-issue>.wf-issue-detail .wf-issue-detail-controls>*:first-of-type,.wf-issue-site-cleaning>.wf-issue-detail .wf-issue-detail-controls>*:first-of-type{margin-left:0}@media (max-width: 767px){.wf-issue>.wf-issue-detail .wf-issue-detail-controls,.wf-issue-site-cleaning>.wf-issue-detail .wf-issue-detail-controls{-webkit-align-items:flex-start;align-items:flex-start;-webkit-flex-direction:column;flex-direction:column}.wf-issue>.wf-issue-detail .wf-issue-detail-controls>*,.wf-issue-site-cleaning>.wf-issue-detail .wf-issue-detail-controls>*{margin-left:0;margin-top:0.5rem}.wf-issue>.wf-issue-detail .wf-issue-detail-controls>*:first-of-type,.wf-issue-site-cleaning>.wf-issue-detail .wf-issue-detail-controls>*:first-of-type{margin-top:0}}.wf-issue.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-show-details>.wf-issue-control-icon path,.wf-issue.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-show-details .wf-issue-control-icon-inactive path,.wf-issue.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-show-details .wf-issue-control-icon-active path,.wf-issue-site-cleaning.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-show-details>.wf-issue-control-icon path,.wf-issue-site-cleaning.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-show-details .wf-issue-control-icon-inactive path,.wf-issue-site-cleaning.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-show-details .wf-issue-control-icon-active path{fill:#00709e}.wf-issue.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-show-details>.wf-issue-control-label,.wf-issue-site-cleaning.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-show-details>.wf-issue-control-label{color:#00709e}.wf-issue.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-icon-inactive,.wf-issue-site-cleaning.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-icon-inactive{display:none}.wf-issue.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-icon-active,.wf-issue-site-cleaning.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-icon-active{display:block}.wf-issue.wf-active>.wf-issue-detail,.wf-issue-site-cleaning.wf-active>.wf-issue-detail{display:block}.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short{-webkit-flex-basis:auto;flex-basis:auto}.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short p{padding:0;margin:0}.wf-option-scan-signatures>.wf-option-disclosure{-webkit-flex-grow:1;flex-grow:1;text-align:right}.wf-option-scan-signatures>.wf-option-disclosure>svg{transition:transform 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275)}#wf-scan-additional-signatures{display:none;margin-left:3rem;padding-left:30px;padding-bottom:1rem}#wf-scan-additional-signatures>h4{margin:0 0 0.5rem 0}#wf-scan-additional-signatures>textarea{width:300px;height:80px}.wf-scan-type-enabled{padding:1rem 0.5rem}.wf-scan-type-enabled>li:first-of-type{padding-right:1.5rem}.wf-scan-type-controls{display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column;margin:0 -0.5rem}.wf-scan-type{display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:center;justify-content:center;-webkit-flex-direction:row;flex-direction:row;min-width:700px}@media (max-width: 767px){.wf-scan-type{-webkit-justify-content:flex-start;justify-content:flex-start}}.wf-scan-type>li{-webkit-flex-grow:1;flex-grow:1;-webkit-flex-shrink:0;flex-shrink:0;-webkit-flex-basis:25%;flex-basis:25%;display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:center;justify-content:center;max-width:25%;padding:0.5rem}@media (min-width: 768px){.wf-scan-type>li{-webkit-flex-shrink:1;flex-shrink:1}}.wf-scan-type>li>ul.wf-scan-type-option{-webkit-flex-grow:1;flex-grow:1;margin:0;padding:0;border:1px solid #d9d9d9;min-height:100%;cursor:pointer}.wf-scan-type>li>ul.wf-scan-type-option.wf-scan-type-option-custom{cursor:inherit}.wf-scan-type>li>ul.wf-scan-type-option>.wf-scan-type-option-name{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;-webkit-flex-direction:row;flex-direction:row;border-bottom:2px solid #d9d9d9;padding:0.5rem 1rem}.wf-scan-type>li>ul.wf-scan-type-option>.wf-scan-type-option-name .wf-option-checkbox{margin-right:0.5rem;width:20px;height:20px;min-width:20px;min-height:20px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;line-height:20px !important;background-color:#ffffff;box-shadow:0px 0px 0px 1px rgba(185,185,185,0.75);color:#ffffff !important;font-size:25px !important}.wf-scan-type>li>ul.wf-scan-type-option>.wf-scan-type-option-name span{font-weight:400;font-size:0.95rem}.wf-scan-type>li>ul.wf-scan-type-option>.wf-scan-type-option-description{padding:1rem}.wf-scan-type>li>ul.wf-scan-type-option.wf-active>.wf-scan-type-option-name{background-color:#00709e}.wf-scan-type>li>ul.wf-scan-type-option.wf-active>.wf-scan-type-option-name .wf-option-checkbox{color:#00709e !important}.wf-scan-type>li>ul.wf-scan-type-option.wf-active>.wf-scan-type-option-name span{color:#ffffff}.wf-scan-scheduling-manual{display:none;margin-left:3rem;padding-left:30px}.wf-scan-scheduling-manual.wf-active{display:block}.wf-scan-scheduling-manual>li{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row}.wf-scan-scheduling-manual .wf-scan-scheduling-manual-presets-label{padding-right:1rem}.wf-scan-scheduling-manual .wf-scan-scheduling-manual-presets{display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row;margin:0;padding:0}.wf-scan-scheduling-manual .wf-scan-scheduling-manual-presets>li{margin:0;padding:0.5rem 0.7rem;text-transform:uppercase;cursor:pointer;color:#aaa;font-weight:400;border-top:1px solid #bfbfbf;border-bottom:1px solid #bfbfbf;border-right:1px solid #bfbfbf}.wf-scan-scheduling-manual .wf-scan-scheduling-manual-presets>li:first-of-type{border-left:1px solid #bfbfbf;-moz-border-radius-topleft:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px}.wf-scan-scheduling-manual .wf-scan-scheduling-manual-presets>li:last-of-type{-moz-border-radius-topright:6px;-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-moz-border-radius-bottomright:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px}.wf-scan-scheduling-manual .wf-scan-scheduling-manual-presets>li.wf-active{color:#ffffff;background-color:#00709e}.wf-scan-scheduling-manual-preset-options .wfselect2-container{min-width:100px}.wf-scan-scheduling-manual-preset-options:not(.wf-active),.wf-scan-scheduling-manual-custom-options:not(.wf-active){display:none !important}.wf-scan-scheduling-manual-custom-options{padding-bottom:1rem}.wf-schedule-times-wrapper{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:row;flex-direction:row;margin-top:1rem}@media (min-width: 768px){.wf-schedule-times-wrapper{margin-top:0.25rem}}.wf-schedule-times-wrapper:first-of-type{margin-top:0}@media (min-width: 768px){.wf-schedule-times-wrapper:first-of-type{margin-top:1rem}}.wf-schedule-times-wrapper>*{-webkit-flex-grow:1;flex-grow:1;min-width:0}.wf-schedule-times-wrapper>*:first-child{-webkit-flex-grow:0;flex-grow:0;min-width:initial;padding-right:0.25rem}.wf-schedule-times-wrapper .wf-schedule-period{font-weight:500;padding:0.5rem 0.7rem}.wf-schedule-times{display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row}.wf-schedule-times>li{margin:0;padding:0.5rem 0.7rem;text-transform:uppercase;cursor:pointer;color:#aaa;font-weight:400;border-top:1px solid #bfbfbf;border-bottom:1px solid #bfbfbf;border-right:1px solid #bfbfbf}.wf-schedule-times>li:first-of-type{border-left:1px solid #bfbfbf;-moz-border-radius-topleft:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px}.wf-schedule-times>li:last-of-type{-moz-border-radius-topright:6px;-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-moz-border-radius-bottomright:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px}.wf-schedule-times>li.wf-active{color:#ffffff;background-color:#00709e}.wf-issue-control-ignore-menu{position:absolute;z-index:9999;background-color:#ffffff;border:1px solid #bfbfbf}.wf-issue-control-ignore-menu>li{padding:0.5rem 1rem;margin:0;border-top:1px solid #bfbfbf;cursor:pointer}.wf-issue-control-ignore-menu>li:hover{color:#ffffff;background-color:#00709e}.wf-issue-control-ignore-menu>li:first-of-type{border-top:0}#wf-scan-failed.wf-alert.wf-alert-danger{background-color:#ffe470;border-color:#ffd10a;border-radius:0}#wf-scan-failed.wf-alert.wf-alert-danger pre{white-space:normal}#wf-scan-failed.wf-alert.wf-alert-danger svg{width:50px;height:50px;margin-right:1rem}#wf-scan-failed.wf-alert.wf-alert-danger svg path{fill:#da9603}#wf-scan-failed.wf-alert.wf-alert-danger h4{margin:0}#wf-scan-failed.wf-alert.wf-alert-danger p{margin-top:0.25rem;margin-bottom:0}#wf-scan-failed.wf-alert.wf-alert-danger .wf-btn.wf-btn-default{border-color:#ffffff;background-color:#ffffff;color:#000000}#wf-site-cleaning-bottom h3{color:#00709e;font-weight:300;font-size:1.5rem;margin:1rem 0}#wf-site-cleaning-bottom p{max-width:750px}#wfTwoFactorQRCodeTable{width:175px;height:175px;margin:0 auto}@media (min-width: 500px){#wfTwoFactorQRCodeTable{width:256px;height:256px}}#wfTwoFactorRecoveryCodes{list-style-type:none}#wfTwoFactorRecoveryCodes li{font-family:monospace;text-align:center}#wfTwoFactorDownload .dashicons{line-height:26px}.wf-twofactor-delete{font-size:1.5rem}.wf-twofactor-delete a{text-decoration:none;color:#333}.wf-twofactor-delete a i{font-size:1.5rem}.wf-table.wf-table-twofactor>tbody>tr>td{vertical-align:middle}.wf-form-twofactor{max-width:400px}.wf-form-twofactor .wf-radio label{padding-left:0}#twofactor .wf-block-list>li{padding:.8rem 1.5rem;min-height:0px}#twofactor .wf-block-list .wf-form-control{margin:0px 0px}.wf-block-list .wf-block-list-title{font-weight:bold;font-size:0.9rem}.wf-block-list .wf-block-list-subtitle{font-weight:bold;font-size:0.85rem;color:#008cc1}#wfTwoFacUsers{margin:0 auto 1.5rem}#wf-tools-two-factor #wf-two-factor-img1,#wf-tools-two-factor #wf-two-factor-img2,#wf-all-options #wf-two-factor-img1,#wf-all-options #wf-two-factor-img2{display:inline}#wf-tools-two-factor #wf-two-factor-img1,#wf-all-options #wf-two-factor-img1{max-width:316px}#wf-tools-two-factor #wf-two-factor-img2,#wf-all-options #wf-two-factor-img2{max-width:270px}#wfUsername{max-width:568px}@media screen and (max-width: 782px){#wf-tools-two-factor #wf-two-factor-img1,#wf-tools-two-factor #wf-two-factor-img2,#wf-all-options #wf-two-factor-img1,#wf-all-options #wf-two-factor-img2{display:block;margin:0px auto 20px}}#wordfenceTwoFactorLegacy,#wordfenceTwoFactorModern{background:#fff;border-left:4px solid #00709e;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);margin-bottom:0.5rem;padding:1px 13px}fieldset{padding:0;margin:0;border:0;min-width: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:bold}label.wf-plain{font-weight:normal}label.wf-control-label.wf-disabled{pointer-events:none}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:1.5rem;font-size:14px;line-height:1.42857;color:#555}.wf-form-control{display:block;width:100%;height:38px;padding:.5rem 1.25rem;font-size:14px;line-height:1.42857;color:#555;background-color:#fff;background-image:none;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,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}.wf-form-control:focus{border-color:#66afe9;outline:0;-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)}.wf-form-control::-moz-placeholder{color:#bfbfbf;opacity:1}.wf-form-control:-ms-input-placeholder{color:#bfbfbf}.wf-form-control::-webkit-input-placeholder{color:#bfbfbf}.wf-form-control::-ms-expand{border:0;background-color:transparent}.wf-form-control[disabled],.wf-form-control[readonly],fieldset[disabled] .wf-form-control{background-color:#e2e2e2;opacity:1}.wf-form-control[disabled],.wf-form-control[readonly],fieldset[disabled] .wf-form-control{cursor:not-allowed;pointer-events:none}textarea.wf-form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"].wf-form-control,input[type="time"].wf-form-control,input[type="datetime-local"].wf-form-control,input[type="month"].wf-form-control{line-height:38px}input[type="date"].wf-input-sm,.wf-input-group-sm input[type="date"],input[type="time"].wf-input-sm,.wf-input-group-sm input[type="time"],input[type="datetime-local"].wf-input-sm,.wf-input-group-sm input[type="datetime-local"],input[type="month"].wf-input-sm,.wf-input-group-sm input[type="month"]{line-height:30px}input[type="date"].wf-input-lg,.wf-input-group-lg input[type="date"],input[type="time"].wf-input-lg,.wf-input-group-lg input[type="time"],input[type="datetime-local"].wf-input-lg,.wf-input-group-lg input[type="datetime-local"],input[type="month"].wf-input-lg,.wf-input-group-lg input[type="month"]{line-height:46px}}.wf-form-group{margin-bottom:8px}.wf-form-group.wf-sub-group label{color:#666666;font-weight:normal;padding-left:20px}.wf-form-group.wf-focus{border-left:4px solid #11967a;padding-bottom:8px;background-color:#e5e5e5}.wf-form-group.wf-focus label{margin-left:-4px}.wf-radio,.wf-checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.wf-radio label,.wf-checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.wf-radio input[type="radio"],.wf-radio-inline input[type="radio"],.wf-checkbox input[type="checkbox"],.wf-checkbox-inline input[type="checkbox"]{margin-top:4px \9}.wf-radio-offset{padding-left:29px}@media (min-width: 768px){.wf-radio-offset{padding-left:20px}}.wf-radio+.wf-radio,.wf-checkbox+.wf-checkbox{margin-top:-5px}.wf-radio-inline,.wf-checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.wf-radio-inline+.wf-radio-inline,.wf-checkbox-inline+.wf-checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="radio"][readonly],input[type="radio"].wf-disabled,fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],input[type="checkbox"][readonly],input[type="checkbox"].wf-disabled,fieldset[disabled] input[type="checkbox"]{cursor:not-allowed;pointer-events:none}.wf-radio-inline.wf-disabled,fieldset[disabled] .wf-radio-inline,.wf-checkbox-inline.wf-disabled,fieldset[disabled] .wf-checkbox-inline{cursor:not-allowed}.wf-radio.wf-disabled label,fieldset[disabled] .wf-radio label,.wf-checkbox.wf-disabled label,fieldset[disabled] .wf-checkbox label{cursor:not-allowed;pointer-events:none}.wf-form-control-static{padding-top:1.5rem;padding-bottom:1.5rem;margin:0;line-height:1}.wf-form-control-static.wf-input-lg,.wf-form-control-static.wf-input-sm{padding-left:0;padding-right:0}.wf-input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.wf-input-sm{height:30px;line-height:30px}textarea.wf-input-sm,select[multiple].wf-input-sm{height:auto}.wf-form-group-sm .wf-form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.wf-form-group-sm select.wf-form-control{height:30px;line-height:30px}.wf-form-group-sm textarea.wf-form-control,.wf-form-group-sm select[multiple].wf-form-control{height:auto}.wf-form-group-sm .wf-form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.wf-input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}select.wf-input-lg{height:46px;line-height:46px}textarea.wf-input-lg,select[multiple].wf-input-lg{height:auto}.wf-form-group-lg .wf-form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.wf-form-group-lg select.wf-form-control{height:46px;line-height:46px}.wf-form-group-lg textarea.wf-form-control,.wf-form-group-lg select[multiple].wf-form-control{height:auto}.wf-form-group-lg .wf-form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.33333}.wf-has-feedback{position:relative}.wf-has-feedback .wf-form-control{padding-right:47.5px}.wf-form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:38px;height:38px;line-height:38px;text-align:center;pointer-events:none}.wf-input-lg+.wf-form-control-feedback,.wf-input-group-lg+.wf-form-control-feedback,.wf-form-group-lg .wf-form-control+.wf-form-control-feedback{width:46px;height:46px;line-height:46px}.wf-input-sm+.wf-form-control-feedback,.wf-input-group-sm+.wf-form-control-feedback,.wf-form-group-sm .wf-form-control+.wf-form-control-feedback{width:30px;height:30px;line-height:30px}.wf-has-success .wf-help-block,.wf-has-success .wf-control-label,.wf-has-success .wf-radio,.wf-has-success .wf-checkbox,.wf-has-success .wf-radio-inline,.wf-has-success .wf-checkbox-inline,.wf-has-success.wf-radio label,.wf-has-success.wf-checkbox label,.wf-has-success.wf-radio-inline label,.wf-has-success.wf-checkbox-inline label{color:#3c763d}.wf-has-success .wf-form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.wf-has-success .wf-form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.wf-has-success .wf-input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.wf-has-success .wf-form-control-feedback{color:#3c763d}.wf-has-warning .wf-help-block,.wf-has-warning .wf-control-label,.wf-has-warning .wf-radio,.wf-has-warning .wf-checkbox,.wf-has-warning .wf-radio-inline,.wf-has-warning .wf-checkbox-inline,.wf-has-warning.wf-radio label,.wf-has-warning.wf-checkbox label,.wf-has-warning.wf-radio-inline label,.wf-has-warning.wf-checkbox-inline label{color:#8a6d3b}.wf-has-warning .wf-form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.wf-has-warning .wf-form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.wf-has-warning .wf-input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.wf-has-warning .wf-form-control-feedback{color:#8a6d3b}.wf-has-error .wf-help-block,.wf-has-error .wf-control-label,.wf-has-error .wf-radio,.wf-has-error .wf-checkbox,.wf-has-error .wf-radio-inline,.wf-has-error .wf-checkbox-inline,.wf-has-error.wf-radio label,.wf-has-error.wf-checkbox label,.wf-has-error.wf-radio-inline label,.wf-has-error.wf-checkbox-inline label{color:#a94442}.wf-has-error .wf-form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.wf-has-error .wf-form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.wf-has-error .wf-input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.wf-has-error .wf-form-control-feedback{color:#a94442}.wf-has-feedback label ~ .wf-form-control-feedback{top:25px}.wf-has-feedback label.wf-sr-only ~ .wf-form-control-feedback{top:0}.wf-help-block{display:block;margin-top:5px;color:#737373}@media (min-width: 768px){.wf-form-inline .wf-form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.wf-form-inline .wf-form-control{display:inline-block;width:auto;vertical-align:middle}.wf-form-inline .wf-form-control-static{display:inline-block}.wf-form-inline .wf-input-group{display:inline-table;vertical-align:middle}.wf-form-inline .wf-input-group .wf-input-group-addon,.wf-form-inline .wf-input-group .wf-input-group-btn,.wf-form-inline .wf-input-group .wf-form-control{width:auto}.wf-form-inline .wf-input-group>.wf-form-control{width:100%}.wf-form-inline .wf-control-label{margin-bottom:0;vertical-align:middle}.wf-form-inline .wf-radio,.wf-form-inline .wf-checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.wf-form-inline .wf-radio label,.wf-form-inline .wf-checkbox label{padding-left:0}.wf-form-inline .wf-radio input[type="radio"],.wf-form-inline .wf-checkbox input[type="checkbox"]{position:relative;margin-left:0}.wf-form-inline .wf-has-feedback .wf-form-control-feedback{top:0}}.wf-form-horizontal .wf-radio,.wf-form-horizontal .wf-checkbox,.wf-form-horizontal .wf-radio-inline,.wf-form-horizontal .wf-checkbox-inline{margin-top:0;margin-bottom:0;padding-top:1.5rem}.wf-form-horizontal .wf-radio,.wf-form-horizontal .wf-checkbox{min-height:29px}.wf-form-horizontal .wf-form-group{margin-left:-15px;margin-right:-15px}.wf-form-horizontal .wf-form-group:before,.wf-form-horizontal .wf-form-group:after{content:" ";display:table}.wf-form-horizontal .wf-form-group:after{clear:both}@media (min-width: 768px){.wf-form-horizontal .wf-control-label{text-align:right;margin-bottom:0;padding-top:1.5rem}}.wf-form-horizontal .wf-has-feedback .wf-form-control-feedback{right:15px}@media (min-width: 768px){.wf-form-horizontal .wf-form-group-lg .wf-control-label{padding-top:11px;font-size:18px}}@media (min-width: 768px){.wf-form-horizontal .wf-form-group-sm .wf-control-label{padding-top:6px;font-size:12px}}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status .wf-block-labeled-value-value,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status .wf-block-labeled-value-value{padding-top:0}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status .wf-block-labeled-value-value .wf-fa,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status .wf-block-labeled-value-value .wf-fa{font-size:8rem}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status .wf-block-labeled-value-value svg,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status .wf-block-labeled-value-value svg{width:140px}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status .wf-block-labeled-value-label,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status .wf-block-labeled-value-label{font-size:1.3125rem;font-weight:300;line-height:1.5;padding-bottom:0}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-full-enabled,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-full-enabled{background-color:#00709e}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-full-enabled .wf-block-labeled-value-value,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-full-enabled .wf-block-labeled-value-value{color:#ffffff}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-full-enabled .wf-block-labeled-value-label,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-full-enabled .wf-block-labeled-value-label{color:#ffffff;padding:0}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-enabled .wf-block-labeled-value-value,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-enabled .wf-block-labeled-value-value{color:#11967a}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-enabled .wf-block-labeled-value-value svg,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-enabled .wf-block-labeled-value-value svg{fill:#11967a}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-enabled .wf-block-labeled-value-label,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-enabled .wf-block-labeled-value-label{color:#11967a}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-learning-mode .wf-block-labeled-value-value,#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-disabled .wf-block-labeled-value-value,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-learning-mode .wf-block-labeled-value-value,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-disabled .wf-block-labeled-value-value{color:#9f9fa0}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-learning-mode .wf-block-labeled-value-value svg,#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-disabled .wf-block-labeled-value-value svg,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-learning-mode .wf-block-labeled-value-value svg,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-disabled .wf-block-labeled-value-value svg{fill:#9f9fa0}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-learning-mode .wf-block-labeled-value-label,#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-disabled .wf-block-labeled-value-label,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-learning-mode .wf-block-labeled-value-label,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-disabled .wf-block-labeled-value-label{color:#9f9fa0}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-value .wf-fa,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-value .wf-fa{font-size:7rem}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-value svg,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-value svg{width:120px}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-label,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-label{font-size:1.15rem;font-weight:300}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status-premium .wf-block-labeled-value-value,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status-premium .wf-block-labeled-value-value{color:#00709e}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status-premium .wf-block-labeled-value-value svg,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status-premium .wf-block-labeled-value-value svg{fill:#00709e}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status-premium .wf-block-labeled-value-label,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status-premium .wf-block-labeled-value-label{color:#00709e}.wf-dashboard-item{position:relative;margin:0 auto 1rem;padding:0 1rem;box-sizing:border-box;background:#fff;box-shadow:0 0 0 1px rgba(200,215,225,0.5),0 1px 2px #e9eff3}.wf-dashboard-item .wf-dashboard-item-inner{min-height:44px;padding:1rem 0;width:100%;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;position:relative}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-content{max-width:75%}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-content .wf-dashboard-item-title{font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.875rem;width:100%}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-content .wf-dashboard-item-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:.575rem;color:#4f748e}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action{position:absolute;top:0;right:0;height:100%;background:none;border:0;outline:0;width:48px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;vertical-align:middle;transition:transform 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275),color 0.2s ease-in}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action.wf-dashboard-item-action-text{width:auto}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action.wf-dashboard-item-action-text.wf-dashboard-item-action-text-success{color:#11967a}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action.wf-dashboard-item-action-text.wf-dashboard-item-action-text-warning{color:#930000}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action.wf-dashboard-item-action-text.wf-dashboard-item-action-text-warning a{color:#930000}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action .wf-dashboard-item-action-chevron{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJjaGV2cm9uLW9iamVjdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBhdGggaWQ9ImNoZXZyb24iIGQ9Ik0yMCA5bC04IDgtOC04IDEuNDE0LTEuNDE0TDEyIDE0LjE3Mmw2LjU4Ni02LjU4NiIvPgo8L3N2Zz4K");background-repeat:no-repeat;background-position:center center;width:24px;height:24px;fill:#87a6bc}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action .wf-dashboard-item-action-checkbox{background-image:url(../images/checkbox.png);background-repeat:no-repeat;background-position:left center;width:29px;height:29px}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action .wf-dashboard-item-action-checkbox.checked{background-position:right center}.wf-dashboard-item .wf-dashboard-item-extra{display:none;margin:0 -1rem;padding:0 1rem}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list{margin:0 -1rem;padding:0;list-style:none}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(odd){background-color:#f9f9f9}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(odd).wf-notification{border-left:4px solid #f9f9f9}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(odd).wf-notification.wf-notification-warning{border-left:4px solid #fcb214}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(odd).wf-notification.wf-notification-critical{border-left:4px solid #930000}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(even){background-color:#ffffff}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(even).wf-notification{border-left:4px solid #ffffff}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(even).wf-notification.wf-notification-warning{border-left:4px solid #fcb214}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(even).wf-notification.wf-notification-critical{border-left:4px solid #930000}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list>li{display:block;min-height:44px;padding:0 1rem;margin:0;border-top:1px solid #eeeeee;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list>li>*:first-child{-webkit-flex-grow:1;flex-grow:1;min-width:0}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal{box-sizing:border-box;margin-top:-1px;display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-wrap:wrap;flex-wrap:wrap}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal>li{-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:100%;flex-basis:100%;border-left:1px solid #eeeeee}@media (min-width: 768px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal>li{-webkit-flex-basis:50%;flex-basis:50%}}@media (min-width: 992px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal>li{-webkit-flex-basis:25%;flex-basis:25%}}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal>*:first-child{border-left:0}@media (min-width: 768px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal.wf-dashboard-item-list-equal>li{max-width:50%}}@media (min-width: 992px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal.wf-dashboard-item-list-equal>li{max-width:25%}}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state{text-align:center}@media (min-width: 1200px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state{text-align:left}}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state-enabled .fa{color:#11967a}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state-disabled .fa{color:#525355}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state-premium{color:#9f9fa0}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-dismiss{padding-left:2rem;font-size:1.25rem}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-dismiss a{color:#525355}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-labeled-count{box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:column;flex-direction:column}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-labeled-count-count{font-size:3rem;line-height:3rem;color:#9f9fa0;padding:1rem}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-labeled-count-label{font-size:0.75rem;color:#9f9fa0;padding:0 1rem 1rem 1rem}.wf-dashboard-item.active .wf-dashboard-item-extra{display:block}.wf-dashboard-item.wf-dashboard-item-left .wf-dashboard-item-content{margin-left:48px}.wf-dashboard-item.wf-dashboard-item-left .wf-dashboard-item-action{right:auto;left:0px}.wf-dashboard-item.disabled .wf-dashboard-item-content .wf-dashboard-item-title{color:#aaaaaa}.wf-dashboard-item.disabled .wf-dashboard-item-content .wf-dashboard-item-subtitle{color:#8ea6be}.wf-dashboard-item-flex-wrapper{display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column}.wf-dashboard-item-flex-wrapper .wf-dashboard-item{-webkit-flex-grow:1;flex-grow:1;width:100%}.wf-notifications-empty{font-size:0.9rem;color:#9f9fa0}.wf-dashboard-graph-wrapper{width:100%}.wf-dashboard-badge{display:inline-block;min-width:10px;padding:3px 7px;margin-left:0.5rem;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#fcb214;border-radius:10px}.wf-dashboard-badge:empty{display:none}.wf-btn .wf-dashboard-badge{position:relative;top:-1px}.wf-btn-xs .wf-dashboard-badge,.wf-btn-group-xs>.wf-btn .wf-dashboard-badge,.wf-btn-group-xs>.wf-btn .wf-dashboard-badge{top:0;padding:1px 5px}.wf-list-group-item.active>.wf-dashboard-badge,.wf-nav-pills>.active>a>.wf-dashboard-badge{color:#00709e;background-color:#fff}.wf-list-group-item>.wf-dashboard-badge{float:right}.wf-list-group-item>.wf-dashboard-badge+.wf-dashboard-badge{margin-right:5px}.wf-nav-pills>li>a>.wf-dashboard-badge{margin-left:3px}.wf-dashboard-toggle-btns{text-align:center}.wf-dashboard-toggle-btns .wf-pagination{margin:1rem 1rem 0.5rem 1rem}.wf-dashboard-show-more{position:relative;font-size:14px;color:#959595;text-align:center;line-height:1rem;background:#ffffff;width:60%;margin:20px auto 0 auto}.wf-dashboard-show-more:before{display:inline-block;content:"";position:absolute;height:1px;background:#dddddd;top:50%;width:100%;left:0;right:0}.wf-dashboard-show-more a{display:inline-block;position:relative;padding:0 10px;background-color:#ffffff}.wf-ips,.wf-recent-logins,.wf-countries{max-height:30rem;overflow-y:auto;margin-bottom:20px}.wf-ips .wf-table,.wf-recent-logins .wf-table,.wf-countries .wf-table{margin-bottom:0}.wf-dashboard-last-updated{font-style:italic;font-size:0.6rem;text-align:center;padding-bottom:1rem;margin:0}.wf-dashboard-navigation .wf-block-navigation-option-content{padding:1rem 0 1rem 1rem}@media (min-width: 768px){.wf-dashboard-navigation .wf-block-navigation-option-content{padding:1.5rem 0 1.5rem 1rem}}.wf-dashboard-navigation .wf-block-navigation-option-content h4{margin:0 0 0.25rem 0}.wf-dashboard-navigation .wf-block-navigation-option-content p{margin:0 0 0.45rem 0}.wf-blocks-summary{width:100%;margin:1rem 0;border-spacing:0}.wf-blocks-summary>thead>tr>th,.wf-blocks-summary>tbody>tr>th,.wf-blocks-summary>tr>th{font-weight:600;padding:0.25rem 0.25rem;white-space:nowrap}@media (min-width: 768px){.wf-blocks-summary>thead>tr>th,.wf-blocks-summary>tbody>tr>th,.wf-blocks-summary>tr>th{padding:0.25rem 1rem}}.wf-blocks-summary>thead>tr>th.wf-premium,.wf-blocks-summary>tbody>tr>th.wf-premium,.wf-blocks-summary>tr>th.wf-premium{border-top:2px solid #00709e;border-left:2px solid #00709e;border-right:2px solid #00709e;border-top-left-radius:0.5rem;border-top-right-radius:0.5rem;color:#aaa}.wf-blocks-summary>thead>tr>th,.wf-blocks-summary>tr>th{text-align:center}.wf-blocks-summary>thead>tr>th:first-child,.wf-blocks-summary>tbody>tr>th{text-align:right}.wf-blocks-summary>tbody>tr>td,.wf-blocks-summary>tfoot>tr>td,.wf-blocks-summary>tr>td{text-align:center;padding:0.25rem 0.25rem}@media (min-width: 768px){.wf-blocks-summary>tbody>tr>td,.wf-blocks-summary>tfoot>tr>td,.wf-blocks-summary>tr>td{padding:0.25rem 1rem}}.wf-blocks-summary>tbody>tr>td.wf-premium,.wf-blocks-summary>tfoot>tr>td.wf-premium,.wf-blocks-summary>tr>td.wf-premium{border-left:2px solid #00709e;border-right:2px solid #00709e;color:#aaa}.wf-blocks-summary>tfoot>tr>td.wf-premium,.wf-blocks-summary>tr:last-child>td.wf-premium{border-bottom:2px solid #00709e;border-bottom-left-radius:0.5rem;border-bottom-right-radius:0.5rem;background-color:#00709e;color:#fff}#howGetIPs-trusted-proxies{display:none}ul.wf-option.wf-option-howgetips .wf-option-howgetips-details{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.8rem;margin-top:0.5rem}.wf-central-dashboard{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-align-content:stretch;align-content:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wf-central-dashboard .wf-central-dashboard-logo{width:80px;min-width:80px;margin:10px 0}.wf-central-dashboard .wf-central-dashboard-copy{padding-left:20px}@media (min-width: 768px){.wf-central-dashboard{-webkit-flex-direction:row;flex-direction:row;-webkit-align-items:center;align-items:center}}table.wf-table{background-color:transparent;border-collapse:collapse;border-spacing:0}table.wf-table td,table.wf-table th{padding:0}.wf-table caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}.wf-table th{text-align:left}.wf-table{width:100%;max-width:100%;margin-bottom:20px}.wf-table>thead>tr>th,.wf-table>thead>tr>td,.wf-table>tbody>tr>th,.wf-table>tbody>tr>td,.wf-table>tfoot>tr>th,.wf-table>tfoot>tr>td{padding:8px;line-height:1.42857;vertical-align:top;border-top:1px solid #ddd}.wf-table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.wf-table>caption+thead>tr:first-child>th,.wf-table>caption+thead>tr:first-child>td,.wf-table>colgroup+thead>tr:first-child>th,.wf-table>colgroup+thead>tr:first-child>td,.wf-table>thead:first-child>tr:first-child>th,.wf-table>thead:first-child>tr:first-child>td{border-top:0}.wf-table>tbody+tbody{border-top:2px solid #ddd}.wf-table .wf-table{background-color:#fff}.wf-table-condensed>thead>tr>th,.wf-table-condensed>thead>tr>td,.wf-table-condensed>tbody>tr>th,.wf-table-condensed>tbody>tr>td,.wf-table-condensed>tfoot>tr>th,.wf-table-condensed>tfoot>tr>td{padding:5px}.wf-table-bordered{border:1px solid #ddd}.wf-table-bordered>thead>tr>th,.wf-table-bordered>thead>tr>td,.wf-table-bordered>tbody>tr>th,.wf-table-bordered>tbody>tr>td,.wf-table-bordered>tfoot>tr>th,.wf-table-bordered>tfoot>tr>td{border:1px solid #ddd}.wf-table-bordered>thead>tr>th,.wf-table-bordered>thead>tr>td{border-bottom-width:2px}.wf-table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.wf-table-hover>tbody>tr:hover{background-color:#f5f5f5}table.wf-table col[class*="col-"]{position:static;float:none;display:table-column}table.wf-table td[class*="col-"],table.wf-table th[class*="col-"]{position:static;float:none;display:table-cell}.wf-table>thead>tr>td.active,.wf-table>thead>tr>th.active,.wf-table>thead>tr.active>td,.wf-table>thead>tr.active>th,.wf-table>tbody>tr>td.active,.wf-table>tbody>tr>th.active,.wf-table>tbody>tr.active>td,.wf-table>tbody>tr.active>th,.wf-table>tfoot>tr>td.active,.wf-table>tfoot>tr>th.active,.wf-table>tfoot>tr.active>td,.wf-table>tfoot>tr.active>th{background-color:#f5f5f5}.wf-table-hover>tbody>tr>td.active:hover,.wf-table-hover>tbody>tr>th.active:hover,.wf-table-hover>tbody>tr.active:hover>td,.wf-table-hover>tbody>tr:hover>.active,.wf-table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.wf-table>thead>tr>td.success,.wf-table>thead>tr>th.success,.wf-table>thead>tr.success>td,.wf-table>thead>tr.success>th,.wf-table>tbody>tr>td.success,.wf-table>tbody>tr>th.success,.wf-table>tbody>tr.success>td,.wf-table>tbody>tr.success>th,.wf-table>tfoot>tr>td.success,.wf-table>tfoot>tr>th.success,.wf-table>tfoot>tr.success>td,.wf-table>tfoot>tr.success>th{background-color:#dff0d8}.wf-table-hover>tbody>tr>td.success:hover,.wf-table-hover>tbody>tr>th.success:hover,.wf-table-hover>tbody>tr.success:hover>td,.wf-table-hover>tbody>tr:hover>.success,.wf-table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.wf-table>thead>tr>td.info,.wf-table>thead>tr>th.info,.wf-table>thead>tr.info>td,.wf-table>thead>tr.info>th,.wf-table>tbody>tr>td.info,.wf-table>tbody>tr>th.info,.wf-table>tbody>tr.info>td,.wf-table>tbody>tr.info>th,.wf-table>tfoot>tr>td.info,.wf-table>tfoot>tr>th.info,.wf-table>tfoot>tr.info>td,.wf-table>tfoot>tr.info>th{background-color:#d9edf7}.wf-table-hover>tbody>tr>td.info:hover,.wf-table-hover>tbody>tr>th.info:hover,.wf-table-hover>tbody>tr.info:hover>td,.wf-table-hover>tbody>tr:hover>.info,.wf-table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.wf-table>thead>tr>td.warning,.wf-table>thead>tr>th.warning,.wf-table>thead>tr.warning>td,.wf-table>thead>tr.warning>th,.wf-table>tbody>tr>td.warning,.wf-table>tbody>tr>th.warning,.wf-table>tbody>tr.warning>td,.wf-table>tbody>tr.warning>th,.wf-table>tfoot>tr>td.warning,.wf-table>tfoot>tr>th.warning,.wf-table>tfoot>tr.warning>td,.wf-table>tfoot>tr.warning>th{background-color:#fcf8e3}.wf-table-hover>tbody>tr>td.warning:hover,.wf-table-hover>tbody>tr>th.warning:hover,.wf-table-hover>tbody>tr.warning:hover>td,.wf-table-hover>tbody>tr:hover>.warning,.wf-table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.wf-table>thead>tr>td.danger,.wf-table>thead>tr>th.danger,.wf-table>thead>tr.danger>td,.wf-table>thead>tr.danger>th,.wf-table>tbody>tr>td.danger,.wf-table>tbody>tr>th.danger,.wf-table>tbody>tr.danger>td,.wf-table>tbody>tr.danger>th,.wf-table>tfoot>tr>td.danger,.wf-table>tfoot>tr>th.danger,.wf-table>tfoot>tr.danger>td,.wf-table>tfoot>tr.danger>th{background-color:#f2dede}.wf-table-hover>tbody>tr>td.danger:hover,.wf-table-hover>tbody>tr>th.danger:hover,.wf-table-hover>tbody>tr.danger:hover>td,.wf-table-hover>tbody>tr:hover>.danger,.wf-table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.wf-table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width: 767px){.wf-table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.wf-table-responsive>.wf-table{margin-bottom:0}.wf-table-responsive>.wf-table>thead>tr>th,.wf-table-responsive>.wf-table>thead>tr>td,.wf-table-responsive>.wf-table>tbody>tr>th,.wf-table-responsive>.wf-table>tbody>tr>td,.wf-table-responsive>.wf-table>tfoot>tr>th,.wf-table-responsive>.wf-table>tfoot>tr>td{white-space:nowrap}.wf-table-responsive>.wf-table-bordered{border:0}.wf-table-responsive>.wf-table-bordered>thead>tr>th:first-child,.wf-table-responsive>.wf-table-bordered>thead>tr>td:first-child,.wf-table-responsive>.wf-table-bordered>tbody>tr>th:first-child,.wf-table-responsive>.wf-table-bordered>tbody>tr>td:first-child,.wf-table-responsive>.wf-table-bordered>tfoot>tr>th:first-child,.wf-table-responsive>.wf-table-bordered>tfoot>tr>td:first-child{border-left:0}.wf-table-responsive>.wf-table-bordered>thead>tr>th:last-child,.wf-table-responsive>.wf-table-bordered>thead>tr>td:last-child,.wf-table-responsive>.wf-table-bordered>tbody>tr>th:last-child,.wf-table-responsive>.wf-table-bordered>tbody>tr>td:last-child,.wf-table-responsive>.wf-table-bordered>tfoot>tr>th:last-child,.wf-table-responsive>.wf-table-bordered>tfoot>tr>td:last-child{border-right:0}.wf-table-responsive>.wf-table-bordered>tbody>tr:last-child>th,.wf-table-responsive>.wf-table-bordered>tbody>tr:last-child>td,.wf-table-responsive>.wf-table-bordered>tfoot>tr:last-child>th,.wf-table-responsive>.wf-table-bordered>tfoot>tr:last-child>td{border-bottom:0}}.wf-sortable{position:relative;padding-right:2rem !important}.wf-sortable .wf-sorted-ascending,.wf-sortable .wf-sorted-descending{display:none;position:absolute;right:1rem;top:50%;transform:translateY(-50%)}.wf-sortable.wf-unsorted:hover .wf-sorted-ascending{display:block}.wf-sortable.wf-unsorted,.wf-sortable.wf-sorted-ascending,.wf-sortable.wf-sorted-descending{cursor:pointer}.wf-sortable.wf-unsorted:hover,.wf-sortable.wf-sorted-ascending:hover,.wf-sortable.wf-sorted-descending:hover{background-color:#e0e0e0}.wf-sortable.wf-sorted-ascending,.wf-sortable.wf-sorted-descending{background-color:#e0e0e0}.wf-sortable.wf-sorted-ascending .wf-sorted-ascending{display:block}.wf-sortable.wf-sorted-descending .wf-sorted-descending{display:block}.wf-nav{margin-bottom:0;padding-left:0;list-style:none}.wf-nav:before,.wf-nav:after{content:" ";display:table}.wf-nav:after{clear:both}.wf-nav>li{position:relative;display:block}.wf-nav>li>a{position:relative;display:block;padding:8px 12px}.wf-nav>li>a:hover,.wf-nav>li>a:focus{text-decoration:none;background-color:#e2e2e2}.wf-nav>li.wf-disabled>a{color:#777}.wf-nav>li.wf-disabled>a:hover,.wf-nav>li.wf-disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.wf-nav .wf-open>a,.wf-nav .wf-open>a:hover,.wf-nav .wf-open>a:focus{background-color:#e2e2e2;border-color:#00709e}.wf-nav>li>a>img{max-width:none}.wf-nav-tabs{border-bottom:1px solid #d0d0d0}.wf-nav-tabs>li{float:left;margin-bottom:-1px}.wf-nav-tabs>li>a{margin-right:2px;line-height:1.42857;border:1px solid transparent;border-radius:4px 4px 0 0}.wf-nav-tabs>li>a:hover{border-color:#e2e2e2 #e2e2e2 #d0d0d0}.wf-nav-tabs>li.wf-active>a,.wf-nav-tabs>li.wf-active>a:hover,.wf-nav-tabs>li.wf-active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.wf-nav-pills>li{float:left}.wf-nav-pills>li>a{border-radius:4px;text-decoration:none;position:relative;display:block;padding:8px 12px}.wf-nav-pills>li>a:hover,.wf-nav-pills>li>a:focus{text-decoration:none !important;background-color:#e2e2e2}.wf-nav-pills>li+li{margin-left:2px}.wf-nav-pills>li.wf-active>a,.wf-nav-pills>li.wf-active>a:hover,.wf-nav-pills>li.wf-active>a:focus{color:#fff;background-color:#00709e}.wf-nav-pills.wf-nav-pills-bordered>li>a{border:1px solid #e2e2e2}.wf-nav-pills.wf-nav-pills-connected>li>a{border-radius:0;border-right-width:0px}.wf-nav-pills.wf-nav-pills-connected>li+li{margin-left:0}.wf-nav-pills.wf-nav-pills-connected>li.active+li>a{border-left-width:0px}.wf-nav-pills.wf-nav-pills-connected>li:first-of-type>a{-moz-border-radius:4px 0 0 4px;-webkit-border-radius:4px;border-radius:4px 0 0 4px}.wf-nav-pills.wf-nav-pills-connected>li:last-of-type>a{-moz-border-radius:0 4px 4px 0;-webkit-border-radius:0;border-radius:0 4px 4px 0;border-right-width:1px}.wf-nav-stacked>li{float:none}.wf-nav-stacked>li+li{margin-top:2px;margin-left:0}.wf-nav-justified,.wf-nav-tabs.wf-nav-justified{width:100%}.wf-nav-justified>li,.wf-nav-tabs.wf-nav-justified>li{float:none}.wf-nav-justified>li>a,.wf-nav-tabs.wf-nav-justified>li>a{text-align:center;margin-bottom:5px}.wf-nav-justified>.wf-dropdown .wf-dropdown-menu{top:auto;left:auto}@media (min-width: 768px){.wf-nav-justified>li,.wf-nav-tabs.wf-nav-justified>li{display:table-cell;width:1%}.wf-nav-justified>li>a,.wf-nav-tabs.wf-nav-justified>li>a{margin-bottom:0}}.wf-nav-tabs-justified,.wf-nav-tabs.wf-nav-justified{border-bottom:0}.wf-nav-tabs-justified>li>a,.wf-nav-tabs.wf-nav-justified>li>a{margin-right:0;border-radius:4px}.wf-nav-tabs-justified>.wf-active>a,.wf-nav-tabs.wf-nav-justified>.wf-active>a,.wf-nav-tabs-justified>.wf-active>a:hover,.wf-nav-tabs.wf-nav-justified>.wf-active>a:hover,.wf-nav-tabs-justified>.wf-active>a:focus,.wf-nav-tabs.wf-nav-justified>.wf-active>a:focus{border:1px solid #ddd}@media (min-width: 768px){.wf-nav-tabs-justified>li>a,.wf-nav-tabs.wf-nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.wf-nav-tabs-justified>.wf-active>a,.wf-nav-tabs.wf-nav-justified>.wf-active>a,.wf-nav-tabs-justified>.wf-active>a:hover,.wf-nav-tabs.wf-nav-justified>.wf-active>a:hover,.wf-nav-tabs-justified>.wf-active>a:focus,.wf-nav-tabs.wf-nav-justified>.wf-active>a:focus{border-bottom-color:#fff}}.wf-tab-content>.wf-tab-pane{display:none}.wf-tab-content>.wf-active{display:block}.wf-nav-tabs .wf-dropdown-menu{margin-top:-1px;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0}.wf-navbar-brand{float:left;padding:12px 8px;font-size:18px;line-height:20px;margin:10px 0 0 0}.wf-navbar-brand:hover,.wf-navbar-brand:focus{text-decoration:none}.wf-navbar-brand>img{display:block}@media (min-width: 768px){.navbar>.container .wf-navbar-brand,.navbar>.container-fluid .wf-navbar-brand{margin-left:-8px}}.wf-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}.wf-dropup,.wf-dropdown{position:relative}.wf-dropdown-toggle:focus{outline:0}.wf-dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.wf-dropdown-menu .wf-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.wf-dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857;color:#333;text-decoration:none;white-space:nowrap}.wf-dropdown-menu>li>a:hover,.wf-dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.wf-dropdown-menu>.wf-active>a,.wf-dropdown-menu>.wf-active>a:hover,.wf-dropdown-menu>.wf-active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#00709e}.wf-dropdown-menu>.wf-disabled>a,.wf-dropdown-menu>.wf-disabled>a:hover,.wf-dropdown-menu>.wf-disabled>a:focus{color:#777}.wf-dropdown-menu>.wf-disabled>a:hover,.wf-dropdown-menu>.wf-disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.wf-open>.wf-dropdown-menu{display:block}.wf-open>a{outline:0}.wf-dropdown-menu-right{left:auto;right:0}.wf-dropdown-menu-left{left:0;right:auto}.wf-dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857;color:#777;white-space:nowrap}.wf-dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.wf-pull-right>.wf-dropdown-menu{right:0;left:auto}.wf-dropup .wf-caret,.wf-navbar-fixed-bottom .wf-dropdown .wf-caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.wf-dropup .wf-dropdown-menu,.wf-navbar-fixed-bottom .wf-dropdown .wf-dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.wf-navbar-right .wf-dropdown-menu{right:0;left:auto}.wf-navbar-right .wf-dropdown-menu-left{left:0;right:auto}}.wf-mobile-dropdown{border:1px solid #ccc;margin-left:.5em;padding:5px 10px;font-size:14px;line-height:24px;margin:10px 10px 0 0;background:#f1f1f1;color:#000;font-weight:600;text-decoration:none}.wf-blocks-table tbody tr.wf-editing,.wf-blocks-table tbody tr.wf-editing td{background-color:#fffbd8}.wf-blocked-countries-section{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:stretch;align-content:stretch;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wf-blocked-countries-section-title{font-size:1.1rem;padding-right:0.5rem}.wf-blocked-countries-section-spacer{-webkit-flex-basis:30px;flex-basis:30px;height:1px;background:#aaa}.wf-blocked-countries-section-options{margin-bottom:0;margin-top:0;padding-left:0.5rem;list-style:none;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:stretch;align-content:stretch;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wf-blocked-countries-section-options li{padding:0;margin:0;color:#777}.wf-blocked-countries-section-options li a{padding:2px 4px;text-decoration:none;color:#777}.wf-blocked-countries-section-options li a.active-section{background-color:#777;color:#e2e2e2}.wf-option-bypass-redirect .wf-option-title,.wf-option-bypass-cookie .wf-option-title{-webkit-align-self:flex-start;align-self:flex-start}.wf-option-bypass-redirect *,.wf-option-bypass-cookie *{-webkit-flex-grow:1;flex-grow:1}.wf-option-bypass-redirect *:first-child,.wf-option-bypass-cookie *:first-child{-webkit-flex-grow:0;flex-grow:0}.wf-country-block-map{width:300px}@media (min-width: 768px){.wf-country-block-map{width:500px}}@media (min-width: 992px){.wf-country-block-map{width:700px}}@media (min-width: 1200px){.wf-country-block-map{width:700px}}#wf-create-block{width:100%}#wf-create-block th{white-space:nowrap}#wf-create-block td{width:100%}#wf-create-block td.wf-block-type{width:auto}@media (min-width: 768px){#wf-create-block{width:500px}}@media (min-width: 992px){#wf-create-block{width:700px}}@media (min-width: 1200px){#wf-create-block{width:700px}}#wf-create-block .wf-block-add-country select{width:240px}@media (min-width: 768px){#wf-create-block .wf-block-add-country select{width:280px}}@media (min-width: 992px){#wf-create-block .wf-block-add-country select{width:320px}}#wf-create-block .wf-block-add-country .wfselect2-container--default,#wf-create-block .wf-block-add-country .wfselect2-container--default .wfselect2-selection--multiple{border-color:#e2e2e2}#wf-create-block .wf-block-add-country .wfselect2-container--default .wfselect2-selection__choice,#wf-create-block .wf-block-add-country .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-selection__choice{background-color:#ffffff;border-color:#e2e2e2;padding:0.5rem}#wf-create-block .wf-block-add-country .wfselect2-container--default .wfselect2-search__field,#wf-create-block .wf-block-add-country .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-search__field{margin-right:5px;margin-top:5px;padding:0.5rem 0}#wfcolorbox .wf-country-selector-controls,.wf-drawer .wf-country-selector-controls{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-align-content:stretch;align-content:stretch;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-shrink:0;flex-shrink:0}#wfcolorbox .wf-country-selector-controls .wf-country-selector-section-options,.wf-drawer .wf-country-selector-controls .wf-country-selector-section-options{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-align-content:stretch;align-content:stretch;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}#wfcolorbox .wf-country-selector-controls .wf-country-selector-section-options>li,.wf-drawer .wf-country-selector-controls .wf-country-selector-section-options>li{border:1px solid #ffffff;border-radius:4px;padding:0.25rem;background-color:#ffffff}#wfcolorbox .wf-country-selector-controls .wf-country-selector-section-options>li:hover,#wfcolorbox .wf-country-selector-controls .wf-country-selector-section-options>li:focus,.wf-drawer .wf-country-selector-controls .wf-country-selector-section-options>li:hover,.wf-drawer .wf-country-selector-controls .wf-country-selector-section-options>li:focus{background-color:#00709e;border-color:#00709e}#wfcolorbox .wf-country-selector-controls .wf-country-selector-section-options>li:hover>a,#wfcolorbox .wf-country-selector-controls .wf-country-selector-section-options>li:focus>a,.wf-drawer .wf-country-selector-controls .wf-country-selector-section-options>li:hover>a,.wf-drawer .wf-country-selector-controls .wf-country-selector-section-options>li:focus>a{color:#ffffff}#wfcolorbox .wf-country-selector-controls .wf-country-selector-section-options>li>a,.wf-drawer .wf-country-selector-controls .wf-country-selector-section-options>li>a{text-decoration:none;color:#525355}#wfcolorbox .wf-country-selector-options .wf-blocked-countries,.wf-drawer .wf-country-selector-options .wf-blocked-countries{margin-bottom:0;margin-top:1rem;list-style:none;margin-left:-6px;display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:stretch;align-content:stretch;-webkit-flex-wrap:wrap;flex-wrap:wrap}#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;margin:0px 0px 2px 6px;text-align:center;border:1px solid #e2e2e2;border-radius:4px;padding:8px 12px;background-color:#ffffff;-webkit-flex-basis:38%;flex-basis:38%}@media (min-width: 768px){#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li{-webkit-flex-basis:20%;flex-basis:20%}}@media (min-width: 992px){#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li{-webkit-flex-basis:15%;flex-basis:15%}}@media (min-width: 1200px){#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li{-webkit-flex-basis:10%;flex-basis:10%}}#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li:hover,#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li:focus,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li:hover,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li:focus{text-decoration:none;background-color:#e2e2e2}#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.disabled>a,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.disabled>a{color:#777}#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.disabled>a:hover,#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.disabled>a:focus,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.disabled>a:hover,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li>a,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li>a{text-decoration:none;position:relative;display:block}#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.wf-active,#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.wf-active:hover,#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.wf-active:focus,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.wf-active,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.wf-active:hover,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.wf-active:focus{background-color:#00709e;border-color:#00709e}#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.wf-active>a,#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.wf-active:hover>a,#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.wf-active:focus>a,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.wf-active>a,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.wf-active:hover>a,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.wf-active:focus>a{color:#fff}#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.text-only,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.text-only{position:relative;display:block;padding:8px 12px}#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li>a>img,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li>a>img{max-width:none}.wf-tag-selected{background-color:#ffffff;border:1px solid #e2e2e2;border-radius:4px;cursor:default;float:left;margin-right:5px !important;margin-top:5px !important;list-style:none;padding:0.5rem !important}.wf-destroy-tag-selected{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.wf-destroy-tag-selected:hover{text-decoration:none}.wf-tags-show-hide-more{float:left;margin-right:5px;margin-top:5px;list-style:none;padding:0.5rem}.wf-select2-hide-tags .wfselect2-selection__choice{display:none}.wf-country-selector-outer-wrapper{position:relative;-webkit-flex-grow:1;flex-grow:1}.wf-country-selector-outer-wrapper .wf-country-selector-inner-wrapper{position:absolute;top:0px;right:0px;bottom:0px;left:0px;overflow-x:hidden;overflow-y:auto}table.wf-dataTable{width:auto;max-width:800px;clear:both;border-collapse:collapse;border-spacing:0}table.wf-dataTable>thead th,table.wf-dataTable>tfoot th{font-weight:bold}table.wf-dataTable>thead th,table.wf-dataTable>thead td{cursor:pointer;text-align:left;font-size:11px;border:1px solid #ccc;padding:8px 4px 5px 9px;text-transform:uppercase}table.wf-dataTable>thead th:active,table.wf-dataTable>thead td:active{outline:none}table.wf-dataTable>tfoot th,table.wf-dataTable>tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.wf-dataTable>thead .sorting,table.wf-dataTable>thead .sorting_asc,table.wf-dataTable>thead .sorting_desc{cursor:pointer;*cursor:hand}table.wf-dataTable>thead .sorting,table.wf-dataTable>thead .sorting_asc,table.wf-dataTable>thead .sorting_desc,table.wf-dataTable>thead .sorting_asc_disabled,table.wf-dataTable>thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.wf-dataTable>thead .sorting{background-image:url(../images/sort_both.png)}table.wf-dataTable>thead .sorting_asc{background-image:url(../images/sort_asc.png)}table.wf-dataTable>thead .sorting_desc{background-image:url(../images/sort_desc.png)}table.wf-dataTable>thead .sorting_asc_disabled{background-image:url(../images/sort_asc_disabled.png)}table.wf-dataTable>thead .sorting_desc_disabled{background-image:url(../images/sort_desc_disabled.png)}table.wf-dataTable>tbody>tr{background-color:#ffffff}table.wf-dataTable>tbody>tr.selected{background-color:#B0BED9}table.wf-dataTable>tbody>tr>th,table.wf-dataTable>tbody>tr>td{padding:5px 8px}table.wf-dataTable.row-border>tbody>tr>th,table.wf-dataTable.row-border>tbody>tr>td,table.wf-dataTable.display>tbody>tr>th,table.wf-dataTable.display>tbody>tr>td{border:1px solid #cccccc}table.wf-dataTable.row-border>tbody>tr:first-child>th,table.wf-dataTable.row-border>tbody>tr:first-child>td,table.wf-dataTable.display>tbody>tr:first-child>th,table.wf-dataTable.display>tbody>tr:first-child>td{border-top:none}table.wf-dataTable.cell-border>tbody>tr>th,table.wf-dataTable.cell-border>tbody>tr>td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.wf-dataTable.cell-border>tbody>tr>th:first-child,table.wf-dataTable.cell-border>tbody>tr>td:first-child{border-left:1px solid #ddd}table.wf-dataTable.cell-border>tbody>tr:first-child>th,table.wf-dataTable.cell-border>tbody>tr:first-child>td{border-top:none}table.wf-dataTable.stripe>tbody>tr.odd,table.wf-dataTable.display>tbody>tr.odd{background-color:#f9f9f9}table.wf-dataTable.stripe>tbody>tr.odd.selected,table.wf-dataTable.display>tbody>tr.odd.selected{background-color:#acbad4}table.wf-dataTable.hover>tbody>tr:hover,table.wf-dataTable.display>tbody>tr:hover{background-color:#f6f6f6}table.wf-dataTable.hover>tbody>tr:hover.selected,table.wf-dataTable.display>tbody>tr:hover.selected{background-color:#aab7d1}table.wf-dataTable.order-column>tbody>tr>.sorting_1,table.wf-dataTable.order-column>tbody>tr>.sorting_2,table.wf-dataTable.order-column>tbody>tr>.sorting_3,table.wf-dataTable.display tbody>tr>.sorting_1,table.wf-dataTable.display>tbody>tr>.sorting_2,table.wf-dataTable.display>tbody>tr>.sorting_3{background-color:#fafafa}table.wf-dataTable.order-column>tbody>tr.selected>.sorting_1,table.wf-dataTable.order-column>tbody>tr.selected>.sorting_2,table.wf-dataTable.order-column>tbody>tr.selected>.sorting_3,table.wf-dataTable.display>tbody>tr.selected>.sorting_1,table.wf-dataTable.display>tbody>tr.selected>.sorting_2,table.wf-dataTable.display>tbody>tr.selected>.sorting_3{background-color:#acbad5}table.wf-dataTable.display>tbody>tr.odd>.sorting_1,table.wf-dataTable.order-column.stripe>tbody>tr.odd>.sorting_1{background-color:#f1f1f1}table.wf-dataTable.display>tbody>tr.odd>.sorting_2,table.wf-dataTable.order-column.stripe>tbody>tr.odd>.sorting_2{background-color:#f3f3f3}table.wf-dataTable.display>tbody>tr.odd>.sorting_3,table.wf-dataTable.order-column.stripe>tbody>tr.odd>.sorting_3{background-color:whitesmoke}table.wf-dataTable.display>tbody>tr.odd.selected>.sorting_1,table.wf-dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.wf-dataTable.display>tbody>tr.odd.selected>.sorting_2,table.wf-dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.wf-dataTable.display>tbody>tr.odd.selected>.sorting_3,table.wf-dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.wf-dataTable.display>tbody>tr.even>.sorting_1,table.wf-dataTable.order-column.stripe>tbody>tr.even>.sorting_1{background-color:#fafafa}table.wf-dataTable.display>tbody>tr.even>.sorting_2,table.wf-dataTable.order-column.stripe>tbody>tr.even>.sorting_2{background-color:#fcfcfc}table.wf-dataTable.display>tbody>tr.even>.sorting_3,table.wf-dataTable.order-column.stripe>tbody>tr.even>.sorting_3{background-color:#fefefe}table.wf-dataTable.display>tbody>tr.even.selected>.sorting_1,table.wf-dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_1{background-color:#acbad5}table.wf-dataTable.display>tbody>tr.even.selected>.sorting_2,table.wf-dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_2{background-color:#aebcd6}table.wf-dataTable.display>tbody>tr.even.selected>.sorting_3,table.wf-dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_3{background-color:#afbdd8}table.wf-dataTable.display>tbody>tr:hover>.sorting_1,table.wf-dataTable.order-column.hover>tbody>tr:hover>.sorting_1{background-color:#eaeaea}table.wf-dataTable.display>tbody>tr:hover>.sorting_2,table.wf-dataTable.order-column.hover>tbody>tr:hover>.sorting_2{background-color:#ececec}table.wf-dataTable.display>tbody>tr:hover>.sorting_3,table.wf-dataTable.order-column.hover>tbody>tr:hover>.sorting_3{background-color:#efefef}table.wf-dataTable.display>tbody>tr:hover.selected>.sorting_1,table.wf-dataTable.order-column.hover>tbody>tr:hover.selected>.sorting_1{background-color:#a2aec7}table.wf-dataTable.display>tbody>tr:hover.selected>.sorting_2,table.wf-dataTable.order-column.hover>tbody>tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.wf-dataTable.display>tbody>tr:hover.selected>.sorting_3,table.wf-dataTable.order-column.hover>tbody>tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.wf-dataTable.no-footer{border-bottom:1px solid #111}table.wf-dataTable.nowrap th,table.wf-dataTable.nowrap td{white-space:nowrap}table.wf-dataTable.compact thead th,table.wf-dataTable.compact thead td{padding:4px 17px 4px 4px}table.wf-dataTable.compact tfoot th,table.wf-dataTable.compact tfoot td{padding:4px}table.wf-dataTable.compact>tbody>tr>th,table.wf-dataTable.compact>tbody>tr>td{padding:4px}table.wf-dataTable th.dt-left,table.wf-dataTable td.dt-left{text-align:left}table.wf-dataTable th.dt-center,table.wf-dataTable td.dt-center,table.wf-dataTable td.dataTables_empty{text-align:center}table.wf-dataTable th.dt-right,table.wf-dataTable td.dt-right{text-align:right}table.wf-dataTable th.dt-justify,table.wf-dataTable td.dt-justify{text-align:justify}table.wf-dataTable th.dt-nowrap,table.wf-dataTable td.dt-nowrap{white-space:nowrap}table.wf-dataTable thead th.dt-head-left,table.wf-dataTable thead td.dt-head-left,table.wf-dataTable tfoot th.dt-head-left,table.wf-dataTable tfoot td.dt-head-left{text-align:left}table.wf-dataTable thead th.dt-head-center,table.wf-dataTable thead td.dt-head-center,table.wf-dataTable tfoot th.dt-head-center,table.wf-dataTable tfoot td.dt-head-center{text-align:center}table.wf-dataTable thead th.dt-head-right,table.wf-dataTable thead td.dt-head-right,table.wf-dataTable tfoot th.dt-head-right,table.wf-dataTable tfoot td.dt-head-right{text-align:right}table.wf-dataTable thead th.dt-head-justify,table.wf-dataTable thead td.dt-head-justify,table.wf-dataTable tfoot th.dt-head-justify,table.wf-dataTable tfoot td.dt-head-justify{text-align:justify}table.wf-dataTable thead th.dt-head-nowrap,table.wf-dataTable thead td.dt-head-nowrap,table.wf-dataTable tfoot th.dt-head-nowrap,table.wf-dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.wf-dataTable>tbody>tr>th.dt-body-left,table.wf-dataTable>tbody>tr>td.dt-body-left{text-align:left}table.wf-dataTable>tbody>tr>th.dt-body-center,table.wf-dataTable>tbody>tr>td.dt-body-center{text-align:center}table.wf-dataTable>tbody>tr>th.dt-body-right,table.wf-dataTable>tbody>tr>td.dt-body-right{text-align:right}table.wf-dataTable>tbody>tr>th.dt-body-justify,table.wf-dataTable>tbody>tr>td.dt-body-justify{text-align:justify}table.wf-dataTable>tbody>tr>th.dt-body-nowrap,table.wf-dataTable>tbody>tr>td.dt-body-nowrap{white-space:nowrap}table.wf-dataTable table.dataTable,table.wf-dataTable th,table.wf-dataTable td{-webkit-box-sizing:content-box;box-sizing:content-box}.wf-dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.wf-dataTables_wrapper .dataTables_length{float:left}.wf-dataTables_wrapper .dataTables_filter{float:right;text-align:right}.wf-dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.wf-dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.wf-dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.wf-dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.wf-dataTables_wrapper .dataTables_paginate .paginate_button.current,.wf-dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #ffffff 0%,#dcdcdc 100%)}.wf-dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.wf-dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.wf-dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.wf-dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%,#111111 100%)}.wf-dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%,#0c0c0c 100%);box-shadow:inset 0 0 3px #111}.wf-dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.wf-dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%)}.wf-dataTables_wrapper .dataTables_length,.wf-dataTables_wrapper .dataTables_filter,.wf-dataTables_wrapper .dataTables_info,.wf-dataTables_wrapper .dataTables_processing,.wf-dataTables_wrapper .dataTables_paginate{color:#333}.wf-dataTables_wrapper .dataTables_scroll{clear:both}.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th,.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td{vertical-align:middle}.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.wf-dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.wf-dataTables_wrapper.no-footer div.dataTables_scrollHead table,.wf-dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.wf-dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.wf-dataTables_wrapper .dataTables_info,.wf-dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.wf-dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.wf-dataTables_wrapper .dataTables_length,.wf-dataTables_wrapper .dataTables_filter{float:none;text-align:center}.wf-dataTables_wrapper .dataTables_filter{margin-top:0.5em}}.wf-alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.wf-alert h4{margin-top:0;color:inherit}.wf-alert .wf-alert-link{font-weight:bold}.wf-alert>p,.wf-alert>ul{margin-bottom:0}.wf-alert>p+p{margin-top:5px}.wf-alert-dismissable,.wf-alert-dismissible{padding-right:35px}.wf-alert-dismissable .close,.wf-alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.wf-alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.wf-alert-success hr{border-top-color:#c9e2b3}.wf-alert-success .alert-link{color:#2b542c}.wf-alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.wf-alert-info hr{border-top-color:#a6e1ec}.wf-alert-info .alert-link{color:#245269}.wf-alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.wf-alert-warning hr{border-top-color:#f7e1b5}.wf-alert-warning .alert-link{color:#66512c}.wf-alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.wf-alert-danger hr{border-top-color:#e4b9c0}.wf-alert-danger .alert-link{color:#843534}#wf-tools-whois #wfrawhtml .wf-flex-row{margin:.5rem 0 1rem}#wf-tools-whois #wfrawhtml .wf-flex-row a.wf-flex-row-1{color:#444;text-decoration:none}#wf-tools-whois #wfrawhtml .wf-flex-row a.wf-flex-row-1:hover{color:#00a0d2;text-decoration:underline}.wf-diagnostic-fail.wf-block .wf-block-header .wf-block-header-content .wf-block-title{color:#d0514c}.wf-diagnostic-fail.wf-block .wf-block-header .wf-block-header-content .wf-block-title:before{content:'\f100';font-family:"Ionicons";display:inline-block;margin:0 .4rem 0 0}#wf-diagnostics .wf-block{margin:0 auto 0.5rem}#wf-diagnostics-other-tests .wf-btn-sm,#wf-diagnostics-other-tests .wf-btn-group-sm>.wf-btn{padding:2px 10px;vertical-align:top}.wf-support-block{padding:1rem 0}.wf-support-block>h4{margin:0;padding:0 0 1rem 0}.wf-support-block>h4>a{text-decoration:none;font-size:1.3125rem;line-height:1.5;font-weight:300}.wf-support-block>p{margin:0;padding:0}.wf-support-block>ul{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0}.wf-support-block>ul>li{margin:0;padding:1rem 1rem 1rem 0}.wf-support-block>ul>li>a{text-decoration:none;font-size:.875rem;line-height:1.3125;font-weight:normal}.wf-support-top-block,.wf-support-missing-block{padding:1.5rem 0}.wf-support-top-block>h4,.wf-support-missing-block>h4{margin:0;padding:0}.wf-support-top-block>ol>li,.wf-support-missing-block>ol>li{margin:0.75rem 0;padding:0}.wf-support-top-block>ol>li>a,.wf-support-missing-block>ol>li>a{text-decoration:none;font-size:.875rem;line-height:1.3125;font-weight:normal}#wf-gdpr-banner{position:relative;z-index:3006;background-color:#fcb214;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.875rem;color:#2d2d2d;line-height:1.3125;font-weight:normal;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:row;flex-direction:row;margin:0 0 0 -20px;padding:0}#wf-gdpr-banner>li{margin:0;padding:0.5rem 1rem}#wf-toupp-required-overlay::after{position:absolute;z-index:3004;top:0;right:0;width:0;height:0;background:rgba(241,241,241,0.6);content:'';opacity:0;-webkit-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;-o-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s}.wf-toupp-required #wf-toupp-required-overlay::after{width:100%;height:100%;opacity:1;-webkit-transition:opacity 0.5s;-o-transition:opacity 0.5s;transition:opacity 0.5s}#wf-toupp-required-message{display:none;position:fixed;z-index:3005;left:0;width:100%;top:50%;transform:translateY(-50%);text-align:center;color:#666666;opacity:0;-webkit-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;-o-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s}#wf-toupp-required-message #wf-toupp-required-message-inner{background-color:#00709e;color:#fff;overflow:hidden;max-width:550px;margin:0 auto;padding:20px}#wf-toupp-required-message #wf-toupp-required-message-inner h2{font-size:2.0rem}#wf-toupp-required-message #wf-toupp-required-message-inner h2 .wf-toupp-required-header{line-height:2.4rem}#wf-toupp-required-message #wf-toupp-required-message-inner p{font-size:1rem}#wf-toupp-required-message #wf-toupp-required-message-inner p:first-child{margin-top:0}#wf-toupp-required-message #wf-toupp-required-message-inner p:last-child{margin-bottom:0}#wf-toupp-required-message #wf-toupp-required-message-inner small{font-size:0.9rem;font-weight:normal;margin-top:12px;display:block}.wf-toupp-required #wf-toupp-required-message{display:block;opacity:1;-webkit-transition:opacity 0.5s;transition:opacity 0.5s}.wf-flag-{background-position:-0px -0px !important}.wf-flag-ad{background-position:-16px -0px !important}.wf-flag-ae{background-position:-32px -0px !important}.wf-flag-af{background-position:-48px -0px !important}.wf-flag-ag{background-position:-64px -0px !important}.wf-flag-ai{background-position:-80px -0px !important}.wf-flag-al{background-position:-96px -0px !important}.wf-flag-am{background-position:-112px -0px !important}.wf-flag-an{background-position:-128px -0px !important}.wf-flag-ao{background-position:-144px -0px !important}.wf-flag-ap{background-position:-160px -0px !important}.wf-flag-aq{background-position:-176px -0px !important}.wf-flag-ar{background-position:-0px -11px !important}.wf-flag-as{background-position:-16px -11px !important}.wf-flag-at{background-position:-32px -11px !important}.wf-flag-au{background-position:-48px -11px !important}.wf-flag-aw{background-position:-64px -11px !important}.wf-flag-ax{background-position:-80px -11px !important}.wf-flag-az{background-position:-96px -11px !important}.wf-flag-ba{background-position:-112px -11px !important}.wf-flag-bb{background-position:-128px -11px !important}.wf-flag-bd{background-position:-144px -11px !important}.wf-flag-be{background-position:-160px -11px !important}.wf-flag-bf{background-position:-176px -11px !important}.wf-flag-bg{background-position:-0px -22px !important}.wf-flag-bh{background-position:-16px -22px !important}.wf-flag-bi{background-position:-32px -22px !important}.wf-flag-bj{background-position:-48px -22px !important}.wf-flag-bl{background-position:-64px -22px !important}.wf-flag-bm{background-position:-80px -22px !important}.wf-flag-bn{background-position:-96px -22px !important}.wf-flag-bo{background-position:-112px -22px !important}.wf-flag-bq{background-position:-128px -22px !important}.wf-flag-br{background-position:-144px -22px !important}.wf-flag-bs{background-position:-160px -22px !important}.wf-flag-bt{background-position:-176px -22px !important}.wf-flag-bv{background-position:-0px -33px !important}.wf-flag-bw{background-position:-16px -33px !important}.wf-flag-by{background-position:-32px -33px !important}.wf-flag-bz{background-position:-48px -33px !important}.wf-flag-ca{background-position:-64px -33px !important}.wf-flag-cc{background-position:-80px -33px !important}.wf-flag-cd{background-position:-96px -33px !important}.wf-flag-cf{background-position:-112px -33px !important}.wf-flag-cg{background-position:-128px -33px !important}.wf-flag-ch{background-position:-144px -33px !important}.wf-flag-ci{background-position:-160px -33px !important}.wf-flag-ck{background-position:-176px -33px !important}.wf-flag-cl{background-position:-0px -44px !important}.wf-flag-cm{background-position:-16px -44px !important}.wf-flag-cn{background-position:-32px -44px !important}.wf-flag-co{background-position:-48px -44px !important}.wf-flag-cr{background-position:-64px -44px !important}.wf-flag-cs{background-position:-80px -44px !important}.wf-flag-cu{background-position:-96px -44px !important}.wf-flag-cv{background-position:-112px -44px !important}.wf-flag-cw{background-position:-128px -44px !important}.wf-flag-cx{background-position:-144px -44px !important}.wf-flag-cy{background-position:-160px -44px !important}.wf-flag-cz{background-position:-176px -44px !important}.wf-flag-de{background-position:-0px -55px !important}.wf-flag-dj{background-position:-16px -55px !important}.wf-flag-dk{background-position:-32px -55px !important}.wf-flag-dm{background-position:-48px -55px !important}.wf-flag-do{background-position:-64px -55px !important}.wf-flag-dz{background-position:-80px -55px !important}.wf-flag-ec{background-position:-96px -55px !important}.wf-flag-ee{background-position:-112px -55px !important}.wf-flag-eg{background-position:-128px -55px !important}.wf-flag-eh{background-position:-144px -55px !important}.wf-flag-england{background-position:-160px -55px !important}.wf-flag-er{background-position:-176px -55px !important}.wf-flag-es{background-position:-0px -66px !important}.wf-flag-et{background-position:-16px -66px !important}.wf-flag-eu{background-position:-32px -66px !important}.wf-flag-fam{background-position:-48px -66px !important}.wf-flag-fi{background-position:-64px -66px !important}.wf-flag-fj{background-position:-80px -66px !important}.wf-flag-fk{background-position:-96px -66px !important}.wf-flag-fm{background-position:-112px -66px !important}.wf-flag-fo{background-position:-128px -66px !important}.wf-flag-fr{background-position:-144px -66px !important}.wf-flag-ga{background-position:-160px -66px !important}.wf-flag-gb{background-position:-176px -66px !important}.wf-flag-gd{background-position:-0px -77px !important}.wf-flag-ge{background-position:-16px -77px !important}.wf-flag-gf{background-position:-32px -77px !important}.wf-flag-gg{background-position:-48px -77px !important}.wf-flag-gh{background-position:-64px -77px !important}.wf-flag-gi{background-position:-80px -77px !important}.wf-flag-gl{background-position:-96px -77px !important}.wf-flag-gm{background-position:-112px -77px !important}.wf-flag-gn{background-position:-128px -77px !important}.wf-flag-gp{background-position:-144px -77px !important}.wf-flag-gq{background-position:-160px -77px !important}.wf-flag-gr{background-position:-176px -77px !important}.wf-flag-gs{background-position:-0px -88px !important}.wf-flag-gt{background-position:-16px -88px !important}.wf-flag-gu{background-position:-32px -88px !important}.wf-flag-gw{background-position:-48px -88px !important}.wf-flag-gy{background-position:-64px -88px !important}.wf-flag-hk{background-position:-80px -88px !important}.wf-flag-hm{background-position:-96px -88px !important}.wf-flag-hn{background-position:-112px -88px !important}.wf-flag-hr{background-position:-128px -88px !important}.wf-flag-ht{background-position:-144px -88px !important}.wf-flag-hu{background-position:-160px -88px !important}.wf-flag-id{background-position:-176px -88px !important}.wf-flag-ie{background-position:-0px -99px !important}.wf-flag-il{background-position:-16px -99px !important}.wf-flag-im{background-position:-32px -99px !important}.wf-flag-in{background-position:-48px -99px !important}.wf-flag-io{background-position:-64px -99px !important}.wf-flag-iq{background-position:-80px -99px !important}.wf-flag-ir{background-position:-96px -99px !important}.wf-flag-is{background-position:-112px -99px !important}.wf-flag-it{background-position:-128px -99px !important}.wf-flag-je{background-position:-144px -99px !important}.wf-flag-jm{background-position:-160px -99px !important}.wf-flag-jo{background-position:-176px -99px !important}.wf-flag-jp{background-position:-0px -110px !important}.wf-flag-ke{background-position:-16px -110px !important}.wf-flag-kg{background-position:-32px -110px !important}.wf-flag-kh{background-position:-48px -110px !important}.wf-flag-ki{background-position:-64px -110px !important}.wf-flag-km{background-position:-80px -110px !important}.wf-flag-kn{background-position:-96px -110px !important}.wf-flag-kp{background-position:-112px -110px !important}.wf-flag-kr{background-position:-128px -110px !important}.wf-flag-kw{background-position:-144px -110px !important}.wf-flag-ky{background-position:-160px -110px !important}.wf-flag-kz{background-position:-176px -110px !important}.wf-flag-la{background-position:-0px -121px !important}.wf-flag-lb{background-position:-16px -121px !important}.wf-flag-lc{background-position:-32px -121px !important}.wf-flag-li{background-position:-48px -121px !important}.wf-flag-lk{background-position:-64px -121px !important}.wf-flag-lr{background-position:-80px -121px !important}.wf-flag-ls{background-position:-96px -121px !important}.wf-flag-lt{background-position:-112px -121px !important}.wf-flag-lu{background-position:-128px -121px !important}.wf-flag-lv{background-position:-144px -121px !important}.wf-flag-ly{background-position:-160px -121px !important}.wf-flag-ma{background-position:-176px -121px !important}.wf-flag-mc{background-position:-0px -132px !important}.wf-flag-md{background-position:-16px -132px !important}.wf-flag-me{background-position:-32px -132px !important}.wf-flag-mf{background-position:-48px -132px !important}.wf-flag-mg{background-position:-64px -132px !important}.wf-flag-mh{background-position:-80px -132px !important}.wf-flag-mk{background-position:-96px -132px !important}.wf-flag-ml{background-position:-112px -132px !important}.wf-flag-mm{background-position:-128px -132px !important}.wf-flag-mn{background-position:-144px -132px !important}.wf-flag-mo{background-position:-160px -132px !important}.wf-flag-mp{background-position:-176px -132px !important}.wf-flag-mq{background-position:-0px -143px !important}.wf-flag-mr{background-position:-16px -143px !important}.wf-flag-ms{background-position:-32px -143px !important}.wf-flag-mt{background-position:-48px -143px !important}.wf-flag-mu{background-position:-64px -143px !important}.wf-flag-mv{background-position:-80px -143px !important}.wf-flag-mw{background-position:-96px -143px !important}.wf-flag-mx{background-position:-112px -143px !important}.wf-flag-my{background-position:-128px -143px !important}.wf-flag-mz{background-position:-144px -143px !important}.wf-flag-na{background-position:-160px -143px !important}.wf-flag-nc{background-position:-176px -143px !important}.wf-flag-ne{background-position:-0px -154px !important}.wf-flag-nf{background-position:-16px -154px !important}.wf-flag-ng{background-position:-32px -154px !important}.wf-flag-ni{background-position:-48px -154px !important}.wf-flag-nl{background-position:-64px -154px !important}.wf-flag-no{background-position:-80px -154px !important}.wf-flag-np{background-position:-96px -154px !important}.wf-flag-nr{background-position:-112px -154px !important}.wf-flag-nu{background-position:-128px -154px !important}.wf-flag-nz{background-position:-144px -154px !important}.wf-flag-om{background-position:-160px -154px !important}.wf-flag-pa{background-position:-176px -154px !important}.wf-flag-pe{background-position:-0px -165px !important}.wf-flag-pf{background-position:-16px -165px !important}.wf-flag-pg{background-position:-32px -165px !important}.wf-flag-ph{background-position:-48px -165px !important}.wf-flag-pk{background-position:-64px -165px !important}.wf-flag-pl{background-position:-80px -165px !important}.wf-flag-pm{background-position:-96px -165px !important}.wf-flag-pn{background-position:-112px -165px !important}.wf-flag-pr{background-position:-128px -165px !important}.wf-flag-ps{background-position:-144px -165px !important}.wf-flag-pt{background-position:-160px -165px !important}.wf-flag-pw{background-position:-176px -165px !important}.wf-flag-py{background-position:-0px -176px !important}.wf-flag-qa{background-position:-16px -176px !important}.wf-flag-re{background-position:-32px -176px !important}.wf-flag-ro{background-position:-48px -176px !important}.wf-flag-rs{background-position:-64px -176px !important}.wf-flag-ru{background-position:-80px -176px !important}.wf-flag-rw{background-position:-96px -176px !important}.wf-flag-sa{background-position:-112px -176px !important}.wf-flag-sb{background-position:-128px -176px !important}.wf-flag-sc{background-position:-144px -176px !important}.wf-flag-scotland{background-position:-160px -176px !important}.wf-flag-sd{background-position:-176px -176px !important}.wf-flag-se{background-position:-0px -187px !important}.wf-flag-sg{background-position:-16px -187px !important}.wf-flag-sh{background-position:-32px -187px !important}.wf-flag-si{background-position:-48px -187px !important}.wf-flag-sj{background-position:-64px -187px !important}.wf-flag-sk{background-position:-80px -187px !important}.wf-flag-sl{background-position:-96px -187px !important}.wf-flag-sm{background-position:-112px -187px !important}.wf-flag-sn{background-position:-128px -187px !important}.wf-flag-so{background-position:-144px -187px !important}.wf-flag-sr{background-position:-160px -187px !important}.wf-flag-ss{background-position:-176px -187px !important}.wf-flag-st{background-position:-0px -198px !important}.wf-flag-sv{background-position:-16px -198px !important}.wf-flag-sx{background-position:-32px -198px !important}.wf-flag-sy{background-position:-48px -198px !important}.wf-flag-sz{background-position:-64px -198px !important}.wf-flag-tc{background-position:-80px -198px !important}.wf-flag-td{background-position:-96px -198px !important}.wf-flag-tf{background-position:-112px -198px !important}.wf-flag-tg{background-position:-128px -198px !important}.wf-flag-th{background-position:-144px -198px !important}.wf-flag-tj{background-position:-160px -198px !important}.wf-flag-tk{background-position:-176px -198px !important}.wf-flag-tl{background-position:-0px -209px !important}.wf-flag-tm{background-position:-16px -209px !important}.wf-flag-tn{background-position:-32px -209px !important}.wf-flag-to{background-position:-48px -209px !important}.wf-flag-tr{background-position:-64px -209px !important}.wf-flag-tt{background-position:-80px -209px !important}.wf-flag-tv{background-position:-96px -209px !important}.wf-flag-tw{background-position:-112px -209px !important}.wf-flag-tz{background-position:-128px -209px !important}.wf-flag-ua{background-position:-144px -209px !important}.wf-flag-ug{background-position:-160px -209px !important}.wf-flag-uk{background-position:-176px -209px !important}.wf-flag-um{background-position:-0px -220px !important}.wf-flag-un{background-position:-16px -220px !important}.wf-flag-us{background-position:-32px -220px !important}.wf-flag-uy{background-position:-48px -220px !important}.wf-flag-uz{background-position:-64px -220px !important}.wf-flag-va{background-position:-80px -220px !important}.wf-flag-vc{background-position:-96px -220px !important}.wf-flag-ve{background-position:-112px -220px !important}.wf-flag-vg{background-position:-128px -220px !important}.wf-flag-vi{background-position:-144px -220px !important}.wf-flag-vn{background-position:-160px -220px !important}.wf-flag-vu{background-position:-176px -220px !important}.wf-flag-wales{background-position:-0px -231px !important}.wf-flag-wf{background-position:-16px -231px !important}.wf-flag-ws{background-position:-32px -231px !important}.wf-flag-xk{background-position:-48px -231px !important}.wf-flag-ye{background-position:-64px -231px !important}.wf-flag-yt{background-position:-80px -231px !important}.wf-flag-za{background-position:-96px -231px !important}.wf-flag-zm{background-position:-112px -231px !important}.wf-flag-zw{background-position:-128px -231px !important}#wf-central-progress li{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;padding:8px 1.5rem}#wf-central-progress li .wf-central-progress-icon{display:-webkit-flex;display:flex;-webkit-flex-grow:0;flex-grow:0}#wf-central-progress li .wf-central-progress-content{display:-webkit-flex;display:flex;-webkit-flex-grow:1;flex-grow:1;margin:3px 20px 0px}#wf-central-progress li .wf-step-pending,#wf-central-progress li .wf-step-running,#wf-central-progress li .wf-step-complete-success,#wf-central-progress li .wf-step-complete-warning{display:none}#wf-central-progress li.pending{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);opacity:.4}#wf-central-progress li.pending .wf-step-pending{display:block}#wf-central-progress li.running .wf-step-running{display:block}#wf-central-progress li.complete-success .wf-step-complete-success{display:block}#wf-central-progress li.complete-warning .wf-step-complete-warning{display:block}.wf-central-connected .wf-flex-row{align-items:stretch}.wf-central-connected .wf-flex-row .wf-flex-row-1{width:50%}.wf-central-connected .wf-flex-row .wf-flex-row-1:first-child{margin-right:5px}.wf-central-connected .wf-flex-row .wf-flex-row-1:last-child{margin-left:5px}@media (max-width: 768px){.wf-central-connected .wf-flex-row{-webkit-flex-direction:column !important;flex-direction:column !important}.wf-central-connected .wf-flex-row .wf-flex-row-1{width:100%;margin:0 0 10px !important}}#wf-extended-protection-notice{display:inline-block;line-height:1.4;padding:11px 15px;font-size:14px;text-align:left;margin:25px 20px 0 2px;background-color:#fff;border-left:4px solid #ffba00;box-shadow:0 1px 1px 0 rgba(0,0,0,0.1)}
|
|
css/main.1607007971.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
.wf-clearfix:before,.wf-clearfix:after{content:" ";display:table}.wf-clearfix:after{clear:both}.wf-btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;text-transform:uppercase;padding:.4rem 1rem;font-size:.875rem;line-height:1.3125rem;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media (min-width: 768px){.wf-btn{padding:.5rem 1.25rem;font-size:.875rem;line-height:1.3125rem;border-radius:4px}}.wf-btn:focus,.wf-btn.wf-focus,.wf-btn:active:focus,.wf-btn:active.wf-focus,.wf-btn.wf-active:focus,.wf-btn.wf-active.wf-focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.wf-btn:hover,.wf-btn:focus,.wf-btn.wf-focus{color:#00709e;text-decoration:none}.wf-btn:active,.wf-btn.wf-active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.wf-btn.wf-disabled,.wf-btn[disabled],.wf-btn[readonly],fieldset[disabled] .wf-btn{cursor:not-allowed;-webkit-box-shadow:none;box-shadow:none}a.wf-btn{text-decoration:none}a.wf-btn.wf-disabled,fieldset[disabled] a.wf-btn{cursor:not-allowed;pointer-events:none}.wf-btn-default{color:#00709e;background-color:#fff;border-color:#00709e}.wf-btn-default:focus,.wf-btn-default.focus{color:#00709e;background-color:#e6e6e6;border-color:#00161f}.wf-btn-default:hover{color:#00709e;background-color:#e6e6e6;border-color:#004561}.wf-btn-default:active,.wf-btn-default.active,.wf-open>.wf-btn-default.wf-dropdown-toggle{color:#00709e;background-color:#e6e6e6;border-color:#004561}.wf-btn-default:active:hover,.wf-btn-default:active:focus,.wf-btn-default:active.focus,.wf-btn-default.active:hover,.wf-btn-default.active:focus,.wf-btn-default.active.focus,.wf-open>.wf-btn-default.wf-dropdown-toggle:hover,.wf-open>.wf-btn-default.wf-dropdown-toggle:focus,.wf-open>.wf-btn-default.wf-dropdown-toggle.focus{color:#00709e;background-color:#d4d4d4;border-color:#00161f}.wf-btn-default:active,.wf-btn-default.wf-active,.wf-open>.wf-btn-default.wf-dropdown-toggle{background-image:none}.wf-btn-default.wf-disabled,.wf-btn-default[disabled],.wf-btn-default[readonly],fieldset[disabled] .wf-btn-default{color:#777;background-color:#fff;border-color:#e2e2e2;cursor:not-allowed}.wf-btn-default.wf-disabled:hover,.wf-btn-default.wf-disabled:focus,.wf-btn-default.wf-disabled.wf-focus,.wf-btn-default[disabled]:hover,.wf-btn-default[disabled]:focus,.wf-btn-default[disabled].wf-focus,.wf-btn-default[readonly]:hover,.wf-btn-default[readonly]:focus,.wf-btn-default[readonly].wf-focus,fieldset[disabled] .wf-btn-default:hover,fieldset[disabled] .wf-btn-default:focus,fieldset[disabled] .wf-btn-default.wf-focus{background-color:#fff;border-color:#00709e}.wf-btn-default .wf-badge{color:#fff;background-color:#00709e}.wf-btn-primary{color:#fff;background-color:#00709e;border-color:#005e85}.wf-btn-primary:focus,.wf-btn-primary.focus{color:#fff;background-color:#004c6b;border-color:#000405}.wf-btn-primary:hover{color:#fff;background-color:#004c6b;border-color:#003347}.wf-btn-primary:active,.wf-btn-primary.active,.wf-open>.wf-btn-primary.wf-dropdown-toggle{color:#fff;background-color:#004c6b;border-color:#003347}.wf-btn-primary:active:hover,.wf-btn-primary:active:focus,.wf-btn-primary:active.focus,.wf-btn-primary.active:hover,.wf-btn-primary.active:focus,.wf-btn-primary.active.focus,.wf-open>.wf-btn-primary.wf-dropdown-toggle:hover,.wf-open>.wf-btn-primary.wf-dropdown-toggle:focus,.wf-open>.wf-btn-primary.wf-dropdown-toggle.focus{color:#fff;background-color:#003347;border-color:#000405}.wf-btn-primary:active,.wf-btn-primary.wf-active,.wf-open>.wf-btn-primary.wf-dropdown-toggle{background-image:none}.wf-btn-primary.wf-disabled,.wf-btn-primary[disabled],.wf-btn-primary[readonly],fieldset[disabled] .wf-btn-primary{color:#fff;background-color:#59a2c0;border-color:#5996b0;cursor:not-allowed}.wf-btn-primary.wf-disabled:hover,.wf-btn-primary.wf-disabled:focus,.wf-btn-primary.wf-disabled.wf-focus,.wf-btn-primary[disabled]:hover,.wf-btn-primary[disabled]:focus,.wf-btn-primary[disabled].wf-focus,.wf-btn-primary[readonly]:hover,.wf-btn-primary[readonly]:focus,.wf-btn-primary[readonly].wf-focus,fieldset[disabled] .wf-btn-primary:hover,fieldset[disabled] .wf-btn-primary:focus,fieldset[disabled] .wf-btn-primary.wf-focus{background-color:#00709e;border-color:#005e85}.wf-btn-primary .wf-badge{color:#00709e;background-color:#fff}.wf-btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.wf-btn-success:focus,.wf-btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.wf-btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.wf-btn-success:active,.wf-btn-success.active,.wf-open>.wf-btn-success.wf-dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.wf-btn-success:active:hover,.wf-btn-success:active:focus,.wf-btn-success:active.focus,.wf-btn-success.active:hover,.wf-btn-success.active:focus,.wf-btn-success.active.focus,.wf-open>.wf-btn-success.wf-dropdown-toggle:hover,.wf-open>.wf-btn-success.wf-dropdown-toggle:focus,.wf-open>.wf-btn-success.wf-dropdown-toggle.focus{color:#fff;background-color:#398439;border-color:#255625}.wf-btn-success:active,.wf-btn-success.wf-active,.wf-open>.wf-btn-success.wf-dropdown-toggle{background-image:none}.wf-btn-success.wf-disabled,.wf-btn-success[disabled],.wf-btn-success[readonly],fieldset[disabled] .wf-btn-success{color:#fff;background-color:#95d195;border-color:#8bca8b;cursor:not-allowed}.wf-btn-success.wf-disabled:hover,.wf-btn-success.wf-disabled:focus,.wf-btn-success.wf-disabled.wf-focus,.wf-btn-success[disabled]:hover,.wf-btn-success[disabled]:focus,.wf-btn-success[disabled].wf-focus,.wf-btn-success[readonly]:hover,.wf-btn-success[readonly]:focus,.wf-btn-success[readonly].wf-focus,fieldset[disabled] .wf-btn-success:hover,fieldset[disabled] .wf-btn-success:focus,fieldset[disabled] .wf-btn-success.wf-focus{background-color:#5cb85c;border-color:#4cae4c}.wf-btn-success .wf-badge{color:#5cb85c;background-color:#fff}.wf-btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.wf-btn-info:focus,.wf-btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.wf-btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.wf-btn-info:active,.wf-btn-info.active,.wf-open>.wf-btn-info.wf-dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.wf-btn-info:active:hover,.wf-btn-info:active:focus,.wf-btn-info:active.focus,.wf-btn-info.active:hover,.wf-btn-info.active:focus,.wf-btn-info.active.focus,.wf-open>.wf-btn-info.wf-dropdown-toggle:hover,.wf-open>.wf-btn-info.wf-dropdown-toggle:focus,.wf-open>.wf-btn-info.wf-dropdown-toggle.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.wf-btn-info:active,.wf-btn-info.wf-active,.wf-open>.wf-btn-info.wf-dropdown-toggle{background-image:none}.wf-btn-info.wf-disabled,.wf-btn-info[disabled],.wf-btn-info[readonly],fieldset[disabled] .wf-btn-info{color:#fff;background-color:#94d6ea;border-color:#87d1e7;cursor:not-allowed}.wf-btn-info.wf-disabled:hover,.wf-btn-info.wf-disabled:focus,.wf-btn-info.wf-disabled.wf-focus,.wf-btn-info[disabled]:hover,.wf-btn-info[disabled]:focus,.wf-btn-info[disabled].wf-focus,.wf-btn-info[readonly]:hover,.wf-btn-info[readonly]:focus,.wf-btn-info[readonly].wf-focus,fieldset[disabled] .wf-btn-info:hover,fieldset[disabled] .wf-btn-info:focus,fieldset[disabled] .wf-btn-info.wf-focus{background-color:#5bc0de;border-color:#46b8da}.wf-btn-info .wf-badge{color:#5bc0de;background-color:#fff}.wf-btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.wf-btn-warning:focus,.wf-btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.wf-btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.wf-btn-warning:active,.wf-btn-warning.active,.wf-open>.wf-btn-warning.wf-dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.wf-btn-warning:active:hover,.wf-btn-warning:active:focus,.wf-btn-warning:active.focus,.wf-btn-warning.active:hover,.wf-btn-warning.active:focus,.wf-btn-warning.active.focus,.wf-open>.wf-btn-warning.wf-dropdown-toggle:hover,.wf-open>.wf-btn-warning.wf-dropdown-toggle:focus,.wf-open>.wf-btn-warning.wf-dropdown-toggle.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.wf-btn-warning:active,.wf-btn-warning.wf-active,.wf-open>.wf-btn-warning.wf-dropdown-toggle{background-image:none}.wf-btn-warning.wf-disabled,.wf-btn-warning[disabled],.wf-btn-warning[readonly],fieldset[disabled] .wf-btn-warning{color:#fff;background-color:#f5ca8c;border-color:#f4c37c;cursor:not-allowed}.wf-btn-warning.wf-disabled:hover,.wf-btn-warning.wf-disabled:focus,.wf-btn-warning.wf-disabled.wf-focus,.wf-btn-warning[disabled]:hover,.wf-btn-warning[disabled]:focus,.wf-btn-warning[disabled].wf-focus,.wf-btn-warning[readonly]:hover,.wf-btn-warning[readonly]:focus,.wf-btn-warning[readonly].wf-focus,fieldset[disabled] .wf-btn-warning:hover,fieldset[disabled] .wf-btn-warning:focus,fieldset[disabled] .wf-btn-warning.wf-focus{background-color:#f0ad4e;border-color:#eea236}.wf-btn-warning .wf-badge{color:#f0ad4e;background-color:#fff}.wf-btn-danger{color:#fff;background-color:#930000;border-color:#7a0000}.wf-btn-danger:focus,.wf-btn-danger.focus{color:#fff;background-color:#600000;border-color:#000}.wf-btn-danger:hover{color:#fff;background-color:#600000;border-color:#3c0000}.wf-btn-danger:active,.wf-btn-danger.active,.wf-open>.wf-btn-danger.wf-dropdown-toggle{color:#fff;background-color:#600000;border-color:#3c0000}.wf-btn-danger:active:hover,.wf-btn-danger:active:focus,.wf-btn-danger:active.focus,.wf-btn-danger.active:hover,.wf-btn-danger.active:focus,.wf-btn-danger.active.focus,.wf-open>.wf-btn-danger.wf-dropdown-toggle:hover,.wf-open>.wf-btn-danger.wf-dropdown-toggle:focus,.wf-open>.wf-btn-danger.wf-dropdown-toggle.focus{color:#fff;background-color:#3c0000;border-color:#000}.wf-btn-danger:active,.wf-btn-danger.wf-active,.wf-open>.wf-btn-danger.wf-dropdown-toggle{background-image:none}.wf-btn-danger.wf-disabled,.wf-btn-danger[disabled],.wf-btn-danger[readonly],fieldset[disabled] .wf-btn-danger{color:#fff;background-color:#b95959;border-color:#a95959;cursor:not-allowed}.wf-btn-danger.wf-disabled:hover,.wf-btn-danger.wf-disabled:focus,.wf-btn-danger.wf-disabled.wf-focus,.wf-btn-danger[disabled]:hover,.wf-btn-danger[disabled]:focus,.wf-btn-danger[disabled].wf-focus,.wf-btn-danger[readonly]:hover,.wf-btn-danger[readonly]:focus,.wf-btn-danger[readonly].wf-focus,fieldset[disabled] .wf-btn-danger:hover,fieldset[disabled] .wf-btn-danger:focus,fieldset[disabled] .wf-btn-danger.wf-focus{background-color:#930000;border-color:#7a0000}.wf-btn-danger .wf-badge{color:#930000;background-color:#fff}.wf-btn-callout{font-weight:600;text-transform:uppercase}.wf-btn-callout-subtle{font-weight:400;text-transform:uppercase}.wf-btn-link{color:#00709e;font-weight:normal;border-radius:0}.wf-btn-link,.wf-btn-link:active,.wf-btn-link.wf-active,.wf-btn-link[disabled],fieldset[disabled] .wf-btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.wf-btn-link,.wf-btn-link:hover,.wf-btn-link:focus,.wf-btn-link:active{border-color:transparent}.wf-btn-link:hover,.wf-btn-link:focus{color:#003a52;text-decoration:underline;background-color:transparent}.wf-btn-link[disabled]:hover,.wf-btn-link[disabled]:focus,fieldset[disabled] .wf-btn-link:hover,fieldset[disabled] .wf-btn-link:focus{color:#777;text-decoration:none}.wf-btn-lg,.wf-btn-group-lg>.wf-btn{padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.wf-btn-sm,.wf-btn-group-sm>.wf-btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.wf-btn-xs,.wf-btn-group-xs>.wf-btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.wf-btn-block{display:block;width:100%}.wf-btn-block+.wf-btn-block{margin-top:5px}input[type="submit"].wf-btn-block,input[type="reset"].wf-btn-block,input[type="button"].wf-btn-block{width:100%}.wf-btn-group,.wf-btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.wf-btn-group>.wf-btn,.wf-btn-group-vertical>.wf-btn{position:relative;float:left}.wf-btn-group>.wf-btn:hover,.wf-btn-group>.wf-btn:focus,.wf-btn-group>.wf-btn:active,.wf-btn-group>.wf-btn.wf-active,.wf-btn-group-vertical>.wf-btn:hover,.wf-btn-group-vertical>.wf-btn:focus,.wf-btn-group-vertical>.wf-btn:active,.wf-btn-group-vertical>.wf-btn.wf-active{z-index:2}.wf-btn-group .wf-btn+.wf-btn,.wf-btn-group .wf-btn+.wf-btn-group,.wf-btn-group .wf-btn-group+.wf-btn,.wf-btn-group .wf-btn-group+.wf-btn-group{margin-left:-1px}.wf-btn-toolbar{margin-left:-5px}.wf-btn-toolbar:before,.wf-btn-toolbar:after{content:" ";display:table}.wf-btn-toolbar:after{clear:both}.wf-btn-toolbar .wf-btn,.wf-btn-toolbar .wf-btn-group,.wf-btn-toolbar .wf-input-group{float:left}.wf-btn-toolbar>.wf-btn,.wf-btn-toolbar>.wf-btn-group,.wf-btn-toolbar>.wf-input-group{margin-left:5px}.wf-btn-group>.wf-btn:not(:first-child):not(:last-child):not(.wf-dropdown-toggle){border-radius:0}.wf-btn-group>.wf-btn:first-child{margin-left:0}.wf-btn-group>.wf-btn:first-child:not(:last-child):not(.wf-dropdown-toggle){-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0}.wf-btn-group>.wf-btn:last-child:not(:first-child),.wf-btn-group>.wf-dropdown-toggle:not(:first-child){-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0}.wf-btn-group>.wf-btn-group{float:left}.wf-btn-group>.wf-btn-group:not(:first-child):not(:last-child)>.wf-btn{border-radius:0}.wf-btn-group>.wf-btn-group:first-child:not(:last-child)>.wf-btn:last-child,.wf-btn-group>.wf-btn-group:first-child:not(:last-child)>.wf-dropdown-toggle{-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0}.wf-btn-group>.wf-btn-group:last-child:not(:first-child)>.wf-btn:first-child{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0}.wf-btn-group .wf-dropdown-toggle:active,.wf-btn-group.wf-open .wf-dropdown-toggle{outline:0}.wf-btn-group>.wf-btn+.wf-dropdown-toggle{padding-left:8px;padding-right:8px}.wf-btn-group>.wf-btn-lg+.wf-dropdown-toggle,.wf-btn-group-lg.wf-btn-group>.wf-btn+.wf-dropdown-toggle{padding-left:12px;padding-right:12px}.wf-btn-group.open .wf-dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.wf-btn-group.open .wf-dropdown-toggle.wf-btn-link{-webkit-box-shadow:none;box-shadow:none}.wf-btn .wf-caret{margin-left:0}.wf-btn-lg .wf-caret,.wf-btn-group-lg>.wf-btn .wf-caret{border-width:5px 5px 0;border-bottom-width:0}.wf-dropup .wf-btn-lg .wf-caret,.wf-dropup .wf-btn-group-lg>.wf-btn .wf-caret{border-width:0 5px 5px}.wf-btn-group-vertical>.wf-btn,.wf-btn-group-vertical>.wf-btn-group,.wf-btn-group-vertical>.wf-btn-group>.wf-btn{display:block;float:none;width:100%;max-width:100%}.wf-btn-group-vertical>.wf-btn-group:before,.wf-btn-group-vertical>.wf-btn-group:after{content:" ";display:table}.wf-btn-group-vertical>.wf-btn-group:after{clear:both}.wf-btn-group-vertical>.wf-btn-group>.wf-btn{float:none}.wf-btn-group-vertical>.wf-btn+.wf-btn,.wf-btn-group-vertical>.wf-btn+.wf-btn-group,.wf-btn-group-vertical>.wf-btn-group+.wf-btn,.wf-btn-group-vertical>.wf-btn-group+.wf-btn-group{margin-top:-1px;margin-left:0}.wf-btn-group-vertical>.wf-btn:not(:first-child):not(:last-child){border-radius:0}.wf-btn-group-vertical>.wf-btn:first-child:not(:last-child){-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0}.wf-btn-group-vertical>.wf-btn:last-child:not(:first-child){-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.wf-btn-group-vertical>.wf-btn-group:not(:first-child):not(:last-child)>.wf-btn{border-radius:0}.wf-btn-group-vertical>.wf-btn-group:first-child:not(:last-child)>.wf-btn:last-child,.wf-btn-group-vertical>.wf-btn-group:first-child:not(:last-child)>.wf-dropdown-toggle{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0}.wf-btn-group-vertical>.wf-btn-group:last-child:not(:first-child)>.wf-btn:first-child{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0}.wf-btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.wf-btn-group-justified>.wf-btn,.wf-btn-group-justified>.wf-btn-group{float:none;display:table-cell;width:1%}.wf-btn-group-justified>.wf-btn-group .wf-btn{width:100%}.wf-btn-group-justified>.wf-btn-group .wf-dropdown-menu{left:auto}[data-toggle="buttons"]>.wf-btn input[type="radio"],[data-toggle="buttons"]>.wf-btn input[type="checkbox"],[data-toggle="buttons"]>.wf-btn-group>.wf-btn input[type="radio"],[data-toggle="buttons"]>.wf-btn-group>.wf-btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.wf-pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.wf-pagination>li{display:inline}.wf-pagination>li>a,.wf-pagination>li>span{position:relative;float:left;padding:.5rem 1.25rem;line-height:1.42857;text-decoration:none;color:#00709e;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.wf-pagination>li:first-child>a,.wf-pagination>li:first-child>span{margin-left:0;-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.wf-pagination>li:last-child>a,.wf-pagination>li:last-child>span{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.wf-pagination>li>a:hover,.wf-pagination>li>a:focus,.wf-pagination>li>span:hover,.wf-pagination>li>span:focus{z-index:2;color:#003a52;background-color:#e2e2e2;border-color:#ddd}.wf-pagination>.wf-active>a,.wf-pagination>.wf-active>a:hover,.wf-pagination>.wf-active>a:focus,.wf-pagination>.wf-active>span,.wf-pagination>.wf-active>span:hover,.wf-pagination>.wf-active>span:focus{z-index:3;color:#fff;background-color:#00709e;border-color:#00709e;cursor:default}.wf-pagination>.wf-disabled>span,.wf-pagination>.wf-disabled>span:hover,.wf-pagination>.wf-disabled>span:focus,.wf-pagination>.wf-disabled>a,.wf-pagination>.wf-disabled>a:hover,.wf-pagination>.wf-disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.wf-pagination-lg>li>a,.wf-pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.33333}.wf-pagination-lg>li:first-child>a,.wf-pagination-lg>li:first-child>span{-moz-border-radius-topleft:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px}.wf-pagination-lg>li:last-child>a,.wf-pagination-lg>li:last-child>span{-moz-border-radius-topright:6px;-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-moz-border-radius-bottomright:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px}.wf-pagination-sm>li>a,.wf-pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.wf-pagination-sm>li:first-child>a,.wf-pagination-sm>li:first-child>span{-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.wf-pagination-sm>li:last-child>a,.wf-pagination-sm>li:last-child>span{-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}@-ms-viewport{width:device-width}.wf-visible-xs{display:none !important}.wf-visible-sm{display:none !important}.wf-visible-md{display:none !important}.wf-visible-lg{display:none !important}.wf-visible-xs-block,.wf-visible-xs-inline,.wf-visible-xs-inline-block,.wf-visible-sm-block,.wf-visible-sm-inline,.wf-visible-sm-inline-block,.wf-visible-md-block,.wf-visible-md-inline,.wf-visible-md-inline-block,.wf-visible-lg-block,.wf-visible-lg-inline,.wf-visible-lg-inline-block{display:none !important}@media (max-width: 767px){.wf-visible-xs{display:block !important}table.wf-visible-xs{display:table !important}tr.wf-visible-xs{display:table-row !important}th.wf-visible-xs,td.wf-visible-xs{display:table-cell !important}}@media (max-width: 767px){.wf-visible-xs-block{display:block !important}}@media (max-width: 767px){.wf-visible-xs-inline{display:inline !important}}@media (max-width: 767px){.wf-visible-xs-inline-block{display:inline-block !important}}@media (min-width: 768px) and (max-width: 991px){.wf-visible-sm{display:block !important}table.wf-visible-sm{display:table !important}tr.wf-visible-sm{display:table-row !important}th.wf-visible-sm,td.wf-visible-sm{display:table-cell !important}}@media (min-width: 768px) and (max-width: 991px){.wf-visible-sm-block{display:block !important}}@media (min-width: 768px) and (max-width: 991px){.wf-visible-sm-inline{display:inline !important}}@media (min-width: 768px) and (max-width: 991px){.wf-visible-sm-inline-block{display:inline-block !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-visible-md{display:block !important}table.wf-visible-md{display:table !important}tr.wf-visible-md{display:table-row !important}th.wf-visible-md,td.wf-visible-md{display:table-cell !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-visible-md-block{display:block !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-visible-md-inline{display:inline !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-visible-md-inline-block{display:inline-block !important}}@media (min-width: 1200px){.wf-visible-lg{display:block !important}table.wf-visible-lg{display:table !important}tr.wf-visible-lg{display:table-row !important}th.wf-visible-lg,td.wf-visible-lg{display:table-cell !important}}@media (min-width: 1200px){.wf-visible-lg-block{display:block !important}}@media (min-width: 1200px){.wf-visible-lg-inline{display:inline !important}}@media (min-width: 1200px){.wf-visible-lg-inline-block{display:inline-block !important}}@media (max-width: 767px){.wf-hidden-xs{display:none !important}}@media (min-width: 768px) and (max-width: 991px){.wf-hidden-sm{display:none !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-hidden-md{display:none !important}}@media (min-width: 1200px){.wf-hidden-lg{display:none !important}}.wf-visible-print{display:none !important}@media print{.wf-visible-print{display:block !important}table.wf-visible-print{display:table !important}tr.wf-visible-print{display:table-row !important}th.wf-visible-print,td.wf-visible-print{display:table-cell !important}}.wf-visible-print-block{display:none !important}@media print{.wf-visible-print-block{display:block !important}}.wf-visible-print-inline{display:none !important}@media print{.wf-visible-print-inline{display:inline !important}}.wf-visible-print-inline-block{display:none !important}@media print{.wf-visible-print-inline-block{display:inline-block !important}}@media print{.wf-hidden-print{display:none !important}}.wf-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.wf-container:before,.wf-container:after{content:" ";display:table}.wf-container:after{clear:both}@media (min-width: 768px){.wf-container{width:750px}}@media (min-width: 992px){.wf-container{width:970px}}@media (min-width: 1200px){.wf-container{width:1170px}}.wf-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.wf-container-fluid:before,.wf-container-fluid:after{content:" ";display:table}.wf-container-fluid:after{clear:both}.wf-row{margin-left:-15px;margin-right:-15px}.wf-row:before,.wf-row:after{content:" ";display:table}.wf-row:after{clear:both}.wf-col-xs-1,.wf-col-sm-1,.wf-col-md-1,.wf-col-lg-1,.wf-col-xs-2,.wf-col-sm-2,.wf-col-md-2,.wf-col-lg-2,.wf-col-xs-3,.wf-col-sm-3,.wf-col-md-3,.wf-col-lg-3,.wf-col-xs-4,.wf-col-sm-4,.wf-col-md-4,.wf-col-lg-4,.wf-col-xs-5,.wf-col-sm-5,.wf-col-md-5,.wf-col-lg-5,.wf-col-xs-6,.wf-col-sm-6,.wf-col-md-6,.wf-col-lg-6,.wf-col-xs-7,.wf-col-sm-7,.wf-col-md-7,.wf-col-lg-7,.wf-col-xs-8,.wf-col-sm-8,.wf-col-md-8,.wf-col-lg-8,.wf-col-xs-9,.wf-col-sm-9,.wf-col-md-9,.wf-col-lg-9,.wf-col-xs-10,.wf-col-sm-10,.wf-col-md-10,.wf-col-lg-10,.wf-col-xs-11,.wf-col-sm-11,.wf-col-md-11,.wf-col-lg-11,.wf-col-xs-12,.wf-col-sm-12,.wf-col-md-12,.wf-col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px;box-sizing:border-box}.wf-col-xs-1,.wf-col-xs-2,.wf-col-xs-3,.wf-col-xs-4,.wf-col-xs-5,.wf-col-xs-6,.wf-col-xs-7,.wf-col-xs-8,.wf-col-xs-9,.wf-col-xs-10,.wf-col-xs-11,.wf-col-xs-12{float:left}.wf-col-xs-1{width:8.33333%}.wf-col-xs-2{width:16.66667%}.wf-col-xs-3{width:25%}.wf-col-xs-4{width:33.33333%}.wf-col-xs-5{width:41.66667%}.wf-col-xs-6{width:50%}.wf-col-xs-7{width:58.33333%}.wf-col-xs-8{width:66.66667%}.wf-col-xs-9{width:75%}.wf-col-xs-10{width:83.33333%}.wf-col-xs-11{width:91.66667%}.wf-col-xs-12{width:100%}.wf-col-xs-pull-0{right:auto}.wf-col-xs-pull-1{right:8.33333%}.wf-col-xs-pull-2{right:16.66667%}.wf-col-xs-pull-3{right:25%}.wf-col-xs-pull-4{right:33.33333%}.wf-col-xs-pull-5{right:41.66667%}.wf-col-xs-pull-6{right:50%}.wf-col-xs-pull-7{right:58.33333%}.wf-col-xs-pull-8{right:66.66667%}.wf-col-xs-pull-9{right:75%}.wf-col-xs-pull-10{right:83.33333%}.wf-col-xs-pull-11{right:91.66667%}.wf-col-xs-pull-12{right:100%}.wf-col-xs-push-0{left:auto}.wf-col-xs-push-1{left:8.33333%}.wf-col-xs-push-2{left:16.66667%}.wf-col-xs-push-3{left:25%}.wf-col-xs-push-4{left:33.33333%}.wf-col-xs-push-5{left:41.66667%}.wf-col-xs-push-6{left:50%}.wf-col-xs-push-7{left:58.33333%}.wf-col-xs-push-8{left:66.66667%}.wf-col-xs-push-9{left:75%}.wf-col-xs-push-10{left:83.33333%}.wf-col-xs-push-11{left:91.66667%}.wf-col-xs-push-12{left:100%}.wf-col-xs-offset-0{margin-left:0%}.wf-col-xs-offset-1{margin-left:8.33333%}.wf-col-xs-offset-2{margin-left:16.66667%}.wf-col-xs-offset-3{margin-left:25%}.wf-col-xs-offset-4{margin-left:33.33333%}.wf-col-xs-offset-5{margin-left:41.66667%}.wf-col-xs-offset-6{margin-left:50%}.wf-col-xs-offset-7{margin-left:58.33333%}.wf-col-xs-offset-8{margin-left:66.66667%}.wf-col-xs-offset-9{margin-left:75%}.wf-col-xs-offset-10{margin-left:83.33333%}.wf-col-xs-offset-11{margin-left:91.66667%}.wf-col-xs-offset-12{margin-left:100%}.wf-col-xs-half-padding-left{padding-left:8px}.wf-col-xs-half-padding-right{padding-right:7px}@media (min-width: 768px){.wf-col-sm-1,.wf-col-sm-2,.wf-col-sm-3,.wf-col-sm-4,.wf-col-sm-5,.wf-col-sm-6,.wf-col-sm-7,.wf-col-sm-8,.wf-col-sm-9,.wf-col-sm-10,.wf-col-sm-11,.wf-col-sm-12{float:left}.wf-col-sm-1{width:8.33333%}.wf-col-sm-2{width:16.66667%}.wf-col-sm-3{width:25%}.wf-col-sm-4{width:33.33333%}.wf-col-sm-5{width:41.66667%}.wf-col-sm-6{width:50%}.wf-col-sm-7{width:58.33333%}.wf-col-sm-8{width:66.66667%}.wf-col-sm-9{width:75%}.wf-col-sm-10{width:83.33333%}.wf-col-sm-11{width:91.66667%}.wf-col-sm-12{width:100%}.wf-col-sm-pull-0{right:auto}.wf-col-sm-pull-1{right:8.33333%}.wf-col-sm-pull-2{right:16.66667%}.wf-col-sm-pull-3{right:25%}.wf-col-sm-pull-4{right:33.33333%}.wf-col-sm-pull-5{right:41.66667%}.wf-col-sm-pull-6{right:50%}.wf-col-sm-pull-7{right:58.33333%}.wf-col-sm-pull-8{right:66.66667%}.wf-col-sm-pull-9{right:75%}.wf-col-sm-pull-10{right:83.33333%}.wf-col-sm-pull-11{right:91.66667%}.wf-col-sm-pull-12{right:100%}.wf-col-sm-push-0{left:auto}.wf-col-sm-push-1{left:8.33333%}.wf-col-sm-push-2{left:16.66667%}.wf-col-sm-push-3{left:25%}.wf-col-sm-push-4{left:33.33333%}.wf-col-sm-push-5{left:41.66667%}.wf-col-sm-push-6{left:50%}.wf-col-sm-push-7{left:58.33333%}.wf-col-sm-push-8{left:66.66667%}.wf-col-sm-push-9{left:75%}.wf-col-sm-push-10{left:83.33333%}.wf-col-sm-push-11{left:91.66667%}.wf-col-sm-push-12{left:100%}.wf-col-sm-offset-0{margin-left:0%}.wf-col-sm-offset-1{margin-left:8.33333%}.wf-col-sm-offset-2{margin-left:16.66667%}.wf-col-sm-offset-3{margin-left:25%}.wf-col-sm-offset-4{margin-left:33.33333%}.wf-col-sm-offset-5{margin-left:41.66667%}.wf-col-sm-offset-6{margin-left:50%}.wf-col-sm-offset-7{margin-left:58.33333%}.wf-col-sm-offset-8{margin-left:66.66667%}.wf-col-sm-offset-9{margin-left:75%}.wf-col-sm-offset-10{margin-left:83.33333%}.wf-col-sm-offset-11{margin-left:91.66667%}.wf-col-sm-offset-12{margin-left:100%}.wf-col-sm-half-padding-left{padding-left:8px}.wf-col-sm-half-padding-right{padding-right:7px}}@media (min-width: 992px){.wf-col-md-1,.wf-col-md-2,.wf-col-md-3,.wf-col-md-4,.wf-col-md-5,.wf-col-md-6,.wf-col-md-7,.wf-col-md-8,.wf-col-md-9,.wf-col-md-10,.wf-col-md-11,.wf-col-md-12{float:left}.wf-col-md-1{width:8.33333%}.wf-col-md-2{width:16.66667%}.wf-col-md-3{width:25%}.wf-col-md-4{width:33.33333%}.wf-col-md-5{width:41.66667%}.wf-col-md-6{width:50%}.wf-col-md-7{width:58.33333%}.wf-col-md-8{width:66.66667%}.wf-col-md-9{width:75%}.wf-col-md-10{width:83.33333%}.wf-col-md-11{width:91.66667%}.wf-col-md-12{width:100%}.wf-col-md-pull-0{right:auto}.wf-col-md-pull-1{right:8.33333%}.wf-col-md-pull-2{right:16.66667%}.wf-col-md-pull-3{right:25%}.wf-col-md-pull-4{right:33.33333%}.wf-col-md-pull-5{right:41.66667%}.wf-col-md-pull-6{right:50%}.wf-col-md-pull-7{right:58.33333%}.wf-col-md-pull-8{right:66.66667%}.wf-col-md-pull-9{right:75%}.wf-col-md-pull-10{right:83.33333%}.wf-col-md-pull-11{right:91.66667%}.wf-col-md-pull-12{right:100%}.wf-col-md-push-0{left:auto}.wf-col-md-push-1{left:8.33333%}.wf-col-md-push-2{left:16.66667%}.wf-col-md-push-3{left:25%}.wf-col-md-push-4{left:33.33333%}.wf-col-md-push-5{left:41.66667%}.wf-col-md-push-6{left:50%}.wf-col-md-push-7{left:58.33333%}.wf-col-md-push-8{left:66.66667%}.wf-col-md-push-9{left:75%}.wf-col-md-push-10{left:83.33333%}.wf-col-md-push-11{left:91.66667%}.wf-col-md-push-12{left:100%}.wf-col-md-offset-0{margin-left:0%}.wf-col-md-offset-1{margin-left:8.33333%}.wf-col-md-offset-2{margin-left:16.66667%}.wf-col-md-offset-3{margin-left:25%}.wf-col-md-offset-4{margin-left:33.33333%}.wf-col-md-offset-5{margin-left:41.66667%}.wf-col-md-offset-6{margin-left:50%}.wf-col-md-offset-7{margin-left:58.33333%}.wf-col-md-offset-8{margin-left:66.66667%}.wf-col-md-offset-9{margin-left:75%}.wf-col-md-offset-10{margin-left:83.33333%}.wf-col-md-offset-11{margin-left:91.66667%}.wf-col-md-offset-12{margin-left:100%}.wf-col-md-half-padding-left{padding-left:8px}.wf-col-md-half-padding-right{padding-right:7px}}@media (min-width: 1200px){.wf-col-lg-1,.wf-col-lg-2,.wf-col-lg-3,.wf-col-lg-4,.wf-col-lg-5,.wf-col-lg-6,.wf-col-lg-7,.wf-col-lg-8,.wf-col-lg-9,.wf-col-lg-10,.wf-col-lg-11,.wf-col-lg-12{float:left}.wf-col-lg-1{width:8.33333%}.wf-col-lg-2{width:16.66667%}.wf-col-lg-3{width:25%}.wf-col-lg-4{width:33.33333%}.wf-col-lg-5{width:41.66667%}.wf-col-lg-6{width:50%}.wf-col-lg-7{width:58.33333%}.wf-col-lg-8{width:66.66667%}.wf-col-lg-9{width:75%}.wf-col-lg-10{width:83.33333%}.wf-col-lg-11{width:91.66667%}.wf-col-lg-12{width:100%}.wf-col-lg-pull-0{right:auto}.wf-col-lg-pull-1{right:8.33333%}.wf-col-lg-pull-2{right:16.66667%}.wf-col-lg-pull-3{right:25%}.wf-col-lg-pull-4{right:33.33333%}.wf-col-lg-pull-5{right:41.66667%}.wf-col-lg-pull-6{right:50%}.wf-col-lg-pull-7{right:58.33333%}.wf-col-lg-pull-8{right:66.66667%}.wf-col-lg-pull-9{right:75%}.wf-col-lg-pull-10{right:83.33333%}.wf-col-lg-pull-11{right:91.66667%}.wf-col-lg-pull-12{right:100%}.wf-col-lg-push-0{left:auto}.wf-col-lg-push-1{left:8.33333%}.wf-col-lg-push-2{left:16.66667%}.wf-col-lg-push-3{left:25%}.wf-col-lg-push-4{left:33.33333%}.wf-col-lg-push-5{left:41.66667%}.wf-col-lg-push-6{left:50%}.wf-col-lg-push-7{left:58.33333%}.wf-col-lg-push-8{left:66.66667%}.wf-col-lg-push-9{left:75%}.wf-col-lg-push-10{left:83.33333%}.wf-col-lg-push-11{left:91.66667%}.wf-col-lg-push-12{left:100%}.wf-col-lg-offset-0{margin-left:0%}.wf-col-lg-offset-1{margin-left:8.33333%}.wf-col-lg-offset-2{margin-left:16.66667%}.wf-col-lg-offset-3{margin-left:25%}.wf-col-lg-offset-4{margin-left:33.33333%}.wf-col-lg-offset-5{margin-left:41.66667%}.wf-col-lg-offset-6{margin-left:50%}.wf-col-lg-offset-7{margin-left:58.33333%}.wf-col-lg-offset-8{margin-left:66.66667%}.wf-col-lg-offset-9{margin-left:75%}.wf-col-lg-offset-10{margin-left:83.33333%}.wf-col-lg-offset-11{margin-left:91.66667%}.wf-col-lg-offset-12{margin-left:100%}.wf-col-lg-half-padding-left{padding-left:8px}.wf-col-lg-half-padding-right{padding-right:7px}}.wrap.wordfence{direction:ltr}@media (min-width: 768px){.wrap.wordfence{max-width:750px}}@media (min-width: 992px){.wrap.wordfence{max-width:970px}}@media (min-width: 1200px){.wrap.wordfence{max-width:1170px}}.wrap.wordfence>.wf-container-fluid{padding-left:0px;padding-right:0px}.wrap.wordfence .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709e}.wrap.wordfence a{text-decoration:none}.wrap.wordfence a:hover{text-decoration:underline}.wrap.wordfence a.wf-btn:hover{text-decoration:none}.wrap.wordfence p,.wrap.wordfence td,.wrap.wordfence li{font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.875rem;color:#2d2d2d;line-height:1.3125;font-weight:normal}.wrap.wordfence p strong,.wrap.wordfence td strong,.wrap.wordfence li strong{font-weight:600}.wrap.wordfence p em,.wrap.wordfence td em,.wrap.wordfence li em{font-weight:normal}.wrap.wordfence h1,.wrap.wordfence h2,.wrap.wordfence h3,.wrap.wordfence h4,.wrap.wordfence h5,.wrap.wordfence h6{font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;color:#2d2d2d;font-weight:700}.wrap.wordfence h2{font-size:1.3125rem;line-height:1.5}.wrap.wordfence h3{font-size:1.125rem}.wrap.wordfence h4{font-size:1rem}a{color:#00709e}.wf-inline-help{color:#9f9fa0}.wf-inline-help:hover{color:#00709e}.wordfenceWrap{margin:20px 0 0 20px}.wordfence-icon32{width:32px;height:32px;background-position:0 0;background-repeat:no-repeat;padding:0;margin:7px 5px 0 0;float:left}#wfHeading:after{content:'.';visibility:hidden;display:block;clear:both;height:0px}.wordfence-lock-icon{width:32px;height:32px;background-image:url(../images/wordfence-logo.svg)}a.wfhelp{margin:0 3px 0 3px;text-decoration:none;display:inline-block;vertical-align:middle;font:normal normal normal 14px/1 FontAwesome;text-rendering:auto;-webkit-font-smoothing:antialiased}a.wfhelp:before{content:'\f29c'}.wordfence .resulticon{display:block;float:left;width:16px;height:16px;background-position:0 0;background-repeat:no-repeat;border-width:0;padding:0;margin:0 3px 0 0;background-image:url(../images/icons/bullet_yellow.png)}.wordfenceBoldTD{font-weight:bold}.wfAjax24{display:none;width:24px;height:24px;background-image:url(../images/icons/ajax24.gif);margin:0;padding:0}div.wfLoadingWhite32{width:32px;height:32px;background-image:url(../images/icons/ajaxWhite32x32.gif);margin:0;padding:0}.wfTabsContainer{background-color:#FFF;overflow:hidden;border:1px solid #CCC;padding:15px;min-height:200px;-webkit-font-smoothing:antialiased}#wfTabs::after{content:".";display:block;height:0;width:0;line-height:0;clear:both;visibility:hidden}#wfTabs a{float:left;z-index:10;height:18px;margin:0 5px -1px 0;padding:5px 8px;border:1px solid #CCC;text-decoration:none;background-color:#EFEFEF;color:#21759B;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px}#wfTabs a.selected{border-bottom:1px solid #FFF;background-color:#FFF;color:#777}.wordfenceTopTab{display:none;margin-top:15px}.wordfenceTopTab.active{display:block}.wordfenceHelpLink{margin-top:15px}.wfAjaxLight128{background-image:url(../images/icons/ajax3.gif)}.wfStrong{font-weight:bold}.wordfenceModeElem{width:1px;height:1px;opacity:0}.wfWarn{color:#F00}.wf-flag{display:inline-block;vertical-align:middle;margin:0px 2px 0 0;background-repeat:no-repeat;background-position:center center;width:16px;height:11px;background-image:url(../images/flags.png);-webkit-flex-shrink:0;flex-shrink:0;-webkit-flex-grow:0;flex-grow:0}.wfHitTime{font-style:italic}.wfAvatar img{vertical-align:middle;margin-right:0.5rem}.wf-hex-sequence{color:#587ECB}.wfLoadMoreButton.disabled,.wfLoadMoreButton[disabled]{pointer-events:none;opacity:0.65}table.wfConfigForm th{font-weight:normal;text-align:left;padding:2px 3px 1px 0;vertical-align:middle}table.wfConfigForm td{vertical-align:middle}table.wfConfigForm td.align-top{vertical-align:top}table th.wfConfigEnable{font-weight:bold;min-width:25%}.wfSavedMsg{display:none;color:#A00}table th.wfSubheading{font-weight:bold;padding-top:10px}h3.wfConfigHeading{font-size:22px;color:#777;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:italic;font-weight:normal}.wfTipText{color:#777;font-family:Georgia,Times New Roman,Times,serif;font-style:italic}.wfBlackCursor{color:#FFF}.wf-spinner{display:inline-block;width:4px}.wferror{color:#F00}#wordfenceWorking{padding:10px 40px 6px 16px;z-index:100000;position:fixed;right:16px;bottom:0px;background-color:#fcb214;border:5px solid #fcb214;border-width:6px 15px 6px 6px;color:#525355;font-size:12px;font-weight:bold;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;background-image:url("../images/icons/working-indicator.gif");background-position:100% 50%;background-repeat:no-repeat}@media (max-width: 960px){#wordfenceWorking{left:auto;right:0px}}#paidWrap{position:relative}.paidInnerMsg{width:500px;margin:150px auto 0 auto;color:#000;font-size:18px;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:1.8em;text-align:center;-webkit-font-smoothing:antialiased}.wfMarker{height:1px;width:1px}.wfPaidOnlyNotice{width:500px;background-color:#FFFFE0;border:1px solid #000;padding:10px;margin:20px}.wfOnOffSwitch{display:inline-block;position:relative !important;width:69px !important;-webkit-user-select:none !important;-moz-user-select:none !important;-ms-user-select:none !important;user-select:none !important}.wfOnOffSwitch-checkbox{display:none !important}.wfOnOffSwitch-label{display:block !important;overflow:hidden !important;cursor:pointer !important;border:2px solid #999999 !important;border-radius:19px !important;margin:0}.wfOnOffSwitch-inner{width:200% !important;margin-left:-100% !important;-webkit-transition:margin 0.3s ease-in !important;-o-transition:margin 0.3s ease-in !important;transition:margin 0.3s ease-in !important;-webkit-transition-delay:0s !important;transition-delay:0s !important}.wfOnOffSwitch-inner:before,.wfOnOffSwitch-inner:after{float:left !important;width:50% !important;height:19px !important;padding:0 !important;line-height:19px !important;font-size:14px !important;color:white !important;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif !important;font-weight:bold !important;-webkit-box-sizing:border-box !important;-moz-box-sizing:border-box !important;box-sizing:border-box !important;-moz-border-radius:19px !important;-webkit-border-radius:19px;border-radius:19px !important;-webkit-box-shadow:0 9.5px 0 rgba(0,0,0,0.08) inset !important;box-shadow:0 9.5px 0 rgba(0,0,0,0.08) inset !important}.wfOnOffSwitch-inner:before{content:"ON" !important;padding-left:10px !important;background-color:#30D965 !important;color:#FFFFFF !important;-moz-border-radius:19px 0 0 19px !important;-webkit-border-radius:19px;border-radius:19px 0 0 19px !important}.wfOnOffSwitch-inner:after{content:"OFF" !important;padding-right:10px !important;background-color:#EEEEEE !important;color:#999999 !important;text-align:right !important;-moz-border-radius:0 19px 19px 0 !important;-webkit-border-radius:0;border-radius:0 19px 19px 0 !important}.wfOnOffSwitch-switch{width:19px !important;margin:0 !important;background:#FFFFFF !important;border:2px solid #999999 !important;-moz-border-radius:19px !important;-webkit-border-radius:19px;border-radius:19px !important;position:absolute !important;top:0 !important;bottom:0 !important;right:46px !important;-webkit-transition:all 0.3s ease-in !important;-o-transition:all 0.3s ease-in !important;transition:all 0.3s ease-in !important;-webkit-transition-delay:0s !important;transition-delay:0s !important;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjEiLz48c3RvcCBvZmZzZXQ9IjgwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=') !important;background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(0,0,0,0.1)),color-stop(80%, rgba(0,0,0,0))) !important;background-image:-moz-linear-gradient(center top, rgba(0,0,0,0.1) 0%,rgba(0,0,0,0) 80%) !important;background-image:-webkit-linear-gradient(center top, rgba(0,0,0,0.1) 0%,rgba(0,0,0,0) 80%) !important;background-image:linear-gradient(to center bottom, rgba(0,0,0,0.1) 0%,rgba(0,0,0,0) 80%) !important;box-shadow:0 1px 1px white inset !important}.wfOnOffSwitch-checkbox:checked+.wfOnOffSwitch-label .wfOnOffSwitch-inner{margin-left:0 !important}.wfOnOffSwitch-checkbox:checked+.wfOnOffSwitch-label .wfOnOffSwitch-switch{right:0 !important}#wordfenceConfigWarning,#wordfenceAdminEmailWarning{clear:left;margin-top:5px}.wf-striped-table{width:100%;max-width:100%;border-collapse:collapse}.wf-striped-table th{border-left:1px solid #bdbdbd}.wf-striped-table th:first-of-type{border-left:0}.wf-striped-table th,.wf-striped-table td{padding:1rem}.wf-striped-table thead th,.wf-striped-table thead td,.wf-striped-table tfoot th,.wf-striped-table tfoot td,.wf-striped-table tbody.thead th,.wf-striped-table tbody.thead td{background-color:#ebebeb;color:#777;font-weight:bold;text-align:left}.wf-striped-table tbody tr.even td,.wf-striped-table tbody tr:nth-child(2n) td{background-color:#ffffff}.wf-striped-table tbody tr td,.wf-striped-table tbody tr.odd td{background-color:#fafafa}.wf-striped-table tbody tr:hover>td{background-color:#fffbd8}.wf-striped-table tbody.empty-row tr td{border-width:0;padding:8px 0;background-color:transparent}.wf-striped-table .wf-result-error,.wf-block-list .wf-result-error{color:#d0514c !important;font-weight:bold}.wf-striped-table .wf-result-error:before,.wf-block-list .wf-result-error:before{content:"\2718"}.wf-striped-table .wf-result-success{max-width:20%}.wf-striped-table .wf-result-success,.wf-block-list .wf-result-success{color:#008c10 !important;font-weight:bold}.wf-striped-table .wf-result-success:before,.wf-block-list .wf-result-success:before{content:"\2713"}.wf-striped-table .wf-result-success:before,.wf-block-list .wf-result-success:before,.wf-striped-table .wf-result-error:before,.wf-block-list .wf-result-error:before{font-size:16px;display:inline-block;margin:0px 8px 0px 0px}.wf-striped-table .wf-result-inactive,.wf-block-list .wf-result-inactive{font-weight:bold;color:#666666 !important}.wf-fixed-table{table-layout:fixed}pre.wf-pre{margin:8px 0 20px;padding:12px;background:#ffffff;border:1px solid #999999;overflow:auto}.wf-center{text-align:center}#wfConfigForm,.wf-diagnostics-wrapper{max-width:1035px}.wf-hidden{display:none !important}.wf-card{position:relative;margin:0 auto .625rem;padding:1rem;box-sizing:border-box;background:#fff;box-shadow:0 0 0 1px rgba(200,215,225,0.5),0 1px 2px #e9eff3}.wf-card .wf-card-inner{min-height:76px;width:100%;padding:8px;box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;position:relative}.wf-card .wf-card-inner .wf-card-content{max-width:75%}.wf-card .wf-card-inner .wf-card-content .wf-card-title{font-size:1.125rem;width:100%}.wf-card .wf-card-inner .wf-card-content .wf-card-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:.875rem;color:#4f748e}.wf-card .wf-card-inner .wf-card-action{position:absolute;top:0;right:0;height:100%;background:none;border:0;outline:0;width:48px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;vertical-align:middle;transition:transform 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275),color 0.2s ease-in}.wf-card .wf-card-inner .wf-card-action .wf-card-action-chevron{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJjaGV2cm9uLW9iamVjdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBhdGggaWQ9ImNoZXZyb24iIGQ9Ik0yMCA5bC04IDgtOC04IDEuNDE0LTEuNDE0TDEyIDE0LjE3Mmw2LjU4Ni02LjU4NiIvPgo8L3N2Zz4K");background-repeat:no-repeat;background-position:center center;width:24px;height:24px;fill:#87a6bc}.wf-card .wf-card-inner .wf-card-action .wf-card-action-checkbox{background-image:url(../images/checkbox.png);background-repeat:no-repeat;background-position:left center;width:29px;height:29px}.wf-card .wf-card-inner .wf-card-action .wf-card-action-checkbox.checked{background-position:right center}.wf-card .wf-card-extra{display:none;padding:0.5rem;margin-top:1rem;border-top:1px solid #f3f6f8}@media (min-width: 768px){.wf-card .wf-card-extra{padding:1rem}}.wf-card.active .wf-card-extra{display:block}.wf-card.wf-card-left .wf-card-content{margin-left:48px}.wf-card.wf-card-left .wf-card-action{right:auto;left:0px}.wf-card.disabled .wf-card-content .wf-card-title{color:#aaaaaa}.wf-card.disabled .wf-card-content .wf-card-subtitle{color:#8ea6be}.wf-inline-block{display:inline-block}@media (max-width: 767px){.wf-inline-block-xs{display:inline-block}}.wf-full-width{width:100%;max-width:100%}.wf-no-top{margin-top:0 !important}.wf-add-top{margin-top:1rem !important}.wf-add-top-large{margin-top:1.5rem !important}.wf-add-top-medium{margin-top:0.75rem !important}.wf-add-top-small{margin-top:0.5rem !important}.wf-add-top-smaller{margin-top:0.25rem !important}.wf-no-bottom{margin-bottom:0 !important}.wf-add-bottom{margin-bottom:1rem !important}.wf-add-bottom-large{margin-bottom:1.5rem !important}.wf-add-bottom-medium{margin-bottom:0.75rem !important}.wf-add-bottom-small{margin-bottom:0.5rem !important}.wf-add-bottom-smaller{margin-bottom:0.25rem !important}.wf-padding-no-top{padding-top:0 !important}.wf-no-right{margin-right:0 !important}.wf-padding-no-bottom{padding-bottom:0 !important}.wf-padding-no-left{padding-left:0 !important}.wf-padding-no-right{padding-right:0 !important}.wf-padding-add-top{padding-top:1rem !important}.wf-padding-add-top-small{padding-top:0.5rem !important}.wf-padding-add-top-medium{padding-top:0.75rem !important}.wf-padding-add-top-large{padding-top:1.5rem !important}.wf-padding-add-bottom{padding-bottom:1rem !important}.wf-padding-add-bottom-small{padding-bottom:0.5rem !important}.wf-padding-add-bottom-medium{padding-bottom:0.75rem !important}.wf-padding-add-bottom-large{padding-bottom:1.5rem !important}.wf-padding-add-left{padding-left:1rem !important}.wf-padding-add-left-small{padding-left:0.5rem !important}.wf-padding-add-left-medium{padding-left:0.75rem !important}.wf-padding-add-left-large{padding-left:1.5rem !important}.wf-padding-add-right{padding-right:1rem !important}.wf-padding-add-right-small{padding-right:0.5rem !important}.wf-padding-add-right-medium{padding-right:0.75rem !important}.wf-padding-add-right-large{padding-right:1.5rem !important}.wf-left{text-align:left !important}.wf-center{text-align:center !important}.wf-block-center{margin:0 auto}.wf-right{text-align:right !important}.wf-block-right{margin:0 0 0 auto}@media (max-width: 767px){.wf-left-xs{text-align:left !important}.wf-center-xs{text-align:center !important}.wf-padding-add-top-xs{padding-top:1rem !important}.wf-padding-add-top-xs-small{padding-top:0.5rem !important}.wf-padding-add-top-xs-large{padding-top:1.5rem !important}.wf-padding-add-bottom-xs{padding-bottom:1rem !important}.wf-padding-add-bottom-xs-small{padding-bottom:0.5rem !important}.wf-padding-add-bottom-xs-large{padding-bottom:1.5rem !important}}@media (min-width: 768px) and (max-width: 991px){.wf-left-sm{text-align:left !important}.wf-center-sm{text-align:center !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-left-md{text-align:left !important}.wf-center-md{text-align:center !important}.wf-right-md{text-align:right !important}}@media (min-width: 1200px){.wf-left-lg{text-align:left !important}.wf-center-lg{text-align:center !important}.wf-right-lg{text-align:right !important}}.wf-border-no-top{border-top:none !important}.wf-border-no-right{border-right:none !important}.wf-border-no-bottom{border-bottom:none !important}.wf-border-no-left{border-left:none !important}.wf-overflow-x-auto{overflow-x:auto}.wf-overflow-y-auto{overflow-y:auto}@media (max-width: 767px){.wf-overflow-x-auto-xs{overflow-x:auto}.wf-overflow-y-auto-xs{overflow-y:auto}}.wf-blue{color:#00709e !important}.wf-blue-light{color:#008cc1 !important}.wf-gray-dark{color:#2d2d2d !important}.wf-gray-blue{color:#3f596b !important}.wf-green-dark{color:#11967a !important}.wf-green-light{color:#16bc9b !important}.wf-red-dark{color:#930000 !important}.wf-red-light{color:#c10000 !important}.wf-yellow-dark{color:#fcb214 !important}.wf-yellow-light{color:#ffd10a !important}.wf-gray{color:#525355 !important}.wf-gray-light{color:#9f9fa0 !important}.wf-nowrap{white-space:nowrap}.wf-tip{color:#fcb214;font-size:1.1rem;margin-right:0.25rem}.wf-text-small{font-size:80%}.wf-scroll-x::-webkit-scrollbar,.wf-scroll-y::-webkit-scrollbar{-webkit-appearance:none;width:7px;height:7px}.wf-scroll-x::-webkit-scrollbar-thumb,.wf-scroll-y::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgba(0,0,0,0.194);-webkit-box-shadow:0 0 1px rgba(255,255,255,0.5)}.wf-split-word{word-wrap:break-word;word-break:break-all}@media (max-width: 767px){.wf-split-word-xs{word-wrap:break-word;word-break:break-all;white-space:normal !important}}.wfselect2-container{font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;min-width:200px}@media (min-width: 768px){.wfselect2-container{min-width:280px}}@media (min-width: 992px){.wfselect2-container{min-width:320px}}@media (max-width: 767px){.wfselect2-container .wfselect2-search.wfselect2-search--inline{margin:0 !important}}.wf-select2-placeholder-fix .wfselect2-search__field{width:auto !important}#wf-all-options-search .wfselect2-container{min-width:250px}#wf-all-options-search .wf-select2-placeholder-fix .wfselect2-search__field{margin-top:10px !important}.wf-page-title{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;margin-top:0.5rem}.wf-page-title>*{-webkit-flex-grow:0;flex-grow:0;min-width:0}.wf-page-title>*:first-child{-webkit-flex-grow:0;flex-grow:0;min-width:32px;-webkit-flex-basis:32px;flex-basis:32px;padding-right:0.25rem}.wf-page-title .wordfence-icon32{margin:0;margin-right:0.5rem}.wf-page-title h2{padding:0 !important}.wf-page-title .wfOnOffSwitch{-webkit-flex-basis:69px;flex-basis:69px;-webkit-flex-shrink:0;flex-shrink:0;margin-left:0.5rem}.wf-tab-container{background-color:#fff}@media (min-width: 768px){.wf-tab-container{background-color:unset}}.wf-page-tabs,.wf-page-fixed-tabs{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;border-bottom:1px solid #d0d0d0;margin:0;margin-top:0.5rem;margin-left:-10px;margin-right:-10px}@media (min-width: 768px){.wf-page-tabs,.wf-page-fixed-tabs{margin-left:0;margin-right:0}}.wf-page-tabs>*,.wf-page-fixed-tabs>*{-webkit-flex-grow:0;flex-grow:0;min-width:0}.wf-page-tabs>*:first-child,.wf-page-fixed-tabs>*:first-child{-webkit-flex-grow:0;flex-grow:0;min-width:32px;-webkit-flex-basis:32px;flex-basis:32px}.wf-page-tabs .wordfence-icon32,.wf-page-fixed-tabs .wordfence-icon32{margin:0;margin-right:0.5rem;margin-left:0.5rem}@media (min-width: 768px){.wf-page-tabs .wordfence-icon32,.wf-page-fixed-tabs .wordfence-icon32{margin-left:0}}.wf-page-tabs .wf-text-tab,.wf-page-fixed-tabs .wf-text-tab{margin:0;margin-left:0.5rem;color:#333}.wf-page-tabs .wf-tab,.wf-page-fixed-tabs .wf-tab{border:1px solid #fff;border-top-right-radius:0.5rem;border-top-left-radius:0.5rem;border-bottom:none;margin-bottom:-1px;margin-right:0.5rem;color:#333}@media (min-width: 768px){.wf-page-tabs .wf-tab,.wf-page-fixed-tabs .wf-tab{border:1px solid #d0d0d0;background:#e6e6e6}}.wf-page-tabs .wf-tab a,.wf-page-fixed-tabs .wf-tab a{display:block;padding:0.5rem 1rem;font-size:14px;line-height:24px;text-decoration:none;font-weight:bold;color:#333}.wf-page-tabs .wf-tab.wf-active,.wf-page-tabs .wf-tab:hover,.wf-page-fixed-tabs .wf-tab.wf-active,.wf-page-fixed-tabs .wf-tab:hover{border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#00709e;-webkit-box-shadow:none;box-shadow:none}.wf-page-tabs .wf-tab.wf-active a,.wf-page-tabs .wf-tab:hover a,.wf-page-fixed-tabs .wf-tab.wf-active a,.wf-page-fixed-tabs .wf-tab:hover a{color:#00709e}.wf-tab-content{display:none;margin-top:15px}.wf-tab-content.wf-active{display:block}.wf-fixed-tab-content{margin-top:15px}.wf-section-title{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start}.wf-section-title>*{-webkit-flex-grow:0;flex-grow:0;min-width:0}.wf-section-title>h1,.wf-section-title>h2,.wf-section-title>h3,.wf-section-title>h4,.wf-section-title>h5,.wf-section-title>h6{-webkit-flex-grow:1;flex-grow:1;color:#2d2d2d !important;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif !important;line-height:1.5rem !important;font-weight:700 !important;padding:0 !important;margin:0 !important}@media (min-width: 768px){.wf-section-title>h1,.wf-section-title>h2,.wf-section-title>h3,.wf-section-title>h4,.wf-section-title>h5,.wf-section-title>h6{padding-right:0.25rem !important}}.wf-section-title h2{font-size:1.3125rem;line-height:1.5}.wf-section-title h3{font-size:1.125rem}.wf-section-title h4{font-size:1rem}.wf-section-title .wordfence-icon32{margin:0;margin-right:0.5rem}.wf-status-circular{position:relative}.wf-status-circular-text{position:absolute;left:50%;top:50%;padding:0;margin:0;transform:translate(-50%, -50%);color:#aaa;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:1.3125rem;font-weight:300;line-height:1.5}.wf-status-circular .wf-status-overlay-text{position:absolute;left:50%;top:50%;padding:0;margin:0;width:200%;text-align:center;transform:translate(-50%, -50%);font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.875rem;font-weight:normal;line-height:1.3125;opacity:0.0;color:#777}.wf-status-warning,.wf-status-critical,.wf-status-payment-expiring,.wf-status-renewing{width:100px;height:100px;margin-bottom:1rem}.wf-status-warning svg path{fill:#fcb214}.wf-status-critical svg path{fill:#930000}.wf-status-payment-expiring svg rect,.wf-status-payment-expiring svg path{fill:#930000}.wf-status-renewing svg rect,.wf-status-renewing svg path{fill:#11967a}#howGetIPs-preview{color:#8c8c8c}#howGetIPs-preview strong{color:#666}.wf-scrollTop{background:#424242;bottom:30px;right:15px;position:fixed;z-index:999;display:none}.wf-scrollTop a{background:#959595;display:block;padding:4px 5px;line-height:32px;width:32px;color:#ffffff;text-align:center}.wf-back-icon{color:#00709e;margin-right:0.75rem;font-size:1.5rem !important}.wf-back-link-chevron{margin-left:1rem}.wf-back-link-chevron:first-of-type{margin-left:0}.wf-back-link{font-weight:bold;text-decoration:none}.wf-premium-link{font-weight:bold}.wf-boolean-switch{border:1px solid #aaa;display:block;cursor:pointer;width:54px;height:30px;min-width:54px;min-height:30px;-moz-border-radius:15px;-webkit-border-radius:15px;border-radius:15px;line-height:30px !important;background-color:#ffffff;position:relative;box-sizing:border-box;transition:background-color 0.2s ease-in-out, border-color 0.2s ease-in-out}@media (min-width: 768px){.wf-boolean-switch{width:34px;height:20px;min-width:34px;min-height:20px;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;line-height:20px !important}}.wf-boolean-switch .wf-boolean-switch-handle{position:relative;display:block;border:1px solid #aaa;background-color:#fff;width:30px;height:30px;min-width:30px;min-height:30px;-moz-border-radius:15px;-webkit-border-radius:15px;border-radius:15px;margin-top:-1px;box-sizing:border-box;left:-1px;transition:border-color 0.2s ease-in-out, left 0.2s ease-in-out}@media (min-width: 768px){.wf-boolean-switch .wf-boolean-switch-handle{width:20px;height:20px;min-width:20px;min-height:20px;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px}}.wf-boolean-switch.wf-active{border:1px solid #00709e;background-color:#00709e}.wf-boolean-switch.wf-active .wf-boolean-switch-handle{border:1px solid #00709e;left:25px}@media (min-width: 768px){.wf-boolean-switch.wf-active .wf-boolean-switch-handle{left:15px}}.wf-boolean-switch.wf-disabled{pointer-events:none;border-color:#e2e2e2}.wf-boolean-switch.wf-disabled .wf-boolean-switch-handle{border-color:#e2e2e2}.wf-boolean-switch.wf-disabled.wf-active{border-color:#e2e2e2;background-color:#e2e2e2}.wf-boolean-switch.wf-disabled.wf-active .wf-boolean-switch-handle{border-color:#e2e2e2}.wf-option-checkbox,[type=checkbox].wf-option-checkbox+label:before{content:'\f3fd';font-family:"Ionicons" !important;display:block;cursor:pointer;width:30px;height:30px;min-width:30px;min-height:30px;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;line-height:30px !important;text-align:center !important;background-color:#ffffff !important;box-shadow:0px 0px 0px 1px #aaa;color:#ffffff !important;font-size:30px !important;font-weight:normal !important}@media (min-width: 768px){.wf-option-checkbox,[type=checkbox].wf-option-checkbox+label:before{width:20px;height:20px;min-width:20px;min-height:20px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;line-height:21px !important;font-size:25px !important}}@media (min-width: 768px){.wf-option-checkbox{position:relative}.wf-option-checkbox>*{position:absolute;top:9px;left:50%;transform:translateX(-50%) translateY(-50%)}}.wf-option-radio,[type=radio].wf-option-radio+label:before{content:"\f401";font-family:"Ionicons" !important;display:block;cursor:pointer;width:30px;height:30px;min-width:30px;min-height:30px;line-height:30px !important;text-align:center !important;color:#ccc !important;font-size:30px !important;font-weight:normal !important}@media (min-width: 768px){.wf-option-radio,[type=radio].wf-option-radio+label:before{width:20px;height:20px;min-width:20px;min-height:20px;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;line-height:20px !important}}[type=checkbox].wf-option-checkbox.wf-small+label:before{width:20px;height:20px;min-width:20px;min-height:20px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;line-height:21px !important;font-size:20px !important}[type=radio].wf-option-radio.wf-small+label:before{width:20px;height:20px;min-width:20px;min-height:20px;line-height:21px !important;font-size:20px !important}[type=checkbox].wf-option-checkbox+label:before,[type=radio].wf-option-radio+label:before{text-align:center !important;text-indent:0px;display:inline-block;vertical-align:-6px;margin:0px 5px 0px 0px;font-weight:normal;font-style:normal}[type=checkbox].wf-option-checkbox.wf-small+label:before,[type=radio].wf-option-radio.wf-small+label:before{text-indent:0px;vertical-align:-3px}.wf-option-checkbox.wf-checked,[type=checkbox].wf-option-checkbox:checked+label:before{color:#ffffff !important;box-shadow:0px 0px 0px 1px #00709e !important;background-color:#00709e !important}.wf-option-checkbox.wf-disabled,[type=checkbox].wf-option-checkbox:disabled+label:before{color:#f1f1f1 !important;box-shadow:0px 0px 0px 1px #e2e2e2 !important;background-color:#f1f1f1 !important}.wf-option-checkbox.wf-checked.wf-disabled,[type=checkbox].wf-option-checkbox:disabled:checked+label:before{color:#777 !important;box-shadow:0px 0px 0px 1px #e2e2e2 !important;background-color:#f1f1f1 !important}.wf-option-radio.wf-checked,[type=radio].wf-option-radio:checked+label:before{content:"\f3a7";color:#00709e !important}.wf-option-checkbox[type=checkbox],.wf-option-checkbox[type=radio],.wf-option-radio[type=checkbox],.wf-option-radio[type=radio]{position:absolute;left:-9999px}.wf-option-text input[type="text"],input.wf-input-text{text-align:left;width:100%;height:40px;border-radius:0;border:0;background-color:#ffffff;box-shadow:1px 1px 1px 2px rgba(215,215,215,0.65)}.wf-option-text input[type="text"]:placeholder-shown,input.wf-input-text:placeholder-shown{font-style:italic;color:#bfbfbf}::-webkit-input-placeholder{color:#bfbfbf}:-moz-placeholder{color:#bfbfbf;opacity:1}::-moz-placeholder{color:#bfbfbf;opacity:1}:-ms-input-placeholder{color:#bfbfbf}::-ms-input-placeholder{color:#bfbfbf}::placeholder{color:#bfbfbf}.wf-option-premium .wf-option-title,.wf-option-premium .wf-option-title>ul>li,.wf-option.wf-disabled .wf-option-title,.wf-option.wf-disabled .wf-option-title>ul>li{color:#aaa !important}.wf-option-premium .wf-option-checkbox,.wf-option-premium .wf-option-radio,.wf-option.wf-disabled .wf-option-checkbox,.wf-option.wf-disabled .wf-option-radio{opacity:0.5}.wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-value{padding-top:0}.wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-value .wf-fa{font-size:8rem}.wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-value svg{width:160px}.wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-label{font-size:1.35rem;font-weight:300;padding-bottom:0}.wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status-premium .wf-block-labeled-value-value{color:#9f9fa0}.wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status-premium .wf-block-labeled-value-value svg{fill:#9f9fa0}.wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status-premium .wf-block-labeled-value-label{color:#9f9fa0}.wf-indeterminate-progress{-webkit-animation:wf-indeterminate-progress-keyframes 1s steps(8, end) infinite;-o-animation:wf-indeterminate-progress-keyframes 1s steps(8, end) infinite;animation:wf-indeterminate-progress-keyframes 1s steps(8, end) infinite}.wf-indeterminate-progress path{fill:#00709e}@-moz-keyframes wf-indeterminate-progress-keyframes{to{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes wf-indeterminate-progress-keyframes{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes wf-indeterminate-progress-keyframes{to{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.wf-flex-row{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row}.wf-flex-row.wf-flex-row-full-height{-webkit-align-items:stretch;align-items:stretch}.wf-flex-row.wf-flex-row-vertical-xs{-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.wf-flex-row.wf-flex-row-vertical-xs{-webkit-flex-direction:row;flex-direction:row}}.wf-flex-row .wf-flex-row-1{-webkit-flex-grow:1;flex-grow:1}.wf-flex-row .wf-flex-row-0{-webkit-flex-grow:0;flex-grow:0}.wf-flex-row .wf-flex-col-100,.wf-flex-row .wf-flex-col-xs-100{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-basis:100%;flex-basis:100%;width:100%}@media (min-width: 768px){.wf-flex-row .wf-flex-col-sm-100{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-basis:100%;flex-basis:100%;width:100%}}@media (min-width: 992px){.wf-flex-row .wf-flex-col-md-100{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-basis:100%;flex-basis:100%;width:100%}}@media (min-width: 1200px){.wf-flex-row .wf-flex-col-lg-100{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-basis:100%;flex-basis:100%;width:100%}}.wf-flex-row .wf-flex-col-50,.wf-flex-row .wf-flex-col-xs-50{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-basis:50%;flex-basis:50%;width:50%}@media (min-width: 768px){.wf-flex-row .wf-flex-col-sm-50{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-basis:50%;flex-basis:50%;width:50%}}@media (min-width: 992px){.wf-flex-row .wf-flex-col-md-50{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-basis:50%;flex-basis:50%;width:50%}}@media (min-width: 1200px){.wf-flex-row .wf-flex-col-lg-50{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-basis:50%;flex-basis:50%;width:50%}}.wf-switch{display:-webkit-flex !important;display:flex !important;-webkit-align-items:stretch !important;align-items:stretch !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important;-webkit-flex-direction:row !important;flex-direction:row !important;margin:0;padding:0}.wf-switch>li{margin:0 !important;padding:0.5rem 0.7rem !important;text-transform:uppercase;cursor:pointer;color:#aaa;font-weight:400;border-top:1px solid #bfbfbf;border-bottom:1px solid #bfbfbf;border-right:1px solid #bfbfbf}.wf-switch>li:first-of-type{border-left:1px solid #bfbfbf;-moz-border-radius-topleft:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px}.wf-switch>li:last-of-type{-moz-border-radius-topright:6px;-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-moz-border-radius-bottomright:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px}.wf-switch>li.wf-active{color:#ffffff;background-color:#00709e}.wf-tooltip,.ui-widget.wf-tooltip{max-width:600px;font-size:0.75rem;overflow-wrap:break-word;opacity:1.0;background-color:#ffffff}.wf-widget-learning-mode{border-top:1px solid #eee;margin:0 -1rem;padding:1rem;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;-webkit-flex-direction:row;flex-direction:row}@media (min-width: 768px){.wf-widget-learning-mode{padding:1.5rem}}.wf-widget-learning-mode svg{width:18px}.wf-widget-learning-mode svg path{fill:#aaa}.wf-widget-learning-mode span{padding-left:0.5rem;font-size:.875rem;line-height:1.3125;font-weight:600}.wf-drawer-overlay{position:fixed;top:0px;right:0px;bottom:0px;left:160px;background-color:rgba(0,0,0,0.5);z-index:9980;padding:5rem 0}.folded .wf-drawer-overlay{left:36px}@media only screen and (max-width: 960px){.auto-fold .wf-drawer-overlay{left:36px}}.rtl .wf-drawer-overlay{right:160px;left:0px}.rtl .folded .wf-drawer-overlay{right:36px}@media only screen and (max-width: 960px){.rtl .auto-fold .wf-drawer-overlay{right:36px}}@media screen and (max-width: 782px){.wf-drawer-overlay,.folded .wf-drawer-overlay,.auto-fold .wf-drawer-overlay,.rtl .wf-drawer-overlay,.rtl .folded .wf-drawer-overlay,.rtl .auto-fold .wf-drawer-overlay{left:0px;right:0px}}.wf-drawer{background-color:#ffffff;position:fixed;top:32px;bottom:0px;right:0px;z-index:9981}.wf-drawer .wf-modal{display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column;height:100%}.wf-drawer .wf-modal ul,.wf-drawer .wf-modal li{padding:0;margin:0}.wf-drawer .wf-modal .wf-modal-header{-webkit-flex-shrink:0;flex-shrink:0;min-height:44px;padding:1rem;width:100%;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;position:relative;background-color:#00709e;color:#ffffff}.wf-drawer .wf-modal .wf-modal-header .wf-modal-header-content{max-width:75%}.wf-drawer .wf-modal .wf-modal-header .wf-modal-header-content .wf-modal-title{font-size:1.3125rem;line-height:1.5;font-weight:300;width:100%;transition:color 0.2s ease-in}.wf-drawer .wf-modal .wf-modal-header .wf-modal-header-content .wf-modal-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:.575rem;color:#4f748e}.wf-drawer .wf-modal .wf-modal-content{-webkit-flex-grow:1;flex-grow:1;display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column;padding:1rem}.wf-drawer .wf-modal .wf-modal-content>*:first-child{margin-top:0}.wf-drawer .wf-modal .wf-modal-content select,.wf-drawer .wf-modal .wf-modal-content select option,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default{font-size:0.7rem;font-weight:bold}@media (min-width: 768px){.wf-drawer .wf-modal .wf-modal-content select,.wf-drawer .wf-modal .wf-modal-content select option,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default{font-size:0.8rem}}@media (min-width: 992px){.wf-drawer .wf-modal .wf-modal-content select,.wf-drawer .wf-modal .wf-modal-content select option,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default{font-size:0.9rem}}.wf-drawer .wf-modal .wf-modal-content .wf-option-select-option,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default .wfselect2-selection--single{text-align:left;height:40px;border-radius:0;border:0;background-color:#ffffff;box-shadow:1px 1px 1px 2px rgba(215,215,215,0.35)}.wf-drawer .wf-modal .wf-modal-content .wf-option-select-option .wfselect2-selection__rendered,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default .wfselect2-selection__rendered,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered{color:#333;line-height:40px}.wf-drawer .wf-modal .wf-modal-content .wf-option-select-option .wfselect2-selection__arrow,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default .wfselect2-selection__arrow,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow{height:38px}.wf-drawer .wf-modal .wf-modal-content .wf-option-select-option.wfselect2-container--disabled .wfselect2-selection__rendered,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default.wfselect2-container--disabled .wfselect2-selection__rendered,.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default .wfselect2-selection--single.wfselect2-container--disabled .wfselect2-selection__rendered{color:#aaa}.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:#333 transparent transparent}.wf-drawer .wf-modal .wf-modal-content .wfselect2-container--default.wfselect2-container--open .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:transparent transparent #333}.wf-drawer .wf-modal .wf-modal-footer{-webkit-flex-shrink:0;flex-shrink:0;min-height:44px;padding:1rem;width:100%;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;position:relative;background-color:#f1f1f1;border-top:1px solid #d9d9d9}.wf-mobile-menu-overlay{position:fixed;top:0px;right:0px;bottom:0px;left:0px;background-color:rgba(0,0,0,0.5);z-index:100000}.wf-mobile-menu-overlay>.wf-mobile-menu-tap-hint{position:absolute;top:25%;left:50%;transform:translateX(-50%);color:#ffffff;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:1.3125rem;font-weight:300;line-height:1.5}.wf-mobile-menu{position:fixed;left:50%;transform:translateX(-50%);z-index:100001}.wf-mobile-menu>.wf-mobile-menu-items{margin:0;padding:0 0 0.25rem 0;list-style:none}.wf-mobile-menu>.wf-mobile-menu-items>li{margin:0;padding:0.25rem 0}.wf-mobile-menu>.wf-mobile-menu-items>li>a{box-sizing:border-box}.wf-circle-tooltip.ui-tooltip{padding:0;font-size:0.7rem;max-width:400px;border:1px solid #9f9fa0;position:absolute !important;z-index:3000;opacity:1.0;-moz-border-radius:6px;-webkit-border-radius:6px;border-radius:6px}.wf-circle-tooltip.ui-tooltip h4{margin:0 0 10px}.wf-circle-tooltip.ui-tooltip ul{margin:10px 0}.wf-circle-tooltip.ui-tooltip p{font-size:0.7rem;margin:10px 0 0}.wf-circle-tooltip.ui-tooltip a{color:#00709e;text-decoration:none}.wf-circle-tooltip.ui-tooltip a:hover{text-decoration:underline}.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-header,.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-body{padding:12px}.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-header{-moz-border-radius:6px 6px 0px 0px;-webkit-border-radius:6px;border-radius:6px 6px 0px 0px;background-color:#f1f1f1}.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-header h4{margin:0;font-size:0.8rem}.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-body .wf-tooltip-status-circle{position:relative;padding:0 10px 0 0}.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-body .wf-tooltip-status-circle .wf-status-overlay-text{display:none}.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-body ul li strong{width:20%}.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-body ul li span{width:80%}.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-block{position:relative;background-color:#fff;z-index:3001;-moz-border-radius:6px;-webkit-border-radius:6px;border-radius:6px}.wf-circle-tooltip.ui-tooltip .wf-circle-tooltip-block:after{content:'';position:absolute;bottom:-20px;left:20px;width:0;height:0;border-left:20px solid transparent;border-right:20px solid transparent;border-top:20px solid #fff}.wf-circle-tooltip.ui-tooltip:after{content:'';position:absolute;bottom:-22px;left:18px;width:0;height:0;border-left:22px solid transparent;border-right:22px solid transparent;border-top:22px solid rgba(0,0,0,0.5);filter:blur(2px)}.wf-circle-tooltip.ui-tooltip.wf-tooltip-vertical-top:after{top:-22px;bottom:auto;border-left:22px solid transparent;border-right:22px solid transparent;border-bottom:22px solid rgba(0,0,0,0.5);border-top-width:0}.wf-circle-tooltip.ui-tooltip.wf-tooltip-vertical-top .wf-circle-tooltip-block:after{top:-20px;bottom:auto;border-left:20px solid transparent;border-right:20px solid transparent;border-bottom:20px solid #f1f1f1;border-top-width:0}.wf-circle-tooltip.ui-tooltip.wf-tooltip-vertical-top.wf-tooltip-horizontal-right:after{left:auto;right:18px}.wf-circle-tooltip.ui-tooltip.wf-tooltip-vertical-top.wf-tooltip-horizontal-right .wf-circle-tooltip-block:after{left:auto;right:20px}.wf-circle-tooltip.ui-tooltip.wf-tooltip-vertical-bottom.wf-tooltip-horizontal-right:after{left:auto;right:18px}.wf-circle-tooltip.ui-tooltip.wf-tooltip-vertical-bottom.wf-tooltip-horizontal-right .wf-circle-tooltip-block:after{left:auto;right:20px}#wf-mobile-controls{white-space:nowrap;font-size:1.2rem}.wf-callout-warning{background-color:#feecc4;padding:0.8rem 1.25rem}.wf-tip-light-bulb{color:#fcb214;font-size:1.5rem;font-weight:bold}.wf-tip-info-message{padding-left:0.5rem !important;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.875rem;color:#2d2d2d;line-height:1.3125;font-weight:normal}.wf-overdue-cron td{background-color:#fff4f4 !important}.wf-inline-notice{background:#ffffff;border:1px solid #ccd0d4;border-left-color:#ffb900;border-left-width:4px;box-shadow:0 1px 1px rgba(0,0,0,0.04);padding:8px 12px;display:flex;justify-content:flex-start;align-items:center}.wf-inline-notice>*{flex-grow:1}.wf-inline-notice:first-child{flex-grow:0;flex-shrink:0}.wf-inline-notice span{padding-left:0.5rem}.wf-block{position:relative;margin:0 auto 0.5rem;padding:0 1rem;box-sizing:border-box;background-color:#fff;box-shadow:0 0 0 1px rgba(200,215,225,0.25),0 1px 2px #e9eff3}@media (min-width: 768px){.wf-block{padding:0 1.5rem}}.wf-block.wf-block-no-padding{padding:0}.wf-block.wf-block-transparent{background-color:transparent;box-shadow:none}.wf-block .wf-block-banner{min-height:44px;margin:0 -1rem;padding:0;box-sizing:border-box;position:relative;background-color:#fcb214;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:row;flex-direction:row}.wf-block .wf-block-banner>li{margin:0;padding:0.75rem 1rem}@media (min-width: 768px){.wf-block .wf-block-banner{margin:0 -1.5rem}.wf-block .wf-block-banner>li{padding:0.75rem 1.5rem}}.wf-block .wf-block-header{min-height:44px;padding:1rem 0;width:100%;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;position:relative}.wf-block .wf-block-header .wf-block-header-content{max-width:75%}.wf-block .wf-block-header .wf-block-header-content .wf-block-title{font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.9rem;width:100%;transition:color 0.2s ease-in}.wf-block .wf-block-header .wf-block-header-content .wf-block-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:0.775rem}.wf-block .wf-block-header .wf-block-header-action{position:absolute;top:0;right:0;height:100%;background:none;border:0;outline:0;width:48px;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-end;justify-content:flex-end;vertical-align:middle;transition:transform 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275),color 0.2s ease-in}.wf-block .wf-block-header .wf-block-header-action.wf-block-header-action-text{width:auto}.wf-block .wf-block-header .wf-block-header-action.wf-block-header-action-text.wf-block-header-action-text-success{color:#11967a}.wf-block .wf-block-header .wf-block-header-action.wf-block-header-action-text.wf-block-header-action-text-warning{color:#930000}.wf-block .wf-block-header .wf-block-header-action.wf-block-header-action-text.wf-block-header-action-text-warning a{color:#930000}.wf-block .wf-block-header .wf-block-header-action .wf-block-header-action-chevron{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJjaGV2cm9uLW9iamVjdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBhdGggaWQ9ImNoZXZyb24iIGQ9Ik0yMCA5bC04IDgtOC04IDEuNDE0LTEuNDE0TDEyIDE0LjE3Mmw2LjU4Ni02LjU4NiIvPgo8L3N2Zz4K");background-repeat:no-repeat;background-position:center center;width:24px;height:24px}.wf-block .wf-block-header .wf-block-header-action .wf-block-header-action-disclosure{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJkaXNjbG9zdXJlLWNsb3NlZC1vYmplY3QiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIxMnB4IiBoZWlnaHQ9IjEycHgiIHZpZXdCb3g9IjAgMCAxMiAxMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTIgMTIiCgkgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxwYXRoIGlkPSJkaXNjbG9zdXJlLWNsb3NlZCIgZD0iTSA2IDAgbCA2IDYgLTYgNiAwIC0xMiIgZmlsbD0iIzc3NyIvPgo8L3N2Zz4=");background-repeat:no-repeat;background-position:center center;width:12px;height:12px;transition:transform 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275),background 0.2s ease-in}.wf-block .wf-block-header .wf-block-header-action .wf-block-header-action-checkbox{background-image:url(../images/checkbox.png);background-repeat:no-repeat;background-position:left center;width:29px;height:29px}.wf-block .wf-block-header .wf-block-header-action .wf-block-header-action-checkbox.wf-checked{background-position:right center}.wf-block .wf-block-content{display:none;margin:0 -1rem;padding:0 1rem}@media (min-width: 768px){.wf-block .wf-block-content{margin:0 -1.5rem;padding:0 1.5rem}}.wf-block .wf-block-content .wf-block-list{margin:0 -1rem;padding:0;list-style:none}@media (min-width: 768px){.wf-block .wf-block-content .wf-block-list{margin:0 -1.5rem}}.wf-block .wf-block-content .wf-block-list.wf-block-list-striped>li:nth-of-type(odd){background-color:#f9f9f9}.wf-block .wf-block-content .wf-block-list.wf-block-list-striped>li:nth-of-type(even){background-color:#ffffff}.wf-block .wf-block-content .wf-block-list>li{display:block;min-height:44px;padding:0 1rem;margin:0;border-top:1px solid #e2e2e2;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between}@media (min-width: 768px){.wf-block .wf-block-content .wf-block-list>li{padding:0 1.5rem}}.wf-block .wf-block-content .wf-block-list>li>*:first-child{-webkit-flex-grow:1;flex-grow:1;min-width:0}.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal{box-sizing:border-box;margin-top:-1px;display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-wrap:wrap;flex-wrap:wrap}.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal>li{-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:100%;flex-basis:100%;border-left:1px solid #e2e2e2}@media (min-width: 768px){.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal>li{-webkit-flex-basis:50%;flex-basis:50%}}@media (min-width: 992px){.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal>li{-webkit-flex-basis:25%;flex-basis:25%}}.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal.wf-block-list-nowrap{overflow-y:auto;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal.wf-block-list-nowrap>li{-webkit-flex-shrink:0;flex-shrink:0}.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal.wf-block-list-horizontal-5>li{-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:20%;flex-basis:20%}.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal>*:first-child{border-left:0}@media (min-width: 768px){.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal.wf-block-list-equal>li{max-width:50%}}@media (min-width: 992px){.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal.wf-block-list-equal>li{max-width:25%}}.wf-block .wf-block-content .wf-block-list.wf-block-list-horizontal.wf-block-list-horizontal-5.wf-block-list-equal>li{max-width:20%}.wf-block .wf-block-content .wf-block-list .wf-block-list-state{text-align:center}@media (min-width: 1200px){.wf-block .wf-block-content .wf-block-list .wf-block-list-state{text-align:left}}.wf-block .wf-block-content .wf-block-list .wf-block-list-state-enabled .wf-fa{color:#11967a}.wf-block .wf-block-content .wf-block-list .wf-block-list-state-disabled .wf-fa{color:#525355}.wf-block .wf-block-content .wf-block-list .wf-block-list-state-premium{color:#9f9fa0}.wf-block .wf-block-content .wf-block-list .wf-block-list-dismiss{padding-left:2rem;font-size:1.25rem}.wf-block .wf-block-content .wf-block-list .wf-block-list-dismiss a{color:#525355}.wf-block .wf-block-content:first-child>.wf-block-list>li:first-child{border-top:none}.wf-block .wf-block-content .wf-block-left-right{margin:0 -1rem;padding:0;list-style:none;display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-wrap:wrap;flex-wrap:wrap}@media (min-width: 768px){.wf-block .wf-block-content .wf-block-left-right{margin:0 -1.5rem}}.wf-block .wf-block-content .wf-block-left-right.wf-block-left-right-nowrap{-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wf-block .wf-block-content .wf-block-left-right>li{display:block;min-height:44px;padding:0;margin:0;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between}.wf-block .wf-block-content .wf-block-left-right>li>*:first-child{-webkit-flex-grow:1;flex-grow:1;min-width:0}.wf-block .wf-block-content .wf-block-left-right>li.wf-left{text-align:left}.wf-block .wf-block-content .wf-block-left-right>li.wf-right{text-align:right}.wf-block .wf-block-content .wf-block-left-center-right{margin:0 -1rem;padding:0;list-style:none;display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-align-content:center;align-content:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wf-block .wf-block-content .wf-block-left-center-right>li{display:block;min-height:44px;padding:0;margin:0;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:33.3333%;flex-basis:33.3333%;max-width:33.3333%}.wf-block .wf-block-content .wf-block-left-center-right>li a{text-decoration:none;font-size:.875rem}.wf-block .wf-block-content .wf-block-left-center-right>li.wf-left{text-align:left}.wf-block .wf-block-content .wf-block-left-center-right>li.wf-center{text-align:center;-webkit-justify-content:center;justify-content:center}.wf-block .wf-block-content .wf-block-left-center-right>li.wf-center .wordfence-icon32{margin:0}.wf-block .wf-block-content .wf-block-left-center-right>li.wf-right{text-align:right;-webkit-justify-content:flex-end;justify-content:flex-end}.wf-block .wf-block-content .wf-block-labeled-value{box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:column;flex-direction:column;margin:0 -1rem;padding:1rem}@media (min-width: 768px){.wf-block .wf-block-content .wf-block-labeled-value{margin:0 -1.5rem;padding:1.5rem}}.wf-block .wf-block-content .wf-block-labeled-value-value{font-size:3rem;line-height:3rem;color:#9f9fa0;padding:1rem}.wf-block .wf-block-content .wf-block-labeled-value-label{font-size:0.75rem;color:#9f9fa0;padding:0 1rem 1rem 1rem}.wf-block.wf-block-no-header .wf-block-content .wf-block-list>li{border-top:none}.wf-block.wf-active .wf-block-content,.wf-block.wf-always-active .wf-block-content{display:block}.wf-block.wf-active>.wf-block-header>.wf-block-header-content>.wf-block-title{color:#00709e}.wf-block.wf-active>.wf-block-header>.wf-block-header-content>.wf-block-header-action>.wf-block-header-action-disclosure{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJkaXNjbG9zdXJlLWNsb3NlZC1vYmplY3QiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIxMnB4IiBoZWlnaHQ9IjEycHgiIHZpZXdCb3g9IjAgMCAxMiAxMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTIgMTIiCgkgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxwYXRoIGlkPSJkaXNjbG9zdXJlLWNsb3NlZCIgZD0iTSA2IDAgbCA2IDYgLTYgNiAwIC0xMiIgZmlsbD0iIzAwNzA5ZSIvPgo8L3N2Zz4=") !important;transform:rotate(90deg)}.wf-block.wf-disabled>.wf-block-header>.wf-block-header-content>.wf-block-title,.wf-block.wf-disabled>.wf-block-header>.wf-block-header-content>.wf-block-subtitle{color:#bfbfbf !important}.wf-block.wf-disabled>.wf-block-header>.wf-block-header-content>.wf-block-header-action>.wf-block-header-action-disclosure{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJkaXNjbG9zdXJlLWNsb3NlZC1vYmplY3QiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIxMnB4IiBoZWlnaHQ9IjEycHgiIHZpZXdCb3g9IjAgMCAxMiAxMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTIgMTIiCgkgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxwYXRoIGlkPSJkaXNjbG9zdXJlLWNsb3NlZCIgZD0iTSA2IDAgbCA2IDYgLTYgNiAwIC0xMiIgZmlsbD0iI2JkYmRiZCIvPgo8L3N2Zz4=") !important;transform:rotate(0deg)}.wf-block.wf-disabled>.wf-block-content{display:none !important}.wf-block.wf-block-header-left .wf-block-header-content{margin-left:48px}.wf-block.wf-block-header-left .wf-block-header-action{right:auto;left:0px}.wf-block.wf-disabled .wf-dashboard-item-content .wf-block-title{color:#aaaaaa}.wf-block.wf-disabled .wf-dashboard-item-content .wf-block-subtitle{color:#8ea6be}.wf-section-title{margin-bottom:1rem}.wf-status-detail{box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:column;flex-direction:column;margin:0 -1rem;padding:1rem}.wf-status-detail p{margin:0 0 0.45rem 0}.wf-status-detail .wf-status-circular{margin-bottom:1rem}.wf-status-detail .wf-status-detail-title{font-weight:700 !important;font-size:1rem !important;line-height:1.3125 !important}.wf-status-detail .wf-status-detail-subtitle{font-size:.875rem !important;line-height:1.3125 !important;font-weight:normal !important;text-align:center}.wf-status-detail .wf-status-detail-link>a{font-weight:600 !important;font-size:0.85rem !important}.wf-block-navigation-option{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wf-block-navigation-option svg.wf-block-navigation-option-icon{width:50px;min-width:50px;fill:#9f9fa0}.wf-block-navigation-option:hover{cursor:pointer}.wf-block-navigation-option:hover a{text-decoration:underline}.wf-block-navigation-option:hover svg.wf-block-navigation-option-icon{fill:#00709e}.wf-select-group{display:-webkit-flex !important;display:flex !important;-webkit-align-items:center !important;align-items:center !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important;-webkit-flex-direction:row !important;flex-direction:row !important;-webkit-flex-grow:0 !important;flex-grow:0 !important}.wf-select-group .wfselect2-container{min-width:200px}@media (max-width: 767px){.wf-select-group .wfselect2-container{max-width:100px}}.wf-select-group .wfselect2-container--default .wfselect2-selection--single{display:block;width:100%;height:38px;padding:.5rem 1.25rem;font-size:14px;line-height:1.42857;color:#2b2b2b;background-color:#fff;background-image:none;border:1px solid #ddd;border-radius:4px;border-top-right-radius:0;border-bottom-right-radius:0;border-right:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,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}.wf-select-group .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered{color:#2b2b2b;line-height:inherit}.wf-select-group .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow{height:38px}.wf-select-group .wf-form-control{display:inline-block;width:auto;border-top-left-radius:0;border-bottom-left-radius:0;margin-left:0}.wf-flex-horizontal{display:-webkit-flex !important;display:flex !important;-webkit-align-items:center !important;align-items:center !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important;-webkit-flex-direction:row !important;flex-direction:row !important}.wf-flex-horizontal>*:first-child{-webkit-flex-grow:0 !important;flex-grow:0 !important}.wf-flex-horizontal.wf-flex-align-left{-webkit-align-items:flex-start !important;align-items:flex-start !important}.wf-flex-horizontal.wf-flex-align-right{-webkit-justify-content:flex-end !important;justify-content:flex-end !important}.wf-flex-horizontal.wf-flex-full-width{width:100%}.wf-flex-horizontal.wf-flex-full-width>*:last-child{-webkit-flex-grow:1 !important;flex-grow:1 !important}.wf-flex-horizontal.wf-flex-full-width.wf-flex-grow-first>*:first-child{-webkit-flex-grow:1 !important;flex-grow:1 !important}.wf-flex-horizontal.wf-flex-full-width.wf-flex-grow-first>*:last-child{-webkit-flex-grow:0 !important;flex-grow:0 !important}.wf-flex-horizontal.wf-flex-full-width.wf-flex-grow-all>*:first-child,.wf-flex-horizontal.wf-flex-full-width.wf-flex-grow-all>*{-webkit-flex-grow:1 !important;flex-grow:1 !important}.wf-flex-horizontal>li{padding:0;margin:0}.wf-flex-vertical{display:-webkit-flex !important;display:flex !important;-webkit-align-items:center !important;align-items:center !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important;-webkit-flex-direction:column !important;flex-direction:column !important}.wf-flex-vertical>*:first-child{-webkit-flex-grow:0 !important;flex-grow:0 !important}.wf-flex-vertical.wf-flex-align-left{-webkit-align-items:flex-start !important;align-items:flex-start !important}.wf-flex-vertical.wf-flex-align-right{-webkit-align-items:flex-end !important;align-items:flex-end !important}.wf-flex-vertical.wf-flex-full-width{-webkit-align-items:stretch !important;align-items:stretch !important}@media (max-width: 767px){.wf-flex-vertical.wf-flex-align-left-xs{-webkit-align-items:flex-start !important;align-items:flex-start !important}}@media (min-width: 768px) and (max-width: 991px){.wf-flex-vertical.wf-flex-align-left-sm{-webkit-align-items:flex-start !important;align-items:flex-start !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-flex-vertical.wf-flex-align-left-md{-webkit-align-items:flex-start !important;align-items:flex-start !important}}@media (min-width: 1200px){.wf-flex-vertical.wf-flex-align-left-lg{-webkit-align-items:flex-start !important;align-items:flex-start !important}}.wf-flex-vertical>li{padding:0;margin:0}@media (max-width: 767px){.wf-flex-vertical-xs{display:-webkit-flex !important;display:flex !important;-webkit-align-items:center !important;align-items:center !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important;-webkit-flex-direction:column !important;flex-direction:column !important}.wf-flex-vertical-xs>*:first-child{-webkit-flex-grow:0 !important;flex-grow:0 !important}.wf-flex-vertical-xs.wf-flex-align-left{-webkit-align-items:flex-start !important;align-items:flex-start !important}.wf-flex-vertical-xs.wf-flex-align-right{-webkit-align-items:flex-end !important;align-items:flex-end !important}.wf-flex-vertical-xs.wf-flex-full-width{-webkit-align-items:stretch !important;align-items:stretch !important}}ul.wf-option,.wf-form-field{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;padding:1rem 0;position:relative}ul.wf-option li,.wf-form-field li{margin:0;padding:0}ul.wf-option.wf-option-no-spacing,.wf-form-field.wf-option-no-spacing{padding:0;margin:0}ul.wf-option.wf-option-toggled>*:last-child,ul.wf-option.wf-option-footer>*:last-child,.wf-form-field.wf-option-toggled>*:last-child,.wf-form-field.wf-option-footer>*:last-child{margin-right:1rem}@media (max-width: 768px){ul.wf-option.wf-option-footer,.wf-form-field.wf-option-footer{-webkit-flex-direction:column;flex-direction:column}}ul.wf-option>.wf-option-content,.wf-form-field>.wf-option-content{-webkit-flex-grow:1;flex-grow:1}ul.wf-option>.wf-option-content>ul,.wf-form-field>.wf-option-content>ul{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;width:100%}ul.wf-option>.wf-option-content>ul>*:first-child,.wf-form-field>.wf-option-content>ul>*:first-child{-webkit-flex-grow:1;flex-grow:1}@media (min-width: 768px){ul.wf-option>.wf-option-content>ul,.wf-form-field>.wf-option-content>ul{-webkit-flex-direction:row;flex-direction:row;-webkit-align-items:center;align-items:center}}ul.wf-option.wf-option-toggled-segmented *,.wf-form-field.wf-option-toggled-segmented *{-webkit-flex-grow:0;flex-grow:0}ul.wf-option.wf-option-toggled-segmented *:first-child,.wf-form-field.wf-option-toggled-segmented *:first-child{-webkit-flex-grow:1;flex-grow:1}ul.wf-option.wf-option-toggled-segmented>*:last-child,.wf-form-field.wf-option-toggled-segmented>*:last-child{margin-left:1rem}ul.wf-option.wf-option-toggled-segmented .wf-option-title,.wf-form-field.wf-option-toggled-segmented .wf-option-title{font-size:.8rem}ul.wf-option.wf-option-toggled-segmented .wf-option-segments,.wf-form-field.wf-option-toggled-segmented .wf-option-segments{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:stretch;align-content:stretch;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label{-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:50%;flex-basis:50%;display:block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;text-transform:uppercase;padding:.5rem 1.25rem;font-size:14px;line-height:1.42857;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#00709e;background-color:#fff;border-color:#00709e;border-radius:0}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.focus{color:#00709e;background-color:#e6e6e6;border-color:#00161f}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label:hover{color:#00709e;background-color:#e6e6e6;border-color:#004561}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label:active,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.active,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label:active,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.active,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle{color:#00709e;background-color:#e6e6e6;border-color:#004561}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label:active:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label:active:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label:active.focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.active:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.active:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.active.focus,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle:hover,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle:focus,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle.focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label:active:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label:active:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label:active.focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.active:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.active:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.active.focus,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle:hover,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle:focus,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle.focus{color:#00709e;background-color:#d4d4d4;border-color:#00161f}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label:active,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-active,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label:active,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-active,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-dropdown-toggle{background-image:none}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-disabled,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label[disabled],ul.wf-option.wf-option-toggled-segmented .wf-option-segments label[readonly],fieldset[disabled] ul.wf-option.wf-option-toggled-segmented .wf-option-segments label,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-disabled,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label[disabled],.wf-form-field.wf-option-toggled-segmented .wf-option-segments label[readonly],fieldset[disabled] .wf-form-field.wf-option-toggled-segmented .wf-option-segments label{color:#777;background-color:#fff;border-color:#e2e2e2;cursor:not-allowed}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-disabled:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-disabled:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-disabled.wf-focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label[disabled]:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label[disabled]:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label[disabled].wf-focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label[readonly]:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label[readonly]:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments label[readonly].wf-focus,fieldset[disabled] ul.wf-option.wf-option-toggled-segmented .wf-option-segments label:hover,fieldset[disabled] ul.wf-option.wf-option-toggled-segmented .wf-option-segments label:focus,fieldset[disabled] ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-disabled:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-disabled:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-disabled.wf-focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label[disabled]:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label[disabled]:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label[disabled].wf-focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label[readonly]:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label[readonly]:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label[readonly].wf-focus,fieldset[disabled] .wf-form-field.wf-option-toggled-segmented .wf-option-segments label:hover,fieldset[disabled] .wf-form-field.wf-option-toggled-segmented .wf-option-segments label:focus,fieldset[disabled] .wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-focus{background-color:#fff;border-color:#00709e}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label .wf-badge,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label .wf-badge{color:#fff;background-color:#00709e}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-segment-first,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-segment-first{border-radius:4px 0 0 4px}ul.wf-option.wf-option-toggled-segmented .wf-option-segments label.wf-segment-last,.wf-form-field.wf-option-toggled-segmented .wf-option-segments label.wf-segment-last{border-radius:0 4px 4px 0}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio],.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]{position:absolute;left:-9999px}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label{color:#fff;background-color:#00709e;border-color:#005e85}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.focus{color:#fff;background-color:#004c6b;border-color:#000405}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:hover{color:#fff;background-color:#004c6b;border-color:#003347}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.active,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.active,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle{color:#fff;background-color:#004c6b;border-color:#003347}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active.focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.active:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.active:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.active.focus,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle:hover,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle:focus,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle.focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active.focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.active:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.active:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.active.focus,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle:hover,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle:focus,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle.focus{color:#fff;background-color:#003347;border-color:#000405}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-active,.wf-open>ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:active,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-active,.wf-open>.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-dropdown-toggle{background-image:none}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-disabled,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[disabled],ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[readonly],fieldset[disabled] ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-disabled,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[disabled],.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[readonly],fieldset[disabled] .wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label{color:#fff;background-color:#59a2c0;border-color:#5996b0;cursor:not-allowed}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-disabled:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-disabled:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-disabled.wf-focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[disabled]:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[disabled]:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[disabled].wf-focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[readonly]:hover,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[readonly]:focus,ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[readonly].wf-focus,fieldset[disabled] ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:hover,fieldset[disabled] ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:focus,fieldset[disabled] ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-disabled:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-disabled:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-disabled.wf-focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[disabled]:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[disabled]:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[disabled].wf-focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[readonly]:hover,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[readonly]:focus,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label[readonly].wf-focus,fieldset[disabled] .wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:hover,fieldset[disabled] .wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label:focus,fieldset[disabled] .wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label.wf-focus{background-color:#00709e;border-color:#005e85}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label .wf-badge,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:checked+label .wf-badge{color:#00709e;background-color:#fff}ul.wf-option.wf-option-toggled-segmented .wf-option-segments [type=radio]:disabled+label,.wf-form-field.wf-option-toggled-segmented .wf-option-segments [type=radio]:disabled+label{cursor:not-allowed;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);opacity:.65}ul.wf-option.wf-option-toggled-multiple>.wf-option-content>ul,.wf-form-field.wf-option-toggled-multiple>.wf-option-content>ul{-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:flex-start;align-items:flex-start}ul.wf-option>.wf-option-spacer,.wf-form-field>.wf-option-spacer{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-shrink:0;flex-shrink:0;margin:0 1rem 0 0;width:30px;height:30px}@media (min-width: 768px){ul.wf-option>.wf-option-spacer,.wf-form-field>.wf-option-spacer{margin:0 2rem 0 1rem;width:20px;height:20px}}ul.wf-option>.wf-option-premium-lock,.wf-form-field>.wf-option-premium-lock{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-shrink:0;flex-shrink:0;background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB3aWR0aD0iMjRweCIgaGVpZ2h0PSIzMHB4IiB2aWV3Qm94PSIwIDAgMjQgMzAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxwYXRoIGQ9Ik0yMy45NDksMTQuMjMzYy0wLjM3OSwtMC4zOSAtMC45MDQsLTAuNjA2IC0xLjQ0OCwtMC41OTVsLTAuNjgzLDBsMCwtNC4wOTJjMC4wMzIsLTIuNTM1IC0wLjk4NiwtNC45NzMgLTIuODEyLC02LjczMWMtMS43NTksLTEuODI4IC00LjE5OCwtMi44NDcgLTYuNzM0LC0yLjgxNWMtMi41MzYsLTAuMDMyIC00Ljk3NiwwLjk4NyAtNi43MzQsMi44MTVjLTEuODI2LDEuNzU4IC0yLjg0NCw0LjE5NiAtMi44MTIsNi43MzFsMCw0LjA4OWwtMC42OCwwYy0wLjU0NCwtMC4wMTEgLTEuMDY5LDAuMjA1IC0xLjQ0OCwwLjU5NWMtMC4zOTUsMC4zODIgLTAuNjEyLDAuOTEyIC0wLjU5OCwxLjQ2MWwwLDEyLjI2NmMtMC4wMTEsMC41NDQgMC4yMDQsMS4wNjkgMC41OTUsMS40NDhjMC4zNzksMC4zOTEgMC45MDQsMC42MDYgMS40NDgsMC41OTVsMjAuNDU4LDBjMC4wMDMsMCAwLjAwNiwwIDAuMDEsMGMxLjExNywwIDIuMDM2LC0wLjkxOSAyLjAzNiwtMi4wMzdjMCwtMC4wMDMgMCwtMC4wMDYgMCwtMC4wMDlsMCwtMTIuMjYzYzAuMDExLC0wLjU0NCAtMC4yMDYsLTEuMDY5IC0wLjU5OCwtMS40NDhsMCwtMC4wMVptLTYuMjExLC0wLjU5NWwtMTAuOTE5LDBsMCwtNC4wOTJjLTAuMDIyLC0xLjQ1MSAwLjU1NywtMi44NDggMS41OTksLTMuODU4YzEuMDA5LC0xLjA0MiAyLjQwNywtMS42MjEgMy44NTcsLTEuNTk4YzEuNDUxLC0wLjAyMyAyLjg0OCwwLjU1NiAzLjg1OCwxLjU5OGMxLjA0MiwxLjAwOSAxLjYyMSwyLjQwNyAxLjU5OCwzLjg1OGwwLjAwNyw0LjA5MloiIGZpbGw9IiNkMWQxZDEiLz4KPC9zdmc+");background-repeat:no-repeat;background-position:center center;background-size:contain;margin:0 1rem 0 0;width:30px;height:30px}@media (min-width: 768px){ul.wf-option>.wf-option-premium-lock,.wf-form-field>.wf-option-premium-lock{margin:0 2rem 0 1rem;width:20px;height:20px}}ul.wf-option>.wf-option-checkbox,.wf-form-field>.wf-option-checkbox{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-shrink:0;flex-shrink:0;margin:0 1rem 0 0}@media (min-width: 768px){ul.wf-option>.wf-option-checkbox,.wf-form-field>.wf-option-checkbox{margin:0 2rem 0 1rem}}ul.wf-option>.wf-boolean-switch,.wf-form-field>.wf-boolean-switch{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-shrink:0;flex-shrink:0;margin:0 1rem 0 0}@media (min-width: 768px){ul.wf-option>.wf-boolean-switch,.wf-form-field>.wf-boolean-switch{margin:0 1rem 0 1rem}}ul.wf-option.wf-option-no-spacing>.wf-boolean-switch,.wf-form-field.wf-option-no-spacing>.wf-boolean-switch{margin:0}ul.wf-option>.wf-option-radio-container,.wf-form-field>.wf-option-radio-container{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-shrink:0;flex-shrink:0;margin:0 1rem 0 0}@media (min-width: 768px){ul.wf-option>.wf-option-radio-container,.wf-form-field>.wf-option-radio-container{margin:0 2rem 0 1rem}}ul.wf-option>.wf-option-radio-container [type=radio].wf-option-radio+label:before,.wf-form-field>.wf-option-radio-container [type=radio].wf-option-radio+label:before{margin:0}ul.wf-option>li>.wf-option-title,ul.wf-option>.wf-option-title,ul.wf-option>.wf-option-content>ul>.wf-option-title,.wf-form-field>li>.wf-option-title,.wf-form-field>.wf-option-title,.wf-form-field>.wf-option-content>ul>.wf-option-title{font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.9rem;color:#2b2b2b;padding-right:0.5rem}ul.wf-option>li>.wf-option-title.wf-option-title-top,ul.wf-option>.wf-option-title.wf-option-title-top,ul.wf-option>.wf-option-content>ul>.wf-option-title.wf-option-title-top,.wf-form-field>li>.wf-option-title.wf-option-title-top,.wf-form-field>.wf-option-title.wf-option-title-top,.wf-form-field>.wf-option-content>ul>.wf-option-title.wf-option-title-top{-webkit-align-self:flex-start;align-self:flex-start}ul.wf-option>li>.wf-option-title.wf-option-title-bottom,ul.wf-option>.wf-option-title.wf-option-title-bottom,ul.wf-option>.wf-option-content>ul>.wf-option-title.wf-option-title-bottom,.wf-form-field>li>.wf-option-title.wf-option-title-bottom,.wf-form-field>.wf-option-title.wf-option-title-bottom,.wf-form-field>.wf-option-content>ul>.wf-option-title.wf-option-title-bottom{-webkit-align-self:flex-end;align-self:flex-end}ul.wf-option .wf-option-subtitle,.wf-form-field .wf-option-subtitle{padding-top:0.25rem;font-size:0.75rem}ul.wf-option .wf-flex-vertical .wf-option-title,.wf-form-field .wf-flex-vertical .wf-option-title{padding-bottom:0.75rem}ul.wf-option.wf-flex-vertical>.wf-option-subtitle,.wf-form-field.wf-flex-vertical>.wf-option-subtitle{padding-top:0.25rem !important;font-size:0.75rem !important}ul.wf-option .wf-option-checkboxes,ul.wf-option .wf-option-checkboxes>ul,.wf-form-field .wf-option-checkboxes,.wf-form-field .wf-option-checkboxes>ul{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}ul.wf-option .wf-option-checkboxes,.wf-form-field .wf-option-checkboxes{margin-top:1rem}ul.wf-option .wf-option-checkboxes>ul,.wf-form-field .wf-option-checkboxes>ul{margin-left:1rem}@media (min-width: 768px){ul.wf-option .wf-option-checkboxes>ul,.wf-form-field .wf-option-checkboxes>ul{margin-left:1.5rem}}ul.wf-option .wf-option-checkboxes>ul:first-of-type,.wf-form-field .wf-option-checkboxes>ul:first-of-type{margin-left:0}ul.wf-option .wf-option-checkboxes>ul>.wf-option-checkbox,.wf-form-field .wf-option-checkboxes>ul>.wf-option-checkbox{margin:0 1rem 0 0}ul.wf-option li.wf-option-text,ul.wf-option li.wf-option-textarea,ul.wf-option td.wf-option-text,.wf-form-field li.wf-option-text,.wf-form-field li.wf-option-textarea,.wf-form-field td.wf-option-text{padding-top:0.5rem}@media (min-width: 768px){ul.wf-option li.wf-option-text,ul.wf-option li.wf-option-textarea,ul.wf-option td.wf-option-text,.wf-form-field li.wf-option-text,.wf-form-field li.wf-option-textarea,.wf-form-field td.wf-option-text{-webkit-flex-grow:1;flex-grow:1;text-align:right;padding-left:1rem;padding-top:0}}ul.wf-option li.wf-option-text>input[type="text"],.wf-form-field li.wf-option-text>input[type="text"]{max-width:240px}@media (min-width: 768px){ul.wf-option li.wf-option-text>input[type="text"],.wf-form-field li.wf-option-text>input[type="text"]{max-width:280px}}@media (min-width: 992px){ul.wf-option li.wf-option-text>input[type="text"],.wf-form-field li.wf-option-text>input[type="text"]{max-width:340px}}ul.wf-option li.wf-option-text.wf-option-full-width>input[type="text"],.wf-form-field li.wf-option-text.wf-option-full-width>input[type="text"]{max-width:100%;width:100%}ul.wf-option li.wf-option-textarea,.wf-form-field li.wf-option-textarea{min-width:150px;max-width:240px}@media (min-width: 768px){ul.wf-option li.wf-option-textarea,.wf-form-field li.wf-option-textarea{min-width:200px;max-width:400px}}@media (min-width: 992px){ul.wf-option li.wf-option-textarea,.wf-form-field li.wf-option-textarea{min-width:250px;max-width:500px}}ul.wf-option li.wf-option-textarea>textarea,.wf-form-field li.wf-option-textarea>textarea{width:100%;height:80px;min-width:150px;max-width:240px}@media (min-width: 768px){ul.wf-option li.wf-option-textarea>textarea,.wf-form-field li.wf-option-textarea>textarea{min-width:200px;max-width:280px}}@media (min-width: 992px){ul.wf-option li.wf-option-textarea>textarea,.wf-form-field li.wf-option-textarea>textarea{min-width:250px;max-width:340px}}ul.wf-option li.wf-option-textarea>.wf-flex-vertical>li>textarea,.wf-form-field li.wf-option-textarea>.wf-flex-vertical>li>textarea{width:100%;height:80px;box-sizing:border-box}ul.wf-option li.wf-option-textarea>.wf-flex-vertical>li.wf-option-subtitle,.wf-form-field li.wf-option-textarea>.wf-flex-vertical>li.wf-option-subtitle{width:100%;text-align:left}ul.wf-option li.wf-option-switch,.wf-form-field li.wf-option-switch{-webkit-flex-grow:1;flex-grow:1}ul.wf-option li.wf-option-switch.wf-right .wf-switch,.wf-form-field li.wf-option-switch.wf-right .wf-switch{justify-content:flex-end !important}ul.wf-option li.wf-option-select,.wf-form-field li.wf-option-select{-webkit-flex-grow:1;flex-grow:1;text-align:right}ul.wf-option li.wf-option-select select,ul.wf-option li.wf-option-select select option,ul.wf-option li.wf-option-select .wfselect2-container--default,.wf-form-field li.wf-option-select select,.wf-form-field li.wf-option-select select option,.wf-form-field li.wf-option-select .wfselect2-container--default{font-size:0.7rem;font-weight:bold}@media (min-width: 768px){ul.wf-option li.wf-option-select select,ul.wf-option li.wf-option-select select option,ul.wf-option li.wf-option-select .wfselect2-container--default,.wf-form-field li.wf-option-select select,.wf-form-field li.wf-option-select select option,.wf-form-field li.wf-option-select .wfselect2-container--default{font-size:0.8rem}}@media (min-width: 992px){ul.wf-option li.wf-option-select select,ul.wf-option li.wf-option-select select option,ul.wf-option li.wf-option-select .wfselect2-container--default,.wf-form-field li.wf-option-select select,.wf-form-field li.wf-option-select select option,.wf-form-field li.wf-option-select .wfselect2-container--default{font-size:0.9rem}}ul.wf-option li.wf-option-select .wf-option-select-option,ul.wf-option li.wf-option-select .wfselect2-container--default,ul.wf-option li.wf-option-select .wfselect2-container--default .wfselect2-selection--single,.wf-form-field li.wf-option-select .wf-option-select-option,.wf-form-field li.wf-option-select .wfselect2-container--default,.wf-form-field li.wf-option-select .wfselect2-container--default .wfselect2-selection--single{text-align:left;height:40px;border-radius:0;border:0;background-color:#fff;box-shadow:1px 1px 1px 2px rgba(215,215,215,0.35)}ul.wf-option li.wf-option-select .wf-option-select-option .wfselect2-selection__rendered,ul.wf-option li.wf-option-select .wfselect2-container--default .wfselect2-selection__rendered,ul.wf-option li.wf-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered,.wf-form-field li.wf-option-select .wf-option-select-option .wfselect2-selection__rendered,.wf-form-field li.wf-option-select .wfselect2-container--default .wfselect2-selection__rendered,.wf-form-field li.wf-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered{color:#333;line-height:40px}ul.wf-option li.wf-option-select .wf-option-select-option .wfselect2-selection__arrow,ul.wf-option li.wf-option-select .wfselect2-container--default .wfselect2-selection__arrow,ul.wf-option li.wf-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow,.wf-form-field li.wf-option-select .wf-option-select-option .wfselect2-selection__arrow,.wf-form-field li.wf-option-select .wfselect2-container--default .wfselect2-selection__arrow,.wf-form-field li.wf-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow{height:38px}ul.wf-option li.wf-option-select .wf-option-select-option.wfselect2-container--disabled .wfselect2-selection__rendered,ul.wf-option li.wf-option-select .wfselect2-container--default.wfselect2-container--disabled .wfselect2-selection__rendered,ul.wf-option li.wf-option-select .wfselect2-container--default .wfselect2-selection--single.wfselect2-container--disabled .wfselect2-selection__rendered,.wf-form-field li.wf-option-select .wf-option-select-option.wfselect2-container--disabled .wfselect2-selection__rendered,.wf-form-field li.wf-option-select .wfselect2-container--default.wfselect2-container--disabled .wfselect2-selection__rendered,.wf-form-field li.wf-option-select .wfselect2-container--default .wfselect2-selection--single.wfselect2-container--disabled .wfselect2-selection__rendered{color:#aaa}ul.wf-option li.wf-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow b,.wf-form-field li.wf-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:#333 transparent transparent}ul.wf-option li.wf-option-select .wfselect2-container--default.wfselect2-container--open .wfselect2-selection--single .wfselect2-selection__arrow b,.wf-form-field li.wf-option-select .wfselect2-container--default.wfselect2-container--open .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:transparent transparent #333}ul.wf-option.wf-option-token select,.wf-form-field.wf-option-token select{width:240px}@media (min-width: 768px){ul.wf-option.wf-option-token select,.wf-form-field.wf-option-token select{width:280px}}@media (min-width: 992px){ul.wf-option.wf-option-token select,.wf-form-field.wf-option-token select{width:320px}}ul.wf-option.wf-option-token .wfselect2-container--default,ul.wf-option.wf-option-token .wfselect2-container--default .wfselect2-selection--multiple,.wf-form-field.wf-option-token .wfselect2-container--default,.wf-form-field.wf-option-token .wfselect2-container--default .wfselect2-selection--multiple{border-color:#e2e2e2}ul.wf-option.wf-option-token .wfselect2-container--default .wfselect2-selection__choice,ul.wf-option.wf-option-token .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-selection__choice,.wf-form-field.wf-option-token .wfselect2-container--default .wfselect2-selection__choice,.wf-form-field.wf-option-token .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-selection__choice{background-color:#fff;border-color:#e2e2e2;padding:0.5rem}ul.wf-option.wf-option-token .wfselect2-container--default .wfselect2-search__field,ul.wf-option.wf-option-token .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-search__field,.wf-form-field.wf-option-token .wfselect2-container--default .wfselect2-search__field,.wf-form-field.wf-option-token .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-search__field{margin-right:5px;margin-top:5px;padding:0.5rem 0}.wf-option-sub{padding-left:2rem !important;margin-left:30px !important}.wf-select2-suppress-dropdown .wfselect2-results,.wf-select2-suppress-dropdown .wfselect2-dropdown{display:none}.wf-options-controls{direction:ltr;background:#ffffff;border-bottom:1px solid #e2e2e2;position:absolute;left:160px;right:0px;top:46px;z-index:900;padding-left:15px;padding-right:15px}@media (min-width: 616px){.wf-options-controls{position:fixed}}.wf-options-controls .wf-block{margin:0}@media (min-width: 782px){.wf-options-controls .wf-block{margin:0.5rem 0}}.wf-options-controls,.sticky-menu .wf-options-controls{top:32px}.folded .wf-options-controls{left:36px}@media only screen and (max-width: 960px){.auto-fold .wf-options-controls{left:36px}}.rtl .wf-options-controls{right:160px;left:0px}.rtl .folded .wf-options-controls{right:36px}@media only screen and (max-width: 960px){.rtl .auto-fold .wf-options-controls{right:36px}}@media screen and (max-width: 782px){.wf-options-controls,.folded .wf-options-controls,.auto-fold .wf-options-controls,.rtl .wf-options-controls,.rtl .folded .wf-options-controls,.rtl .auto-fold .wf-options-controls{left:-10px;right:0px}}.wf-options-controls-spacer{height:45px}@media (min-width: 782px){.wf-options-controls-spacer{height:75px}}.wf-options-controls-spacer,.sticky-menu .wf-options-controls-spacer{top:61px}.wordfence .wfselect2-container .wfselect2-selection--single{border:1px solid #dadada;font-weight:normal;font-size:0.8rem}#wf-notices{margin-top:15px}#wf-notices .wf-admin-notice{margin-left:0px;margin-right:0px}.wf-success-text,.wf-notice-text{display:inline-block;vertical-align:middle;line-height:1.3;font-size:16px;font-weight:bold;font-style:italic}.wf-notice{margin:12px 0;padding:8px;background-color:#ffffe0;border:1px solid #ffd975;border-width:1px 1px 1px 10px}.wf-notice-text{color:#6d798c}.wf-success{margin:12px 0;padding:8px;background-color:#ffffff;border:1px solid #16bc9b;border-width:1px 1px 1px 10px}.wf-success-text{color:#11967a}.wf-premium-callout{border:1px solid #dfdfdf;background-color:#ffffff;padding:16px;margin:20px 0 0;text-align:center}.wf-premium-callout ul{margin:8px 0;padding:0 0 0 15px}.wf-premium-callout ul li{list-style-type:disc;margin:0;padding:0}.wf-premium-callout .center{text-align:center;margin:0}.wf-premium-callout .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709e}#wfLiveTrafficOverlayAnchor::after{position:absolute;z-index:3002;top:0;right:0;width:0;height:0;background:rgba(241,241,241,0.6);content:'';opacity:0;-webkit-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;-o-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s}.wordfenceLiveActivityPaused #wfLiveTrafficOverlayAnchor::after{width:100%;height:100%;opacity:1;-webkit-transition:opacity 0.5s;-o-transition:opacity 0.5s;transition:opacity 0.5s}#wordfenceLiveActivitySecurityOnly,#wordfenceLiveActivityAll{background:#fff;border-left:4px solid #00709e;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);margin-bottom:0.5rem;padding:1px 13px}#wfLiveTrafficDisabledMessage{display:none;position:fixed;z-index:3003;left:0;width:100%;top:50%;transform:translateY(-50%);text-align:center;color:#666666;opacity:0;-webkit-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;-o-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s}#wfLiveTrafficDisabledMessage h2{background-color:#00709e;color:#fff;overflow:hidden;max-width:350px;margin:0 auto;padding:20px;font-size:2.0em}#wfLiveTrafficDisabledMessage h2 small{font-size:0.5em;font-weight:normal;margin-top:12px;display:block}.wordfenceLiveActivityPaused #wfLiveTrafficDisabledMessage{display:block;opacity:1;-webkit-transition:opacity 0.5s;transition:opacity 0.5s}.wf-live-activity{position:relative;margin:20px 0 10px 0;padding:0.75rem;box-sizing:border-box;background:#FFFCEF;box-shadow:0 0 0 1px rgba(153,155,135,0.5),0 1px 2px #e8f3e0}.wf-live-activity .wf-live-activity-inner{width:100%;box-sizing:border-box;position:relative}.wf-live-activity .wf-live-activity-inner .wf-live-activity-content{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:flex-start}.wf-live-activity .wf-live-activity-inner .wf-live-activity-content .wf-live-activity-title{color:#888888;font-size:0.85rem;font-weight:bold;padding-right:0.5rem}.wf-live-activity .wf-live-activity-inner .wf-live-activity-content .wf-live-activity-message{font-size:0.80rem;color:#000000}.wf-live-activity .wf-live-activity-inner .wf-live-activity-state{position:absolute;top:0px;right:0px;bottom:0px;left:0px;background:rgba(255,252,239,0.9);display:none;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:center;z-index:3001;-webkit-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;-o-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s}.wordfenceLiveActivityPaused .wf-live-activity .wf-live-activity-inner .wf-live-activity-state{display:-ms-flexbox;display:flex;opacity:1;-webkit-transition:opacity 0.5s;-webkit-transition:opacity 0.5s;-o-transition:opacity 0.5s;transition:opacity 0.5s}.wordfence .wordfenceScanButton{margin:20px 0 20px 0}.wordfence .wordfenceScanButton input.button-wf-grey{background:#EFEFEF url(../images/button-grad-grey.png) repeat-x scroll left top;border-color:#EFEFEF}.wordfence .wordfenceScanButton table td{vertical-align:top}.wordfence .wordfenceScanButton .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709E;height:44px;line-height:44px;padding:0px 20px}table.wfSummaryParent{font-family:sans-serif;font-size:14px;color:#000;z-index:9}table.wfSummaryParent td{vertical-align:top;padding:0;margin:0}table.wfSummaryParent table.wfSummaryChild th{font-weight:bold;text-align:right;font-family:Georgia,Times New Roman,Times,serif;color:#000;padding:5px 10px 5px 0;border-top:1px solid #CCC}table.wfSummaryParent table.wfSummaryChild td{font-weight:normal;text-align:left;padding:5px 0 5px 0;border-top:1px solid #CCC}table.wfSummaryParent table.wfSC1 td{width:300px;padding:0 25px 10px 0}table.wfSummaryParent table.wfSC2 th{width:80px}table.wfSummaryParent table.wfSC2 td{width:100px}table.wfSummaryParent table.wfSC3 th{width:80px}table.wfSummaryParent table.wfSC3 td{width:250px}table.wfSummaryParent th.wfHead{font-size:22px;font-family:Georgia,Times New Roman,Times,serif;font-style:italic;color:#555;font-weight:bold;text-align:left;padding:20px 0 20px 0;-webkit-font-smoothing:antialiased}.wf-issues-table{table-layout:fixed;width:100%}div.wfIssue{width:100%}div.wfIssue table.wfIssue td{padding:2px;margin:0;border-width:0;text-align:left;width:100%}div.wfIssue table.wfIssue th{padding:2px;margin:0;font-weight:bold;text-align:left;color:#777;white-space:nowrap}div.wfIssue table.wfIssueLinks td{border-width:0;text-align:left;padding-right:10px}div.wfIssue h2{margin:0 0 5px 0;padding:0;font-size:0.9rem}@media (min-width: 768px){div.wfIssue h2{font-size:1.05rem}}.wfIssueOptions{border-top:1px solid #CCC;padding:10px}.wfIssueOptions h3{font-size:0.8rem;margin:0}@media (min-width: 768px){.wfIssueOptions h3{display:inline-block}}.wfIssueOptions ul{margin-bottom:0;padding-left:0;list-style:none;display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.wfIssueOptions ul{-webkit-flex-direction:row;flex-direction:row;-webkit-align-items:center;align-items:center}}.wfIssueOptions ul>li>a{position:relative;display:block;padding:8px 12px/2}.wfIssueOptions ul>li>a:hover,.wfIssueOptions ul>li>a:focus{text-decoration:none;background-color:#e2e2e2}.wfIssueOptions a{margin-left:10px}.wfIssueOptions strong{float:left;display:block;width:60px}.wfIssueOptions p{margin:6px 0px 0px}.wfProbSev1,.wfProbSev2,.wfAjaxLight128,.wfResolved{width:128px;height:128px;border:0;margin:0 auto;background-repeat:no-repeat;background-position:0 0;text-decoration:none;display:block}.wfProbSev1{background-image:url(../images/icons/error128.png)}.wfProbSev2{background-image:url(../images/icons/warning128.png)}.wfResolved{background-image:url(../images/icons/tick128.png)}.wfIssuesContainer{width:100%;display:none}.wfIssuesContainer p{max-width:550px}.wfALogTime{color:#999}.wfALogMailLink,.wfALogViewLink{display:block;position:absolute;padding:0 0 0 18px;margin:0;right:10px;top:0;background-repeat:no-repeat;font-weight:normal}.wfALogMailLink{background-image:url(../images/icons/email_go.png)}.wfALogViewLink{background-image:url(../images/icons/magnifier.png)}#wfActivity{position:relative}.consoleHead{position:relative;padding:0 0 0 3px;font-weight:bold;width:100%}.consoleHeadText{margin-bottom:4px;font-size:18px;font-family:Georgia,Times New Roman,Times,serif;color:#555;font-weight:bold;-webkit-font-smoothing:antialiased}.consoleFooter{position:relative}.consoleOuter{width:100%}.consoleInner{height:116px;overflow:auto;z-index:1}.bevelDiv1{border:1px solid #EFEFEF}.bevelDiv2{border:1px solid #AAA}.bevelDiv3{background-color:#ffffed;padding:5px;font-family:Roboto,Helvetica Neue,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased}.wfSecure{color:#0A0;font-weight:bold}.wfSummaryLine{display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.wfSummaryLine{-webkit-flex-direction:row;flex-direction:row}}.wfSummaryLine .wfSummaryDate{padding-left:3px}.wfSummaryLine .wfSummaryMsg{padding-left:3px;-webkit-flex-grow:1;flex-grow:1;min-width:0}.wfSummaryLoading{width:16px;height:11px;background-image:url("../images/icons/ajaxScan.gif")}.wfSummaryBad,.wfSummaryErr{color:#930000}.wfSummaryOK{color:#11967a}.wfSummaryIgnored{color:#a87302}.wfClear{content:".";display:block;height:0;width:0;line-height:0;clear:both;visibility:hidden}.wfSummaryFinal{-webkit-font-smoothing:antialiased;font-weight:bold;color:#555}.wfStartScanButton{text-align:center}.wordfenceScanHelp{border:1px solid #CCC;padding:4px}.wf-scan-no-issues{font-size:1.25rem;color:#11967a}.wf-scan-severity{position:relative;width:10px}@media (min-width: 768px){.wf-scan-severity{width:144px}}.wf-scan-severity-1,.wf-scan-severity-2{position:absolute;top:0px;right:0px;bottom:0px;left:0px}.wf-scan-severity-1{background-color:#c10000}.wf-scan-severity-2{background-color:#ffd10a}.scan-schedule{border-collapse:collapse;border-spacing:0}.scan-schedule tr:first-of-type th{padding-top:0}.scan-schedule td{padding:0}.scan-schedule th{padding:1.5rem 0.5rem 0.75rem 0;font-size:1rem;text-align:left}@media (min-width: 768px){.scan-schedule th{padding:0 0.5rem 0 0;font-size:0.8125rem;text-align:center}}.next-scan{font-size:1em;display:block;position:relative;width:7em;height:7em;background-color:#fff;border-radius:0.6em;box-shadow:0 1px 0 rgba(189,189,189,0.6);overflow:hidden}.next-scan *{display:block;width:100%;font-size:1em;font-weight:bold;font-style:normal;text-align:center}.next-scan strong{position:absolute;top:0;padding:0.4em 0;color:#fff;background-color:#00709E;box-shadow:0 2px 0 #00709E}.next-scan em{position:absolute;bottom:0.3em;color:#00709E}.next-scan span{width:100%;font-size:2.8em;padding-top:1.15em;color:#2f2f2f}#wf-lt-listings .wfActEvent{padding-left:15px;border-left:5px solid #cccccc}#wf-lt-listings .wfActEvent.wfHuman{border-left:5px solid #16bc9b}#wf-lt-listings .wfActEvent.wfActionBlocked{border-left:5px solid #d03935}#wf-lt-listings .wfActEvent.wfNotice{border-left:5px solid #c10000}#wf-lt-listings .wfActEvent.wfWarning,#wf-lt-listings .wfActEvent.wf404,#wf-lt-listings .wfActEvent.wfFailedLogin{border-left:5px solid #ffd10a}#wf-lt-listings .wfActEvent:hover{background-color:#fff9e9 !important}.wf-live-traffic-controls{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column;width:100%;margin-bottom:0}.wf-live-traffic-controls>*:first-child{-webkit-flex-grow:1;flex-grow:1}.wf-live-traffic-controls>*:last-child{-webkit-flex-grow:0;flex-grow:0}@media (min-width: 768px){.wf-live-traffic-controls{-webkit-flex-direction:row;flex-direction:row}}.wf-live-traffic-filter{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start}@media (min-width: 768px){.wf-live-traffic-filter{-webkit-flex-direction:row;flex-direction:row}}.wf-live-traffic-filter>*{padding:0.5rem}.wf-live-traffic-filter h2{margin:0;padding-bottom:0.5rem}@media (min-width: 768px){.wf-live-traffic-filter h2{padding-bottom:0;padding-right:0.5rem}}.wf-live-traffic-show-expanded{text-align:right;padding:0.5rem}@media (max-width: 1330px){.wf-live-traffic-show-expanded{display:none}}#wf-lt-advanced-filters{padding-left:0;padding-right:0;overflow:hidden}.wf-live-traffic-filter-detail{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.wf-live-traffic-filter-detail{-webkit-flex-direction:row;flex-direction:row}.wf-live-traffic-filter-detail *{-webkit-flex-grow:1;flex-grow:1}}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-remove{margin-left:0.5rem;font-size:1.5rem;color:#333}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters div{padding:0.25rem 0}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters select{font-size:0.75rem !important}@media (min-width: 768px){.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters{-webkit-flex-direction:row;flex-direction:row;-webkit-align-items:center;align-items:center}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters div{padding:0}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters select{font-size:1rem !important}}.wf-filtered-traffic .wf-filtered-traffic-hits{font-size:1.75rem;color:#999999;margin-top:10px}#wf-live-traffic{position:relative;overflow:visible}#wf-live-traffic-legend{white-space:nowrap;background-color:#fff;padding:0.75rem 0px;position:fixed;width:320px;height:17px;top:auto;bottom:0px;right:auto;left:10px;z-index:2000;box-shadow:0px 0px 5px rgba(0,0,0,0.5);padding-left:1rem}@media (min-width: 768px){#wf-live-traffic-legend{left:182px}}@media (max-width: 1330px){#wf-live-traffic-legend{display:none}}#wf-live-traffic-legend-placeholder{display:none;padding:12px}#wf-live-traffic-legend-placeholder.sticky{display:block}#wf-live-traffic-legend ul{margin:0;padding:0}#wf-live-traffic-legend ul:before,#wf-live-traffic-legend ul:after{content:" ";display:table}#wf-live-traffic-legend ul:after{clear:both}#wf-live-traffic-legend ul li{margin:0 1rem 0 0;padding:0;position:relative;float:left;font-size:0.7185rem}@media (min-width: 768px){#wf-live-traffic-legend ul li{font-size:0.8125rem}}#wf-live-traffic-legend ul li+li{margin-left:0.5rem}#wf-live-traffic-legend ul li:before,.wf-live-traffic-hit-type:before{content:'';display:inline-block;margin:3px 6px 0 0;width:12px;height:12px;background-color:#CCCCCC;border-radius:10px;vertical-align:-2px}#wf-live-traffic-legend ul li.wfHuman:before,.wf-live-traffic-hit-type.wfHuman:before{background-color:#16bc9b}#wf-live-traffic-legend ul li.wfNotice:before,.wf-live-traffic-hit-type.wfNotice:before,#wf-live-traffic-legend ul li.wf404:before,.wf-live-traffic-hit-type.wf404:before,#wf-live-traffic-legend ul li.wfFailedLogin:before,.wf-live-traffic-hit-type.wfFailedLogin:before{background-color:#ffd10a}#wf-live-traffic-legend ul li.wfBlocked:before,.wf-live-traffic-hit-type.wfBlocked:before,#wf-live-traffic-legend ul li.wfActionBlocked:before,.wf-live-traffic-hit-type.wfActionBlocked:before{background-color:#d03935}.wfTimeAgo{font-family:Georgia,Times New Roman,Times,serif;color:#999;font-weight:bold;font-style:italic}.wfActEvent{border-bottom:1px solid #CCC;padding:10px 20px;overflow:auto}.wf-pad-small{margin:8px 0}#wf-lt-listings{margin:0 0 0}#wf-lt-listings a{cursor:pointer;text-decoration:none}#wf-lt-listings a:hover{text-decoration:underline}#wf-lt-listings a.button,#wf-lt-listings a.wf-btn{text-decoration:none}[class*="span"]{float:left;min-height:1px;margin-left:30px}.highlighted,.highlighted td,#wf-live-traffic .wf-striped-table .highlighted td{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-moz-keyframes highlighted{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#ffffff}}@-webkit-keyframes highlighted{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#ffffff}}@keyframes highlighted{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#ffffff}}@-moz-keyframes highlightedBlocked{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#fff6f6}}@-webkit-keyframes highlightedBlocked{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#fff6f6}}@keyframes highlightedBlocked{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#fff6f6}}.highlighted,.highlighted td,#wf-live-traffic .wf-striped-table .highlighted td{-webkit-animation-name:highlighted;animation-name:highlighted}.highlighted.wfActionBlocked,.highlighted td.wfActionBlocked,#wf-live-traffic .wf-striped-table .highlighted td.wfActionBlocked{-webkit-animation-name:highlightedBlocked;animation-name:highlightedBlocked}#wf-lt-preset-filters{min-width:250px}#wf-lt-advanced-filters>table{width:100%}#wf-lt-advanced-filters>table>tr>td{vertical-align:top}.wf-lt-url{white-space:nowrap}.wf-live-traffic-filter label{font-weight:normal}#wf-live-traffic .wf-striped-table th,#wf-live-traffic .wf-striped-table td{padding:.5rem .6rem}#wf-live-traffic .wf-striped-table th{white-space:nowrap}#wf-live-traffic .wf-striped-table tbody tr:hover>td{background-color:#e7f5ff}#wf-live-traffic .wf-live-traffic-show-details{font-size:1.5rem;color:#9a9a9a;text-align:center;cursor:hand}#wf-live-traffic .wf-live-traffic-show-details .wf-ion-eye-disabled{display:none}#wf-live-traffic .wf-details-open .wf-live-traffic-show-details .wf-ion-eye-disabled{display:inline-block}#wf-live-traffic .wf-details-open .wf-live-traffic-show-details .wf-ion-eye{display:none}#wf-live-traffic.wf-live-traffic-display-expanded .wf-summary-row{display:none}#wf-live-traffic.wf-live-traffic-display-expanded .wf-live-traffic-activity-detail h2{display:none}#wf-live-traffic.wf-live-traffic-display-expanded .wf-striped-table thead{display:none}#wf-live-traffic .wf-details-hidden .wf-live-traffic-details,#wf-live-traffic .wf-details-visible .wf-live-traffic-details{transition:padding 200ms}#wf-live-traffic .wf-details-hidden .wf-live-traffic-details{padding:0 .6rem}#wf-live-traffic .wf-details-visible .wf-live-traffic-details,#wf-live-traffic.wf-live-traffic-display-expanded .wf-details-hidden .wf-live-traffic-details{padding:.8rem .6rem}#wf-live-traffic.wf-live-traffic-display-expanded .wf-details-hidden .wf-live-traffic-details{border-top:1px solid #e2e2e2}#wf-live-traffic .wf-details-hidden .wf-live-traffic-activity-detail-wrapper,#wf-live-traffic .wf-details-visible .wf-live-traffic-activity-detail-wrapper{transition:opacity 200ms, max-height 200ms ease-out;overflow:hidden}#wf-live-traffic .wf-details-hidden .wf-live-traffic-activity-detail-wrapper{opacity:0;max-height:0px}#wf-live-traffic .wf-details-visible .wf-live-traffic-activity-detail-wrapper,#wf-live-traffic.wf-live-traffic-display-expanded .wf-details-hidden .wf-live-traffic-activity-detail-wrapper{opacity:1;max-height:800px}#wf-live-traffic .wf-block-ip-btn{display:none}#wf-live-traffic-group-by{width:100%}#wf-live-traffic-no-group-by{overflow-x:auto}@media (max-width: 1330px){#wf-live-traffic .wf-summary-row{display:none}#wf-live-traffic .wf-live-traffic-activity-detail h2{display:none}#wf-live-traffic .wf-striped-table thead{display:none}#wf-live-traffic .wf-details-hidden .wf-live-traffic-details{padding:0.8rem 0.6rem}#wf-live-traffic .wf-details-hidden .wf-live-traffic-details{border-top:1px solid #e2e2e2}#wf-live-traffic .wf-details-hidden .wf-live-traffic-activity-detail-wrapper{opacity:1;max-height:300px}#wf-live-traffic-no-group-by .wf-striped-table{table-layout:fixed}}.wf-live-traffic-activity-type{text-align:center;float:left;width:65px}@media (min-width: 768px){.wf-live-traffic-activity-type{width:85px}}@media (min-width: 992px){.wf-live-traffic-activity-type{width:105px}}@media (min-width: 1200px){.wf-live-traffic-activity-type{width:125px}}.wf-live-traffic-activity-type .wf-live-traffic-type-icon{font-size:3rem;color:#CCCCCC}@media (min-width: 768px){.wf-live-traffic-activity-type .wf-live-traffic-type-icon{font-size:4rem}}@media (min-width: 992px){.wf-live-traffic-activity-type .wf-live-traffic-type-icon{font-size:5rem}}@media (min-width: 1200px){.wf-live-traffic-activity-type .wf-live-traffic-type-icon{font-size:6rem}}.wf-live-traffic-activity-type .wf-live-traffic-type-icon.wf-icon-human{color:#16bc9b}.wf-live-traffic-activity-type .wf-live-traffic-type-icon.wf-icon-warning{color:#ffd10a}.wf-live-traffic-activity-type .wf-live-traffic-type-icon.wf-icon-blocked{color:#d03935}.wf-live-traffic-activity-detail{margin:0;margin-left:90px}@media (min-width: 768px){.wf-live-traffic-activity-detail{margin-left:110px}}@media (min-width: 992px){.wf-live-traffic-activity-detail{margin-left:130px}}@media (min-width: 1200px){.wf-live-traffic-activity-detail{margin-left:150px}}.wf-live-traffic-activity-detail h2{margin:0px 0px .5rem}.wf-live-traffic-actions{margin:.5rem 0px 0px}#wf-live-traffic-util-overlay-wrapper{position:fixed;top:32px;right:0px;bottom:0px;left:0px;background-color:rgba(0,0,0,0.5);z-index:3000}#wf-live-traffic-util-overlay-wrapper .wf-live-traffic-util-overlay{position:fixed;top:32px;right:0px;bottom:0px;left:auto;max-width:800px;background-color:#ffffff;overflow:auto}#wf-live-traffic-util-overlay-wrapper .wf-live-traffic-util-overlay-header,#wf-live-traffic-util-overlay-wrapper .wf-live-traffic-util-overlay-body{padding:1rem 1.5rem}#wf-live-traffic-util-overlay-wrapper .wf-live-traffic-util-overlay-body{padding:1rem 1.5rem 1rem 3rem}#wf-live-traffic-util-overlay-wrapper .wf-live-traffic-util-overlay-header{background-color:#e9e9e9;border:1px solid #ffd10a;border-width:10px 0px}#wf-live-traffic-util-overlay-wrapper .wf-live-traffic-util-overlay-body .wf-flex-row{margin:0.6rem 0}#wf-live-traffic-util-overlay-wrapper .wf-live-traffic-actions{display:none}#wf-live-traffic-util-overlay-wrapper .wf-live-traffic-util-overlay-close{position:absolute;top:20px;right:16px;font-size:20px;cursor:pointer}#wf-live-traffic-util-overlay-wrapper .wf-live-traffic-activity-detail div{margin:0px 0px 0.6rem}#wf-live-traffic-util-overlay-wrapper .wf-block-ip-btn{display:inline-block}#wf-live-traffic-options .wf-block-list .wf-option-text .wf-option-title{width:30%}.wf-recent-traffic-table{font-size:.7rem}.wf-recent-traffic-table th,.wf-recent-traffic-table td{vertical-align:top}.wf-recent-traffic-table th{text-align:left;white-space:nowrap}.wf-recent-traffic-table td{word-wrap:break-word;word-break:break-all}.wf-recent-traffic-table .wf-recent-traffic-table-row-border td div{border-top:1px solid #e2e2e2;margin:10px 0}.wf-live-traffic-none{padding:0.5rem 0.6rem}.wf-flag.wf-flag-unspecified{width:16px;height:16px;background:none}.wf-flag.wf-flag-unspecified path{fill:#9f9fa0}table.block-ranges-table{border-collapse:collapse;margin:10px 0 0}table.block-ranges-table tr td{border:1px solid #CCC;border-width:1px 0;padding:10px 0 12px 0}#input-wafStatus,#input-wafStatus option,.wfselect2-container--default{font-size:0.7rem;font-weight:bold}@media (min-width: 768px){#input-wafStatus,#input-wafStatus option,.wfselect2-container--default{font-size:0.8rem}}@media (min-width: 992px){#input-wafStatus,#input-wafStatus option,.wfselect2-container--default{font-size:0.9rem}}.wfselect2-results__options{border-top:1px solid #e2e2e2}.wafStatus-enabled,.wafStatus-learning-mode,.wafStatus-disabled,.wafStatus-enabled.wfselect2-container--default .wfselect2-selection--single,.wafStatus-learning-mode.wfselect2-container--default .wfselect2-selection--single,.wafStatus-disabled.wfselect2-container--default .wfselect2-selection--single{height:40px;border-radius:0;border:0;background-color:#fff;box-shadow:1px 1px 1px 2px rgba(215,215,215,0.35)}.wafStatus-enabled .wfselect2-selection__rendered,.wafStatus-learning-mode .wfselect2-selection__rendered,.wafStatus-disabled .wfselect2-selection__rendered,.wafStatus-enabled.wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered,.wafStatus-learning-mode.wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered,.wafStatus-disabled.wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered{color:#333;line-height:40px}.wafStatus-enabled .wfselect2-selection__arrow,.wafStatus-learning-mode .wfselect2-selection__arrow,.wafStatus-disabled .wfselect2-selection__arrow,.wafStatus-enabled.wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow,.wafStatus-learning-mode.wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow,.wafStatus-disabled.wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow{height:38px}#waf-config-form .waf-config-label{font-size:1.3em}#waf-config-form .wfselect2-container--default .wfselect2-selection--single{padding:0.4rem;text-shadow:0 0 3px #000000;font-weight:bold}#waf-config-form .wfselect2-container .wfselect2-selection--single{height:auto}#waf-config-form .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow{height:100%;top:0}.wafStatus-enabled.wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow b,.wafStatus-learning-mode.wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow b,.wafStatus-disabled.wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:#333 transparent transparent}.wafStatus-enabled.wfselect2-container--default.wfselect2-container--open .wfselect2-selection--single .wfselect2-selection__arrow b,.wafStatus-learning-mode.wfselect2-container--default.wfselect2-container--open .wfselect2-selection--single .wfselect2-selection__arrow b,.wafStatus-disabled.wfselect2-container--default.wfselect2-container--open .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:transparent transparent #333}#waf-learning-mode-grace-period{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row}#waf-learning-mode-grace-period span{padding:0 0.5rem 0 1rem}#waf-learning-mode-grace-period input{width:auto}#whitelist-form{padding-top:0.5rem}#whitelist-form .wfselect2-container--default .wfselect2-selection--single{display:block;width:100%;height:38px;padding:.5rem 1.25rem;font-size:14px;line-height:1.42857;color:#2b2b2b;background-color:#fff;background-image:none;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,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}#whitelist-form .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered{color:#2b2b2b;line-height:inherit}#whitelist-form .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow{height:38px}#whitelist-form-separator{margin:1rem 0}#whitelist-table-controls{margin-bottom:0.5rem}#whitelist-table-controls .wfselect2-container--default{text-align:left !important}#whitelist-table-controls .wf-select-group{-webkit-justify-content:flex-end !important;justify-content:flex-end !important}.whitelist-table-container{overflow-x:auto}table.whitelist-table .whitelist-edit{display:none}table.whitelist-table .edit-mode .whitelist-display{display:none}table.whitelist-table .edit-mode .whitelist-edit{display:block}table.whitelist-table .edit-mode span.whitelist-edit,table.whitelist-table .edit-mode input.whitelist-edit{display:inline}.wf-bulk-action{margin:12px 0}tr.wf-table-filters input{max-width:120px}.wf-waf-status-disabled{padding:2rem 0}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status .wf-block-labeled-value-value{padding-top:0}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status .wf-block-labeled-value-value .wf-fa{font-size:8rem}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status .wf-block-labeled-value-value svg{width:160px}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status .wf-block-labeled-value-label{font-size:1.3125rem;font-weight:300;line-height:1.5;padding-bottom:0}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-full-enabled{background-color:#00709e}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-full-enabled .wf-block-labeled-value-value{color:#ffffff}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-full-enabled .wf-block-labeled-value-label{color:#ffffff;padding:0}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-enabled .wf-block-labeled-value-value{color:#00709e}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-enabled .wf-block-labeled-value-value svg{fill:#00709e}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-enabled .wf-block-labeled-value-label{color:#00709e}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-learning-mode .wf-block-labeled-value-value,.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-disabled .wf-block-labeled-value-value{color:#9f9fa0}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-learning-mode .wf-block-labeled-value-value svg,.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-disabled .wf-block-labeled-value-value svg{fill:#9f9fa0}.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-learning-mode .wf-block-labeled-value-label,.wf-block .wf-block-content .wf-block-labeled-value.wf-waf-status-disabled .wf-block-labeled-value-label{color:#9f9fa0}.wf-waf-coverage li{-webkit-align-items:flex-start !important;align-items:flex-start !important}.wf-waf-navigation .wf-block-navigation-option-content,.wf-blocking-status .wf-block-navigation-option-content{padding:1.5rem 0 1.5rem 1.0rem}.wf-waf-navigation .wf-block-navigation-option-content h4,.wf-blocking-status .wf-block-navigation-option-content h4{margin:0 0 0.25rem 0}.wf-waf-navigation .wf-block-navigation-option-content p,.wf-blocking-status .wf-block-navigation-option-content p{margin:0 0 0.45rem 0}.wf-blocking-status>li{-webkit-flex-grow:0 !important;flex-grow:0 !important;-webkit-flex-basis:66.66667% !important;flex-basis:66.66667% !important}.wf-blocking-status>li:first-of-type{-webkit-flex-basis:33.33333% !important;flex-basis:33.33333% !important}.wf-blocking-status-premium>li{-webkit-flex-grow:0 !important;flex-grow:0 !important;-webkit-flex-basis:33.33333% !important;flex-basis:33.33333% !important}ul.wf-option.wf-option-rate-limit *{-webkit-flex-grow:1;flex-grow:1}ul.wf-option.wf-option-rate-limit *:first-child{-webkit-flex-grow:0;flex-grow:0}ul.wf-option.wf-option-rate-limit .wfselect2-container{min-width:100px}@media (min-width: 768px){ul.wf-option.wf-option-rate-limit .wfselect2-container{min-width:140px}}@media (min-width: 992px){ul.wf-option.wf-option-rate-limit .wfselect2-container{min-width:140px}}#waf-rules-wrapper tbody tr:nth-of-type(n+10){display:none}#waf-rules-wrapper.wf-show-all tbody tr:nth-of-type(n+10){display:table-row}#waf-rules-wrapper.wf-show-all #waf-show-all-rules{display:none}.wf-waf-backup-file-list{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row}.wf-waf-backup-file-list>*{margin-left:0.5rem !important}.wf-waf-backup-file-list>*:first-child{margin-left:0 !important}#wf-option-loginSecurityEnabled .wf-option-subtitle{font-size:.875rem}.wf-rate-limit-warning{display:none;padding-top:1rem}.wf-rate-limit-warning .wf-inline-notice{display:inline-block}.wf-scan-status-disabled{padding:2rem 0}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status .wf-block-labeled-value-value{padding-top:0}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status .wf-block-labeled-value-value .wf-fa{font-size:8rem}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status .wf-block-labeled-value-value svg{width:160px}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status .wf-block-labeled-value-label{font-size:1.3125rem;font-weight:300;line-height:1.5;padding-bottom:0}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status-full-enabled{background-color:#00709e}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status-full-enabled .wf-block-labeled-value-value{color:#ffffff}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status-full-enabled .wf-block-labeled-value-label{color:#ffffff;padding:0}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status-enabled .wf-block-labeled-value-value{color:#00709e}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status-enabled .wf-block-labeled-value-value svg{fill:#00709e}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status-enabled .wf-block-labeled-value-label{color:#00709e}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status-disabled .wf-block-labeled-value-value{color:#9f9fa0}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status-disabled .wf-block-labeled-value-value svg{fill:#9f9fa0}.wf-block .wf-block-content .wf-block-labeled-value.wf-scan-status-disabled .wf-block-labeled-value-label{color:#9f9fa0}.wf-scan-navigation .wf-block-navigation-option-content{padding:1.5rem 0 1.5rem 1.0rem}.wf-scan-navigation .wf-block-navigation-option-content h4{margin:0 0 0.25rem 0}.wf-scan-navigation .wf-block-navigation-option-content p{margin:0 0 0.45rem 0}#wf-scan-starter{-webkit-justify-content:center;justify-content:center}#wf-scan-starter:hover{cursor:unset}#wf-scan-starter:hover a{text-decoration:none}.wf-scanner-progress{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;margin-top:0.5rem;margin-bottom:0.5rem;background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB3aWR0aD0iMXB4IiBoZWlnaHQ9IjZweCIgdmlld0JveD0iMCAwIDEgNiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3BhY2U9InByZXNlcnZlIj4KCTxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IiNkMWQxZDEiLz48cmVjdCB4PSIwIiB5PSI1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSIjZDFkMWQxIi8+Cjwvc3ZnPg==");background-repeat:repeat-x;background-position:center 24px;overflow-x:auto;overflow-y:hidden}.wf-scanner-progress>.wf-scan-step{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;-webkit-flex-direction:column;flex-direction:column;padding-left:0.5rem;padding-right:0.5rem}.wf-scanner-progress>.wf-scan-step:first-of-type{padding-left:0;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iNTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PHN0b3Agb2Zmc2V0PSI1MSUiIHN0b3AtY29sb3I9IiNmZmZmZmYiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #ffffff),color-stop(50%, #ffffff),color-stop(51%, rgba(255,255,255,0)),color-stop(100%, rgba(255,255,255,0)));background-image:-moz-linear-gradient(left, #ffffff 0%,#ffffff 50%,rgba(255,255,255,0) 51%,rgba(255,255,255,0) 100%);background-image:-webkit-linear-gradient(left, #ffffff 0%,#ffffff 50%,rgba(255,255,255,0) 51%,rgba(255,255,255,0) 100%);background-image:linear-gradient(to right, #ffffff 0%,#ffffff 50%,rgba(255,255,255,0) 51%,rgba(255,255,255,0) 100%);background-repeat:no-repeat;background-position:left center}.wf-scanner-progress>.wf-scan-step:last-of-type{padding-right:0;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjQ5JSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(49%, rgba(255,255,255,0)),color-stop(50%, #ffffff),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,rgba(255,255,255,0) 49%,#ffffff 50%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,rgba(255,255,255,0) 49%,#ffffff 50%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,rgba(255,255,255,0) 49%,#ffffff 50%,#ffffff 100%);background-repeat:no-repeat;background-position:right center}.wf-scanner-progress>.wf-scan-step>.wf-scan-step-title{font-size:0.7rem;padding-top:0.5rem;white-space:nowrap}.wf-scanner-progress>.wf-scan-step>.wf-scan-step-subtitle{font-size:0.7rem}.wf-scanner-progress>.wf-scan-step>.wf-scan-step-icon>.wf-scan-step-pending,.wf-step-pending{width:50px;height:54px;background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB3aWR0aD0iMTRweCIgaGVpZ2h0PSIxNHB4IiB2aWV3Qm94PSIwIDAgMTQgMTQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+Cgk8Y2lyY2xlIGN4PSI3IiBjeT0iNyIgcj0iNyIgZmlsbD0iI2QxZDFkMSIvPgo8L3N2Zz4=");background-repeat:no-repeat;background-position:center center}.wf-scanner-progress>.wf-scan-step>.wf-scan-step-icon>.wf-scan-step-running,.wf-step-running{display:none;background-color:#ffffff !important}.wf-scanner-progress>.wf-scan-step>.wf-scan-step-icon>.wf-scan-step-complete-success,.wf-step-complete-success{display:none;width:50px;height:54px;background:#fff url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHdpZHRoPSI1MHB4IiBoZWlnaHQ9IjUwcHgiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTk4LjI4NywyMS4wMjVsLTcuODIzLC03LjgxMmMtMS4wNjYsLTEuMDkyIC0yLjUyOCwtMS43MDggLTQuMDU0LC0xLjcwOGMtMS41MjUsMCAtMi45ODgsMC42MTYgLTQuMDUzLDEuNzA4bC00Ni4wMTIsNDYuMDEybC0xOC43MTMsLTE4LjcxMmMtMS4wNjYsLTEuMDkgLTIuNTI5LC0xLjcwNCAtNC4wNTMsLTEuNzA0Yy0xLjUyNSwwIC0yLjk4NywwLjYxNCAtNC4wNTQsMS43MDRsLTcuODEyLDcuODM0Yy0xLjA5MiwxLjA2NSAtMS43MDgsMi41MjggLTEuNzA4LDQuMDUzYzAsMS41MjYgMC42MTYsMi45ODggMS43MDgsNC4wNTRsMzAuNTUxLDMwLjU1MWMxLjA2NywxLjA4OSAyLjUyOSwxLjcwMyA0LjA1NCwxLjcwM2MxLjUyNCwwIDIuOTg2LC0wLjYxNCA0LjA1MywtMS43MDNsNTcuOTE2LC01Ny44NjJjMS4wOTIsLTEuMDY1IDEuNzA4LC0yLjUyOCAxLjcwOCwtNC4wNTNjMCwtMS41MjYgLTAuNjE2LC0yLjk4OCAtMS43MDgsLTQuMDU0bDAsLTAuMDExbDAsMFoiIGZpbGw9IiMwMDcwOWUiLz48L3N2Zz4=");background-repeat:no-repeat;background-position:center center;background-size:80%}.wf-scanner-progress>.wf-scan-step>.wf-scan-step-icon>.wf-scan-step-complete-warning,.wf-step-complete-warning{display:none;width:50px;height:54px;background:#fff url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHdpZHRoPSI1MHB4IiBoZWlnaHQ9IjUwcHgiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTk5LjA1MSw4Mi44NDJsLTQyLjgxMiwtNzguNDgzYy0wLjYxLC0xLjEzMSAtMS41MTQsLTIuMDc3IC0yLjYxNywtMi43MzdjLTIuMjI3LC0xLjMzNCAtNS4wMTcsLTEuMzM0IC03LjI0NCwwYy0xLjEwNiwwLjY1OSAtMi4wMTMsMS42MDUgLTIuNjI1LDIuNzM3bC00Mi44MDQsNzguNDgzYy0xLjI5OSwyLjE2OCAtMS4yNTYsNC44OTYgMC4xMTEsNy4wMjFjMC42MTQsMS4wNjcgMS41LDEuOTUyIDIuNTY2LDIuNTY2YzEuMDc0LDAuNjI3IDIuMjk3LDAuOTU1IDMuNTQxLDAuOTQ5bDg1LjY0MSwwYzIuNTE3LC0wLjAwOSA0Ljg1MiwtMS4zNDcgNi4xMzIsLTMuNTE1YzEuMzY3LC0yLjEyNSAxLjQxLC00Ljg1MyAwLjExMSwtNy4wMjFsMCwwWm0tNDEuOTA2LC01LjU3NmMwLjAxMSwwLjQ5IC0wLjE4MSwwLjk2NCAtMC41MywxLjMwOGMtMC4zMjUsMC4zNDIgLTAuNzc3LDAuNTM0IC0xLjI0OSwwLjUzMWwtMTAuNzE1LDBjLTAuNDcyLDAuMDAzIC0wLjkyNCwtMC4xODkgLTEuMjQ5LC0wLjUzMWMtMC4zNDksLTAuMzQ0IC0wLjU0MiwtMC44MTggLTAuNTMsLTEuMzA4bDAsLTEwLjU4OGMtMC4wMTIsLTAuNDkgMC4xODEsLTAuOTY0IDAuNTMsLTEuMzA4YzAuMzI1LC0wLjM0MSAwLjc3NywtMC41MzMgMS4yNDksLTAuNTNsMTAuNjk4LDBjMC40NzUsLTAuMDA2IDAuOTMsMC4xODcgMS4yNTgsMC41M2MwLjM0OCwwLjM0NSAwLjU0LDAuODE4IDAuNTMsMS4zMDhsMCwxMC41ODhsMC4wMDgsMFptLTAuMTExLC0yMC44NDJjLTAuMDQ1LDAuMzggLTAuMjYzLDAuNzE4IC0wLjU5LDAuOTE2Yy0wLjM4OSwwLjI1IC0wLjg0NiwwLjM3NSAtMS4zMDgsMC4zNTlsLTEwLjMyMywwYy0wLjQ3LDAuMDEzIC0wLjkzNCwtMC4xMTIgLTEuMzM0LC0wLjM1OWMtMC4zMzgsLTAuMTg1IC0wLjU1MSwtMC41MzkgLTAuNTU2LC0wLjkyNGwtMC45NDksLTI1LjQ2OGMtMC4wMywtMC40NiAwLjE4MSwtMC45MDQgMC41NTYsLTEuMTcyYzAuMzU4LC0wLjM1NSAwLjgzMSwtMC41NzMgMS4zMzQsLTAuNjE2bDEyLjI3MiwwYzAuNTA2LDAuMDQgMC45ODIsMC4yNTggMS4zNDMsMC42MTZjMC4zNTcsMC4yMzIgMC41NjgsMC42MzUgMC41NTYsMS4wNmwtMS4wMDEsMjUuNTg4WiIgZmlsbD0iI2ZjYjIxNCIvPjwvc3ZnPg==");background-repeat:no-repeat;background-position:center center;background-size:80%}.wf-scanner-progress>.wf-scan-step>.wf-scan-step-icon>.wf-scan-step-disabled,.wf-step-disabled{display:none;width:50px;height:54px;background:#fff url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHdpZHRoPSI1MHB4IiBoZWlnaHQ9IjUwcHgiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTk1Ljg5LDMwLjUyOGMtMi40OTYsLTUuOTQxIC02LjEwOCwtMTEuMzUxIC0xMC42NDIsLTE1LjkzOGMtNC41NzUsLTQuNTM4IC05Ljk5LC04LjE0OCAtMTUuOTQyLC0xMC42M2MtMTIuNDAxLC01LjI4IC0yNi40NDEsLTUuMjggLTM4Ljg0MiwwYy01Ljk2NSwyLjQ4NSAtMTEuMzg5LDYuMTAxIC0xNS45NzIsMTAuNjVjLTQuNTEsNC41ODYgLTguMTAxLDkuOTg5IC0xMC41ODIsMTUuOTE4Yy01LjI4NywxMi40MzIgLTUuMjg3LDI2LjQ5IDAsMzguOTIxYzIuNDk1LDUuOTQyIDYuMTA3LDExLjM1MyAxMC42NDIsMTUuOTM5YzQuNTgzLDQuNTQ4IDEwLjAwNyw4LjE2NSAxNS45NzIsMTAuNjQ5YzEyLjQsNS4yODQgMjYuNDQyLDUuMjg0IDM4Ljg0MiwwYzUuOTY1LC0yLjQ4NCAxMS4zODksLTYuMTAxIDE1Ljk3MiwtMTAuNjQ5YzQuNTM2LC00LjU4NSA4LjE0OSwtOS45OTYgMTAuNjQyLC0xNS45MzljNS4yODcsLTEyLjQzMSA1LjI4NywtMjYuNDg5IDAsLTM4LjkyMWwtMC4wOSwwWm0tNzUuNjA4LDM4Ljg1MWMtNy4zMDIsLTExLjIxMiAtNy42ODksLTI1LjYyIC0wLjk5OCwtMzcuMjA3YzMuMDc1LC01LjM3NSA3LjUyMiwtOS44NDQgMTIuODg3LC0xMi45NWM1LjM3NSwtMy4xMjkgMTEuNDk3LC00Ljc1NCAxNy43MTksLTQuNzAyYzYuOTU1LC0wLjA2IDEzLjc2NiwyLjAwMiAxOS41MTYsNS45MDdsLTQ5LjEyNCw0OC45NTJabTYyLjIwMSwtNS42NDhjLTEuNzU1LDQuMjI4IC00LjMxOCw4LjA3NiAtNy41NDcsMTEuMzI2Yy0zLjI0MywzLjIyOSAtNy4wNzYsNS44MDkgLTExLjI5LDcuNjAxYy00LjM0MywxLjg4MyAtOS4wMzEsMi44NDYgLTEzLjc2NiwyLjgyOWMtNi44NzIsMC4wMDggLTEzLjU5NSwtMi4wMTcgLTE5LjMxNiwtNS44MTdsNDkuMDU0LC00OC44MTNjMy43NDEsNS42ODcgNS43MTEsMTIuMzU0IDUuNjYsMTkuMTU3YzAuMDAzLDQuNzEzIC0wLjk0OCw5LjM3OSAtMi43OTUsMTMuNzE3bDAsMFoiIGZpbGw9IiNkMWQxZDEiLz48L3N2Zz4=");background-repeat:no-repeat;background-position:center center;background-size:80%}.wf-scanner-progress>.wf-scan-step>.wf-scan-step-icon>.wf-scan-step-premium,.wf-step-premium{width:50px;height:54px;background:#fff url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB3aWR0aD0iMjRweCIgaGVpZ2h0PSIzMHB4IiB2aWV3Qm94PSIwIDAgMjQgMzAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxwYXRoIGQ9Ik0yMy45NDksMTQuMjMzYy0wLjM3OSwtMC4zOSAtMC45MDQsLTAuNjA2IC0xLjQ0OCwtMC41OTVsLTAuNjgzLDBsMCwtNC4wOTJjMC4wMzIsLTIuNTM1IC0wLjk4NiwtNC45NzMgLTIuODEyLC02LjczMWMtMS43NTksLTEuODI4IC00LjE5OCwtMi44NDcgLTYuNzM0LC0yLjgxNWMtMi41MzYsLTAuMDMyIC00Ljk3NiwwLjk4NyAtNi43MzQsMi44MTVjLTEuODI2LDEuNzU4IC0yLjg0NCw0LjE5NiAtMi44MTIsNi43MzFsMCw0LjA4OWwtMC42OCwwYy0wLjU0NCwtMC4wMTEgLTEuMDY5LDAuMjA1IC0xLjQ0OCwwLjU5NWMtMC4zOTUsMC4zODIgLTAuNjEyLDAuOTEyIC0wLjU5OCwxLjQ2MWwwLDEyLjI2NmMtMC4wMTEsMC41NDQgMC4yMDQsMS4wNjkgMC41OTUsMS40NDhjMC4zNzksMC4zOTEgMC45MDQsMC42MDYgMS40NDgsMC41OTVsMjAuNDU4LDBjMC4wMDMsMCAwLjAwNiwwIDAuMDEsMGMxLjExNywwIDIuMDM2LC0wLjkxOSAyLjAzNiwtMi4wMzdjMCwtMC4wMDMgMCwtMC4wMDYgMCwtMC4wMDlsMCwtMTIuMjYzYzAuMDExLC0wLjU0NCAtMC4yMDYsLTEuMDY5IC0wLjU5OCwtMS40NDhsMCwtMC4wMVptLTYuMjExLC0wLjU5NWwtMTAuOTE5LDBsMCwtNC4wOTJjLTAuMDIyLC0xLjQ1MSAwLjU1NywtMi44NDggMS41OTksLTMuODU4YzEuMDA5LC0xLjA0MiAyLjQwNywtMS42MjEgMy44NTcsLTEuNTk4YzEuNDUxLC0wLjAyMyAyLjg0OCwwLjU1NiAzLjg1OCwxLjU5OGMxLjA0MiwxLjAwOSAxLjYyMSwyLjQwNyAxLjU5OCwzLjg1OGwwLjAwNyw0LjA5MloiIGZpbGw9IiNkMWQxZDEiLz4KPC9zdmc+");background-repeat:no-repeat;background-position:center center;background-size:40%}.wf-scanner-progress>.wf-scan-step.wf-scan-step-premium>.wf-scan-step-icon>.wf-scan-step-pending{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-premium>.wf-scan-step-icon>.wf-scan-step-running{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-premium>.wf-scan-step-icon>.wf-scan-step-complete-success{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-premium>.wf-scan-step-icon>.wf-scan-step-complete-warning{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-premium>.wf-scan-step-icon>.wf-scan-step-disabled{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-running>.wf-scan-step-icon>.wf-scan-step-pending{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-running>.wf-scan-step-icon>.wf-scan-step-running{display:block}.wf-scanner-progress>.wf-scan-step.wf-scan-step-running>.wf-scan-step-icon>.wf-scan-step-complete-success{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-running>.wf-scan-step-icon>.wf-scan-step-complete-warning{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-running>.wf-scan-step-icon>.wf-scan-step-disabled{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-success>.wf-scan-step-icon>.wf-scan-step-pending{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-success>.wf-scan-step-icon>.wf-scan-step-running{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-success>.wf-scan-step-icon>.wf-scan-step-complete-success{display:block}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-success>.wf-scan-step-icon>.wf-scan-step-complete-warning{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-success>.wf-scan-step-icon>.wf-scan-step-disabled{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-warning>.wf-scan-step-icon>.wf-scan-step-pending{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-warning>.wf-scan-step-icon>.wf-scan-step-running{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-warning>.wf-scan-step-icon>.wf-scan-step-complete-success{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-warning>.wf-scan-step-icon>.wf-scan-step-complete-warning{display:block}.wf-scanner-progress>.wf-scan-step.wf-scan-step-complete-warning>.wf-scan-step-icon>.wf-scan-step-disabled{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-disabled>.wf-scan-step-icon>.wf-scan-step-pending{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-disabled>.wf-scan-step-icon>.wf-scan-step-running{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-disabled>.wf-scan-step-icon>.wf-scan-step-complete-success{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-disabled>.wf-scan-step-icon>.wf-scan-step-complete-warning{display:none}.wf-scanner-progress>.wf-scan-step.wf-scan-step-disabled>.wf-scan-step-icon>.wf-scan-step-disabled{display:block}#wf-scan-last-status{font-size:0.75rem;text-align:center}@media (min-width: 768px){#wf-scan-last-status{text-align:left}}#wf-scan-activity-log-controls{-webkit-flex-shrink:0;flex-shrink:0;text-align:center;white-space:nowrap}@media (min-width: 768px){#wf-scan-activity-log-controls{text-align:right}}#wf-scan-activity-log-controls a{text-transform:uppercase;font-size:0.75rem;white-space:nowrap}#wf-scan-toggle-activity-log .wf-scan-activity-log-visible{display:none}#wf-scan-toggle-activity-log .wf-scan-activity-log-hidden{display:inline}#wf-scan-toggle-activity-log.wf-active .wf-scan-activity-log-visible{display:inline}#wf-scan-toggle-activity-log.wf-active .wf-scan-activity-log-hidden{display:none}#wf-scan-running-bar{height:4px;border:1px solid #e2e2e2;background-color:#ffffff;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}#wf-scan-running-bar-pill{height:4px;background-color:#00709e;width:33.3333%;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-animation:wf-scan-running-bar-pill-keyframes 1s linear infinite alternate both;-o-animation:wf-scan-running-bar-pill-keyframes 1s linear infinite alternate both;animation:wf-scan-running-bar-pill-keyframes 1s linear infinite alternate both}@-moz-keyframes wf-scan-running-bar-pill-keyframes{from{margin-left:0%}to{margin-left:66.6667%}}@-webkit-keyframes wf-scan-running-bar-pill-keyframes{from{margin-left:0%}to{margin-left:66.6667%}}@keyframes wf-scan-running-bar-pill-keyframes{from{margin-left:0%}to{margin-left:66.6667%}}#wf-scan-activity-log{display:none;overflow-x:hidden;overflow-y:auto;background-color:#ffffff;box-shadow:0 0 0 1px rgba(200,215,225,0.25),0 1px 2px #e9eff3;padding:0.5rem;height:7rem}#wf-scan-activity-log>li{margin:0;padding:0}#wf-scan-activity-log.wf-active{display:block}.wf-scan-tabs{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;box-shadow:inset 0px 0px 0px 1px #f1f1f1,inset 0px -1px 0px 1px #e2e2e2;margin:0.5rem 0 0 0}.wf-scan-tabs>*{-webkit-flex-grow:0;flex-grow:0;min-width:0}.wf-scan-tabs .wf-tab{border:1px solid #d0d0d0;border-top-right-radius:0.5rem;border-top-left-radius:0.5rem;border-bottom:none;margin:0;margin-left:0.5rem;background:#e6e6e6;color:#333}.wf-scan-tabs .wf-tab:first-of-type{margin-left:0}.wf-scan-tabs .wf-tab a{display:block;padding:0.5rem 1rem;font-size:14px;line-height:24px;text-decoration:none;font-weight:bold;color:#333}.wf-scan-tabs .wf-tab.wf-active,.wf-scan-tabs .wf-tab:hover{border-bottom:1px solid #ffffff;background:#ffffff;color:#00709e;margin-bottom:-1px;-webkit-box-shadow:none;box-shadow:none}.wf-scan-tabs .wf-tab.wf-active a,.wf-scan-tabs .wf-tab:hover a{color:#00709e}.wf-scan-tabs #wf-scan-bulk-buttons{-webkit-flex-grow:1 !important;flex-grow:1 !important;text-align:right}.wf-scan-tab-content{display:none;margin-top:15px}.wf-scan-tab-content.wf-active{display:block}.wf-scan-results{margin:0;margin-top:-1px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-left:1px solid #e2e2e2;border-right:1px solid #e2e2e2;border-bottom:1px solid #e2e2e2}.wf-scan-results>.wf-scan-results-stats{margin:0}.wf-scan-results>.wf-scan-results-stats>.wf-block{box-shadow:none;margin:0}.wf-scan-results>.wf-scan-results-stats>.wf-block>.wf-block-content>.wf-block-list>li{border-top:0px;padding:0 1rem}.wf-scan-results>.wf-scan-results-stats>.wf-block>.wf-block-content>.wf-block-list .wf-flex-horizontal>li{font-size:0.75rem;white-space:nowrap;margin:0}.wf-scan-results>.wf-scan-results-stats>.wf-block>.wf-block-content>.wf-block-list .wf-flex-horizontal>li:last-of-type{text-align:right}.wf-scan-results-issues{padding:0;margin:0;display:none}.wf-scan-results-issues.wf-active{display:block}.wf-issue,.wf-issue-site-cleaning{display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column;border-top:1px solid #e2e2e2}.wf-issue:nth-of-type(2n),.wf-issue-site-cleaning:nth-of-type(2n){background-color:#fff}.wf-issue>li,.wf-issue-site-cleaning>li{margin:0}.wf-issue.wf-issue-severity-critical,.wf-issue-site-cleaning.wf-issue-severity-critical{border-left:4px solid #930000}.wf-issue.wf-issue-severity-high,.wf-issue-site-cleaning.wf-issue-severity-high{border-left:4px solid #c10000}.wf-issue.wf-issue-severity-warning,.wf-issue.wf-issue-severity-medium,.wf-issue-site-cleaning.wf-issue-severity-warning,.wf-issue-site-cleaning.wf-issue-severity-medium{border-left:4px solid #fcb214}.wf-issue.wf-issue-severity-low,.wf-issue-site-cleaning.wf-issue-severity-low{border-left:4px solid #3f596b}.wf-issue.wf-issue-severity-good,.wf-issue-site-cleaning.wf-issue-severity-good{border-left:4px solid #16bc9b}.wf-issue>.wf-issue-summary>ul,.wf-issue-site-cleaning>.wf-issue-summary>ul{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row;padding:1.5rem}.wf-issue>.wf-issue-summary>ul>li,.wf-issue-site-cleaning>.wf-issue-summary>ul>li{margin:0;padding:0;padding-left:1.5rem}@media (max-width: 767px){.wf-issue>.wf-issue-summary>ul>li,.wf-issue-site-cleaning>.wf-issue-summary>ul>li{padding-left:0.5rem}}.wf-issue>.wf-issue-summary>ul>li:first-of-type,.wf-issue-site-cleaning>.wf-issue-summary>ul>li:first-of-type{padding-left:0}.wf-issue>.wf-issue-summary>ul>.wf-issue-icon,.wf-issue>.wf-issue-summary>ul>.wf-issue-icon-colored,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-icon,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-icon-colored{text-align:left;-webkit-flex-basis:50px;flex-basis:50px;-webkit-flex-shrink:0;flex-shrink:0}.wf-issue>.wf-issue-summary>ul>.wf-issue-icon>*,.wf-issue>.wf-issue-summary>ul>.wf-issue-icon-colored>*,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-icon>*,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-icon-colored>*{height:40px}.wf-issue>.wf-issue-summary>ul>.wf-issue-icon svg path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-icon svg path{fill:#9e9e9e}.wf-issue>.wf-issue-summary>ul>.wf-issue-short,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short{-webkit-flex-basis:40%;flex-basis:40%}.wf-issue>.wf-issue-summary>ul>.wf-issue-stats,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-stats{-webkit-flex-basis:25%;flex-basis:25%}.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats{-webkit-flex-grow:1;flex-grow:1}.wf-issue>.wf-issue-summary>ul .wf-issue-severity-critical,.wf-issue>.wf-issue-summary>ul .wf-issue-severity-high,.wf-issue>.wf-issue-summary>ul .wf-issue-severity-medium,.wf-issue>.wf-issue-summary>ul .wf-issue-severity-low,.wf-issue>.wf-issue-summary>ul .wf-issue-severity-warning,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-critical,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-high,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-medium,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-low,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-warning{padding-left:18px;position:relative}.wf-issue>.wf-issue-summary>ul .wf-issue-severity-critical:before,.wf-issue>.wf-issue-summary>ul .wf-issue-severity-high:before,.wf-issue>.wf-issue-summary>ul .wf-issue-severity-medium:before,.wf-issue>.wf-issue-summary>ul .wf-issue-severity-low:before,.wf-issue>.wf-issue-summary>ul .wf-issue-severity-warning:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-critical:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-high:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-medium:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-low:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-warning:before{content:'';display:block;position:absolute;top:50%;left:0;margin-top:-5px;border:5px solid #9f9fa0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.wf-issue>.wf-issue-summary>ul .wf-issue-severity-critical:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-critical:before{border-color:#930000}.wf-issue>.wf-issue-summary>ul .wf-issue-severity-high:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-high:before{border-color:#c10000}.wf-issue>.wf-issue-summary>ul .wf-issue-severity-medium:before,.wf-issue>.wf-issue-summary>ul .wf-issue-severity-warning:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-medium:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-warning:before{border-color:#fcb214}.wf-issue>.wf-issue-summary>ul .wf-issue-severity-low:before,.wf-issue-site-cleaning>.wf-issue-summary>ul .wf-issue-severity-low:before{border-color:#3f596b}.wf-issue>.wf-issue-summary>ul>.wf-issue-controls,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls{-webkit-flex-grow:1;flex-grow:1;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-end;justify-content:flex-end;-webkit-flex-direction:row;flex-direction:row}.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;-webkit-flex-direction:column;flex-direction:column;padding-left:2rem;text-decoration:none}.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:first-of-type,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:first-of-type,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:first-of-type,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:first-of-type{padding-left:0}.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control>.wf-issue-control-icon,.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-inactive,.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-active,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control>.wf-issue-control-icon,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-inactive,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-active,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control>.wf-issue-control-icon,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-inactive,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-active,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control>.wf-issue-control-icon,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-inactive,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-active{height:20px}.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control>.wf-issue-control-icon path,.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-inactive path,.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-active path,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control>.wf-issue-control-icon path,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-inactive path,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-active path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control>.wf-issue-control-icon path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-inactive path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-active path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control>.wf-issue-control-icon path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-inactive path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control .wf-issue-control-icon-active path{fill:#9e9e9e;fill-rule:nonzero}.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control>.wf-issue-control-label,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control>.wf-issue-control-label,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control>.wf-issue-control-label,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control>.wf-issue-control-label{padding-top:0.65rem;font-size:0.7rem;font-weight:500;text-transform:uppercase;color:#9e9e9e}.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:hover>.wf-issue-control-icon path,.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:hover .wf-issue-control-icon-inactive path,.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:hover .wf-issue-control-icon-active path,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:hover>.wf-issue-control-icon path,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:hover .wf-issue-control-icon-inactive path,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:hover .wf-issue-control-icon-active path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:hover>.wf-issue-control-icon path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:hover .wf-issue-control-icon-inactive path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:hover .wf-issue-control-icon-active path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:hover>.wf-issue-control-icon path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:hover .wf-issue-control-icon-inactive path,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:hover .wf-issue-control-icon-active path{fill:#00709e}.wf-issue>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:hover>.wf-issue-control-label,.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:hover>.wf-issue-control-label,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-controls>.wf-issue-control:hover>.wf-issue-control-label,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls>.wf-issue-control:hover>.wf-issue-control-label{color:#00709e}.wf-issue>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls,.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short-stats>.wf-issue-controls{margin-top:1rem;-webkit-justify-content:flex-start;justify-content:flex-start}.wf-issue .wf-issue-control-icon-active,.wf-issue-site-cleaning .wf-issue-control-icon-active{display:none}.wf-issue .wf-issue-control-icon-inactive,.wf-issue-site-cleaning .wf-issue-control-icon-inactive{display:block}.wf-issue>.wf-issue-detail,.wf-issue-site-cleaning>.wf-issue-detail{display:none;padding:1.5rem;border-top:1px solid #e2e2e2}.wf-issue>.wf-issue-detail .wf-issue-detail-spacer,.wf-issue-site-cleaning>.wf-issue-detail .wf-issue-detail-spacer{height:1rem;margin:0;padding:0}.wf-issue>.wf-issue-detail .wf-issue-detail-controls,.wf-issue-site-cleaning>.wf-issue-detail .wf-issue-detail-controls{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row;margin:0;margin-top:1rem}.wf-issue>.wf-issue-detail .wf-issue-detail-controls>*,.wf-issue-site-cleaning>.wf-issue-detail .wf-issue-detail-controls>*{margin-left:1rem}.wf-issue>.wf-issue-detail .wf-issue-detail-controls>*:first-of-type,.wf-issue-site-cleaning>.wf-issue-detail .wf-issue-detail-controls>*:first-of-type{margin-left:0}@media (max-width: 767px){.wf-issue>.wf-issue-detail .wf-issue-detail-controls,.wf-issue-site-cleaning>.wf-issue-detail .wf-issue-detail-controls{-webkit-align-items:flex-start;align-items:flex-start;-webkit-flex-direction:column;flex-direction:column}.wf-issue>.wf-issue-detail .wf-issue-detail-controls>*,.wf-issue-site-cleaning>.wf-issue-detail .wf-issue-detail-controls>*{margin-left:0;margin-top:0.5rem}.wf-issue>.wf-issue-detail .wf-issue-detail-controls>*:first-of-type,.wf-issue-site-cleaning>.wf-issue-detail .wf-issue-detail-controls>*:first-of-type{margin-top:0}}.wf-issue.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-show-details>.wf-issue-control-icon path,.wf-issue.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-show-details .wf-issue-control-icon-inactive path,.wf-issue.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-show-details .wf-issue-control-icon-active path,.wf-issue-site-cleaning.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-show-details>.wf-issue-control-icon path,.wf-issue-site-cleaning.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-show-details .wf-issue-control-icon-inactive path,.wf-issue-site-cleaning.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-show-details .wf-issue-control-icon-active path{fill:#00709e}.wf-issue.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-show-details>.wf-issue-control-label,.wf-issue-site-cleaning.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-show-details>.wf-issue-control-label{color:#00709e}.wf-issue.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-icon-inactive,.wf-issue-site-cleaning.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-icon-inactive{display:none}.wf-issue.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-icon-active,.wf-issue-site-cleaning.wf-active>.wf-issue-summary>ul>.wf-issue-controls .wf-issue-control-icon-active{display:block}.wf-issue.wf-active>.wf-issue-detail,.wf-issue-site-cleaning.wf-active>.wf-issue-detail{display:block}.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short{-webkit-flex-basis:auto;flex-basis:auto}.wf-issue-site-cleaning>.wf-issue-summary>ul>.wf-issue-short p{padding:0;margin:0}.wf-option-scan-signatures>.wf-option-disclosure{-webkit-flex-grow:1;flex-grow:1;text-align:right}.wf-option-scan-signatures>.wf-option-disclosure>svg{transition:transform 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275)}#wf-scan-additional-signatures{display:none;margin-left:3rem;padding-left:30px;padding-bottom:1rem}#wf-scan-additional-signatures>h4{margin:0 0 0.5rem 0}#wf-scan-additional-signatures>textarea{width:300px;height:80px}.wf-scan-type-enabled{padding:1rem 0.5rem}.wf-scan-type-enabled>li:first-of-type{padding-right:1.5rem}.wf-scan-type-controls{display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column;margin:0 -0.5rem}.wf-scan-type{display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:center;justify-content:center;-webkit-flex-direction:row;flex-direction:row;min-width:700px}@media (max-width: 767px){.wf-scan-type{-webkit-justify-content:flex-start;justify-content:flex-start}}.wf-scan-type>li{-webkit-flex-grow:1;flex-grow:1;-webkit-flex-shrink:0;flex-shrink:0;-webkit-flex-basis:25%;flex-basis:25%;display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:center;justify-content:center;max-width:25%;padding:0.5rem}@media (min-width: 768px){.wf-scan-type>li{-webkit-flex-shrink:1;flex-shrink:1}}.wf-scan-type>li>ul.wf-scan-type-option{-webkit-flex-grow:1;flex-grow:1;margin:0;padding:0;border:1px solid #d9d9d9;min-height:100%;cursor:pointer}.wf-scan-type>li>ul.wf-scan-type-option.wf-scan-type-option-custom{cursor:inherit}.wf-scan-type>li>ul.wf-scan-type-option>.wf-scan-type-option-name{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;-webkit-flex-direction:row;flex-direction:row;border-bottom:2px solid #d9d9d9;padding:0.5rem 1rem}.wf-scan-type>li>ul.wf-scan-type-option>.wf-scan-type-option-name .wf-option-checkbox{margin-right:0.5rem;width:20px;height:20px;min-width:20px;min-height:20px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;line-height:20px !important;background-color:#ffffff;box-shadow:0px 0px 0px 1px rgba(185,185,185,0.75);color:#ffffff !important;font-size:25px !important}.wf-scan-type>li>ul.wf-scan-type-option>.wf-scan-type-option-name span{font-weight:400;font-size:0.95rem}.wf-scan-type>li>ul.wf-scan-type-option>.wf-scan-type-option-description{padding:1rem}.wf-scan-type>li>ul.wf-scan-type-option.wf-active>.wf-scan-type-option-name{background-color:#00709e}.wf-scan-type>li>ul.wf-scan-type-option.wf-active>.wf-scan-type-option-name .wf-option-checkbox{color:#00709e !important}.wf-scan-type>li>ul.wf-scan-type-option.wf-active>.wf-scan-type-option-name span{color:#ffffff}.wf-scan-scheduling-manual{display:none;margin-left:3rem;padding-left:30px}.wf-scan-scheduling-manual.wf-active{display:block}.wf-scan-scheduling-manual>li{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row}.wf-scan-scheduling-manual .wf-scan-scheduling-manual-presets-label{padding-right:1rem}.wf-scan-scheduling-manual .wf-scan-scheduling-manual-presets{display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row;margin:0;padding:0}.wf-scan-scheduling-manual .wf-scan-scheduling-manual-presets>li{margin:0;padding:0.5rem 0.7rem;text-transform:uppercase;cursor:pointer;color:#aaa;font-weight:400;border-top:1px solid #bfbfbf;border-bottom:1px solid #bfbfbf;border-right:1px solid #bfbfbf}.wf-scan-scheduling-manual .wf-scan-scheduling-manual-presets>li:first-of-type{border-left:1px solid #bfbfbf;-moz-border-radius-topleft:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px}.wf-scan-scheduling-manual .wf-scan-scheduling-manual-presets>li:last-of-type{-moz-border-radius-topright:6px;-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-moz-border-radius-bottomright:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px}.wf-scan-scheduling-manual .wf-scan-scheduling-manual-presets>li.wf-active{color:#ffffff;background-color:#00709e}.wf-scan-scheduling-manual-preset-options .wfselect2-container{min-width:100px}.wf-scan-scheduling-manual-preset-options:not(.wf-active),.wf-scan-scheduling-manual-custom-options:not(.wf-active){display:none !important}.wf-scan-scheduling-manual-custom-options{padding-bottom:1rem}.wf-schedule-times-wrapper{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:row;flex-direction:row;margin-top:1rem}@media (min-width: 768px){.wf-schedule-times-wrapper{margin-top:0.25rem}}.wf-schedule-times-wrapper:first-of-type{margin-top:0}@media (min-width: 768px){.wf-schedule-times-wrapper:first-of-type{margin-top:1rem}}.wf-schedule-times-wrapper>*{-webkit-flex-grow:1;flex-grow:1;min-width:0}.wf-schedule-times-wrapper>*:first-child{-webkit-flex-grow:0;flex-grow:0;min-width:initial;padding-right:0.25rem}.wf-schedule-times-wrapper .wf-schedule-period{font-weight:500;padding:0.5rem 0.7rem}.wf-schedule-times{display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row}.wf-schedule-times>li{margin:0;padding:0.5rem 0.7rem;text-transform:uppercase;cursor:pointer;color:#aaa;font-weight:400;border-top:1px solid #bfbfbf;border-bottom:1px solid #bfbfbf;border-right:1px solid #bfbfbf}.wf-schedule-times>li:first-of-type{border-left:1px solid #bfbfbf;-moz-border-radius-topleft:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px}.wf-schedule-times>li:last-of-type{-moz-border-radius-topright:6px;-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-moz-border-radius-bottomright:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px}.wf-schedule-times>li.wf-active{color:#ffffff;background-color:#00709e}.wf-issue-control-ignore-menu{position:absolute;z-index:9999;background-color:#ffffff;border:1px solid #bfbfbf}.wf-issue-control-ignore-menu>li{padding:0.5rem 1rem;margin:0;border-top:1px solid #bfbfbf;cursor:pointer}.wf-issue-control-ignore-menu>li:hover{color:#ffffff;background-color:#00709e}.wf-issue-control-ignore-menu>li:first-of-type{border-top:0}#wf-scan-failed.wf-alert.wf-alert-danger{background-color:#ffe470;border-color:#ffd10a;border-radius:0}#wf-scan-failed.wf-alert.wf-alert-danger pre{white-space:normal}#wf-scan-failed.wf-alert.wf-alert-danger svg{width:50px;height:50px;margin-right:1rem}#wf-scan-failed.wf-alert.wf-alert-danger svg path{fill:#da9603}#wf-scan-failed.wf-alert.wf-alert-danger h4{margin:0}#wf-scan-failed.wf-alert.wf-alert-danger p{margin-top:0.25rem;margin-bottom:0}#wf-scan-failed.wf-alert.wf-alert-danger .wf-btn.wf-btn-default{border-color:#ffffff;background-color:#ffffff;color:#000000}#wf-site-cleaning-bottom h3{color:#00709e;font-weight:300;font-size:1.5rem;margin:1rem 0}#wf-site-cleaning-bottom p{max-width:750px}#wfTwoFactorQRCodeTable{width:175px;height:175px;margin:0 auto}@media (min-width: 500px){#wfTwoFactorQRCodeTable{width:256px;height:256px}}#wfTwoFactorRecoveryCodes{list-style-type:none}#wfTwoFactorRecoveryCodes li{font-family:monospace;text-align:center}#wfTwoFactorDownload .dashicons{line-height:26px}.wf-twofactor-delete{font-size:1.5rem}.wf-twofactor-delete a{text-decoration:none;color:#333}.wf-twofactor-delete a i{font-size:1.5rem}.wf-table.wf-table-twofactor>tbody>tr>td{vertical-align:middle}.wf-form-twofactor{max-width:400px}.wf-form-twofactor .wf-radio label{padding-left:0}#twofactor .wf-block-list>li{padding:.8rem 1.5rem;min-height:0px}#twofactor .wf-block-list .wf-form-control{margin:0px 0px}.wf-block-list .wf-block-list-title{font-weight:bold;font-size:0.9rem}.wf-block-list .wf-block-list-subtitle{font-weight:bold;font-size:0.85rem;color:#008cc1}#wfTwoFacUsers{margin:0 auto 1.5rem}#wf-tools-two-factor #wf-two-factor-img1,#wf-tools-two-factor #wf-two-factor-img2,#wf-all-options #wf-two-factor-img1,#wf-all-options #wf-two-factor-img2{display:inline}#wf-tools-two-factor #wf-two-factor-img1,#wf-all-options #wf-two-factor-img1{max-width:316px}#wf-tools-two-factor #wf-two-factor-img2,#wf-all-options #wf-two-factor-img2{max-width:270px}#wfUsername{max-width:568px}@media screen and (max-width: 782px){#wf-tools-two-factor #wf-two-factor-img1,#wf-tools-two-factor #wf-two-factor-img2,#wf-all-options #wf-two-factor-img1,#wf-all-options #wf-two-factor-img2{display:block;margin:0px auto 20px}}#wordfenceTwoFactorLegacy,#wordfenceTwoFactorModern{background:#fff;border-left:4px solid #00709e;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);margin-bottom:0.5rem;padding:1px 13px}fieldset{padding:0;margin:0;border:0;min-width: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:bold}label.wf-plain{font-weight:normal}label.wf-control-label.wf-disabled{pointer-events:none}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:1.5rem;font-size:14px;line-height:1.42857;color:#555}.wf-form-control{display:block;width:100%;height:38px;padding:.5rem 1.25rem;font-size:14px;line-height:1.42857;color:#555;background-color:#fff;background-image:none;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,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}.wf-form-control:focus{border-color:#66afe9;outline:0;-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)}.wf-form-control::-moz-placeholder{color:#bfbfbf;opacity:1}.wf-form-control:-ms-input-placeholder{color:#bfbfbf}.wf-form-control::-webkit-input-placeholder{color:#bfbfbf}.wf-form-control::-ms-expand{border:0;background-color:transparent}.wf-form-control[disabled],.wf-form-control[readonly],fieldset[disabled] .wf-form-control{background-color:#e2e2e2;opacity:1}.wf-form-control[disabled],.wf-form-control[readonly],fieldset[disabled] .wf-form-control{cursor:not-allowed;pointer-events:none}textarea.wf-form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"].wf-form-control,input[type="time"].wf-form-control,input[type="datetime-local"].wf-form-control,input[type="month"].wf-form-control{line-height:38px}input[type="date"].wf-input-sm,.wf-input-group-sm input[type="date"],input[type="time"].wf-input-sm,.wf-input-group-sm input[type="time"],input[type="datetime-local"].wf-input-sm,.wf-input-group-sm input[type="datetime-local"],input[type="month"].wf-input-sm,.wf-input-group-sm input[type="month"]{line-height:30px}input[type="date"].wf-input-lg,.wf-input-group-lg input[type="date"],input[type="time"].wf-input-lg,.wf-input-group-lg input[type="time"],input[type="datetime-local"].wf-input-lg,.wf-input-group-lg input[type="datetime-local"],input[type="month"].wf-input-lg,.wf-input-group-lg input[type="month"]{line-height:46px}}.wf-form-group{margin-bottom:8px}.wf-form-group.wf-sub-group label{color:#666666;font-weight:normal;padding-left:20px}.wf-form-group.wf-focus{border-left:4px solid #11967a;padding-bottom:8px;background-color:#e5e5e5}.wf-form-group.wf-focus label{margin-left:-4px}.wf-radio,.wf-checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.wf-radio label,.wf-checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.wf-radio input[type="radio"],.wf-radio-inline input[type="radio"],.wf-checkbox input[type="checkbox"],.wf-checkbox-inline input[type="checkbox"]{margin-top:4px \9}.wf-radio-offset{padding-left:29px}@media (min-width: 768px){.wf-radio-offset{padding-left:20px}}.wf-radio+.wf-radio,.wf-checkbox+.wf-checkbox{margin-top:-5px}.wf-radio-inline,.wf-checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.wf-radio-inline+.wf-radio-inline,.wf-checkbox-inline+.wf-checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="radio"][readonly],input[type="radio"].wf-disabled,fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],input[type="checkbox"][readonly],input[type="checkbox"].wf-disabled,fieldset[disabled] input[type="checkbox"]{cursor:not-allowed;pointer-events:none}.wf-radio-inline.wf-disabled,fieldset[disabled] .wf-radio-inline,.wf-checkbox-inline.wf-disabled,fieldset[disabled] .wf-checkbox-inline{cursor:not-allowed}.wf-radio.wf-disabled label,fieldset[disabled] .wf-radio label,.wf-checkbox.wf-disabled label,fieldset[disabled] .wf-checkbox label{cursor:not-allowed;pointer-events:none}.wf-form-control-static{padding-top:1.5rem;padding-bottom:1.5rem;margin:0;line-height:1}.wf-form-control-static.wf-input-lg,.wf-form-control-static.wf-input-sm{padding-left:0;padding-right:0}.wf-input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.wf-input-sm{height:30px;line-height:30px}textarea.wf-input-sm,select[multiple].wf-input-sm{height:auto}.wf-form-group-sm .wf-form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.wf-form-group-sm select.wf-form-control{height:30px;line-height:30px}.wf-form-group-sm textarea.wf-form-control,.wf-form-group-sm select[multiple].wf-form-control{height:auto}.wf-form-group-sm .wf-form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.wf-input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}select.wf-input-lg{height:46px;line-height:46px}textarea.wf-input-lg,select[multiple].wf-input-lg{height:auto}.wf-form-group-lg .wf-form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.wf-form-group-lg select.wf-form-control{height:46px;line-height:46px}.wf-form-group-lg textarea.wf-form-control,.wf-form-group-lg select[multiple].wf-form-control{height:auto}.wf-form-group-lg .wf-form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.33333}.wf-has-feedback{position:relative}.wf-has-feedback .wf-form-control{padding-right:47.5px}.wf-form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:38px;height:38px;line-height:38px;text-align:center;pointer-events:none}.wf-input-lg+.wf-form-control-feedback,.wf-input-group-lg+.wf-form-control-feedback,.wf-form-group-lg .wf-form-control+.wf-form-control-feedback{width:46px;height:46px;line-height:46px}.wf-input-sm+.wf-form-control-feedback,.wf-input-group-sm+.wf-form-control-feedback,.wf-form-group-sm .wf-form-control+.wf-form-control-feedback{width:30px;height:30px;line-height:30px}.wf-has-success .wf-help-block,.wf-has-success .wf-control-label,.wf-has-success .wf-radio,.wf-has-success .wf-checkbox,.wf-has-success .wf-radio-inline,.wf-has-success .wf-checkbox-inline,.wf-has-success.wf-radio label,.wf-has-success.wf-checkbox label,.wf-has-success.wf-radio-inline label,.wf-has-success.wf-checkbox-inline label{color:#3c763d}.wf-has-success .wf-form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.wf-has-success .wf-form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.wf-has-success .wf-input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.wf-has-success .wf-form-control-feedback{color:#3c763d}.wf-has-warning .wf-help-block,.wf-has-warning .wf-control-label,.wf-has-warning .wf-radio,.wf-has-warning .wf-checkbox,.wf-has-warning .wf-radio-inline,.wf-has-warning .wf-checkbox-inline,.wf-has-warning.wf-radio label,.wf-has-warning.wf-checkbox label,.wf-has-warning.wf-radio-inline label,.wf-has-warning.wf-checkbox-inline label{color:#8a6d3b}.wf-has-warning .wf-form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.wf-has-warning .wf-form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.wf-has-warning .wf-input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.wf-has-warning .wf-form-control-feedback{color:#8a6d3b}.wf-has-error .wf-help-block,.wf-has-error .wf-control-label,.wf-has-error .wf-radio,.wf-has-error .wf-checkbox,.wf-has-error .wf-radio-inline,.wf-has-error .wf-checkbox-inline,.wf-has-error.wf-radio label,.wf-has-error.wf-checkbox label,.wf-has-error.wf-radio-inline label,.wf-has-error.wf-checkbox-inline label{color:#a94442}.wf-has-error .wf-form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.wf-has-error .wf-form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.wf-has-error .wf-input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.wf-has-error .wf-form-control-feedback{color:#a94442}.wf-has-feedback label ~ .wf-form-control-feedback{top:25px}.wf-has-feedback label.wf-sr-only ~ .wf-form-control-feedback{top:0}.wf-help-block{display:block;margin-top:5px;color:#737373}@media (min-width: 768px){.wf-form-inline .wf-form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.wf-form-inline .wf-form-control{display:inline-block;width:auto;vertical-align:middle}.wf-form-inline .wf-form-control-static{display:inline-block}.wf-form-inline .wf-input-group{display:inline-table;vertical-align:middle}.wf-form-inline .wf-input-group .wf-input-group-addon,.wf-form-inline .wf-input-group .wf-input-group-btn,.wf-form-inline .wf-input-group .wf-form-control{width:auto}.wf-form-inline .wf-input-group>.wf-form-control{width:100%}.wf-form-inline .wf-control-label{margin-bottom:0;vertical-align:middle}.wf-form-inline .wf-radio,.wf-form-inline .wf-checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.wf-form-inline .wf-radio label,.wf-form-inline .wf-checkbox label{padding-left:0}.wf-form-inline .wf-radio input[type="radio"],.wf-form-inline .wf-checkbox input[type="checkbox"]{position:relative;margin-left:0}.wf-form-inline .wf-has-feedback .wf-form-control-feedback{top:0}}.wf-form-horizontal .wf-radio,.wf-form-horizontal .wf-checkbox,.wf-form-horizontal .wf-radio-inline,.wf-form-horizontal .wf-checkbox-inline{margin-top:0;margin-bottom:0;padding-top:1.5rem}.wf-form-horizontal .wf-radio,.wf-form-horizontal .wf-checkbox{min-height:29px}.wf-form-horizontal .wf-form-group{margin-left:-15px;margin-right:-15px}.wf-form-horizontal .wf-form-group:before,.wf-form-horizontal .wf-form-group:after{content:" ";display:table}.wf-form-horizontal .wf-form-group:after{clear:both}@media (min-width: 768px){.wf-form-horizontal .wf-control-label{text-align:right;margin-bottom:0;padding-top:1.5rem}}.wf-form-horizontal .wf-has-feedback .wf-form-control-feedback{right:15px}@media (min-width: 768px){.wf-form-horizontal .wf-form-group-lg .wf-control-label{padding-top:11px;font-size:18px}}@media (min-width: 768px){.wf-form-horizontal .wf-form-group-sm .wf-control-label{padding-top:6px;font-size:12px}}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status .wf-block-labeled-value-value,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status .wf-block-labeled-value-value{padding-top:0}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status .wf-block-labeled-value-value .wf-fa,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status .wf-block-labeled-value-value .wf-fa{font-size:8rem}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status .wf-block-labeled-value-value svg,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status .wf-block-labeled-value-value svg{width:140px}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status .wf-block-labeled-value-label,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status .wf-block-labeled-value-label{font-size:1.3125rem;font-weight:300;line-height:1.5;padding-bottom:0}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-full-enabled,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-full-enabled{background-color:#00709e}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-full-enabled .wf-block-labeled-value-value,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-full-enabled .wf-block-labeled-value-value{color:#ffffff}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-full-enabled .wf-block-labeled-value-label,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-full-enabled .wf-block-labeled-value-label{color:#ffffff;padding:0}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-enabled .wf-block-labeled-value-value,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-enabled .wf-block-labeled-value-value{color:#11967a}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-enabled .wf-block-labeled-value-value svg,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-enabled .wf-block-labeled-value-value svg{fill:#11967a}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-enabled .wf-block-labeled-value-label,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-enabled .wf-block-labeled-value-label{color:#11967a}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-learning-mode .wf-block-labeled-value-value,#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-disabled .wf-block-labeled-value-value,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-learning-mode .wf-block-labeled-value-value,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-disabled .wf-block-labeled-value-value{color:#9f9fa0}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-learning-mode .wf-block-labeled-value-value svg,#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-disabled .wf-block-labeled-value-value svg,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-learning-mode .wf-block-labeled-value-value svg,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-disabled .wf-block-labeled-value-value svg{fill:#9f9fa0}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-learning-mode .wf-block-labeled-value-label,#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-disabled .wf-block-labeled-value-label,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-learning-mode .wf-block-labeled-value-label,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-global-status-disabled .wf-block-labeled-value-label{color:#9f9fa0}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-value .wf-fa,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-value .wf-fa{font-size:7rem}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-value svg,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-value svg{width:120px}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-label,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status .wf-block-labeled-value-label{font-size:1.15rem;font-weight:300}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status-premium .wf-block-labeled-value-value,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status-premium .wf-block-labeled-value-value{color:#00709e}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status-premium .wf-block-labeled-value-value svg,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status-premium .wf-block-labeled-value-value svg{fill:#00709e}#wf-dashboard .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status-premium .wf-block-labeled-value-label,#wf-global-options .wf-block .wf-block-content .wf-block-labeled-value.wf-protection-status-premium .wf-block-labeled-value-label{color:#00709e}.wf-dashboard-item{position:relative;margin:0 auto 1rem;padding:0 1rem;box-sizing:border-box;background:#fff;box-shadow:0 0 0 1px rgba(200,215,225,0.5),0 1px 2px #e9eff3}.wf-dashboard-item .wf-dashboard-item-inner{min-height:44px;padding:1rem 0;width:100%;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;position:relative}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-content{max-width:75%}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-content .wf-dashboard-item-title{font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.875rem;width:100%}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-content .wf-dashboard-item-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:.575rem;color:#4f748e}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action{position:absolute;top:0;right:0;height:100%;background:none;border:0;outline:0;width:48px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;vertical-align:middle;transition:transform 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275),color 0.2s ease-in}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action.wf-dashboard-item-action-text{width:auto}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action.wf-dashboard-item-action-text.wf-dashboard-item-action-text-success{color:#11967a}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action.wf-dashboard-item-action-text.wf-dashboard-item-action-text-warning{color:#930000}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action.wf-dashboard-item-action-text.wf-dashboard-item-action-text-warning a{color:#930000}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action .wf-dashboard-item-action-chevron{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJjaGV2cm9uLW9iamVjdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBhdGggaWQ9ImNoZXZyb24iIGQ9Ik0yMCA5bC04IDgtOC04IDEuNDE0LTEuNDE0TDEyIDE0LjE3Mmw2LjU4Ni02LjU4NiIvPgo8L3N2Zz4K");background-repeat:no-repeat;background-position:center center;width:24px;height:24px;fill:#87a6bc}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action .wf-dashboard-item-action-checkbox{background-image:url(../images/checkbox.png);background-repeat:no-repeat;background-position:left center;width:29px;height:29px}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action .wf-dashboard-item-action-checkbox.checked{background-position:right center}.wf-dashboard-item .wf-dashboard-item-extra{display:none;margin:0 -1rem;padding:0 1rem}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list{margin:0 -1rem;padding:0;list-style:none}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(odd){background-color:#f9f9f9}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(odd).wf-notification{border-left:4px solid #f9f9f9}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(odd).wf-notification.wf-notification-warning{border-left:4px solid #fcb214}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(odd).wf-notification.wf-notification-critical{border-left:4px solid #930000}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(even){background-color:#ffffff}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(even).wf-notification{border-left:4px solid #ffffff}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(even).wf-notification.wf-notification-warning{border-left:4px solid #fcb214}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(even).wf-notification.wf-notification-critical{border-left:4px solid #930000}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list>li{display:block;min-height:44px;padding:0 1rem;margin:0;border-top:1px solid #eeeeee;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list>li>*:first-child{-webkit-flex-grow:1;flex-grow:1;min-width:0}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal{box-sizing:border-box;margin-top:-1px;display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-wrap:wrap;flex-wrap:wrap}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal>li{-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:100%;flex-basis:100%;border-left:1px solid #eeeeee}@media (min-width: 768px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal>li{-webkit-flex-basis:50%;flex-basis:50%}}@media (min-width: 992px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal>li{-webkit-flex-basis:25%;flex-basis:25%}}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal>*:first-child{border-left:0}@media (min-width: 768px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal.wf-dashboard-item-list-equal>li{max-width:50%}}@media (min-width: 992px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal.wf-dashboard-item-list-equal>li{max-width:25%}}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state{text-align:center}@media (min-width: 1200px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state{text-align:left}}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state-enabled .fa{color:#11967a}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state-disabled .fa{color:#525355}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state-premium{color:#9f9fa0}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-dismiss{padding-left:2rem;font-size:1.25rem}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-dismiss a{color:#525355}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-labeled-count{box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:column;flex-direction:column}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-labeled-count-count{font-size:3rem;line-height:3rem;color:#9f9fa0;padding:1rem}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-labeled-count-label{font-size:0.75rem;color:#9f9fa0;padding:0 1rem 1rem 1rem}.wf-dashboard-item.active .wf-dashboard-item-extra{display:block}.wf-dashboard-item.wf-dashboard-item-left .wf-dashboard-item-content{margin-left:48px}.wf-dashboard-item.wf-dashboard-item-left .wf-dashboard-item-action{right:auto;left:0px}.wf-dashboard-item.disabled .wf-dashboard-item-content .wf-dashboard-item-title{color:#aaaaaa}.wf-dashboard-item.disabled .wf-dashboard-item-content .wf-dashboard-item-subtitle{color:#8ea6be}.wf-dashboard-item-flex-wrapper{display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column}.wf-dashboard-item-flex-wrapper .wf-dashboard-item{-webkit-flex-grow:1;flex-grow:1;width:100%}.wf-notifications-empty{font-size:0.9rem;color:#9f9fa0}.wf-dashboard-graph-wrapper{width:100%}.wf-dashboard-badge{display:inline-block;min-width:10px;padding:3px 7px;margin-left:0.5rem;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#fcb214;border-radius:10px}.wf-dashboard-badge:empty{display:none}.wf-btn .wf-dashboard-badge{position:relative;top:-1px}.wf-btn-xs .wf-dashboard-badge,.wf-btn-group-xs>.wf-btn .wf-dashboard-badge,.wf-btn-group-xs>.wf-btn .wf-dashboard-badge{top:0;padding:1px 5px}.wf-list-group-item.active>.wf-dashboard-badge,.wf-nav-pills>.active>a>.wf-dashboard-badge{color:#00709e;background-color:#fff}.wf-list-group-item>.wf-dashboard-badge{float:right}.wf-list-group-item>.wf-dashboard-badge+.wf-dashboard-badge{margin-right:5px}.wf-nav-pills>li>a>.wf-dashboard-badge{margin-left:3px}.wf-dashboard-toggle-btns{text-align:center}.wf-dashboard-toggle-btns .wf-pagination{margin:1rem 1rem 0.5rem 1rem}.wf-dashboard-show-more{position:relative;font-size:14px;color:#959595;text-align:center;line-height:1rem;background:#ffffff;width:60%;margin:20px auto 0 auto}.wf-dashboard-show-more:before{display:inline-block;content:"";position:absolute;height:1px;background:#dddddd;top:50%;width:100%;left:0;right:0}.wf-dashboard-show-more a{display:inline-block;position:relative;padding:0 10px;background-color:#ffffff}.wf-ips,.wf-recent-logins,.wf-countries{max-height:30rem;overflow-y:auto;margin-bottom:20px}.wf-ips .wf-table,.wf-recent-logins .wf-table,.wf-countries .wf-table{margin-bottom:0}.wf-dashboard-last-updated{font-style:italic;font-size:0.6rem;text-align:center;padding-bottom:1rem;margin:0}.wf-dashboard-navigation .wf-block-navigation-option-content{padding:1rem 0 1rem 1rem}@media (min-width: 768px){.wf-dashboard-navigation .wf-block-navigation-option-content{padding:1.5rem 0 1.5rem 1rem}}.wf-dashboard-navigation .wf-block-navigation-option-content h4{margin:0 0 0.25rem 0}.wf-dashboard-navigation .wf-block-navigation-option-content p{margin:0 0 0.45rem 0}.wf-blocks-summary{width:100%;margin:1rem 0;border-spacing:0}.wf-blocks-summary>thead>tr>th,.wf-blocks-summary>tbody>tr>th,.wf-blocks-summary>tr>th{font-weight:600;padding:0.25rem 0.25rem;white-space:nowrap}@media (min-width: 768px){.wf-blocks-summary>thead>tr>th,.wf-blocks-summary>tbody>tr>th,.wf-blocks-summary>tr>th{padding:0.25rem 1rem}}.wf-blocks-summary>thead>tr>th.wf-premium,.wf-blocks-summary>tbody>tr>th.wf-premium,.wf-blocks-summary>tr>th.wf-premium{border-top:2px solid #00709e;border-left:2px solid #00709e;border-right:2px solid #00709e;border-top-left-radius:0.5rem;border-top-right-radius:0.5rem;color:#aaa}.wf-blocks-summary>thead>tr>th,.wf-blocks-summary>tr>th{text-align:center}.wf-blocks-summary>thead>tr>th:first-child,.wf-blocks-summary>tbody>tr>th{text-align:right}.wf-blocks-summary>tbody>tr>td,.wf-blocks-summary>tfoot>tr>td,.wf-blocks-summary>tr>td{text-align:center;padding:0.25rem 0.25rem}@media (min-width: 768px){.wf-blocks-summary>tbody>tr>td,.wf-blocks-summary>tfoot>tr>td,.wf-blocks-summary>tr>td{padding:0.25rem 1rem}}.wf-blocks-summary>tbody>tr>td.wf-premium,.wf-blocks-summary>tfoot>tr>td.wf-premium,.wf-blocks-summary>tr>td.wf-premium{border-left:2px solid #00709e;border-right:2px solid #00709e;color:#aaa}.wf-blocks-summary>tfoot>tr>td.wf-premium,.wf-blocks-summary>tr:last-child>td.wf-premium{border-bottom:2px solid #00709e;border-bottom-left-radius:0.5rem;border-bottom-right-radius:0.5rem;background-color:#00709e;color:#fff}#howGetIPs-trusted-proxies{display:none}ul.wf-option.wf-option-howgetips .wf-option-howgetips-details{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.8rem;margin-top:0.5rem}.wf-central-dashboard{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-align-content:stretch;align-content:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wf-central-dashboard .wf-central-dashboard-logo{width:80px;min-width:80px;margin:10px 0}.wf-central-dashboard .wf-central-dashboard-copy{padding-left:20px}@media (min-width: 768px){.wf-central-dashboard{-webkit-flex-direction:row;flex-direction:row;-webkit-align-items:center;align-items:center}}table.wf-table{background-color:transparent;border-collapse:collapse;border-spacing:0}table.wf-table td,table.wf-table th{padding:0}.wf-table caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}.wf-table th{text-align:left}.wf-table{width:100%;max-width:100%;margin-bottom:20px}.wf-table>thead>tr>th,.wf-table>thead>tr>td,.wf-table>tbody>tr>th,.wf-table>tbody>tr>td,.wf-table>tfoot>tr>th,.wf-table>tfoot>tr>td{padding:8px;line-height:1.42857;vertical-align:top;border-top:1px solid #ddd}.wf-table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.wf-table>caption+thead>tr:first-child>th,.wf-table>caption+thead>tr:first-child>td,.wf-table>colgroup+thead>tr:first-child>th,.wf-table>colgroup+thead>tr:first-child>td,.wf-table>thead:first-child>tr:first-child>th,.wf-table>thead:first-child>tr:first-child>td{border-top:0}.wf-table>tbody+tbody{border-top:2px solid #ddd}.wf-table .wf-table{background-color:#fff}.wf-table-condensed>thead>tr>th,.wf-table-condensed>thead>tr>td,.wf-table-condensed>tbody>tr>th,.wf-table-condensed>tbody>tr>td,.wf-table-condensed>tfoot>tr>th,.wf-table-condensed>tfoot>tr>td{padding:5px}.wf-table-bordered{border:1px solid #ddd}.wf-table-bordered>thead>tr>th,.wf-table-bordered>thead>tr>td,.wf-table-bordered>tbody>tr>th,.wf-table-bordered>tbody>tr>td,.wf-table-bordered>tfoot>tr>th,.wf-table-bordered>tfoot>tr>td{border:1px solid #ddd}.wf-table-bordered>thead>tr>th,.wf-table-bordered>thead>tr>td{border-bottom-width:2px}.wf-table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.wf-table-hover>tbody>tr:hover{background-color:#f5f5f5}table.wf-table col[class*="col-"]{position:static;float:none;display:table-column}table.wf-table td[class*="col-"],table.wf-table th[class*="col-"]{position:static;float:none;display:table-cell}.wf-table>thead>tr>td.active,.wf-table>thead>tr>th.active,.wf-table>thead>tr.active>td,.wf-table>thead>tr.active>th,.wf-table>tbody>tr>td.active,.wf-table>tbody>tr>th.active,.wf-table>tbody>tr.active>td,.wf-table>tbody>tr.active>th,.wf-table>tfoot>tr>td.active,.wf-table>tfoot>tr>th.active,.wf-table>tfoot>tr.active>td,.wf-table>tfoot>tr.active>th{background-color:#f5f5f5}.wf-table-hover>tbody>tr>td.active:hover,.wf-table-hover>tbody>tr>th.active:hover,.wf-table-hover>tbody>tr.active:hover>td,.wf-table-hover>tbody>tr:hover>.active,.wf-table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.wf-table>thead>tr>td.success,.wf-table>thead>tr>th.success,.wf-table>thead>tr.success>td,.wf-table>thead>tr.success>th,.wf-table>tbody>tr>td.success,.wf-table>tbody>tr>th.success,.wf-table>tbody>tr.success>td,.wf-table>tbody>tr.success>th,.wf-table>tfoot>tr>td.success,.wf-table>tfoot>tr>th.success,.wf-table>tfoot>tr.success>td,.wf-table>tfoot>tr.success>th{background-color:#dff0d8}.wf-table-hover>tbody>tr>td.success:hover,.wf-table-hover>tbody>tr>th.success:hover,.wf-table-hover>tbody>tr.success:hover>td,.wf-table-hover>tbody>tr:hover>.success,.wf-table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.wf-table>thead>tr>td.info,.wf-table>thead>tr>th.info,.wf-table>thead>tr.info>td,.wf-table>thead>tr.info>th,.wf-table>tbody>tr>td.info,.wf-table>tbody>tr>th.info,.wf-table>tbody>tr.info>td,.wf-table>tbody>tr.info>th,.wf-table>tfoot>tr>td.info,.wf-table>tfoot>tr>th.info,.wf-table>tfoot>tr.info>td,.wf-table>tfoot>tr.info>th{background-color:#d9edf7}.wf-table-hover>tbody>tr>td.info:hover,.wf-table-hover>tbody>tr>th.info:hover,.wf-table-hover>tbody>tr.info:hover>td,.wf-table-hover>tbody>tr:hover>.info,.wf-table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.wf-table>thead>tr>td.warning,.wf-table>thead>tr>th.warning,.wf-table>thead>tr.warning>td,.wf-table>thead>tr.warning>th,.wf-table>tbody>tr>td.warning,.wf-table>tbody>tr>th.warning,.wf-table>tbody>tr.warning>td,.wf-table>tbody>tr.warning>th,.wf-table>tfoot>tr>td.warning,.wf-table>tfoot>tr>th.warning,.wf-table>tfoot>tr.warning>td,.wf-table>tfoot>tr.warning>th{background-color:#fcf8e3}.wf-table-hover>tbody>tr>td.warning:hover,.wf-table-hover>tbody>tr>th.warning:hover,.wf-table-hover>tbody>tr.warning:hover>td,.wf-table-hover>tbody>tr:hover>.warning,.wf-table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.wf-table>thead>tr>td.danger,.wf-table>thead>tr>th.danger,.wf-table>thead>tr.danger>td,.wf-table>thead>tr.danger>th,.wf-table>tbody>tr>td.danger,.wf-table>tbody>tr>th.danger,.wf-table>tbody>tr.danger>td,.wf-table>tbody>tr.danger>th,.wf-table>tfoot>tr>td.danger,.wf-table>tfoot>tr>th.danger,.wf-table>tfoot>tr.danger>td,.wf-table>tfoot>tr.danger>th{background-color:#f2dede}.wf-table-hover>tbody>tr>td.danger:hover,.wf-table-hover>tbody>tr>th.danger:hover,.wf-table-hover>tbody>tr.danger:hover>td,.wf-table-hover>tbody>tr:hover>.danger,.wf-table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.wf-table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width: 767px){.wf-table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.wf-table-responsive>.wf-table{margin-bottom:0}.wf-table-responsive>.wf-table>thead>tr>th,.wf-table-responsive>.wf-table>thead>tr>td,.wf-table-responsive>.wf-table>tbody>tr>th,.wf-table-responsive>.wf-table>tbody>tr>td,.wf-table-responsive>.wf-table>tfoot>tr>th,.wf-table-responsive>.wf-table>tfoot>tr>td{white-space:nowrap}.wf-table-responsive>.wf-table-bordered{border:0}.wf-table-responsive>.wf-table-bordered>thead>tr>th:first-child,.wf-table-responsive>.wf-table-bordered>thead>tr>td:first-child,.wf-table-responsive>.wf-table-bordered>tbody>tr>th:first-child,.wf-table-responsive>.wf-table-bordered>tbody>tr>td:first-child,.wf-table-responsive>.wf-table-bordered>tfoot>tr>th:first-child,.wf-table-responsive>.wf-table-bordered>tfoot>tr>td:first-child{border-left:0}.wf-table-responsive>.wf-table-bordered>thead>tr>th:last-child,.wf-table-responsive>.wf-table-bordered>thead>tr>td:last-child,.wf-table-responsive>.wf-table-bordered>tbody>tr>th:last-child,.wf-table-responsive>.wf-table-bordered>tbody>tr>td:last-child,.wf-table-responsive>.wf-table-bordered>tfoot>tr>th:last-child,.wf-table-responsive>.wf-table-bordered>tfoot>tr>td:last-child{border-right:0}.wf-table-responsive>.wf-table-bordered>tbody>tr:last-child>th,.wf-table-responsive>.wf-table-bordered>tbody>tr:last-child>td,.wf-table-responsive>.wf-table-bordered>tfoot>tr:last-child>th,.wf-table-responsive>.wf-table-bordered>tfoot>tr:last-child>td{border-bottom:0}}.wf-sortable{position:relative;padding-right:2rem !important}.wf-sortable .wf-sorted-ascending,.wf-sortable .wf-sorted-descending{display:none;position:absolute;right:1rem;top:50%;transform:translateY(-50%)}.wf-sortable.wf-unsorted:hover .wf-sorted-ascending{display:block}.wf-sortable.wf-unsorted,.wf-sortable.wf-sorted-ascending,.wf-sortable.wf-sorted-descending{cursor:pointer}.wf-sortable.wf-unsorted:hover,.wf-sortable.wf-sorted-ascending:hover,.wf-sortable.wf-sorted-descending:hover{background-color:#e0e0e0}.wf-sortable.wf-sorted-ascending,.wf-sortable.wf-sorted-descending{background-color:#e0e0e0}.wf-sortable.wf-sorted-ascending .wf-sorted-ascending{display:block}.wf-sortable.wf-sorted-descending .wf-sorted-descending{display:block}.wf-nav{margin-bottom:0;padding-left:0;list-style:none}.wf-nav:before,.wf-nav:after{content:" ";display:table}.wf-nav:after{clear:both}.wf-nav>li{position:relative;display:block}.wf-nav>li>a{position:relative;display:block;padding:8px 12px}.wf-nav>li>a:hover,.wf-nav>li>a:focus{text-decoration:none;background-color:#e2e2e2}.wf-nav>li.wf-disabled>a{color:#777}.wf-nav>li.wf-disabled>a:hover,.wf-nav>li.wf-disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.wf-nav .wf-open>a,.wf-nav .wf-open>a:hover,.wf-nav .wf-open>a:focus{background-color:#e2e2e2;border-color:#00709e}.wf-nav>li>a>img{max-width:none}.wf-nav-tabs{border-bottom:1px solid #d0d0d0}.wf-nav-tabs>li{float:left;margin-bottom:-1px}.wf-nav-tabs>li>a{margin-right:2px;line-height:1.42857;border:1px solid transparent;border-radius:4px 4px 0 0}.wf-nav-tabs>li>a:hover{border-color:#e2e2e2 #e2e2e2 #d0d0d0}.wf-nav-tabs>li.wf-active>a,.wf-nav-tabs>li.wf-active>a:hover,.wf-nav-tabs>li.wf-active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.wf-nav-pills>li{float:left}.wf-nav-pills>li>a{border-radius:4px;text-decoration:none;position:relative;display:block;padding:8px 12px}.wf-nav-pills>li>a:hover,.wf-nav-pills>li>a:focus{text-decoration:none !important;background-color:#e2e2e2}.wf-nav-pills>li+li{margin-left:2px}.wf-nav-pills>li.wf-active>a,.wf-nav-pills>li.wf-active>a:hover,.wf-nav-pills>li.wf-active>a:focus{color:#fff;background-color:#00709e}.wf-nav-pills.wf-nav-pills-bordered>li>a{border:1px solid #e2e2e2}.wf-nav-pills.wf-nav-pills-connected>li>a{border-radius:0;border-right-width:0px}.wf-nav-pills.wf-nav-pills-connected>li+li{margin-left:0}.wf-nav-pills.wf-nav-pills-connected>li.active+li>a{border-left-width:0px}.wf-nav-pills.wf-nav-pills-connected>li:first-of-type>a{-moz-border-radius:4px 0 0 4px;-webkit-border-radius:4px;border-radius:4px 0 0 4px}.wf-nav-pills.wf-nav-pills-connected>li:last-of-type>a{-moz-border-radius:0 4px 4px 0;-webkit-border-radius:0;border-radius:0 4px 4px 0;border-right-width:1px}.wf-nav-stacked>li{float:none}.wf-nav-stacked>li+li{margin-top:2px;margin-left:0}.wf-nav-justified,.wf-nav-tabs.wf-nav-justified{width:100%}.wf-nav-justified>li,.wf-nav-tabs.wf-nav-justified>li{float:none}.wf-nav-justified>li>a,.wf-nav-tabs.wf-nav-justified>li>a{text-align:center;margin-bottom:5px}.wf-nav-justified>.wf-dropdown .wf-dropdown-menu{top:auto;left:auto}@media (min-width: 768px){.wf-nav-justified>li,.wf-nav-tabs.wf-nav-justified>li{display:table-cell;width:1%}.wf-nav-justified>li>a,.wf-nav-tabs.wf-nav-justified>li>a{margin-bottom:0}}.wf-nav-tabs-justified,.wf-nav-tabs.wf-nav-justified{border-bottom:0}.wf-nav-tabs-justified>li>a,.wf-nav-tabs.wf-nav-justified>li>a{margin-right:0;border-radius:4px}.wf-nav-tabs-justified>.wf-active>a,.wf-nav-tabs.wf-nav-justified>.wf-active>a,.wf-nav-tabs-justified>.wf-active>a:hover,.wf-nav-tabs.wf-nav-justified>.wf-active>a:hover,.wf-nav-tabs-justified>.wf-active>a:focus,.wf-nav-tabs.wf-nav-justified>.wf-active>a:focus{border:1px solid #ddd}@media (min-width: 768px){.wf-nav-tabs-justified>li>a,.wf-nav-tabs.wf-nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.wf-nav-tabs-justified>.wf-active>a,.wf-nav-tabs.wf-nav-justified>.wf-active>a,.wf-nav-tabs-justified>.wf-active>a:hover,.wf-nav-tabs.wf-nav-justified>.wf-active>a:hover,.wf-nav-tabs-justified>.wf-active>a:focus,.wf-nav-tabs.wf-nav-justified>.wf-active>a:focus{border-bottom-color:#fff}}.wf-tab-content>.wf-tab-pane{display:none}.wf-tab-content>.wf-active{display:block}.wf-nav-tabs .wf-dropdown-menu{margin-top:-1px;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0}.wf-navbar-brand{float:left;padding:12px 8px;font-size:18px;line-height:20px;margin:10px 0 0 0}.wf-navbar-brand:hover,.wf-navbar-brand:focus{text-decoration:none}.wf-navbar-brand>img{display:block}@media (min-width: 768px){.navbar>.container .wf-navbar-brand,.navbar>.container-fluid .wf-navbar-brand{margin-left:-8px}}.wf-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}.wf-dropup,.wf-dropdown{position:relative}.wf-dropdown-toggle:focus{outline:0}.wf-dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.wf-dropdown-menu .wf-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.wf-dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857;color:#333;text-decoration:none;white-space:nowrap}.wf-dropdown-menu>li>a:hover,.wf-dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.wf-dropdown-menu>.wf-active>a,.wf-dropdown-menu>.wf-active>a:hover,.wf-dropdown-menu>.wf-active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#00709e}.wf-dropdown-menu>.wf-disabled>a,.wf-dropdown-menu>.wf-disabled>a:hover,.wf-dropdown-menu>.wf-disabled>a:focus{color:#777}.wf-dropdown-menu>.wf-disabled>a:hover,.wf-dropdown-menu>.wf-disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.wf-open>.wf-dropdown-menu{display:block}.wf-open>a{outline:0}.wf-dropdown-menu-right{left:auto;right:0}.wf-dropdown-menu-left{left:0;right:auto}.wf-dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857;color:#777;white-space:nowrap}.wf-dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.wf-pull-right>.wf-dropdown-menu{right:0;left:auto}.wf-dropup .wf-caret,.wf-navbar-fixed-bottom .wf-dropdown .wf-caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.wf-dropup .wf-dropdown-menu,.wf-navbar-fixed-bottom .wf-dropdown .wf-dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.wf-navbar-right .wf-dropdown-menu{right:0;left:auto}.wf-navbar-right .wf-dropdown-menu-left{left:0;right:auto}}.wf-mobile-dropdown{border:1px solid #ccc;margin-left:.5em;padding:5px 10px;font-size:14px;line-height:24px;margin:10px 10px 0 0;background:#f1f1f1;color:#000;font-weight:600;text-decoration:none}.wf-blocks-table tbody tr.wf-editing,.wf-blocks-table tbody tr.wf-editing td{background-color:#fffbd8}.wf-blocked-countries-section{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:stretch;align-content:stretch;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wf-blocked-countries-section-title{font-size:1.1rem;padding-right:0.5rem}.wf-blocked-countries-section-spacer{-webkit-flex-basis:30px;flex-basis:30px;height:1px;background:#aaa}.wf-blocked-countries-section-options{margin-bottom:0;margin-top:0;padding-left:0.5rem;list-style:none;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:stretch;align-content:stretch;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wf-blocked-countries-section-options li{padding:0;margin:0;color:#777}.wf-blocked-countries-section-options li a{padding:2px 4px;text-decoration:none;color:#777}.wf-blocked-countries-section-options li a.active-section{background-color:#777;color:#e2e2e2}.wf-option-bypass-redirect .wf-option-title,.wf-option-bypass-cookie .wf-option-title{-webkit-align-self:flex-start;align-self:flex-start}.wf-option-bypass-redirect *,.wf-option-bypass-cookie *{-webkit-flex-grow:1;flex-grow:1}.wf-option-bypass-redirect *:first-child,.wf-option-bypass-cookie *:first-child{-webkit-flex-grow:0;flex-grow:0}.wf-country-block-map{width:300px}@media (min-width: 768px){.wf-country-block-map{width:500px}}@media (min-width: 992px){.wf-country-block-map{width:700px}}@media (min-width: 1200px){.wf-country-block-map{width:700px}}#wf-create-block{width:100%}#wf-create-block th{white-space:nowrap}#wf-create-block td{width:100%}#wf-create-block td.wf-block-type{width:auto}@media (min-width: 768px){#wf-create-block{width:500px}}@media (min-width: 992px){#wf-create-block{width:700px}}@media (min-width: 1200px){#wf-create-block{width:700px}}#wf-create-block .wf-block-add-country select{width:240px}@media (min-width: 768px){#wf-create-block .wf-block-add-country select{width:280px}}@media (min-width: 992px){#wf-create-block .wf-block-add-country select{width:320px}}#wf-create-block .wf-block-add-country .wfselect2-container--default,#wf-create-block .wf-block-add-country .wfselect2-container--default .wfselect2-selection--multiple{border-color:#e2e2e2}#wf-create-block .wf-block-add-country .wfselect2-container--default .wfselect2-selection__choice,#wf-create-block .wf-block-add-country .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-selection__choice{background-color:#ffffff;border-color:#e2e2e2;padding:0.5rem}#wf-create-block .wf-block-add-country .wfselect2-container--default .wfselect2-search__field,#wf-create-block .wf-block-add-country .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-search__field{margin-right:5px;margin-top:5px;padding:0.5rem 0}#wfcolorbox .wf-country-selector-controls,.wf-drawer .wf-country-selector-controls{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-align-content:stretch;align-content:stretch;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-shrink:0;flex-shrink:0}#wfcolorbox .wf-country-selector-controls .wf-country-selector-section-options,.wf-drawer .wf-country-selector-controls .wf-country-selector-section-options{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-align-content:stretch;align-content:stretch;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}#wfcolorbox .wf-country-selector-controls .wf-country-selector-section-options>li,.wf-drawer .wf-country-selector-controls .wf-country-selector-section-options>li{border:1px solid #ffffff;border-radius:4px;padding:0.25rem;background-color:#ffffff}#wfcolorbox .wf-country-selector-controls .wf-country-selector-section-options>li:hover,#wfcolorbox .wf-country-selector-controls .wf-country-selector-section-options>li:focus,.wf-drawer .wf-country-selector-controls .wf-country-selector-section-options>li:hover,.wf-drawer .wf-country-selector-controls .wf-country-selector-section-options>li:focus{background-color:#00709e;border-color:#00709e}#wfcolorbox .wf-country-selector-controls .wf-country-selector-section-options>li:hover>a,#wfcolorbox .wf-country-selector-controls .wf-country-selector-section-options>li:focus>a,.wf-drawer .wf-country-selector-controls .wf-country-selector-section-options>li:hover>a,.wf-drawer .wf-country-selector-controls .wf-country-selector-section-options>li:focus>a{color:#ffffff}#wfcolorbox .wf-country-selector-controls .wf-country-selector-section-options>li>a,.wf-drawer .wf-country-selector-controls .wf-country-selector-section-options>li>a{text-decoration:none;color:#525355}#wfcolorbox .wf-country-selector-options .wf-blocked-countries,.wf-drawer .wf-country-selector-options .wf-blocked-countries{margin-bottom:0;margin-top:1rem;list-style:none;margin-left:-6px;display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:stretch;align-content:stretch;-webkit-flex-wrap:wrap;flex-wrap:wrap}#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;margin:0px 0px 2px 6px;text-align:center;border:1px solid #e2e2e2;border-radius:4px;padding:8px 12px;background-color:#ffffff;-webkit-flex-basis:38%;flex-basis:38%}@media (min-width: 768px){#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li{-webkit-flex-basis:20%;flex-basis:20%}}@media (min-width: 992px){#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li{-webkit-flex-basis:15%;flex-basis:15%}}@media (min-width: 1200px){#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li{-webkit-flex-basis:10%;flex-basis:10%}}#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li:hover,#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li:focus,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li:hover,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li:focus{text-decoration:none;background-color:#e2e2e2}#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.disabled>a,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.disabled>a{color:#777}#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.disabled>a:hover,#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.disabled>a:focus,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.disabled>a:hover,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li>a,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li>a{text-decoration:none;position:relative;display:block}#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.wf-active,#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.wf-active:hover,#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.wf-active:focus,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.wf-active,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.wf-active:hover,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.wf-active:focus{background-color:#00709e;border-color:#00709e}#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.wf-active>a,#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.wf-active:hover>a,#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.wf-active:focus>a,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.wf-active>a,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.wf-active:hover>a,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.wf-active:focus>a{color:#fff}#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li.text-only,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li.text-only{position:relative;display:block;padding:8px 12px}#wfcolorbox .wf-country-selector-options .wf-blocked-countries>li>a>img,.wf-drawer .wf-country-selector-options .wf-blocked-countries>li>a>img{max-width:none}.wf-tag-selected{background-color:#ffffff;border:1px solid #e2e2e2;border-radius:4px;cursor:default;float:left;margin-right:5px !important;margin-top:5px !important;list-style:none;padding:0.5rem !important}.wf-destroy-tag-selected{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.wf-destroy-tag-selected:hover{text-decoration:none}.wf-tags-show-hide-more{float:left;margin-right:5px;margin-top:5px;list-style:none;padding:0.5rem}.wf-select2-hide-tags .wfselect2-selection__choice{display:none}.wf-country-selector-outer-wrapper{position:relative;-webkit-flex-grow:1;flex-grow:1}.wf-country-selector-outer-wrapper .wf-country-selector-inner-wrapper{position:absolute;top:0px;right:0px;bottom:0px;left:0px;overflow-x:hidden;overflow-y:auto}table.wf-dataTable{width:auto;max-width:800px;clear:both;border-collapse:collapse;border-spacing:0}table.wf-dataTable>thead th,table.wf-dataTable>tfoot th{font-weight:bold}table.wf-dataTable>thead th,table.wf-dataTable>thead td{cursor:pointer;text-align:left;font-size:11px;border:1px solid #ccc;padding:8px 4px 5px 9px;text-transform:uppercase}table.wf-dataTable>thead th:active,table.wf-dataTable>thead td:active{outline:none}table.wf-dataTable>tfoot th,table.wf-dataTable>tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.wf-dataTable>thead .sorting,table.wf-dataTable>thead .sorting_asc,table.wf-dataTable>thead .sorting_desc{cursor:pointer;*cursor:hand}table.wf-dataTable>thead .sorting,table.wf-dataTable>thead .sorting_asc,table.wf-dataTable>thead .sorting_desc,table.wf-dataTable>thead .sorting_asc_disabled,table.wf-dataTable>thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.wf-dataTable>thead .sorting{background-image:url(../images/sort_both.png)}table.wf-dataTable>thead .sorting_asc{background-image:url(../images/sort_asc.png)}table.wf-dataTable>thead .sorting_desc{background-image:url(../images/sort_desc.png)}table.wf-dataTable>thead .sorting_asc_disabled{background-image:url(../images/sort_asc_disabled.png)}table.wf-dataTable>thead .sorting_desc_disabled{background-image:url(../images/sort_desc_disabled.png)}table.wf-dataTable>tbody>tr{background-color:#ffffff}table.wf-dataTable>tbody>tr.selected{background-color:#B0BED9}table.wf-dataTable>tbody>tr>th,table.wf-dataTable>tbody>tr>td{padding:5px 8px}table.wf-dataTable.row-border>tbody>tr>th,table.wf-dataTable.row-border>tbody>tr>td,table.wf-dataTable.display>tbody>tr>th,table.wf-dataTable.display>tbody>tr>td{border:1px solid #cccccc}table.wf-dataTable.row-border>tbody>tr:first-child>th,table.wf-dataTable.row-border>tbody>tr:first-child>td,table.wf-dataTable.display>tbody>tr:first-child>th,table.wf-dataTable.display>tbody>tr:first-child>td{border-top:none}table.wf-dataTable.cell-border>tbody>tr>th,table.wf-dataTable.cell-border>tbody>tr>td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.wf-dataTable.cell-border>tbody>tr>th:first-child,table.wf-dataTable.cell-border>tbody>tr>td:first-child{border-left:1px solid #ddd}table.wf-dataTable.cell-border>tbody>tr:first-child>th,table.wf-dataTable.cell-border>tbody>tr:first-child>td{border-top:none}table.wf-dataTable.stripe>tbody>tr.odd,table.wf-dataTable.display>tbody>tr.odd{background-color:#f9f9f9}table.wf-dataTable.stripe>tbody>tr.odd.selected,table.wf-dataTable.display>tbody>tr.odd.selected{background-color:#acbad4}table.wf-dataTable.hover>tbody>tr:hover,table.wf-dataTable.display>tbody>tr:hover{background-color:#f6f6f6}table.wf-dataTable.hover>tbody>tr:hover.selected,table.wf-dataTable.display>tbody>tr:hover.selected{background-color:#aab7d1}table.wf-dataTable.order-column>tbody>tr>.sorting_1,table.wf-dataTable.order-column>tbody>tr>.sorting_2,table.wf-dataTable.order-column>tbody>tr>.sorting_3,table.wf-dataTable.display tbody>tr>.sorting_1,table.wf-dataTable.display>tbody>tr>.sorting_2,table.wf-dataTable.display>tbody>tr>.sorting_3{background-color:#fafafa}table.wf-dataTable.order-column>tbody>tr.selected>.sorting_1,table.wf-dataTable.order-column>tbody>tr.selected>.sorting_2,table.wf-dataTable.order-column>tbody>tr.selected>.sorting_3,table.wf-dataTable.display>tbody>tr.selected>.sorting_1,table.wf-dataTable.display>tbody>tr.selected>.sorting_2,table.wf-dataTable.display>tbody>tr.selected>.sorting_3{background-color:#acbad5}table.wf-dataTable.display>tbody>tr.odd>.sorting_1,table.wf-dataTable.order-column.stripe>tbody>tr.odd>.sorting_1{background-color:#f1f1f1}table.wf-dataTable.display>tbody>tr.odd>.sorting_2,table.wf-dataTable.order-column.stripe>tbody>tr.odd>.sorting_2{background-color:#f3f3f3}table.wf-dataTable.display>tbody>tr.odd>.sorting_3,table.wf-dataTable.order-column.stripe>tbody>tr.odd>.sorting_3{background-color:whitesmoke}table.wf-dataTable.display>tbody>tr.odd.selected>.sorting_1,table.wf-dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.wf-dataTable.display>tbody>tr.odd.selected>.sorting_2,table.wf-dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.wf-dataTable.display>tbody>tr.odd.selected>.sorting_3,table.wf-dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.wf-dataTable.display>tbody>tr.even>.sorting_1,table.wf-dataTable.order-column.stripe>tbody>tr.even>.sorting_1{background-color:#fafafa}table.wf-dataTable.display>tbody>tr.even>.sorting_2,table.wf-dataTable.order-column.stripe>tbody>tr.even>.sorting_2{background-color:#fcfcfc}table.wf-dataTable.display>tbody>tr.even>.sorting_3,table.wf-dataTable.order-column.stripe>tbody>tr.even>.sorting_3{background-color:#fefefe}table.wf-dataTable.display>tbody>tr.even.selected>.sorting_1,table.wf-dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_1{background-color:#acbad5}table.wf-dataTable.display>tbody>tr.even.selected>.sorting_2,table.wf-dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_2{background-color:#aebcd6}table.wf-dataTable.display>tbody>tr.even.selected>.sorting_3,table.wf-dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_3{background-color:#afbdd8}table.wf-dataTable.display>tbody>tr:hover>.sorting_1,table.wf-dataTable.order-column.hover>tbody>tr:hover>.sorting_1{background-color:#eaeaea}table.wf-dataTable.display>tbody>tr:hover>.sorting_2,table.wf-dataTable.order-column.hover>tbody>tr:hover>.sorting_2{background-color:#ececec}table.wf-dataTable.display>tbody>tr:hover>.sorting_3,table.wf-dataTable.order-column.hover>tbody>tr:hover>.sorting_3{background-color:#efefef}table.wf-dataTable.display>tbody>tr:hover.selected>.sorting_1,table.wf-dataTable.order-column.hover>tbody>tr:hover.selected>.sorting_1{background-color:#a2aec7}table.wf-dataTable.display>tbody>tr:hover.selected>.sorting_2,table.wf-dataTable.order-column.hover>tbody>tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.wf-dataTable.display>tbody>tr:hover.selected>.sorting_3,table.wf-dataTable.order-column.hover>tbody>tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.wf-dataTable.no-footer{border-bottom:1px solid #111}table.wf-dataTable.nowrap th,table.wf-dataTable.nowrap td{white-space:nowrap}table.wf-dataTable.compact thead th,table.wf-dataTable.compact thead td{padding:4px 17px 4px 4px}table.wf-dataTable.compact tfoot th,table.wf-dataTable.compact tfoot td{padding:4px}table.wf-dataTable.compact>tbody>tr>th,table.wf-dataTable.compact>tbody>tr>td{padding:4px}table.wf-dataTable th.dt-left,table.wf-dataTable td.dt-left{text-align:left}table.wf-dataTable th.dt-center,table.wf-dataTable td.dt-center,table.wf-dataTable td.dataTables_empty{text-align:center}table.wf-dataTable th.dt-right,table.wf-dataTable td.dt-right{text-align:right}table.wf-dataTable th.dt-justify,table.wf-dataTable td.dt-justify{text-align:justify}table.wf-dataTable th.dt-nowrap,table.wf-dataTable td.dt-nowrap{white-space:nowrap}table.wf-dataTable thead th.dt-head-left,table.wf-dataTable thead td.dt-head-left,table.wf-dataTable tfoot th.dt-head-left,table.wf-dataTable tfoot td.dt-head-left{text-align:left}table.wf-dataTable thead th.dt-head-center,table.wf-dataTable thead td.dt-head-center,table.wf-dataTable tfoot th.dt-head-center,table.wf-dataTable tfoot td.dt-head-center{text-align:center}table.wf-dataTable thead th.dt-head-right,table.wf-dataTable thead td.dt-head-right,table.wf-dataTable tfoot th.dt-head-right,table.wf-dataTable tfoot td.dt-head-right{text-align:right}table.wf-dataTable thead th.dt-head-justify,table.wf-dataTable thead td.dt-head-justify,table.wf-dataTable tfoot th.dt-head-justify,table.wf-dataTable tfoot td.dt-head-justify{text-align:justify}table.wf-dataTable thead th.dt-head-nowrap,table.wf-dataTable thead td.dt-head-nowrap,table.wf-dataTable tfoot th.dt-head-nowrap,table.wf-dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.wf-dataTable>tbody>tr>th.dt-body-left,table.wf-dataTable>tbody>tr>td.dt-body-left{text-align:left}table.wf-dataTable>tbody>tr>th.dt-body-center,table.wf-dataTable>tbody>tr>td.dt-body-center{text-align:center}table.wf-dataTable>tbody>tr>th.dt-body-right,table.wf-dataTable>tbody>tr>td.dt-body-right{text-align:right}table.wf-dataTable>tbody>tr>th.dt-body-justify,table.wf-dataTable>tbody>tr>td.dt-body-justify{text-align:justify}table.wf-dataTable>tbody>tr>th.dt-body-nowrap,table.wf-dataTable>tbody>tr>td.dt-body-nowrap{white-space:nowrap}table.wf-dataTable table.dataTable,table.wf-dataTable th,table.wf-dataTable td{-webkit-box-sizing:content-box;box-sizing:content-box}.wf-dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.wf-dataTables_wrapper .dataTables_length{float:left}.wf-dataTables_wrapper .dataTables_filter{float:right;text-align:right}.wf-dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.wf-dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.wf-dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.wf-dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.wf-dataTables_wrapper .dataTables_paginate .paginate_button.current,.wf-dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #ffffff 0%,#dcdcdc 100%)}.wf-dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.wf-dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.wf-dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.wf-dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%,#111111 100%)}.wf-dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%,#0c0c0c 100%);box-shadow:inset 0 0 3px #111}.wf-dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.wf-dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%)}.wf-dataTables_wrapper .dataTables_length,.wf-dataTables_wrapper .dataTables_filter,.wf-dataTables_wrapper .dataTables_info,.wf-dataTables_wrapper .dataTables_processing,.wf-dataTables_wrapper .dataTables_paginate{color:#333}.wf-dataTables_wrapper .dataTables_scroll{clear:both}.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th,.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td{vertical-align:middle}.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.wf-dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.wf-dataTables_wrapper.no-footer div.dataTables_scrollHead table,.wf-dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.wf-dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.wf-dataTables_wrapper .dataTables_info,.wf-dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.wf-dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.wf-dataTables_wrapper .dataTables_length,.wf-dataTables_wrapper .dataTables_filter{float:none;text-align:center}.wf-dataTables_wrapper .dataTables_filter{margin-top:0.5em}}.wf-alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.wf-alert h4{margin-top:0;color:inherit}.wf-alert .wf-alert-link{font-weight:bold}.wf-alert>p,.wf-alert>ul{margin-bottom:0}.wf-alert>p+p{margin-top:5px}.wf-alert-dismissable,.wf-alert-dismissible{padding-right:35px}.wf-alert-dismissable .close,.wf-alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.wf-alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.wf-alert-success hr{border-top-color:#c9e2b3}.wf-alert-success .alert-link{color:#2b542c}.wf-alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.wf-alert-info hr{border-top-color:#a6e1ec}.wf-alert-info .alert-link{color:#245269}.wf-alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.wf-alert-warning hr{border-top-color:#f7e1b5}.wf-alert-warning .alert-link{color:#66512c}.wf-alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.wf-alert-danger hr{border-top-color:#e4b9c0}.wf-alert-danger .alert-link{color:#843534}#wf-tools-whois #wfrawhtml .wf-flex-row{margin:.5rem 0 1rem}#wf-tools-whois #wfrawhtml .wf-flex-row a.wf-flex-row-1{color:#444;text-decoration:none}#wf-tools-whois #wfrawhtml .wf-flex-row a.wf-flex-row-1:hover{color:#00a0d2;text-decoration:underline}.wf-diagnostic-fail.wf-block .wf-block-header .wf-block-header-content .wf-block-title{color:#d0514c}.wf-diagnostic-fail.wf-block .wf-block-header .wf-block-header-content .wf-block-title:before{content:'\f100';font-family:"Ionicons";display:inline-block;margin:0 .4rem 0 0}#wf-diagnostics .wf-block{margin:0 auto 0.5rem}#wf-diagnostics-other-tests .wf-btn-sm,#wf-diagnostics-other-tests .wf-btn-group-sm>.wf-btn{padding:2px 10px;vertical-align:top}.wf-support-block{padding:1rem 0}.wf-support-block>h4{margin:0;padding:0 0 1rem 0}.wf-support-block>h4>a{text-decoration:none;font-size:1.3125rem;line-height:1.5;font-weight:300}.wf-support-block>p{margin:0;padding:0}.wf-support-block>ul{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0}.wf-support-block>ul>li{margin:0;padding:1rem 1rem 1rem 0}.wf-support-block>ul>li>a{text-decoration:none;font-size:.875rem;line-height:1.3125;font-weight:normal}.wf-support-top-block,.wf-support-missing-block{padding:1.5rem 0}.wf-support-top-block>h4,.wf-support-missing-block>h4{margin:0;padding:0}.wf-support-top-block>ol>li,.wf-support-missing-block>ol>li{margin:0.75rem 0;padding:0}.wf-support-top-block>ol>li>a,.wf-support-missing-block>ol>li>a{text-decoration:none;font-size:.875rem;line-height:1.3125;font-weight:normal}#wf-gdpr-banner{position:relative;z-index:3006;background-color:#fcb214;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.875rem;color:#2d2d2d;line-height:1.3125;font-weight:normal;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:row;flex-direction:row;margin:0 0 0 -20px;padding:0}#wf-gdpr-banner>li{margin:0;padding:0.5rem 1rem}#wf-toupp-required-overlay::after{position:absolute;z-index:3004;top:0;right:0;width:0;height:0;background:rgba(241,241,241,0.6);content:'';opacity:0;-webkit-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;-o-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s}.wf-toupp-required #wf-toupp-required-overlay::after{width:100%;height:100%;opacity:1;-webkit-transition:opacity 0.5s;-o-transition:opacity 0.5s;transition:opacity 0.5s}#wf-toupp-required-message{display:none;position:fixed;z-index:3005;left:0;width:100%;top:50%;transform:translateY(-50%);text-align:center;color:#666666;opacity:0;-webkit-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;-o-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s}#wf-toupp-required-message #wf-toupp-required-message-inner{background-color:#00709e;color:#fff;overflow:hidden;max-width:550px;margin:0 auto;padding:20px}#wf-toupp-required-message #wf-toupp-required-message-inner h2{font-size:2.0rem}#wf-toupp-required-message #wf-toupp-required-message-inner h2 .wf-toupp-required-header{line-height:2.4rem}#wf-toupp-required-message #wf-toupp-required-message-inner p{font-size:1rem}#wf-toupp-required-message #wf-toupp-required-message-inner p:first-child{margin-top:0}#wf-toupp-required-message #wf-toupp-required-message-inner p:last-child{margin-bottom:0}#wf-toupp-required-message #wf-toupp-required-message-inner small{font-size:0.9rem;font-weight:normal;margin-top:12px;display:block}.wf-toupp-required #wf-toupp-required-message{display:block;opacity:1;-webkit-transition:opacity 0.5s;transition:opacity 0.5s}.wf-flag-{background-position:-0px -0px !important}.wf-flag-ad{background-position:-16px -0px !important}.wf-flag-ae{background-position:-32px -0px !important}.wf-flag-af{background-position:-48px -0px !important}.wf-flag-ag{background-position:-64px -0px !important}.wf-flag-ai{background-position:-80px -0px !important}.wf-flag-al{background-position:-96px -0px !important}.wf-flag-am{background-position:-112px -0px !important}.wf-flag-an{background-position:-128px -0px !important}.wf-flag-ao{background-position:-144px -0px !important}.wf-flag-ap{background-position:-160px -0px !important}.wf-flag-aq{background-position:-176px -0px !important}.wf-flag-ar{background-position:-0px -11px !important}.wf-flag-as{background-position:-16px -11px !important}.wf-flag-at{background-position:-32px -11px !important}.wf-flag-au{background-position:-48px -11px !important}.wf-flag-aw{background-position:-64px -11px !important}.wf-flag-ax{background-position:-80px -11px !important}.wf-flag-az{background-position:-96px -11px !important}.wf-flag-ba{background-position:-112px -11px !important}.wf-flag-bb{background-position:-128px -11px !important}.wf-flag-bd{background-position:-144px -11px !important}.wf-flag-be{background-position:-160px -11px !important}.wf-flag-bf{background-position:-176px -11px !important}.wf-flag-bg{background-position:-0px -22px !important}.wf-flag-bh{background-position:-16px -22px !important}.wf-flag-bi{background-position:-32px -22px !important}.wf-flag-bj{background-position:-48px -22px !important}.wf-flag-bl{background-position:-64px -22px !important}.wf-flag-bm{background-position:-80px -22px !important}.wf-flag-bn{background-position:-96px -22px !important}.wf-flag-bo{background-position:-112px -22px !important}.wf-flag-bq{background-position:-128px -22px !important}.wf-flag-br{background-position:-144px -22px !important}.wf-flag-bs{background-position:-160px -22px !important}.wf-flag-bt{background-position:-176px -22px !important}.wf-flag-bv{background-position:-0px -33px !important}.wf-flag-bw{background-position:-16px -33px !important}.wf-flag-by{background-position:-32px -33px !important}.wf-flag-bz{background-position:-48px -33px !important}.wf-flag-ca{background-position:-64px -33px !important}.wf-flag-cc{background-position:-80px -33px !important}.wf-flag-cd{background-position:-96px -33px !important}.wf-flag-cf{background-position:-112px -33px !important}.wf-flag-cg{background-position:-128px -33px !important}.wf-flag-ch{background-position:-144px -33px !important}.wf-flag-ci{background-position:-160px -33px !important}.wf-flag-ck{background-position:-176px -33px !important}.wf-flag-cl{background-position:-0px -44px !important}.wf-flag-cm{background-position:-16px -44px !important}.wf-flag-cn{background-position:-32px -44px !important}.wf-flag-co{background-position:-48px -44px !important}.wf-flag-cr{background-position:-64px -44px !important}.wf-flag-cs{background-position:-80px -44px !important}.wf-flag-cu{background-position:-96px -44px !important}.wf-flag-cv{background-position:-112px -44px !important}.wf-flag-cw{background-position:-128px -44px !important}.wf-flag-cx{background-position:-144px -44px !important}.wf-flag-cy{background-position:-160px -44px !important}.wf-flag-cz{background-position:-176px -44px !important}.wf-flag-de{background-position:-0px -55px !important}.wf-flag-dj{background-position:-16px -55px !important}.wf-flag-dk{background-position:-32px -55px !important}.wf-flag-dm{background-position:-48px -55px !important}.wf-flag-do{background-position:-64px -55px !important}.wf-flag-dz{background-position:-80px -55px !important}.wf-flag-ec{background-position:-96px -55px !important}.wf-flag-ee{background-position:-112px -55px !important}.wf-flag-eg{background-position:-128px -55px !important}.wf-flag-eh{background-position:-144px -55px !important}.wf-flag-england{background-position:-160px -55px !important}.wf-flag-er{background-position:-176px -55px !important}.wf-flag-es{background-position:-0px -66px !important}.wf-flag-et{background-position:-16px -66px !important}.wf-flag-eu{background-position:-32px -66px !important}.wf-flag-fam{background-position:-48px -66px !important}.wf-flag-fi{background-position:-64px -66px !important}.wf-flag-fj{background-position:-80px -66px !important}.wf-flag-fk{background-position:-96px -66px !important}.wf-flag-fm{background-position:-112px -66px !important}.wf-flag-fo{background-position:-128px -66px !important}.wf-flag-fr{background-position:-144px -66px !important}.wf-flag-ga{background-position:-160px -66px !important}.wf-flag-gb{background-position:-176px -66px !important}.wf-flag-gd{background-position:-0px -77px !important}.wf-flag-ge{background-position:-16px -77px !important}.wf-flag-gf{background-position:-32px -77px !important}.wf-flag-gg{background-position:-48px -77px !important}.wf-flag-gh{background-position:-64px -77px !important}.wf-flag-gi{background-position:-80px -77px !important}.wf-flag-gl{background-position:-96px -77px !important}.wf-flag-gm{background-position:-112px -77px !important}.wf-flag-gn{background-position:-128px -77px !important}.wf-flag-gp{background-position:-144px -77px !important}.wf-flag-gq{background-position:-160px -77px !important}.wf-flag-gr{background-position:-176px -77px !important}.wf-flag-gs{background-position:-0px -88px !important}.wf-flag-gt{background-position:-16px -88px !important}.wf-flag-gu{background-position:-32px -88px !important}.wf-flag-gw{background-position:-48px -88px !important}.wf-flag-gy{background-position:-64px -88px !important}.wf-flag-hk{background-position:-80px -88px !important}.wf-flag-hm{background-position:-96px -88px !important}.wf-flag-hn{background-position:-112px -88px !important}.wf-flag-hr{background-position:-128px -88px !important}.wf-flag-ht{background-position:-144px -88px !important}.wf-flag-hu{background-position:-160px -88px !important}.wf-flag-id{background-position:-176px -88px !important}.wf-flag-ie{background-position:-0px -99px !important}.wf-flag-il{background-position:-16px -99px !important}.wf-flag-im{background-position:-32px -99px !important}.wf-flag-in{background-position:-48px -99px !important}.wf-flag-io{background-position:-64px -99px !important}.wf-flag-iq{background-position:-80px -99px !important}.wf-flag-ir{background-position:-96px -99px !important}.wf-flag-is{background-position:-112px -99px !important}.wf-flag-it{background-position:-128px -99px !important}.wf-flag-je{background-position:-144px -99px !important}.wf-flag-jm{background-position:-160px -99px !important}.wf-flag-jo{background-position:-176px -99px !important}.wf-flag-jp{background-position:-0px -110px !important}.wf-flag-ke{background-position:-16px -110px !important}.wf-flag-kg{background-position:-32px -110px !important}.wf-flag-kh{background-position:-48px -110px !important}.wf-flag-ki{background-position:-64px -110px !important}.wf-flag-km{background-position:-80px -110px !important}.wf-flag-kn{background-position:-96px -110px !important}.wf-flag-kp{background-position:-112px -110px !important}.wf-flag-kr{background-position:-128px -110px !important}.wf-flag-kw{background-position:-144px -110px !important}.wf-flag-ky{background-position:-160px -110px !important}.wf-flag-kz{background-position:-176px -110px !important}.wf-flag-la{background-position:-0px -121px !important}.wf-flag-lb{background-position:-16px -121px !important}.wf-flag-lc{background-position:-32px -121px !important}.wf-flag-li{background-position:-48px -121px !important}.wf-flag-lk{background-position:-64px -121px !important}.wf-flag-lr{background-position:-80px -121px !important}.wf-flag-ls{background-position:-96px -121px !important}.wf-flag-lt{background-position:-112px -121px !important}.wf-flag-lu{background-position:-128px -121px !important}.wf-flag-lv{background-position:-144px -121px !important}.wf-flag-ly{background-position:-160px -121px !important}.wf-flag-ma{background-position:-176px -121px !important}.wf-flag-mc{background-position:-0px -132px !important}.wf-flag-md{background-position:-16px -132px !important}.wf-flag-me{background-position:-32px -132px !important}.wf-flag-mf{background-position:-48px -132px !important}.wf-flag-mg{background-position:-64px -132px !important}.wf-flag-mh{background-position:-80px -132px !important}.wf-flag-mk{background-position:-96px -132px !important}.wf-flag-ml{background-position:-112px -132px !important}.wf-flag-mm{background-position:-128px -132px !important}.wf-flag-mn{background-position:-144px -132px !important}.wf-flag-mo{background-position:-160px -132px !important}.wf-flag-mp{background-position:-176px -132px !important}.wf-flag-mq{background-position:-0px -143px !important}.wf-flag-mr{background-position:-16px -143px !important}.wf-flag-ms{background-position:-32px -143px !important}.wf-flag-mt{background-position:-48px -143px !important}.wf-flag-mu{background-position:-64px -143px !important}.wf-flag-mv{background-position:-80px -143px !important}.wf-flag-mw{background-position:-96px -143px !important}.wf-flag-mx{background-position:-112px -143px !important}.wf-flag-my{background-position:-128px -143px !important}.wf-flag-mz{background-position:-144px -143px !important}.wf-flag-na{background-position:-160px -143px !important}.wf-flag-nc{background-position:-176px -143px !important}.wf-flag-ne{background-position:-0px -154px !important}.wf-flag-nf{background-position:-16px -154px !important}.wf-flag-ng{background-position:-32px -154px !important}.wf-flag-ni{background-position:-48px -154px !important}.wf-flag-nl{background-position:-64px -154px !important}.wf-flag-no{background-position:-80px -154px !important}.wf-flag-np{background-position:-96px -154px !important}.wf-flag-nr{background-position:-112px -154px !important}.wf-flag-nu{background-position:-128px -154px !important}.wf-flag-nz{background-position:-144px -154px !important}.wf-flag-om{background-position:-160px -154px !important}.wf-flag-pa{background-position:-176px -154px !important}.wf-flag-pe{background-position:-0px -165px !important}.wf-flag-pf{background-position:-16px -165px !important}.wf-flag-pg{background-position:-32px -165px !important}.wf-flag-ph{background-position:-48px -165px !important}.wf-flag-pk{background-position:-64px -165px !important}.wf-flag-pl{background-position:-80px -165px !important}.wf-flag-pm{background-position:-96px -165px !important}.wf-flag-pn{background-position:-112px -165px !important}.wf-flag-pr{background-position:-128px -165px !important}.wf-flag-ps{background-position:-144px -165px !important}.wf-flag-pt{background-position:-160px -165px !important}.wf-flag-pw{background-position:-176px -165px !important}.wf-flag-py{background-position:-0px -176px !important}.wf-flag-qa{background-position:-16px -176px !important}.wf-flag-re{background-position:-32px -176px !important}.wf-flag-ro{background-position:-48px -176px !important}.wf-flag-rs{background-position:-64px -176px !important}.wf-flag-ru{background-position:-80px -176px !important}.wf-flag-rw{background-position:-96px -176px !important}.wf-flag-sa{background-position:-112px -176px !important}.wf-flag-sb{background-position:-128px -176px !important}.wf-flag-sc{background-position:-144px -176px !important}.wf-flag-scotland{background-position:-160px -176px !important}.wf-flag-sd{background-position:-176px -176px !important}.wf-flag-se{background-position:-0px -187px !important}.wf-flag-sg{background-position:-16px -187px !important}.wf-flag-sh{background-position:-32px -187px !important}.wf-flag-si{background-position:-48px -187px !important}.wf-flag-sj{background-position:-64px -187px !important}.wf-flag-sk{background-position:-80px -187px !important}.wf-flag-sl{background-position:-96px -187px !important}.wf-flag-sm{background-position:-112px -187px !important}.wf-flag-sn{background-position:-128px -187px !important}.wf-flag-so{background-position:-144px -187px !important}.wf-flag-sr{background-position:-160px -187px !important}.wf-flag-ss{background-position:-176px -187px !important}.wf-flag-st{background-position:-0px -198px !important}.wf-flag-sv{background-position:-16px -198px !important}.wf-flag-sx{background-position:-32px -198px !important}.wf-flag-sy{background-position:-48px -198px !important}.wf-flag-sz{background-position:-64px -198px !important}.wf-flag-tc{background-position:-80px -198px !important}.wf-flag-td{background-position:-96px -198px !important}.wf-flag-tf{background-position:-112px -198px !important}.wf-flag-tg{background-position:-128px -198px !important}.wf-flag-th{background-position:-144px -198px !important}.wf-flag-tj{background-position:-160px -198px !important}.wf-flag-tk{background-position:-176px -198px !important}.wf-flag-tl{background-position:-0px -209px !important}.wf-flag-tm{background-position:-16px -209px !important}.wf-flag-tn{background-position:-32px -209px !important}.wf-flag-to{background-position:-48px -209px !important}.wf-flag-tr{background-position:-64px -209px !important}.wf-flag-tt{background-position:-80px -209px !important}.wf-flag-tv{background-position:-96px -209px !important}.wf-flag-tw{background-position:-112px -209px !important}.wf-flag-tz{background-position:-128px -209px !important}.wf-flag-ua{background-position:-144px -209px !important}.wf-flag-ug{background-position:-160px -209px !important}.wf-flag-uk{background-position:-176px -209px !important}.wf-flag-um{background-position:-0px -220px !important}.wf-flag-un{background-position:-16px -220px !important}.wf-flag-us{background-position:-32px -220px !important}.wf-flag-uy{background-position:-48px -220px !important}.wf-flag-uz{background-position:-64px -220px !important}.wf-flag-va{background-position:-80px -220px !important}.wf-flag-vc{background-position:-96px -220px !important}.wf-flag-ve{background-position:-112px -220px !important}.wf-flag-vg{background-position:-128px -220px !important}.wf-flag-vi{background-position:-144px -220px !important}.wf-flag-vn{background-position:-160px -220px !important}.wf-flag-vu{background-position:-176px -220px !important}.wf-flag-wales{background-position:-0px -231px !important}.wf-flag-wf{background-position:-16px -231px !important}.wf-flag-ws{background-position:-32px -231px !important}.wf-flag-xk{background-position:-48px -231px !important}.wf-flag-ye{background-position:-64px -231px !important}.wf-flag-yt{background-position:-80px -231px !important}.wf-flag-za{background-position:-96px -231px !important}.wf-flag-zm{background-position:-112px -231px !important}.wf-flag-zw{background-position:-128px -231px !important}#wf-central-progress li{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;padding:8px 1.5rem}#wf-central-progress li .wf-central-progress-icon{display:-webkit-flex;display:flex;-webkit-flex-grow:0;flex-grow:0}#wf-central-progress li .wf-central-progress-content{display:-webkit-flex;display:flex;-webkit-flex-grow:1;flex-grow:1;margin:3px 20px 0px}#wf-central-progress li .wf-step-pending,#wf-central-progress li .wf-step-running,#wf-central-progress li .wf-step-complete-success,#wf-central-progress li .wf-step-complete-warning{display:none}#wf-central-progress li.pending{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);opacity:.4}#wf-central-progress li.pending .wf-step-pending{display:block}#wf-central-progress li.running .wf-step-running{display:block}#wf-central-progress li.complete-success .wf-step-complete-success{display:block}#wf-central-progress li.complete-warning .wf-step-complete-warning{display:block}.wf-central-connected .wf-flex-row{align-items:stretch}.wf-central-connected .wf-flex-row .wf-flex-row-1{width:50%}.wf-central-connected .wf-flex-row .wf-flex-row-1:first-child{margin-right:5px}.wf-central-connected .wf-flex-row .wf-flex-row-1:last-child{margin-left:5px}@media (max-width: 768px){.wf-central-connected .wf-flex-row{-webkit-flex-direction:column !important;flex-direction:column !important}.wf-central-connected .wf-flex-row .wf-flex-row-1{width:100%;margin:0 0 10px !important}}#wf-extended-protection-notice{display:inline-block;line-height:1.4;padding:11px 15px;font-size:14px;text-align:left;margin:25px 20px 0 2px;background-color:#fff;border-left:4px solid #ffba00;box-shadow:0 1px 1px 0 rgba(0,0,0,0.1)}
|
css/{phpinfo.1603293147.css → phpinfo.1607007971.css}
RENAMED
File without changes
|
css/{wf-adminbar.1603293147.css → wf-adminbar.1607007971.css}
RENAMED
File without changes
|
css/{wf-colorbox.1603293147.css → wf-colorbox.1607007971.css}
RENAMED
File without changes
|
css/{wf-font-awesome.1603293147.css → wf-font-awesome.1607007971.css}
RENAMED
File without changes
|
css/{wf-global.1603293147.css → wf-global.1607007971.css}
RENAMED
File without changes
|
css/{wf-ionicons.1603293147.css → wf-ionicons.1607007971.css}
RENAMED
File without changes
|
css/{wf-onboarding.1603293147.css → wf-onboarding.1607007971.css}
RENAMED
File without changes
|
css/{wf-roboto-font.1603293147.css → wf-roboto-font.1607007971.css}
RENAMED
File without changes
|
css/{wfselect2.min.1603293147.css → wfselect2.min.1607007971.css}
RENAMED
File without changes
|
css/{wordfenceBox.1603293147.css → wordfenceBox.1607007971.css}
RENAMED
File without changes
|
js/{Chart.bundle.min.1603293147.js → Chart.bundle.min.1607007971.js}
RENAMED
File without changes
|
js/{admin.1603293147.js → admin.1607007971.js}
RENAMED
@@ -599,7 +599,7 @@
|
|
599 |
.off('click.wfselect2-copy')
|
600 |
.on('click.wfselect2-copy', function(e) {
|
601 |
var opt = $(this).data('wfselect2-opt');
|
602 |
-
opt.
|
603 |
opt.parents('select').trigger('change');
|
604 |
}).data('wfselect2-opt', $(value));
|
605 |
list.append(li);
|
@@ -2008,7 +2008,7 @@
|
|
2008 |
}
|
2009 |
WFAD.colorboxModalHTML((WFAD.isSmallScreen ? '300px' : '400px'), "Download Backup File", 'Please make a backup of this file before proceeding. If you need to restore this backup file, you can copy it to the following path from your site\'s root:<p class="wf-padding-add-top-medium"><code>' + file + '</code></p>'
|
2010 |
+ '<a href="' + WFAD.makeDownloadFileLink(file) + '" onclick="jQuery(\'#wfRepairFileNextBtn\').prop(\'disabled\', false); return true;">Click here to download a backup copy of this file now</a><p class="wf-flex-horizontal">' +
|
2011 |
-
'<input type="button" class="wf-btn wf-btn-primary" name="but1" id="wfRepairFileNextBtn" value="Repair File" disabled="disabled" onclick="WFAD.promptToRepairFileDone(' + parseInt(issueID, 10) + ', jQuery(\'#forceRepairFileCheckbox\').
|
2012 |
'<label class="wf-padding-add-left"><input type="checkbox" id="forceRepairFileCheckbox" onclick="jQuery(\'#wfRepairFileNextBtn\').prop(\'disabled\', !this.checked); return true;"> Don\'t ask again</label>' +
|
2013 |
'</p>' +
|
2014 |
'<div class="wordfenceHelpLink"><a href="' + WordfenceAdminVars.supportURLs['scan-result-repair-modified-files'] + '" target="_blank" rel="noopener noreferrer" class="wfhelp"></a><a href="' + WordfenceAdminVars.supportURLs['scan-result-repair-modified-files'] + '" target="_blank" rel="noopener noreferrer">Learn more about repairing modified files.</a></div>'
|
599 |
.off('click.wfselect2-copy')
|
600 |
.on('click.wfselect2-copy', function(e) {
|
601 |
var opt = $(this).data('wfselect2-opt');
|
602 |
+
opt.prop('selected', false);
|
603 |
opt.parents('select').trigger('change');
|
604 |
}).data('wfselect2-opt', $(value));
|
605 |
list.append(li);
|
2008 |
}
|
2009 |
WFAD.colorboxModalHTML((WFAD.isSmallScreen ? '300px' : '400px'), "Download Backup File", 'Please make a backup of this file before proceeding. If you need to restore this backup file, you can copy it to the following path from your site\'s root:<p class="wf-padding-add-top-medium"><code>' + file + '</code></p>'
|
2010 |
+ '<a href="' + WFAD.makeDownloadFileLink(file) + '" onclick="jQuery(\'#wfRepairFileNextBtn\').prop(\'disabled\', false); return true;">Click here to download a backup copy of this file now</a><p class="wf-flex-horizontal">' +
|
2011 |
+
'<input type="button" class="wf-btn wf-btn-primary" name="but1" id="wfRepairFileNextBtn" value="Repair File" disabled="disabled" onclick="WFAD.promptToRepairFileDone(' + parseInt(issueID, 10) + ', jQuery(\'#forceRepairFileCheckbox\').prop(\'checked\'));this.disabled=true;" />' +
|
2012 |
'<label class="wf-padding-add-left"><input type="checkbox" id="forceRepairFileCheckbox" onclick="jQuery(\'#wfRepairFileNextBtn\').prop(\'disabled\', !this.checked); return true;"> Don\'t ask again</label>' +
|
2013 |
'</p>' +
|
2014 |
'<div class="wordfenceHelpLink"><a href="' + WordfenceAdminVars.supportURLs['scan-result-repair-modified-files'] + '" target="_blank" rel="noopener noreferrer" class="wfhelp"></a><a href="' + WordfenceAdminVars.supportURLs['scan-result-repair-modified-files'] + '" target="_blank" rel="noopener noreferrer">Learn more about repairing modified files.</a></div>'
|
js/{admin.ajaxWatcher.1603293147.js → admin.ajaxWatcher.1607007971.js}
RENAMED
@@ -39,7 +39,7 @@
|
|
39 |
$.wordfenceBox({
|
40 |
closeButton: false,
|
41 |
width: '400px',
|
42 |
-
html: "<h3>Background Request Blocked</h3><p>Wordfence Firewall blocked a background request to WordPress for the URL <code>" + requestURLEscaped + "</code>. If this occurred as a result of an intentional action, you may consider
|
43 |
onComplete: function() {
|
44 |
$('#background-block-dismiss').click(function(event) {
|
45 |
event.preventDefault();
|
@@ -51,18 +51,18 @@
|
|
51 |
event.preventDefault();
|
52 |
event.stopPropagation();
|
53 |
|
54 |
-
if (confirm('Are you sure you want to
|
55 |
$.ajax({
|
56 |
method: 'POST',
|
57 |
url: formAction,
|
58 |
data: queryParams,
|
59 |
global: false,
|
60 |
success: function() {
|
61 |
-
alert('The request has been
|
62 |
$.wordfenceBox.close();
|
63 |
},
|
64 |
error: function() {
|
65 |
-
alert('An error occurred when adding the request to the
|
66 |
$.wordfenceBox.close();
|
67 |
}
|
68 |
});
|
39 |
$.wordfenceBox({
|
40 |
closeButton: false,
|
41 |
width: '400px',
|
42 |
+
html: "<h3>Background Request Blocked</h3><p>Wordfence Firewall blocked a background request to WordPress for the URL <code>" + requestURLEscaped + "</code>. If this occurred as a result of an intentional action, you may consider allowlisting the request to allow it in the future.</p><p class=\"wf-right\"><a href=\"https://www.wordfence.com/help/?query=ajax-blocked\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wfboxhelp\"></a><a href=\"#\" class=\"button\" id=\"background-block-whitelist\">Add action to allowlist</a> <a href=\"#\" class=\"button\" id=\"background-block-dismiss\">Dismiss</a></p>",
|
43 |
onComplete: function() {
|
44 |
$('#background-block-dismiss').click(function(event) {
|
45 |
event.preventDefault();
|
51 |
event.preventDefault();
|
52 |
event.stopPropagation();
|
53 |
|
54 |
+
if (confirm('Are you sure you want to allowlist this action?')) {
|
55 |
$.ajax({
|
56 |
method: 'POST',
|
57 |
url: formAction,
|
58 |
data: queryParams,
|
59 |
global: false,
|
60 |
success: function() {
|
61 |
+
alert('The request has been allowlisted. Please try it again.');
|
62 |
$.wordfenceBox.close();
|
63 |
},
|
64 |
error: function() {
|
65 |
+
alert('An error occurred when adding the request to the allowlist.');
|
66 |
$.wordfenceBox.close();
|
67 |
}
|
68 |
});
|
js/{admin.liveTraffic.1603293147.js → admin.liveTraffic.1607007971.js}
RENAMED
@@ -452,7 +452,7 @@
|
|
452 |
return 'blocked by firewall for ' + desc;
|
453 |
}
|
454 |
if (data.failedRules == 'blocked') {
|
455 |
-
return 'blocked by real-time IP
|
456 |
}
|
457 |
return 'blocked by firewall';
|
458 |
}
|
452 |
return 'blocked by firewall for ' + desc;
|
453 |
}
|
454 |
if (data.failedRules == 'blocked') {
|
455 |
+
return 'blocked by real-time IP blocklist';
|
456 |
}
|
457 |
return 'blocked by firewall';
|
458 |
}
|
js/{date.1603293147.js → date.1607007971.js}
RENAMED
File without changes
|
js/{jquery-ui-timepicker-addon.1603293147.js → jquery-ui-timepicker-addon.1607007971.js}
RENAMED
File without changes
|
js/{jquery.colorbox-min.1603293147.js → jquery.colorbox-min.1607007971.js}
RENAMED
File without changes
|
js/{jquery.colorbox.1603293147.js → jquery.colorbox.1607007971.js}
RENAMED
File without changes
|
js/{jquery.dataTables.min.1603293147.js → jquery.dataTables.min.1607007971.js}
RENAMED
File without changes
|
js/{jquery.qrcode.min.1603293147.js → jquery.qrcode.min.1607007971.js}
RENAMED
File without changes
|
js/{jquery.tmpl.min.1603293147.js → jquery.tmpl.min.1607007971.js}
RENAMED
File without changes
|
js/{jquery.tools.min.1603293147.js → jquery.tools.min.1607007971.js}
RENAMED
File without changes
|
js/{knockout-3.3.0.1603293147.js → knockout-3.3.0.1607007971.js}
RENAMED
File without changes
|
js/{wfdashboard.1603293147.js → wfdashboard.1607007971.js}
RENAMED
File without changes
|
js/{wfdropdown.1603293147.js → wfdropdown.1607007971.js}
RENAMED
File without changes
|
js/{wfglobal.1603293147.js → wfglobal.1607007971.js}
RENAMED
File without changes
|
js/{wfpopover.1603293147.js → wfpopover.1607007971.js}
RENAMED
File without changes
|
js/{wfselect2.min.1603293147.js → wfselect2.min.1607007971.js}
RENAMED
File without changes
|
languages/wordfence.po
CHANGED
@@ -78,7 +78,7 @@ msgid "If you think you have been blocked in error, contact the owner of this si
|
|
78 |
msgstr ""
|
79 |
|
80 |
#: 403-roadblock.php:366
|
81 |
-
msgid "If you are an administrator and you are certain this is a false positive, you can automatically
|
82 |
msgstr ""
|
83 |
|
84 |
#: 403-roadblock.php:373
|
@@ -86,7 +86,7 @@ msgid "I am certain this is a false positive."
|
|
86 |
msgstr ""
|
87 |
|
88 |
#: 403-roadblock.php:375
|
89 |
-
msgid "
|
90 |
msgstr ""
|
91 |
|
92 |
#: 403-roadblock.php:378
|
@@ -94,7 +94,7 @@ msgid "All set! You can refresh the page to try this action again."
|
|
94 |
msgstr ""
|
95 |
|
96 |
#: 403-roadblock.php:379
|
97 |
-
msgid "Something went wrong
|
98 |
msgstr ""
|
99 |
|
100 |
#: 403-roadblock.php:417
|
@@ -376,7 +376,7 @@ msgstr ""
|
|
376 |
msgid ""
|
377 |
"NOTE: You are using the free version of Wordfence. Upgrade today:\n"
|
378 |
" - Receive real-time Firewall and Scan engine rule updates for protection as threats emerge\n"
|
379 |
-
" - Real-time IP
|
380 |
" - Country blocking\n"
|
381 |
" - IP reputation monitoring\n"
|
382 |
" - Schedule scans to run more frequently and at optimal times\n"
|
@@ -560,7 +560,7 @@ msgid "Receive real-time Firewall and Scan engine rule updates for protection as
|
|
560 |
msgstr ""
|
561 |
|
562 |
#: lib/email_newIssues.php:121
|
563 |
-
msgid "Real-time IP
|
564 |
msgstr ""
|
565 |
|
566 |
#: lib/email_newIssues.php:122
|
@@ -1217,7 +1217,7 @@ msgstr ""
|
|
1217 |
|
1218 |
#: lib/menu_firewall_waf.php:69
|
1219 |
#: lib/menu_firewall_waf_options.php:175
|
1220 |
-
msgid "Real-Time IP
|
1221 |
msgstr ""
|
1222 |
|
1223 |
#: lib/menu_firewall_waf.php:69
|
@@ -1261,7 +1261,7 @@ msgid "Blocks requests from known malicious IPs"
|
|
1261 |
msgstr ""
|
1262 |
|
1263 |
#: lib/menu_firewall_waf.php:72
|
1264 |
-
msgid "Manage Real-Time IP
|
1265 |
msgstr ""
|
1266 |
|
1267 |
#: lib/menu_firewall_waf.php:72
|
@@ -1271,7 +1271,7 @@ msgstr ""
|
|
1271 |
|
1272 |
#: lib/menu_firewall_waf.php:74
|
1273 |
#: lib/menu_firewall_waf_options.php:180
|
1274 |
-
msgid "
|
1275 |
msgstr ""
|
1276 |
|
1277 |
#: lib/menu_firewall_waf.php:102
|
@@ -1355,11 +1355,11 @@ msgid "Set up the way you want the firewall to protect your site including the w
|
|
1355 |
msgstr ""
|
1356 |
|
1357 |
#: lib/menu_firewall_waf.php:349
|
1358 |
-
msgid "All of the Firewall settings are now located here. This includes configuration options for the web application firewall, brute force protection, rate limiting,
|
1359 |
msgstr ""
|
1360 |
|
1361 |
#: lib/menu_firewall_waf_options.php:80
|
1362 |
-
msgid "Are you sure you want to restore the default Firewall settings? This will undo any custom changes you have made to the options on this page. If you have manually disabled any rules or added any custom
|
1363 |
msgstr ""
|
1364 |
|
1365 |
#: lib/menu_options.php:24
|
@@ -1546,7 +1546,7 @@ msgstr ""
|
|
1546 |
|
1547 |
#: lib/menu_options.php:106
|
1548 |
#: views/waf/options-group-basic-firewall.php:464
|
1549 |
-
msgid "Real-Time IP
|
1550 |
msgstr ""
|
1551 |
|
1552 |
#: lib/menu_options.php:107
|
@@ -1556,12 +1556,12 @@ msgstr ""
|
|
1556 |
|
1557 |
#: lib/menu_options.php:108
|
1558 |
#: views/waf/options-group-advanced-firewall.php:52
|
1559 |
-
msgid "
|
1560 |
msgstr ""
|
1561 |
|
1562 |
#: lib/menu_options.php:109
|
1563 |
#: views/waf/options-group-advanced-firewall.php:88
|
1564 |
-
msgid "
|
1565 |
msgstr ""
|
1566 |
|
1567 |
#: lib/menu_options.php:110
|
@@ -1698,11 +1698,11 @@ msgstr ""
|
|
1698 |
|
1699 |
#: lib/menu_options.php:137
|
1700 |
#: views/waf/options-group-rate-limiting.php:194
|
1701 |
-
msgid "
|
1702 |
msgstr ""
|
1703 |
|
1704 |
#: lib/menu_options.php:138
|
1705 |
-
msgid "Web Application Firewall
|
1706 |
msgstr ""
|
1707 |
|
1708 |
#: lib/menu_options.php:139
|
@@ -1745,7 +1745,7 @@ msgstr ""
|
|
1745 |
|
1746 |
#: lib/menu_options.php:148
|
1747 |
#: views/scanner/options-group-general.php:32
|
1748 |
-
msgid "Check if this website is on a domain
|
1749 |
msgstr ""
|
1750 |
|
1751 |
#: lib/menu_options.php:149
|
@@ -1941,7 +1941,7 @@ msgid "Enable Separate Prompt for Two Factor Code"
|
|
1941 |
msgstr ""
|
1942 |
|
1943 |
#: lib/menu_options.php:200
|
1944 |
-
msgid "Are you sure you want to restore the default settings? This will undo any custom changes you have made to the options on this page. If you have manually disabled any rules or added any custom
|
1945 |
msgstr ""
|
1946 |
|
1947 |
#: lib/menu_options.php:267
|
@@ -2013,7 +2013,7 @@ msgstr ""
|
|
2013 |
|
2014 |
#: lib/menu_scanner.php:98
|
2015 |
#: lib/menu_scanner_options.php:152
|
2016 |
-
msgid "Check spam & spamvertising
|
2017 |
msgstr ""
|
2018 |
|
2019 |
#: lib/menu_scanner.php:100
|
@@ -2779,7 +2779,7 @@ msgstr ""
|
|
2779 |
|
2780 |
#: lib/menu_tools_diagnostic.php:311
|
2781 |
#: views/diagnostics/text.php:170
|
2782 |
-
msgid "
|
2783 |
msgstr ""
|
2784 |
|
2785 |
#: lib/menu_tools_diagnostic.php:312
|
@@ -4812,7 +4812,7 @@ msgid "\"%s\" is not a valid regular expression."
|
|
4812 |
msgstr ""
|
4813 |
|
4814 |
#: lib/wfConfig.php:1204
|
4815 |
-
msgid "Please make sure you separate your IP addresses with commas. The following
|
4816 |
msgstr ""
|
4817 |
|
4818 |
#: lib/wfConfig.php:1223
|
@@ -4857,7 +4857,7 @@ msgid "Brute Force"
|
|
4857 |
msgstr ""
|
4858 |
|
4859 |
#: lib/wfDashboard.php:194
|
4860 |
-
msgid "
|
4861 |
msgstr ""
|
4862 |
|
4863 |
#: lib/wfDiagnostic.php:58
|
@@ -6264,7 +6264,7 @@ msgid "This file contains a URL that is a suspected phishing site that is curren
|
|
6264 |
msgstr ""
|
6265 |
|
6266 |
#: lib/wordfenceScanner.php:564
|
6267 |
-
msgid "This file contains a URL that is currently listed on Wordfence's domain
|
6268 |
msgstr ""
|
6269 |
|
6270 |
#: lib/wordfenceScanner.php:580
|
@@ -6312,7 +6312,7 @@ msgid "Invalid IP address."
|
|
6312 |
msgstr ""
|
6313 |
|
6314 |
#: models/block/wfBlock.php:180
|
6315 |
-
msgid "This IP address is in a range of addresses that Wordfence does not block. The IP range may be internal or belong to a service that is always allowed.
|
6316 |
msgstr ""
|
6317 |
|
6318 |
#: models/block/wfBlock.php:183
|
@@ -6392,7 +6392,7 @@ msgstr ""
|
|
6392 |
|
6393 |
#: models/firewall/wfFirewall.php:461
|
6394 |
#: models/firewall/wfFirewall.php:470
|
6395 |
-
msgid "Enable Real-Time IP
|
6396 |
msgstr ""
|
6397 |
|
6398 |
#: models/firewall/wfFirewall.php:569
|
@@ -6485,7 +6485,7 @@ msgid "Enable scan option to check if your website IP is generating spam."
|
|
6485 |
msgstr ""
|
6486 |
|
6487 |
#: models/scanner/wfScanner.php:822
|
6488 |
-
msgid "Enable scan option to check if your website is on a domain
|
6489 |
msgstr ""
|
6490 |
|
6491 |
#: models/scanner/wfScanner.php:926
|
@@ -8257,7 +8257,7 @@ msgid "Spam Check"
|
|
8257 |
msgstr ""
|
8258 |
|
8259 |
#: views/scanner/scan-progress.php:32
|
8260 |
-
msgid "
|
8261 |
msgstr ""
|
8262 |
|
8263 |
#: views/scanner/scan-progress.php:39
|
@@ -8484,7 +8484,7 @@ msgid "Wordfence Scan Enabled"
|
|
8484 |
msgstr ""
|
8485 |
|
8486 |
#: views/scanner/scanner-status.php:54
|
8487 |
-
msgid "As a free Wordfence user, you are currently using the Community version of the Threat Defense Feed. Premium users are protected by an additional %d firewall rules and malware signatures as well as the Wordfence real-time IP
|
8488 |
msgstr ""
|
8489 |
|
8490 |
#: views/scanner/scanner-status.php:60
|
@@ -8596,11 +8596,11 @@ msgid "We are excited to announce the release of a completely rebuilt two-factor
|
|
8596 |
msgstr ""
|
8597 |
|
8598 |
#: views/tours/login-security.php:44
|
8599 |
-
msgid "Individual
|
8600 |
msgstr ""
|
8601 |
|
8602 |
#: views/tours/login-security.php:45
|
8603 |
-
msgid "Two-factor authentication now has its own IP
|
8604 |
msgstr ""
|
8605 |
|
8606 |
#: views/tours/login-security.php:60
|
@@ -8664,7 +8664,7 @@ msgid "Manually Refresh Rules"
|
|
8664 |
msgstr ""
|
8665 |
|
8666 |
#: views/waf/option-whitelist.php:5
|
8667 |
-
msgid "Add
|
8668 |
msgstr ""
|
8669 |
|
8670 |
#: views/waf/option-whitelist.php:5
|
@@ -8700,15 +8700,15 @@ msgid "Add"
|
|
8700 |
msgstr ""
|
8701 |
|
8702 |
#: views/waf/option-whitelist.php:53
|
8703 |
-
msgid "
|
8704 |
msgstr ""
|
8705 |
|
8706 |
#: views/waf/option-whitelist.php:53
|
8707 |
-
msgid "A
|
8708 |
msgstr ""
|
8709 |
|
8710 |
#: views/waf/option-whitelist.php:60
|
8711 |
-
msgid "
|
8712 |
msgstr ""
|
8713 |
|
8714 |
#: views/waf/option-whitelist.php:102
|
@@ -8750,7 +8750,7 @@ msgid "You are currently running the WAF from another WordPress installation. Th
|
|
8750 |
msgstr ""
|
8751 |
|
8752 |
#: views/waf/options-group-advanced-firewall.php:54
|
8753 |
-
msgid "
|
8754 |
msgstr ""
|
8755 |
|
8756 |
#: views/waf/options-group-advanced-firewall.php:101
|
@@ -8866,7 +8866,7 @@ msgstr ""
|
|
8866 |
|
8867 |
#: views/waf/options-group-basic-firewall.php:466
|
8868 |
#: views/waf/options-group-basic-firewall.php:471
|
8869 |
-
msgid "This feature blocks all traffic from IPs with a high volume of recent malicious activity using Wordfence's real-time
|
8870 |
msgstr ""
|
8871 |
|
8872 |
#: views/waf/options-group-brute-force.php:39
|
@@ -8955,7 +8955,7 @@ msgid "These URL patterns will be excluded from the throttling rules used to lim
|
|
8955 |
msgstr ""
|
8956 |
|
8957 |
#: views/waf/options-group-whitelisted.php:26
|
8958 |
-
msgid "
|
8959 |
msgstr ""
|
8960 |
|
8961 |
#: views/waf/options-group-whitelisted.php:53
|
@@ -8989,7 +8989,7 @@ msgid "Toggle row ${idx}"
|
|
8989 |
msgstr ""
|
8990 |
|
8991 |
#: views/waf/options-group-whitelisted.php:157
|
8992 |
-
msgid "No
|
8993 |
msgstr ""
|
8994 |
|
8995 |
#: views/waf/status-tooltip-learning-mode.php:6
|
78 |
msgstr ""
|
79 |
|
80 |
#: 403-roadblock.php:366
|
81 |
+
msgid "If you are an administrator and you are certain this is a false positive, you can automatically allowlist this request and repeat the same action."
|
82 |
msgstr ""
|
83 |
|
84 |
#: 403-roadblock.php:373
|
86 |
msgstr ""
|
87 |
|
88 |
#: 403-roadblock.php:375
|
89 |
+
msgid "Allowlist This Action"
|
90 |
msgstr ""
|
91 |
|
92 |
#: 403-roadblock.php:378
|
94 |
msgstr ""
|
95 |
|
96 |
#: 403-roadblock.php:379
|
97 |
+
msgid "Something went wrong allowlisting this request. You can try setting the Firewall Status to Learning Mode under Web App Firewall in the Wordfence menu, and retry this same action."
|
98 |
msgstr ""
|
99 |
|
100 |
#: 403-roadblock.php:417
|
376 |
msgid ""
|
377 |
"NOTE: You are using the free version of Wordfence. Upgrade today:\n"
|
378 |
" - Receive real-time Firewall and Scan engine rule updates for protection as threats emerge\n"
|
379 |
+
" - Real-time IP Blocklist blocks the most malicious IPs from accessing your site\n"
|
380 |
" - Country blocking\n"
|
381 |
" - IP reputation monitoring\n"
|
382 |
" - Schedule scans to run more frequently and at optimal times\n"
|
560 |
msgstr ""
|
561 |
|
562 |
#: lib/email_newIssues.php:121
|
563 |
+
msgid "Real-time IP Blocklist blocks the most malicious IPs from accessing your site"
|
564 |
msgstr ""
|
565 |
|
566 |
#: lib/email_newIssues.php:122
|
1217 |
|
1218 |
#: lib/menu_firewall_waf.php:69
|
1219 |
#: lib/menu_firewall_waf_options.php:175
|
1220 |
+
msgid "Real-Time IP Blocklist: "
|
1221 |
msgstr ""
|
1222 |
|
1223 |
#: lib/menu_firewall_waf.php:69
|
1261 |
msgstr ""
|
1262 |
|
1263 |
#: lib/menu_firewall_waf.php:72
|
1264 |
+
msgid "Manage Real-Time IP Blocklist"
|
1265 |
msgstr ""
|
1266 |
|
1267 |
#: lib/menu_firewall_waf.php:72
|
1271 |
|
1272 |
#: lib/menu_firewall_waf.php:74
|
1273 |
#: lib/menu_firewall_waf_options.php:180
|
1274 |
+
msgid "Blocklist Status"
|
1275 |
msgstr ""
|
1276 |
|
1277 |
#: lib/menu_firewall_waf.php:102
|
1355 |
msgstr ""
|
1356 |
|
1357 |
#: lib/menu_firewall_waf.php:349
|
1358 |
+
msgid "All of the Firewall settings are now located here. This includes configuration options for the web application firewall, brute force protection, rate limiting, allowlisted URLs, and blocking."
|
1359 |
msgstr ""
|
1360 |
|
1361 |
#: lib/menu_firewall_waf_options.php:80
|
1362 |
+
msgid "Are you sure you want to restore the default Firewall settings? This will undo any custom changes you have made to the options on this page. If you have manually disabled any rules or added any custom allowlisted URLs, those changes will not be overwritten."
|
1363 |
msgstr ""
|
1364 |
|
1365 |
#: lib/menu_options.php:24
|
1546 |
|
1547 |
#: lib/menu_options.php:106
|
1548 |
#: views/waf/options-group-basic-firewall.php:464
|
1549 |
+
msgid "Real-Time IP Blocklist"
|
1550 |
msgstr ""
|
1551 |
|
1552 |
#: lib/menu_options.php:107
|
1556 |
|
1557 |
#: lib/menu_options.php:108
|
1558 |
#: views/waf/options-group-advanced-firewall.php:52
|
1559 |
+
msgid "Allowlisted IP addresses that bypass all rules"
|
1560 |
msgstr ""
|
1561 |
|
1562 |
#: lib/menu_options.php:109
|
1563 |
#: views/waf/options-group-advanced-firewall.php:88
|
1564 |
+
msgid "Allowlisted services"
|
1565 |
msgstr ""
|
1566 |
|
1567 |
#: lib/menu_options.php:110
|
1698 |
|
1699 |
#: lib/menu_options.php:137
|
1700 |
#: views/waf/options-group-rate-limiting.php:194
|
1701 |
+
msgid "Allowlisted 404 URLs"
|
1702 |
msgstr ""
|
1703 |
|
1704 |
#: lib/menu_options.php:138
|
1705 |
+
msgid "Web Application Firewall Allowlisted URLs"
|
1706 |
msgstr ""
|
1707 |
|
1708 |
#: lib/menu_options.php:139
|
1745 |
|
1746 |
#: lib/menu_options.php:148
|
1747 |
#: views/scanner/options-group-general.php:32
|
1748 |
+
msgid "Check if this website is on a domain blocklist"
|
1749 |
msgstr ""
|
1750 |
|
1751 |
#: lib/menu_options.php:149
|
1941 |
msgstr ""
|
1942 |
|
1943 |
#: lib/menu_options.php:200
|
1944 |
+
msgid "Are you sure you want to restore the default settings? This will undo any custom changes you have made to the options on this page. If you have manually disabled any rules or added any custom allowlisted URLs, those changes will not be overwritten."
|
1945 |
msgstr ""
|
1946 |
|
1947 |
#: lib/menu_options.php:267
|
2013 |
|
2014 |
#: lib/menu_scanner.php:98
|
2015 |
#: lib/menu_scanner_options.php:152
|
2016 |
+
msgid "Check spam & spamvertising blocklists"
|
2017 |
msgstr ""
|
2018 |
|
2019 |
#: lib/menu_scanner.php:100
|
2779 |
|
2780 |
#: lib/menu_tools_diagnostic.php:311
|
2781 |
#: views/diagnostics/text.php:170
|
2782 |
+
msgid "Allowlisted hosts"
|
2783 |
msgstr ""
|
2784 |
|
2785 |
#: lib/menu_tools_diagnostic.php:312
|
4812 |
msgstr ""
|
4813 |
|
4814 |
#: lib/wfConfig.php:1204
|
4815 |
+
msgid "Please make sure you separate your IP addresses with commas. The following allowlisted IP addresses are invalid: "
|
4816 |
msgstr ""
|
4817 |
|
4818 |
#: lib/wfConfig.php:1223
|
4857 |
msgstr ""
|
4858 |
|
4859 |
#: lib/wfDashboard.php:194
|
4860 |
+
msgid "Blocklist"
|
4861 |
msgstr ""
|
4862 |
|
4863 |
#: lib/wfDiagnostic.php:58
|
6264 |
msgstr ""
|
6265 |
|
6266 |
#: lib/wordfenceScanner.php:564
|
6267 |
+
msgid "This file contains a URL that is currently listed on Wordfence's domain blocklist. The URL is: "
|
6268 |
msgstr ""
|
6269 |
|
6270 |
#: lib/wordfenceScanner.php:580
|
6312 |
msgstr ""
|
6313 |
|
6314 |
#: models/block/wfBlock.php:180
|
6315 |
+
msgid "This IP address is in a range of addresses that Wordfence does not block. The IP range may be internal or belong to a service that is always allowed. Allowlisting of external services can be disabled. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More</a>"
|
6316 |
msgstr ""
|
6317 |
|
6318 |
#: models/block/wfBlock.php:183
|
6392 |
|
6393 |
#: models/firewall/wfFirewall.php:461
|
6394 |
#: models/firewall/wfFirewall.php:470
|
6395 |
+
msgid "Enable Real-Time IP Blocklist."
|
6396 |
msgstr ""
|
6397 |
|
6398 |
#: models/firewall/wfFirewall.php:569
|
6485 |
msgstr ""
|
6486 |
|
6487 |
#: models/scanner/wfScanner.php:822
|
6488 |
+
msgid "Enable scan option to check if your website is on a domain blocklist."
|
6489 |
msgstr ""
|
6490 |
|
6491 |
#: models/scanner/wfScanner.php:926
|
8257 |
msgstr ""
|
8258 |
|
8259 |
#: views/scanner/scan-progress.php:32
|
8260 |
+
msgid "Blocklist Check"
|
8261 |
msgstr ""
|
8262 |
|
8263 |
#: views/scanner/scan-progress.php:39
|
8484 |
msgstr ""
|
8485 |
|
8486 |
#: views/scanner/scanner-status.php:54
|
8487 |
+
msgid "As a free Wordfence user, you are currently using the Community version of the Threat Defense Feed. Premium users are protected by an additional %d firewall rules and malware signatures as well as the Wordfence real-time IP blocklist. Upgrade to Premium today to improve your protection."
|
8488 |
msgstr ""
|
8489 |
|
8490 |
#: views/scanner/scanner-status.php:60
|
8596 |
msgstr ""
|
8597 |
|
8598 |
#: views/tours/login-security.php:44
|
8599 |
+
msgid "Individual Allowlisting"
|
8600 |
msgstr ""
|
8601 |
|
8602 |
#: views/tours/login-security.php:45
|
8603 |
+
msgid "Two-factor authentication now has its own IP allowlist. If necessary, you can allow specific IP addresses or ranges to skip 2FA when logging in."
|
8604 |
msgstr ""
|
8605 |
|
8606 |
#: views/tours/login-security.php:60
|
8664 |
msgstr ""
|
8665 |
|
8666 |
#: views/waf/option-whitelist.php:5
|
8667 |
+
msgid "Add Allowlisted URL/Param"
|
8668 |
msgstr ""
|
8669 |
|
8670 |
#: views/waf/option-whitelist.php:5
|
8700 |
msgstr ""
|
8701 |
|
8702 |
#: views/waf/option-whitelist.php:53
|
8703 |
+
msgid "Allowlist Entry Exists"
|
8704 |
msgstr ""
|
8705 |
|
8706 |
#: views/waf/option-whitelist.php:53
|
8707 |
+
msgid "A allowlist entry for this URL and parameter already exists."
|
8708 |
msgstr ""
|
8709 |
|
8710 |
#: views/waf/option-whitelist.php:60
|
8711 |
+
msgid "Allowlisted via Firewall Options page"
|
8712 |
msgstr ""
|
8713 |
|
8714 |
#: views/waf/option-whitelist.php:102
|
8750 |
msgstr ""
|
8751 |
|
8752 |
#: views/waf/options-group-advanced-firewall.php:54
|
8753 |
+
msgid "Allowlisted IPs must be separated by commas or placed on separate lines. You can specify ranges using the following formats: 127.0.0.1/24, 127.0.0.[1-100], or 127.0.0.1-127.0.1.100<br/>Wordfence automatically whitelists <a href=\"http://en.wikipedia.org/wiki/Private_network\" target=\"_blank\" rel=\"noopener noreferrer\">private networks</a> because these are not routable on the public Internet."
|
8754 |
msgstr ""
|
8755 |
|
8756 |
#: views/waf/options-group-advanced-firewall.php:101
|
8866 |
|
8867 |
#: views/waf/options-group-basic-firewall.php:466
|
8868 |
#: views/waf/options-group-basic-firewall.php:471
|
8869 |
+
msgid "This feature blocks all traffic from IPs with a high volume of recent malicious activity using Wordfence's real-time blocklist."
|
8870 |
msgstr ""
|
8871 |
|
8872 |
#: views/waf/options-group-brute-force.php:39
|
8955 |
msgstr ""
|
8956 |
|
8957 |
#: views/waf/options-group-whitelisted.php:26
|
8958 |
+
msgid "Allowlisted URLs"
|
8959 |
msgstr ""
|
8960 |
|
8961 |
#: views/waf/options-group-whitelisted.php:53
|
8989 |
msgstr ""
|
8990 |
|
8991 |
#: views/waf/options-group-whitelisted.php:157
|
8992 |
+
msgid "No allowlisted URLs currently set."
|
8993 |
msgstr ""
|
8994 |
|
8995 |
#: views/waf/status-tooltip-learning-mode.php:6
|
lib/Diff/SequenceMatcher.php
CHANGED
@@ -84,7 +84,7 @@ class Diff_SequenceMatcher
|
|
84 |
* @param string|array $b A string or array containing the lines to compare.
|
85 |
* @param string|array $junkCallback Either an array or string that references a callback function (if there is one) to determine 'junk' characters.
|
86 |
*/
|
87 |
-
public function __construct($a, $b, $junkCallback=null, $options)
|
88 |
{
|
89 |
$this->a = null;
|
90 |
$this->b = null;
|
84 |
* @param string|array $b A string or array containing the lines to compare.
|
85 |
* @param string|array $junkCallback Either an array or string that references a callback function (if there is one) to determine 'junk' characters.
|
86 |
*/
|
87 |
+
public function __construct($a, $b, $junkCallback=null, $options=array())
|
88 |
{
|
89 |
$this->a = null;
|
90 |
$this->b = null;
|
lib/email_genericAlert.php
CHANGED
@@ -9,7 +9,7 @@
|
|
9 |
<?php if(! $isPaid){ ?>
|
10 |
<?php _e('NOTE: You are using the free version of Wordfence. Upgrade today:
|
11 |
- Receive real-time Firewall and Scan engine rule updates for protection as threats emerge
|
12 |
-
- Real-time IP
|
13 |
- Country blocking
|
14 |
- IP reputation monitoring
|
15 |
- Schedule scans to run more frequently and at optimal times
|
9 |
<?php if(! $isPaid){ ?>
|
10 |
<?php _e('NOTE: You are using the free version of Wordfence. Upgrade today:
|
11 |
- Receive real-time Firewall and Scan engine rule updates for protection as threats emerge
|
12 |
+
- Real-time IP Blocklist blocks the most malicious IPs from accessing your site
|
13 |
- Country blocking
|
14 |
- IP reputation monitoring
|
15 |
- Schedule scans to run more frequently and at optimal times
|
lib/email_newIssues.php
CHANGED
@@ -118,7 +118,7 @@ if (count($sentences)) {
|
|
118 |
|
119 |
<ul>
|
120 |
<li><?php _e('Receive real-time Firewall and Scan engine rule updates for protection as threats emerge', 'wordfence'); ?></li>
|
121 |
-
<li><?php _e('Real-time IP
|
122 |
<li><?php _e('Country blocking', 'wordfence'); ?></li>
|
123 |
<li><?php _e('IP reputation monitoring', 'wordfence'); ?></li>
|
124 |
<li><?php _e('Schedule scans to run more frequently and at optimal times', 'wordfence'); ?></li>
|
118 |
|
119 |
<ul>
|
120 |
<li><?php _e('Receive real-time Firewall and Scan engine rule updates for protection as threats emerge', 'wordfence'); ?></li>
|
121 |
+
<li><?php _e('Real-time IP Blocklist blocks the most malicious IPs from accessing your site', 'wordfence'); ?></li>
|
122 |
<li><?php _e('Country blocking', 'wordfence'); ?></li>
|
123 |
<li><?php _e('IP reputation monitoring', 'wordfence'); ?></li>
|
124 |
<li><?php _e('Schedule scans to run more frequently and at optimal times', 'wordfence'); ?></li>
|
lib/menu_firewall_waf.php
CHANGED
@@ -66,12 +66,12 @@ $wafRemoveURL = network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_optio
|
|
66 |
echo wfView::create('common/status-detail', array(
|
67 |
'id' => 'waf-blacklist',
|
68 |
'percentage' => $firewall->blacklistStatus(),
|
69 |
-
'title' => __('Real-Time IP
|
70 |
'subtitle' => __('Blocks requests from known malicious IPs', 'wordfence'),
|
71 |
'link' => (($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM) ? network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options') : 'https://www.wordfence.com/gnl1wafUpgrade/wordfence-signup/'),
|
72 |
-
'linkLabel' => $firewall->firewallMode() == wfFirewall::FIREWALL_MODE_DISABLED ? null : ($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM ? ($firewall->blacklistMode() == wfFirewall::BLACKLIST_MODE_ENABLED ? __('Manage Real-Time IP
|
73 |
'linkNewWindow' => ($firewall->ruleMode() != wfFirewall::RULE_MODE_PREMIUM),
|
74 |
-
'statusTitle' => __('
|
75 |
'statusList' => $firewall->wafStatusList('blacklist'),
|
76 |
'helpLink' => __('https://www.wordfence.com/help/firewall/#firewall-status', 'wordfence'),
|
77 |
))->render();
|
@@ -346,7 +346,7 @@ $wafRemoveURL = network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_optio
|
|
346 |
<div>
|
347 |
<h3><?php _e('Firewall Options', 'wordfence'); ?></h3>
|
348 |
<p class="wf-center"><svg viewBox="0 0 100.11 100.11" class="wf-icon"><path d="M99.59,41.42a2.06,2.06,0,0,0-1.37-.82L86.3,38.78a39.34,39.34,0,0,0-2.67-6.39q1.17-1.63,3.52-4.6t3.32-4.33A2.52,2.52,0,0,0,91,22a2.1,2.1,0,0,0-.46-1.43Q88.18,17.2,79.78,9.45a2.52,2.52,0,0,0-1.63-.65,2.12,2.12,0,0,0-1.57.59l-9.25,7a40.09,40.09,0,0,0-5.87-2.41L59.64,2a1.92,1.92,0,0,0-.75-1.4A2.46,2.46,0,0,0,57.29,0H42.82a2.19,2.19,0,0,0-2.34,1.82,106,106,0,0,0-1.89,12.12,37.62,37.62,0,0,0-5.93,2.48l-9-7A2.78,2.78,0,0,0,22,8.8q-1.44,0-6.16,4.66a64.88,64.88,0,0,0-6.42,7A2.75,2.75,0,0,0,8.8,22a2.44,2.44,0,0,0,.65,1.56q4.37,5.28,7,9a32.38,32.38,0,0,0-2.54,6L1.76,40.34a2,2,0,0,0-1.24.85A2.5,2.5,0,0,0,0,42.69V57.16a2.44,2.44,0,0,0,.52,1.53,2,2,0,0,0,1.37.82l11.93,1.76a31.91,31.91,0,0,0,2.67,6.45Q15.31,69.35,13,72.31T9.65,76.65a2.54,2.54,0,0,0-.07,3q2.54,3.52,10.75,11a2.25,2.25,0,0,0,1.63.71,2.35,2.35,0,0,0,1.63-.59l9.19-7a40.54,40.54,0,0,0,5.87,2.41l1.82,12a1.92,1.92,0,0,0,.75,1.4,2.45,2.45,0,0,0,1.6.55H57.29a2.2,2.2,0,0,0,2.35-1.82,107.41,107.41,0,0,0,1.89-12.12,37.19,37.19,0,0,0,5.93-2.48l9,7a3.18,3.18,0,0,0,1.69.59q1.43,0,6.13-4.62a65.86,65.86,0,0,0,6.45-7,2.16,2.16,0,0,0,.59-1.5,2.51,2.51,0,0,0-.65-1.63q-4.69-5.74-7-9a41.57,41.57,0,0,0,2.54-5.93l12.06-1.82a2,2,0,0,0,1.3-.85,2.52,2.52,0,0,0,.52-1.5V43a2.46,2.46,0,0,0-.52-1.53ZM61.85,61.86a16.08,16.08,0,0,1-11.8,4.89A16.69,16.69,0,0,1,33.37,50.06,16.69,16.69,0,0,1,50.06,33.37,16.69,16.69,0,0,1,66.74,50.06a16.08,16.08,0,0,1-4.89,11.8Zm0,0"></path></svg></p>
|
349 |
-
<p><?php _e('All of the Firewall settings are now located here. This includes configuration options for the web application firewall, brute force protection, rate limiting,
|
350 |
<div class="wf-pointer-footer">
|
351 |
<ul class="wf-tour-pagination">
|
352 |
<li class="wf-active">•</li>
|
66 |
echo wfView::create('common/status-detail', array(
|
67 |
'id' => 'waf-blacklist',
|
68 |
'percentage' => $firewall->blacklistStatus(),
|
69 |
+
'title' => __('Real-Time IP Blocklist: ', 'wordfence') . ($firewall->blacklistMode() == wfFirewall::BLACKLIST_MODE_ENABLED ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')),
|
70 |
'subtitle' => __('Blocks requests from known malicious IPs', 'wordfence'),
|
71 |
'link' => (($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM) ? network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options') : 'https://www.wordfence.com/gnl1wafUpgrade/wordfence-signup/'),
|
72 |
+
'linkLabel' => $firewall->firewallMode() == wfFirewall::FIREWALL_MODE_DISABLED ? null : ($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM ? ($firewall->blacklistMode() == wfFirewall::BLACKLIST_MODE_ENABLED ? __('Manage Real-Time IP Blocklist', 'wordfence') : ($firewall->isSubDirectoryInstallation() ? null : __('Enable', 'wordfence'))) : __('Upgrade to Premium', 'wordfence')),
|
73 |
'linkNewWindow' => ($firewall->ruleMode() != wfFirewall::RULE_MODE_PREMIUM),
|
74 |
+
'statusTitle' => __('Blocklist Status', 'wordfence'),
|
75 |
'statusList' => $firewall->wafStatusList('blacklist'),
|
76 |
'helpLink' => __('https://www.wordfence.com/help/firewall/#firewall-status', 'wordfence'),
|
77 |
))->render();
|
346 |
<div>
|
347 |
<h3><?php _e('Firewall Options', 'wordfence'); ?></h3>
|
348 |
<p class="wf-center"><svg viewBox="0 0 100.11 100.11" class="wf-icon"><path d="M99.59,41.42a2.06,2.06,0,0,0-1.37-.82L86.3,38.78a39.34,39.34,0,0,0-2.67-6.39q1.17-1.63,3.52-4.6t3.32-4.33A2.52,2.52,0,0,0,91,22a2.1,2.1,0,0,0-.46-1.43Q88.18,17.2,79.78,9.45a2.52,2.52,0,0,0-1.63-.65,2.12,2.12,0,0,0-1.57.59l-9.25,7a40.09,40.09,0,0,0-5.87-2.41L59.64,2a1.92,1.92,0,0,0-.75-1.4A2.46,2.46,0,0,0,57.29,0H42.82a2.19,2.19,0,0,0-2.34,1.82,106,106,0,0,0-1.89,12.12,37.62,37.62,0,0,0-5.93,2.48l-9-7A2.78,2.78,0,0,0,22,8.8q-1.44,0-6.16,4.66a64.88,64.88,0,0,0-6.42,7A2.75,2.75,0,0,0,8.8,22a2.44,2.44,0,0,0,.65,1.56q4.37,5.28,7,9a32.38,32.38,0,0,0-2.54,6L1.76,40.34a2,2,0,0,0-1.24.85A2.5,2.5,0,0,0,0,42.69V57.16a2.44,2.44,0,0,0,.52,1.53,2,2,0,0,0,1.37.82l11.93,1.76a31.91,31.91,0,0,0,2.67,6.45Q15.31,69.35,13,72.31T9.65,76.65a2.54,2.54,0,0,0-.07,3q2.54,3.52,10.75,11a2.25,2.25,0,0,0,1.63.71,2.35,2.35,0,0,0,1.63-.59l9.19-7a40.54,40.54,0,0,0,5.87,2.41l1.82,12a1.92,1.92,0,0,0,.75,1.4,2.45,2.45,0,0,0,1.6.55H57.29a2.2,2.2,0,0,0,2.35-1.82,107.41,107.41,0,0,0,1.89-12.12,37.19,37.19,0,0,0,5.93-2.48l9,7a3.18,3.18,0,0,0,1.69.59q1.43,0,6.13-4.62a65.86,65.86,0,0,0,6.45-7,2.16,2.16,0,0,0,.59-1.5,2.51,2.51,0,0,0-.65-1.63q-4.69-5.74-7-9a41.57,41.57,0,0,0,2.54-5.93l12.06-1.82a2,2,0,0,0,1.3-.85,2.52,2.52,0,0,0,.52-1.5V43a2.46,2.46,0,0,0-.52-1.53ZM61.85,61.86a16.08,16.08,0,0,1-11.8,4.89A16.69,16.69,0,0,1,33.37,50.06,16.69,16.69,0,0,1,50.06,33.37,16.69,16.69,0,0,1,66.74,50.06a16.08,16.08,0,0,1-4.89,11.8Zm0,0"></path></svg></p>
|
349 |
+
<p><?php _e('All of the Firewall settings are now located here. This includes configuration options for the web application firewall, brute force protection, rate limiting, allowlisted URLs, and blocking.', 'wordfence'); ?></p>
|
350 |
<div class="wf-pointer-footer">
|
351 |
<ul class="wf-tour-pagination">
|
352 |
<li class="wf-active">•</li>
|
lib/menu_firewall_waf_options.php
CHANGED
@@ -77,7 +77,7 @@ if (isset($_GET['source']) && wfPage::isValidPage($_GET['source'])) {
|
|
77 |
'backLink' => $backPage->url(),
|
78 |
'backLabelHTML' => sprintf(__('<span class="wf-hidden-xs">Back to </span>%s', 'wordfence'), $backPage->label()),
|
79 |
'restoreDefaultsSection' => wfConfig::OPTIONS_TYPE_FIREWALL,
|
80 |
-
'restoreDefaultsMessage' => __('Are you sure you want to restore the default Firewall settings? This will undo any custom changes you have made to the options on this page. If you have manually disabled any rules or added any custom
|
81 |
))->render();
|
82 |
?>
|
83 |
</div>
|
@@ -172,12 +172,12 @@ else if (wfConfig::get('touppPromptNeeded')) {
|
|
172 |
echo wfView::create('common/status-detail', array(
|
173 |
'id' => 'waf-blacklist',
|
174 |
'percentage' => $firewall->blacklistStatus(),
|
175 |
-
'title' => __('Real-Time IP
|
176 |
'subtitle' => __('Blocks requests from known malicious IPs', 'wordfence'),
|
177 |
'link' => (($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM && $firewall->blacklistMode() == wfFirewall::BLACKLIST_MODE_DISABLED) ? network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#waf-options-advanced') : 'https://www.wordfence.com/gnl1wafUpgrade/wordfence-signup/'),
|
178 |
'linkLabel' => null,
|
179 |
'linkNewWindow' => !($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM && $firewall->blacklistMode() == wfFirewall::BLACKLIST_MODE_DISABLED),
|
180 |
-
'statusTitle' => __('
|
181 |
'statusList' => $firewall->wafStatusList('blacklist'),
|
182 |
'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_STATUS_BLACKLIST),
|
183 |
))->render();
|
77 |
'backLink' => $backPage->url(),
|
78 |
'backLabelHTML' => sprintf(__('<span class="wf-hidden-xs">Back to </span>%s', 'wordfence'), $backPage->label()),
|
79 |
'restoreDefaultsSection' => wfConfig::OPTIONS_TYPE_FIREWALL,
|
80 |
+
'restoreDefaultsMessage' => __('Are you sure you want to restore the default Firewall settings? This will undo any custom changes you have made to the options on this page. If you have manually disabled any rules or added any custom allowlisted URLs, those changes will not be overwritten.', 'wordfence'),
|
81 |
))->render();
|
82 |
?>
|
83 |
</div>
|
172 |
echo wfView::create('common/status-detail', array(
|
173 |
'id' => 'waf-blacklist',
|
174 |
'percentage' => $firewall->blacklistStatus(),
|
175 |
+
'title' => __('Real-Time IP Blocklist: ', 'wordfence') . ($firewall->blacklistMode() == wfFirewall::BLACKLIST_MODE_ENABLED ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')),
|
176 |
'subtitle' => __('Blocks requests from known malicious IPs', 'wordfence'),
|
177 |
'link' => (($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM && $firewall->blacklistMode() == wfFirewall::BLACKLIST_MODE_DISABLED) ? network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#waf-options-advanced') : 'https://www.wordfence.com/gnl1wafUpgrade/wordfence-signup/'),
|
178 |
'linkLabel' => null,
|
179 |
'linkNewWindow' => !($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM && $firewall->blacklistMode() == wfFirewall::BLACKLIST_MODE_DISABLED),
|
180 |
+
'statusTitle' => __('Blocklist Status', 'wordfence'),
|
181 |
'statusList' => $firewall->wafStatusList('blacklist'),
|
182 |
'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_STATUS_BLACKLIST),
|
183 |
))->render();
|
lib/menu_options.php
CHANGED
@@ -103,10 +103,10 @@ if (isset($_GET['source']) && wfPage::isValidPage($_GET['source'])) {
|
|
103 |
'wf-option-email-summary-dashboard-widget-enabled' => __('Enable activity report widget on the WordPress dashboard', 'wordfence'),
|
104 |
'wf-option-wafStatus' => __('Web Application Firewall Status', 'wordfence'),
|
105 |
'wf-option-protectionMode' => __('Web Application Firewall Protection Level', 'wordfence'),
|
106 |
-
'wf-option-disableWAFBlacklistBlocking' => __('Real-Time IP
|
107 |
'wf-option-disableWAFIPBlocking' => __('Delay IP and Country blocking until after WordPress and plugins have loaded (only process firewall rules early)', 'wordfence'),
|
108 |
-
'wf-option-whitelisted' => __('
|
109 |
-
'wf-option-whitelistedServices' => __('
|
110 |
'wf-option-bannedURLs' => __('Immediately block IPs that access these URLs', 'wordfence'),
|
111 |
'wf-option-wafAlertWhitelist' => __('Ignored IP addresses for Wordfence Web Application Firewall alerting', 'wordfence'),
|
112 |
'wf-option-wafRules' => __('Web Application Firewall Rules', 'wordfence'),
|
@@ -122,6 +122,7 @@ if (isset($_GET['source']) && wfPage::isValidPage($_GET['source'])) {
|
|
122 |
'wf-option-loginSec-maskLoginErrors' => __('Don\'t let WordPress reveal valid users in login errors', 'wordfence'),
|
123 |
'wf-option-loginSec-blockAdminReg' => __('Prevent users registering "admin" username if it doesn\'t exist', 'wordfence'),
|
124 |
'wf-option-loginSec-disableAuthorScan' => __('Prevent discovery of usernames through "/?author=N" scans, the oEmbed API, the WordPress REST API, and WordPress XML Sitemaps', 'wordfence'),
|
|
|
125 |
'wf-option-other-blockBadPOST' => __('Block IPs who send POST requests with blank User-Agent and Referer', 'wordfence'),
|
126 |
'wf-option-blockCustomText' => __('Custom text shown on block pages', 'wordfence'),
|
127 |
'wf-option-other-pwStrengthOnUpdate' => __('Check password strength on profile update', 'wordfence'),
|
@@ -134,8 +135,8 @@ if (isset($_GET['source']) && wfPage::isValidPage($_GET['source'])) {
|
|
134 |
'wf-option-maxRequestsHumans' => __('If a human\'s page views exceed', 'wordfence'),
|
135 |
'wf-option-max404Humans' => __('If a human\'s pages not found (404s) exceed', 'wordfence'),
|
136 |
'wf-option-blockedTime' => __('How long is an IP address blocked when it breaks a rule', 'wordfence'),
|
137 |
-
'wf-option-allowed404s' => __('
|
138 |
-
'wf-option-wafWhitelist' => __('Web Application Firewall
|
139 |
'wf-option-ajaxWatcherDisabled-front' => __('Monitor background requests from an administrator\'s web browser for false positives (Front-end Website)', 'wordfence'),
|
140 |
'wf-option-ajaxWatcherDisabled-admin' => __('Monitor background requests from an administrator\'s web browser for false positives (Admin Panel)', 'wordfence'),
|
141 |
'wf-option-cbl-action' => __('What to do when we block someone visiting from a blocked country', 'wordfence'),
|
@@ -145,7 +146,7 @@ if (isset($_GET['source']) && wfPage::isValidPage($_GET['source'])) {
|
|
145 |
'wf-option-cbl-bypassViewURL' => __('If user who is allowed to access the site views the relative URL ____ then set a cookie that will bypass country blocking in future in case that user hits the site from a blocked country', 'wordfence'),
|
146 |
'wf-option-scheduledScansEnabled' => __('Schedule Wordfence Scans', 'wordfence'),
|
147 |
'wf-option-scanType' => __('Scan Type', 'wordfence'),
|
148 |
-
'wf-option-scansEnabled-checkGSB' => __('Check if this website is on a domain
|
149 |
'wf-option-spamvertizeCheck' => __('Check if this website is being "Spamvertised"', 'wordfence'),
|
150 |
'wf-option-checkSpamIP' => __('Check if this website IP is generating spam', 'wordfence'),
|
151 |
'wf-option-scansEnabled-checkHowGetIPs' => __('Scan for misconfigured How does Wordfence get IPs', 'wordfence'),
|
@@ -197,7 +198,7 @@ if (isset($_GET['source']) && wfPage::isValidPage($_GET['source'])) {
|
|
197 |
'showIcon' => false,
|
198 |
'indexOptions' => $indexOptions,
|
199 |
'restoreDefaultsSection' => wfConfig::OPTIONS_TYPE_ALL,
|
200 |
-
'restoreDefaultsMessage' => __('Are you sure you want to restore the default settings? This will undo any custom changes you have made to the options on this page. If you have manually disabled any rules or added any custom
|
201 |
))->render();
|
202 |
?>
|
203 |
</div>
|
103 |
'wf-option-email-summary-dashboard-widget-enabled' => __('Enable activity report widget on the WordPress dashboard', 'wordfence'),
|
104 |
'wf-option-wafStatus' => __('Web Application Firewall Status', 'wordfence'),
|
105 |
'wf-option-protectionMode' => __('Web Application Firewall Protection Level', 'wordfence'),
|
106 |
+
'wf-option-disableWAFBlacklistBlocking' => __('Real-Time IP Blocklist', 'wordfence'),
|
107 |
'wf-option-disableWAFIPBlocking' => __('Delay IP and Country blocking until after WordPress and plugins have loaded (only process firewall rules early)', 'wordfence'),
|
108 |
+
'wf-option-whitelisted' => __('Allowlisted IP addresses that bypass all rules', 'wordfence'),
|
109 |
+
'wf-option-whitelistedServices' => __('Allowlisted services', 'wordfence'),
|
110 |
'wf-option-bannedURLs' => __('Immediately block IPs that access these URLs', 'wordfence'),
|
111 |
'wf-option-wafAlertWhitelist' => __('Ignored IP addresses for Wordfence Web Application Firewall alerting', 'wordfence'),
|
112 |
'wf-option-wafRules' => __('Web Application Firewall Rules', 'wordfence'),
|
122 |
'wf-option-loginSec-maskLoginErrors' => __('Don\'t let WordPress reveal valid users in login errors', 'wordfence'),
|
123 |
'wf-option-loginSec-blockAdminReg' => __('Prevent users registering "admin" username if it doesn\'t exist', 'wordfence'),
|
124 |
'wf-option-loginSec-disableAuthorScan' => __('Prevent discovery of usernames through "/?author=N" scans, the oEmbed API, the WordPress REST API, and WordPress XML Sitemaps', 'wordfence'),
|
125 |
+
'wf-option-loginSec-disableApplicationPasswords' => __('Disable WordPress application passwords', 'wordfence'),
|
126 |
'wf-option-other-blockBadPOST' => __('Block IPs who send POST requests with blank User-Agent and Referer', 'wordfence'),
|
127 |
'wf-option-blockCustomText' => __('Custom text shown on block pages', 'wordfence'),
|
128 |
'wf-option-other-pwStrengthOnUpdate' => __('Check password strength on profile update', 'wordfence'),
|
135 |
'wf-option-maxRequestsHumans' => __('If a human\'s page views exceed', 'wordfence'),
|
136 |
'wf-option-max404Humans' => __('If a human\'s pages not found (404s) exceed', 'wordfence'),
|
137 |
'wf-option-blockedTime' => __('How long is an IP address blocked when it breaks a rule', 'wordfence'),
|
138 |
+
'wf-option-allowed404s' => __('Allowlisted 404 URLs', 'wordfence'),
|
139 |
+
'wf-option-wafWhitelist' => __('Web Application Firewall Allowlisted URLs', 'wordfence'),
|
140 |
'wf-option-ajaxWatcherDisabled-front' => __('Monitor background requests from an administrator\'s web browser for false positives (Front-end Website)', 'wordfence'),
|
141 |
'wf-option-ajaxWatcherDisabled-admin' => __('Monitor background requests from an administrator\'s web browser for false positives (Admin Panel)', 'wordfence'),
|
142 |
'wf-option-cbl-action' => __('What to do when we block someone visiting from a blocked country', 'wordfence'),
|
146 |
'wf-option-cbl-bypassViewURL' => __('If user who is allowed to access the site views the relative URL ____ then set a cookie that will bypass country blocking in future in case that user hits the site from a blocked country', 'wordfence'),
|
147 |
'wf-option-scheduledScansEnabled' => __('Schedule Wordfence Scans', 'wordfence'),
|
148 |
'wf-option-scanType' => __('Scan Type', 'wordfence'),
|
149 |
+
'wf-option-scansEnabled-checkGSB' => __('Check if this website is on a domain blocklist', 'wordfence'),
|
150 |
'wf-option-spamvertizeCheck' => __('Check if this website is being "Spamvertised"', 'wordfence'),
|
151 |
'wf-option-checkSpamIP' => __('Check if this website IP is generating spam', 'wordfence'),
|
152 |
'wf-option-scansEnabled-checkHowGetIPs' => __('Scan for misconfigured How does Wordfence get IPs', 'wordfence'),
|
198 |
'showIcon' => false,
|
199 |
'indexOptions' => $indexOptions,
|
200 |
'restoreDefaultsSection' => wfConfig::OPTIONS_TYPE_ALL,
|
201 |
+
'restoreDefaultsMessage' => __('Are you sure you want to restore the default settings? This will undo any custom changes you have made to the options on this page. If you have manually disabled any rules or added any custom allowlisted URLs, those changes will not be overwritten.', 'wordfence'),
|
202 |
))->render();
|
203 |
?>
|
204 |
</div>
|
lib/menu_scanner.php
CHANGED
@@ -95,7 +95,7 @@ else if (wfConfig::get('touppPromptNeeded')) {
|
|
95 |
'percentage' => $scanner->reputationStatus(),
|
96 |
'activeColor' => (!$scanner->isEnabled() ? '#ececec' : null /* automatic */),
|
97 |
'title' => __('Reputation Checks', 'wordfence'),
|
98 |
-
'subtitle' => __('Check spam & spamvertising
|
99 |
'link' => $optionsURL . '#wf-scanner-options-general',
|
100 |
'linkLabel' => __('Manage Options', 'wordfence'),
|
101 |
'statusTitle' => __('Reputation Check Status', 'wordfence'),
|
95 |
'percentage' => $scanner->reputationStatus(),
|
96 |
'activeColor' => (!$scanner->isEnabled() ? '#ececec' : null /* automatic */),
|
97 |
'title' => __('Reputation Checks', 'wordfence'),
|
98 |
+
'subtitle' => __('Check spam & spamvertising blocklists', 'wordfence'),
|
99 |
'link' => $optionsURL . '#wf-scanner-options-general',
|
100 |
'linkLabel' => __('Manage Options', 'wordfence'),
|
101 |
'statusTitle' => __('Reputation Check Status', 'wordfence'),
|
lib/menu_scanner_options.php
CHANGED
@@ -149,7 +149,7 @@ else if (wfConfig::get('touppPromptNeeded')) {
|
|
149 |
'percentage' => $scanner->reputationStatus(),
|
150 |
'activeColor' => (!$scanner->isEnabled() ? '#ececec' : null /* automatic */),
|
151 |
'title' => __('Reputation Checks', 'wordfence'),
|
152 |
-
'subtitle' => __('Check spam & spamvertising
|
153 |
'link' => $optionsURL . '#wf-scanner-options-general',
|
154 |
'linkLabel' => null,
|
155 |
'statusTitle' => __('Reputation Check Status', 'wordfence'),
|
149 |
'percentage' => $scanner->reputationStatus(),
|
150 |
'activeColor' => (!$scanner->isEnabled() ? '#ececec' : null /* automatic */),
|
151 |
'title' => __('Reputation Checks', 'wordfence'),
|
152 |
+
'subtitle' => __('Check spam & spamvertising blocklists', 'wordfence'),
|
153 |
'link' => $optionsURL . '#wf-scanner-options-general',
|
154 |
'linkLabel' => null,
|
155 |
'statusTitle' => __('Reputation Check Status', 'wordfence'),
|
lib/menu_tools_diagnostic.php
CHANGED
@@ -308,7 +308,7 @@ if (!isset($sendingDiagnosticEmail)) {
|
|
308 |
'IMAGE_EDIT_OVERWRITE' => array('description' => __('Overwrite image edits when restoring the original', 'wordfence'), 'value' => (defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE ? __('Yes', 'wordfence') : __('No', 'wordfence'))),
|
309 |
'FORCE_SSL_ADMIN' => array('description' => __('Force SSL for administrative logins', 'wordfence'), 'value' => (defined('FORCE_SSL_ADMIN') && FORCE_SSL_ADMIN ? __('Yes', 'wordfence') : __('No', 'wordfence'))),
|
310 |
'WP_HTTP_BLOCK_EXTERNAL' => array('description' => __('Block external URL requests', 'wordfence'), 'value' => (defined('WP_HTTP_BLOCK_EXTERNAL') && WP_HTTP_BLOCK_EXTERNAL ? __('Yes', 'wordfence') : __('No', 'wordfence'))),
|
311 |
-
'WP_ACCESSIBLE_HOSTS' => __('
|
312 |
'WP_AUTO_UPDATE_CORE' => array('description' => __('Automatic WP Core updates', 'wordfence'), 'value' => defined('WP_AUTO_UPDATE_CORE') ? (is_bool(WP_AUTO_UPDATE_CORE) ? (WP_AUTO_UPDATE_CORE ? __('Everything', 'wordfence') : __('None', 'wordfence')) : WP_AUTO_UPDATE_CORE) : __('Default', 'wordfence')),
|
313 |
'WP_PROXY_HOST' => array('description' => __('Hostname for a proxy server', 'wordfence'), 'value' => defined('WP_PROXY_HOST') ? WP_PROXY_HOST : __('(not set)', 'wordfence')),
|
314 |
'WP_PROXY_PORT' => array('description' => __('Port for a proxy server', 'wordfence'), 'value' => defined('WP_PROXY_PORT') ? WP_PROXY_PORT : __('(not set)', 'wordfence')),
|
308 |
'IMAGE_EDIT_OVERWRITE' => array('description' => __('Overwrite image edits when restoring the original', 'wordfence'), 'value' => (defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE ? __('Yes', 'wordfence') : __('No', 'wordfence'))),
|
309 |
'FORCE_SSL_ADMIN' => array('description' => __('Force SSL for administrative logins', 'wordfence'), 'value' => (defined('FORCE_SSL_ADMIN') && FORCE_SSL_ADMIN ? __('Yes', 'wordfence') : __('No', 'wordfence'))),
|
310 |
'WP_HTTP_BLOCK_EXTERNAL' => array('description' => __('Block external URL requests', 'wordfence'), 'value' => (defined('WP_HTTP_BLOCK_EXTERNAL') && WP_HTTP_BLOCK_EXTERNAL ? __('Yes', 'wordfence') : __('No', 'wordfence'))),
|
311 |
+
'WP_ACCESSIBLE_HOSTS' => __('Allowlisted hosts', 'wordfence'),
|
312 |
'WP_AUTO_UPDATE_CORE' => array('description' => __('Automatic WP Core updates', 'wordfence'), 'value' => defined('WP_AUTO_UPDATE_CORE') ? (is_bool(WP_AUTO_UPDATE_CORE) ? (WP_AUTO_UPDATE_CORE ? __('Everything', 'wordfence') : __('None', 'wordfence')) : WP_AUTO_UPDATE_CORE) : __('Default', 'wordfence')),
|
313 |
'WP_PROXY_HOST' => array('description' => __('Hostname for a proxy server', 'wordfence'), 'value' => defined('WP_PROXY_HOST') ? WP_PROXY_HOST : __('(not set)', 'wordfence')),
|
314 |
'WP_PROXY_PORT' => array('description' => __('Port for a proxy server', 'wordfence'), 'value' => defined('WP_PROXY_PORT') ? WP_PROXY_PORT : __('(not set)', 'wordfence')),
|
lib/menu_tools_livetraffic.php
CHANGED
@@ -462,7 +462,7 @@ if (!wfConfig::liveTrafficEnabled($overridden)):
|
|
462 |
<a class="wf-btn wf-btn-default wf-btn-sm"
|
463 |
data-bind="click: function () { $root.whitelistWAFParamKey(actionData().path, actionData().paramKey, actionData().failedRules) }"
|
464 |
title="If this is a false positive, you can exclude this parameter from being filtered by the firewall">
|
465 |
-
|
466 |
</a>
|
467 |
<?php if (WFWAF_DEBUG): ?>
|
468 |
<a class="wf-btn wf-btn-default wf-btn-sm"
|
462 |
<a class="wf-btn wf-btn-default wf-btn-sm"
|
463 |
data-bind="click: function () { $root.whitelistWAFParamKey(actionData().path, actionData().paramKey, actionData().failedRules) }"
|
464 |
title="If this is a false positive, you can exclude this parameter from being filtered by the firewall">
|
465 |
+
Add Param to Firewall Allowlist
|
466 |
</a>
|
467 |
<?php if (WFWAF_DEBUG): ?>
|
468 |
<a class="wf-btn wf-btn-default wf-btn-sm"
|
lib/wfActivityReport.php
CHANGED
@@ -581,7 +581,7 @@ SQL
|
|
581 |
}
|
582 |
|
583 |
if (isset($actionData['failedRules']) && $actionData['failedRules'] == 'blocked') {
|
584 |
-
$row->longDescription = "Blocked because the IP is
|
585 |
}
|
586 |
else {
|
587 |
$row->longDescription = "Blocked for " . $row->actionDescription;
|
581 |
}
|
582 |
|
583 |
if (isset($actionData['failedRules']) && $actionData['failedRules'] == 'blocked') {
|
584 |
+
$row->longDescription = "Blocked because the IP is blocklisted";
|
585 |
}
|
586 |
else {
|
587 |
$row->longDescription = "Blocked for " . $row->actionDescription;
|
lib/wfConfig.php
CHANGED
@@ -88,6 +88,7 @@ class wfConfig {
|
|
88 |
"loginSec_maskLoginErrors" => array('value' => true, 'autoload' => self::AUTOLOAD),
|
89 |
"loginSec_blockAdminReg" => array('value' => true, 'autoload' => self::AUTOLOAD),
|
90 |
"loginSec_disableAuthorScan" => array('value' => true, 'autoload' => self::AUTOLOAD),
|
|
|
91 |
"loginSec_disableOEmbedAuthor" => array('value' => false, 'autoload' => self::AUTOLOAD),
|
92 |
'loginSec_requireAdminTwoFactor' => array('value' => false, 'autoload' => self::AUTOLOAD),
|
93 |
"notification_updatesNeeded" => array('value' => true, 'autoload' => self::AUTOLOAD),
|
@@ -1037,6 +1038,9 @@ php_flag engine 0
|
|
1037 |
<IfModule mod_php7.c>
|
1038 |
php_flag engine 0
|
1039 |
</IfModule>
|
|
|
|
|
|
|
1040 |
|
1041 |
AddHandler cgi-script .php .phtml .php3 .pl .py .jsp .asp .htm .shtml .sh .cgi
|
1042 |
Options -ExecCGI
|
@@ -1200,7 +1204,7 @@ Options -ExecCGI
|
|
1200 |
}
|
1201 |
}
|
1202 |
if (count($badWhiteIPs) > 0) {
|
1203 |
-
$errors[] = array('option' => $key, 'error' => __('Please make sure you separate your IP addresses with commas. The following
|
1204 |
}
|
1205 |
|
1206 |
$checked = true;
|
88 |
"loginSec_maskLoginErrors" => array('value' => true, 'autoload' => self::AUTOLOAD),
|
89 |
"loginSec_blockAdminReg" => array('value' => true, 'autoload' => self::AUTOLOAD),
|
90 |
"loginSec_disableAuthorScan" => array('value' => true, 'autoload' => self::AUTOLOAD),
|
91 |
+
"loginSec_disableApplicationPasswords" => array('value' => true, 'autoload' => self::AUTOLOAD),
|
92 |
"loginSec_disableOEmbedAuthor" => array('value' => false, 'autoload' => self::AUTOLOAD),
|
93 |
'loginSec_requireAdminTwoFactor' => array('value' => false, 'autoload' => self::AUTOLOAD),
|
94 |
"notification_updatesNeeded" => array('value' => true, 'autoload' => self::AUTOLOAD),
|
1038 |
<IfModule mod_php7.c>
|
1039 |
php_flag engine 0
|
1040 |
</IfModule>
|
1041 |
+
<IfModule mod_php.c>
|
1042 |
+
php_flag engine 0
|
1043 |
+
</IfModule>
|
1044 |
|
1045 |
AddHandler cgi-script .php .phtml .php3 .pl .py .jsp .asp .htm .shtml .sh .cgi
|
1046 |
Options -ExecCGI
|
1204 |
}
|
1205 |
}
|
1206 |
if (count($badWhiteIPs) > 0) {
|
1207 |
+
$errors[] = array('option' => $key, 'error' => __('Please make sure you separate your IP addresses with commas. The following allowlisted IP addresses are invalid: ', 'wordfence') . esc_html(implode(', ', $badWhiteIPs), array()));
|
1208 |
}
|
1209 |
|
1210 |
$checked = true;
|
lib/wfDashboard.php
CHANGED
@@ -191,7 +191,7 @@ class wfDashboard {
|
|
191 |
'7d' => (int) $activityReport->getBlockedCount(7, wfActivityReport::BLOCK_TYPE_BRUTE_FORCE),
|
192 |
'30d' => (int) $activityReport->getBlockedCount(30, wfActivityReport::BLOCK_TYPE_BRUTE_FORCE),
|
193 |
);
|
194 |
-
$this->localBlocks[] = array('title' => __('
|
195 |
'24h' => (int) $activityReport->getBlockedCount(1, wfActivityReport::BLOCK_TYPE_BLACKLIST),
|
196 |
'7d' => (int) $activityReport->getBlockedCount(7, wfActivityReport::BLOCK_TYPE_BLACKLIST),
|
197 |
'30d' => (int) $activityReport->getBlockedCount(30, wfActivityReport::BLOCK_TYPE_BLACKLIST),
|
191 |
'7d' => (int) $activityReport->getBlockedCount(7, wfActivityReport::BLOCK_TYPE_BRUTE_FORCE),
|
192 |
'30d' => (int) $activityReport->getBlockedCount(30, wfActivityReport::BLOCK_TYPE_BRUTE_FORCE),
|
193 |
);
|
194 |
+
$this->localBlocks[] = array('title' => __('Blocklist', 'wordfence'), 'type' => wfActivityReport::BLOCK_TYPE_BLACKLIST,
|
195 |
'24h' => (int) $activityReport->getBlockedCount(1, wfActivityReport::BLOCK_TYPE_BLACKLIST),
|
196 |
'7d' => (int) $activityReport->getBlockedCount(7, wfActivityReport::BLOCK_TYPE_BLACKLIST),
|
197 |
'30d' => (int) $activityReport->getBlockedCount(30, wfActivityReport::BLOCK_TYPE_BLACKLIST),
|
lib/wfScanEngine.php
CHANGED
@@ -454,13 +454,13 @@ class wfScanEngine {
|
|
454 |
|
455 |
private function scan_checkGSB_init() {
|
456 |
if ($this->scanController->isPremiumScan()) {
|
457 |
-
$this->statusIDX['checkGSB'] = wfIssues::statusStart("Checking if your site is on a domain
|
458 |
$this->scanController->startStage(wfScanner::STAGE_BLACKLIST_CHECK);
|
459 |
$h = new wordfenceURLHoover($this->apiKey, $this->wp_version);
|
460 |
$h->cleanup();
|
461 |
}
|
462 |
else {
|
463 |
-
wfIssues::statusPaidOnly("Checking if your site is on a domain
|
464 |
sleep(2);
|
465 |
}
|
466 |
}
|
@@ -496,7 +496,7 @@ class wfScanEngine {
|
|
496 |
$h = new wordfenceURLHoover($this->apiKey, $this->wp_version, false, true);
|
497 |
$badURLs = $h->getBaddies();
|
498 |
if ($h->errorMsg) {
|
499 |
-
$this->status(4, 'info', "Error checking domain
|
500 |
wfIssues::statusEnd($this->statusIDX['checkGSB'], wfIssues::STATUS_FAILED);
|
501 |
$this->scanController->completeStage(wfScanner::STAGE_BLACKLIST_CHECK, wfIssues::STATUS_FAILED);
|
502 |
return;
|
@@ -553,22 +553,22 @@ class wfScanEngine {
|
|
553 |
}
|
554 |
else if ($badList == 'wordfence-dbl') {
|
555 |
if (is_multisite()) {
|
556 |
-
$shortMsg = 'The multisite blog with ID ' . intval($id) . ' is listed on the Wordfence domain
|
557 |
$data['multisite'] = intval($id);
|
558 |
}
|
559 |
else {
|
560 |
-
$shortMsg = 'Your site is listed on the Wordfence domain
|
561 |
}
|
562 |
-
$longMsg = "The URL " . esc_html($url) . " is on the
|
563 |
$data['gsb'] = $badList;
|
564 |
}
|
565 |
else {
|
566 |
if (is_multisite()) {
|
567 |
-
$shortMsg = 'The multisite blog with ID ' . intval($id) . ' is listed on a domain
|
568 |
$data['multisite'] = intval($id);
|
569 |
}
|
570 |
else {
|
571 |
-
$shortMsg = 'Your site is listed on a domain
|
572 |
}
|
573 |
$longMsg = "The URL is: " . esc_html($url);
|
574 |
$data['gsb'] = 'unknown';
|
@@ -922,11 +922,11 @@ class wfScanEngine {
|
|
922 |
}
|
923 |
|
924 |
if ($options['scansEnabled_fileContentsGSB']) {
|
925 |
-
$this->statusIDX['GSB'] = wfIssues::statusStart('Scanning file contents for URLs on a domain
|
926 |
//This stage is marked as started earlier in the hasher rather than here
|
927 |
}
|
928 |
else {
|
929 |
-
wfIssues::statusDisabled("Skipping scan of file contents for URLs on a domain
|
930 |
}
|
931 |
|
932 |
if ($options['scansEnabled_fileContents'] || $options['scansEnabled_fileContentsGSB']) {
|
@@ -1016,7 +1016,7 @@ class wfScanEngine {
|
|
1016 |
}
|
1017 |
|
1018 |
private function scan_posts_init() {
|
1019 |
-
$this->statusIDX['posts'] = wfIssues::statusStart('Scanning posts for URLs on a domain
|
1020 |
$this->scanController->startStage(wfScanner::STAGE_CONTENT_SAFETY);
|
1021 |
$blogsToScan = self::getBlogsToScan('posts');
|
1022 |
$this->scanQueue = '';
|
@@ -1120,7 +1120,7 @@ class wfScanEngine {
|
|
1120 |
}
|
1121 |
else if ($result['badList'] == 'wordfence-dbl') {
|
1122 |
$shortMsg = "{$uctype} contains a suspected malware URL: " . esc_html($title);
|
1123 |
-
$longMsg = "This " . esc_html($type) . " contains a URL that is currently listed on Wordfence's domain
|
1124 |
}
|
1125 |
else {
|
1126 |
//A list type that may be new and the plugin has not been upgraded yet.
|
@@ -1159,7 +1159,7 @@ class wfScanEngine {
|
|
1159 |
$this->scanQueue = '';
|
1160 |
}
|
1161 |
private function scan_comments_init(){
|
1162 |
-
$this->statusIDX['comments'] = wfIssues::statusStart('Scanning comments for URLs on a domain
|
1163 |
$this->scanController->startStage(wfScanner::STAGE_CONTENT_SAFETY);
|
1164 |
$this->scanData = array();
|
1165 |
$this->scanQueue = '';
|
@@ -1242,7 +1242,7 @@ class wfScanEngine {
|
|
1242 |
}
|
1243 |
else if ($result['badList'] == 'wordfence-dbl') {
|
1244 |
$shortMsg = "$uctype contains a suspected malware URL.";
|
1245 |
-
$longMsg = "This " . esc_html($type) . " contains a URL that is currently listed on Wordfence's domain
|
1246 |
}
|
1247 |
|
1248 |
if(is_multisite()){
|
@@ -1932,7 +1932,7 @@ class wfScanEngine {
|
|
1932 |
}
|
1933 |
else if ($result['badList'] == 'wordfence-dbl') {
|
1934 |
$shortMsg = "Option contains a suspected malware URL: " . esc_html($optionKey);
|
1935 |
-
$longMsg = "This option contains a URL that is currently listed on Wordfence's domain
|
1936 |
}
|
1937 |
else {
|
1938 |
//A list type that may be new and the plugin has not been upgraded yet.
|
454 |
|
455 |
private function scan_checkGSB_init() {
|
456 |
if ($this->scanController->isPremiumScan()) {
|
457 |
+
$this->statusIDX['checkGSB'] = wfIssues::statusStart("Checking if your site is on a domain blocklist");
|
458 |
$this->scanController->startStage(wfScanner::STAGE_BLACKLIST_CHECK);
|
459 |
$h = new wordfenceURLHoover($this->apiKey, $this->wp_version);
|
460 |
$h->cleanup();
|
461 |
}
|
462 |
else {
|
463 |
+
wfIssues::statusPaidOnly("Checking if your site is on a domain blocklist is for paid members only");
|
464 |
sleep(2);
|
465 |
}
|
466 |
}
|
496 |
$h = new wordfenceURLHoover($this->apiKey, $this->wp_version, false, true);
|
497 |
$badURLs = $h->getBaddies();
|
498 |
if ($h->errorMsg) {
|
499 |
+
$this->status(4, 'info', "Error checking domain blocklists: " . $h->errorMsg);
|
500 |
wfIssues::statusEnd($this->statusIDX['checkGSB'], wfIssues::STATUS_FAILED);
|
501 |
$this->scanController->completeStage(wfScanner::STAGE_BLACKLIST_CHECK, wfIssues::STATUS_FAILED);
|
502 |
return;
|
553 |
}
|
554 |
else if ($badList == 'wordfence-dbl') {
|
555 |
if (is_multisite()) {
|
556 |
+
$shortMsg = 'The multisite blog with ID ' . intval($id) . ' is listed on the Wordfence domain blocklist.';
|
557 |
$data['multisite'] = intval($id);
|
558 |
}
|
559 |
else {
|
560 |
+
$shortMsg = 'Your site is listed on the Wordfence domain blocklist.';
|
561 |
}
|
562 |
+
$longMsg = "The URL " . esc_html($url) . " is on the blocklist.";
|
563 |
$data['gsb'] = $badList;
|
564 |
}
|
565 |
else {
|
566 |
if (is_multisite()) {
|
567 |
+
$shortMsg = 'The multisite blog with ID ' . intval($id) . ' is listed on a domain blocklist.';
|
568 |
$data['multisite'] = intval($id);
|
569 |
}
|
570 |
else {
|
571 |
+
$shortMsg = 'Your site is listed on a domain blocklist.';
|
572 |
}
|
573 |
$longMsg = "The URL is: " . esc_html($url);
|
574 |
$data['gsb'] = 'unknown';
|
922 |
}
|
923 |
|
924 |
if ($options['scansEnabled_fileContentsGSB']) {
|
925 |
+
$this->statusIDX['GSB'] = wfIssues::statusStart('Scanning file contents for URLs on a domain blocklist');
|
926 |
//This stage is marked as started earlier in the hasher rather than here
|
927 |
}
|
928 |
else {
|
929 |
+
wfIssues::statusDisabled("Skipping scan of file contents for URLs on a domain blocklist");
|
930 |
}
|
931 |
|
932 |
if ($options['scansEnabled_fileContents'] || $options['scansEnabled_fileContentsGSB']) {
|
1016 |
}
|
1017 |
|
1018 |
private function scan_posts_init() {
|
1019 |
+
$this->statusIDX['posts'] = wfIssues::statusStart('Scanning posts for URLs on a domain blocklist');
|
1020 |
$this->scanController->startStage(wfScanner::STAGE_CONTENT_SAFETY);
|
1021 |
$blogsToScan = self::getBlogsToScan('posts');
|
1022 |
$this->scanQueue = '';
|
1120 |
}
|
1121 |
else if ($result['badList'] == 'wordfence-dbl') {
|
1122 |
$shortMsg = "{$uctype} contains a suspected malware URL: " . esc_html($title);
|
1123 |
+
$longMsg = "This " . esc_html($type) . " contains a URL that is currently listed on Wordfence's domain blocklist. The URL is: " . esc_html($result['URL']);
|
1124 |
}
|
1125 |
else {
|
1126 |
//A list type that may be new and the plugin has not been upgraded yet.
|
1159 |
$this->scanQueue = '';
|
1160 |
}
|
1161 |
private function scan_comments_init(){
|
1162 |
+
$this->statusIDX['comments'] = wfIssues::statusStart('Scanning comments for URLs on a domain blocklist');
|
1163 |
$this->scanController->startStage(wfScanner::STAGE_CONTENT_SAFETY);
|
1164 |
$this->scanData = array();
|
1165 |
$this->scanQueue = '';
|
1242 |
}
|
1243 |
else if ($result['badList'] == 'wordfence-dbl') {
|
1244 |
$shortMsg = "$uctype contains a suspected malware URL.";
|
1245 |
+
$longMsg = "This " . esc_html($type) . " contains a URL that is currently listed on Wordfence's domain blocklist. The URL is: " . esc_html($result['URL']);
|
1246 |
}
|
1247 |
|
1248 |
if(is_multisite()){
|
1932 |
}
|
1933 |
else if ($result['badList'] == 'wordfence-dbl') {
|
1934 |
$shortMsg = "Option contains a suspected malware URL: " . esc_html($optionKey);
|
1935 |
+
$longMsg = "This option contains a URL that is currently listed on Wordfence's domain blocklist. It may indicate your site is infected with malware. The URL is: " . esc_html($result['URL']);
|
1936 |
}
|
1937 |
else {
|
1938 |
//A list type that may be new and the plugin has not been upgraded yet.
|
lib/wfSupportController.php
CHANGED
@@ -73,6 +73,7 @@ class wfSupportController {
|
|
73 |
const ITEM_FIREWALL_WAF_OPTION_MASK_LOGIN_ERRORS = 'firewall-waf-option-mask-login-errors';
|
74 |
const ITEM_FIREWALL_WAF_OPTION_PREVENT_ADMIN_REGISTRATION = 'firewall-waf-option-prevent-admin-registration';
|
75 |
const ITEM_FIREWALL_WAF_OPTION_PREVENT_AUTHOR_SCAN = 'firewall-waf-option-prevent-author-scan';
|
|
|
76 |
const ITEM_FIREWALL_WAF_OPTION_BLOCK_BAD_POST = 'firewall-waf-option-block-bad-post';
|
77 |
const ITEM_FIREWALL_WAF_OPTION_CUSTOM_BLOCK_TEXT = 'firewall-waf-option-custom-block-text';
|
78 |
const ITEM_FIREWALL_WAF_OPTION_CHECK_PASSWORD = 'firewall-waf-option-check-password';
|
@@ -254,6 +255,7 @@ class wfSupportController {
|
|
254 |
case self::ITEM_FIREWALL_WAF_OPTION_MASK_LOGIN_ERRORS:
|
255 |
case self::ITEM_FIREWALL_WAF_OPTION_PREVENT_ADMIN_REGISTRATION:
|
256 |
case self::ITEM_FIREWALL_WAF_OPTION_PREVENT_AUTHOR_SCAN:
|
|
|
257 |
case self::ITEM_FIREWALL_WAF_OPTION_BLOCK_BAD_POST:
|
258 |
case self::ITEM_FIREWALL_WAF_OPTION_CUSTOM_BLOCK_TEXT:
|
259 |
case self::ITEM_FIREWALL_WAF_OPTION_CHECK_PASSWORD:
|
73 |
const ITEM_FIREWALL_WAF_OPTION_MASK_LOGIN_ERRORS = 'firewall-waf-option-mask-login-errors';
|
74 |
const ITEM_FIREWALL_WAF_OPTION_PREVENT_ADMIN_REGISTRATION = 'firewall-waf-option-prevent-admin-registration';
|
75 |
const ITEM_FIREWALL_WAF_OPTION_PREVENT_AUTHOR_SCAN = 'firewall-waf-option-prevent-author-scan';
|
76 |
+
const ITEM_FIREWALL_WAF_OPTION_DISABLE_APPLICATION_PASSWORDS = 'firewall-waf-option-disable-application-passwords';
|
77 |
const ITEM_FIREWALL_WAF_OPTION_BLOCK_BAD_POST = 'firewall-waf-option-block-bad-post';
|
78 |
const ITEM_FIREWALL_WAF_OPTION_CUSTOM_BLOCK_TEXT = 'firewall-waf-option-custom-block-text';
|
79 |
const ITEM_FIREWALL_WAF_OPTION_CHECK_PASSWORD = 'firewall-waf-option-check-password';
|
255 |
case self::ITEM_FIREWALL_WAF_OPTION_MASK_LOGIN_ERRORS:
|
256 |
case self::ITEM_FIREWALL_WAF_OPTION_PREVENT_ADMIN_REGISTRATION:
|
257 |
case self::ITEM_FIREWALL_WAF_OPTION_PREVENT_AUTHOR_SCAN:
|
258 |
+
case self::ITEM_FIREWALL_WAF_OPTION_DISABLE_APPLICATION_PASSWORDS:
|
259 |
case self::ITEM_FIREWALL_WAF_OPTION_BLOCK_BAD_POST:
|
260 |
case self::ITEM_FIREWALL_WAF_OPTION_CUSTOM_BLOCK_TEXT:
|
261 |
case self::ITEM_FIREWALL_WAF_OPTION_CHECK_PASSWORD:
|
lib/wordfenceClass.php
CHANGED
@@ -1251,6 +1251,22 @@ SQL
|
|
1251 |
add_filter('wp_sitemaps_add_provider', 'wordfence::wpSitemapUserProviderFilter', 99, 2);
|
1252 |
}
|
1253 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1254 |
add_filter('rest_dispatch_request', 'wordfence::_filterCentralFromLiveTraffic', 99, 4);
|
1255 |
|
1256 |
// Change GoDaddy's limit login mu-plugin since it can interfere with the two factor auth message.
|
@@ -4628,7 +4644,7 @@ HTACCESS;
|
|
4628 |
}
|
4629 |
$forcedWhitelistEntry = false;
|
4630 |
if (wfBlock::isWhitelisted($IP, $forcedWhitelistEntry)) {
|
4631 |
-
$message = "The IP address " . wp_kses($IP, array()) . " is
|
4632 |
if ($forcedWhitelistEntry) {
|
4633 |
$message = "The IP address " . wp_kses($IP, array()) . " is in a range of IP addresses that Wordfence does not block. The IP range may be internal or belong to a service safe to allow access for.";
|
4634 |
}
|
@@ -5119,7 +5135,7 @@ HTACCESS;
|
|
5119 |
}
|
5120 |
|
5121 |
$htaccess = ABSPATH . '/.htaccess';
|
5122 |
-
$change = "<IfModule mod_php5.c>\n\tphp_value display_errors 0\n</IfModule>\n<IfModule mod_php7.c>\n\tphp_value display_errors 0\n</IfModule>";
|
5123 |
$content = "";
|
5124 |
if (file_exists($htaccess)) {
|
5125 |
$content = file_get_contents($htaccess);
|
@@ -6196,7 +6212,15 @@ HTML;
|
|
6196 |
wp_redirect($wafMenuURL);
|
6197 |
exit;
|
6198 |
}
|
6199 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6200 |
$notificationCount = count(wfNotification::notifications());
|
6201 |
$updatingNotifications = get_site_transient('wordfence_updating_notifications');
|
6202 |
$hidden = ($notificationCount == 0 || $updatingNotifications ? ' wf-hidden' : '');
|
@@ -7104,7 +7128,7 @@ to your httpd.conf if using Apache, or find documentation on how to disable dire
|
|
7104 |
}
|
7105 |
$data = array(
|
7106 |
'timestamp' => time(),
|
7107 |
-
'description' => '
|
7108 |
'ip' => wfUtils::getIP(),
|
7109 |
'disabled' => empty($_POST['whitelistedEnabled']),
|
7110 |
);
|
@@ -7391,7 +7415,7 @@ to your httpd.conf if using Apache, or find documentation on how to disable dire
|
|
7391 |
if (isset($_POST['path']) && isset($_POST['paramKey']) && isset($_POST['failedRules'])) {
|
7392 |
$data = array(
|
7393 |
'timestamp' => time(),
|
7394 |
-
'description' => '
|
7395 |
'source' => 'live-traffic',
|
7396 |
'ip' => wfUtils::getIP(),
|
7397 |
);
|
@@ -7959,7 +7983,7 @@ ALERTMSG;
|
|
7959 |
}
|
7960 |
|
7961 |
if (isset($actionData['failedRules']) && $actionData['failedRules'] == 'blocked') {
|
7962 |
-
$row->longDescription = "Blocked because the IP is
|
7963 |
}
|
7964 |
else {
|
7965 |
$row->longDescription = "Blocked for " . $row->actionDescription;
|
@@ -8109,13 +8133,13 @@ ALERTMSG;
|
|
8109 |
if (isset($whitelistedData['source'])) {
|
8110 |
$source = $whitelistedData['source'];
|
8111 |
}
|
8112 |
-
else if ($whitelistedData['description'] == '
|
8113 |
$source = 'false-positive';
|
8114 |
}
|
8115 |
-
else if ($whitelistedData['description'] == '
|
8116 |
$source = 'live-traffic';
|
8117 |
}
|
8118 |
-
else if ($whitelistedData['description'] == '
|
8119 |
$source = 'learning-mode';
|
8120 |
}
|
8121 |
else { //A user-entered description or Whitelisted via Firewall Options page
|
@@ -8935,7 +8959,8 @@ class wfWAFAutoPrependHelper {
|
|
8935 |
$wafBlock = $matches[0];
|
8936 |
$hasPHP5 = preg_match('/<IfModule mod_php5\.c>\s*php_value auto_prepend_file \'.*?\'\s*<\/IfModule>/is', $wafBlock);
|
8937 |
$hasPHP7 = preg_match('/<IfModule mod_php7\.c>\s*php_value auto_prepend_file \'.*?\'\s*<\/IfModule>/is', $wafBlock);
|
8938 |
-
|
|
|
8939 |
return false;
|
8940 |
}
|
8941 |
}
|
@@ -8957,13 +8982,22 @@ class wfWAFAutoPrependHelper {
|
|
8957 |
if (preg_match($regex, $htaccessContent, $matches, PREG_OFFSET_CAPTURE)) {
|
8958 |
$wafBlock = $matches[0][0];
|
8959 |
$hasPHP5 = preg_match('/<IfModule mod_php5\.c>\s*php_value auto_prepend_file \'(.*?)\'\s*<\/IfModule>/is', $wafBlock, $php5Matches, PREG_OFFSET_CAPTURE);
|
8960 |
-
$hasPHP7 = preg_match('/<IfModule mod_php7\.c>\s*php_value auto_prepend_file \'.*?\'\s*<\/IfModule>/is', $wafBlock);
|
8961 |
-
|
|
|
8962 |
$beforeWAFBlock = substr($htaccessContent, 0, $matches[0][1]);
|
8963 |
$afterWAFBlock = substr($htaccessContent, $matches[0][1] + strlen($wafBlock));
|
8964 |
$beforeMod_php = substr($wafBlock, 0, $php5Matches[0][1]);
|
8965 |
$afterMod_php = substr($wafBlock, $php5Matches[0][1] + strlen($php5Matches[0][0]));
|
8966 |
-
$updatedHtaccessContent = $beforeWAFBlock . $beforeMod_php . $php5Matches[0][0] . "\n" . sprintf("<IfModule mod_php7.c>\n\tphp_value auto_prepend_file '%s'\n</IfModule>", $php5Matches[1][0] /* already escaped */) . $afterMod_php . $afterWAFBlock;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8967 |
return file_put_contents($htaccessPath, $updatedHtaccessContent) !== false;
|
8968 |
}
|
8969 |
}
|
@@ -9080,14 +9114,17 @@ file because of file permissions. Please verify the permissions are correct and
|
|
9080 |
case 'apache-mod_php':
|
9081 |
$autoPrependDirective = sprintf("# Wordfence WAF
|
9082 |
<IfModule mod_php5.c>
|
9083 |
-
php_value auto_prepend_file '%s'
|
9084 |
</IfModule>
|
9085 |
<IfModule mod_php7.c>
|
9086 |
-
php_value auto_prepend_file '%s'
|
|
|
|
|
|
|
9087 |
</IfModule>
|
9088 |
$userIniHtaccessDirectives
|
9089 |
# END Wordfence WAF
|
9090 |
-
", addcslashes($bootstrapPath, "'")
|
9091 |
break;
|
9092 |
|
9093 |
case 'litespeed':
|
1251 |
add_filter('wp_sitemaps_add_provider', 'wordfence::wpSitemapUserProviderFilter', 99, 2);
|
1252 |
}
|
1253 |
|
1254 |
+
if (wfConfig::get('loginSec_disableApplicationPasswords')) {
|
1255 |
+
add_filter('wp_is_application_passwords_available', '__return_false');
|
1256 |
+
|
1257 |
+
// Override the wp_die handler to let the user know app passwords were disabled by the Wordfence option.
|
1258 |
+
if (!empty($_SERVER['SCRIPT_FILENAME']) && $_SERVER['SCRIPT_FILENAME'] === ABSPATH . 'wp-admin/authorize-application.php') {
|
1259 |
+
add_filter('wp_die_handler', function ($handler = null) {
|
1260 |
+
return function ($message, $title, $args) {
|
1261 |
+
if ($message === 'Application passwords are not available.') {
|
1262 |
+
$message = __('Application passwords have been disabled by Wordfence.', 'wordfence');
|
1263 |
+
}
|
1264 |
+
_default_wp_die_handler($message, $title, $args);
|
1265 |
+
};
|
1266 |
+
}, 10, 1);
|
1267 |
+
}
|
1268 |
+
}
|
1269 |
+
|
1270 |
add_filter('rest_dispatch_request', 'wordfence::_filterCentralFromLiveTraffic', 99, 4);
|
1271 |
|
1272 |
// Change GoDaddy's limit login mu-plugin since it can interfere with the two factor auth message.
|
4644 |
}
|
4645 |
$forcedWhitelistEntry = false;
|
4646 |
if (wfBlock::isWhitelisted($IP, $forcedWhitelistEntry)) {
|
4647 |
+
$message = "The IP address " . wp_kses($IP, array()) . " is allowlisted and can't be blocked. You can remove this IP from the allowlist on the Wordfence options page.";
|
4648 |
if ($forcedWhitelistEntry) {
|
4649 |
$message = "The IP address " . wp_kses($IP, array()) . " is in a range of IP addresses that Wordfence does not block. The IP range may be internal or belong to a service safe to allow access for.";
|
4650 |
}
|
5135 |
}
|
5136 |
|
5137 |
$htaccess = ABSPATH . '/.htaccess';
|
5138 |
+
$change = "<IfModule mod_php5.c>\n\tphp_value display_errors 0\n</IfModule>\n<IfModule mod_php7.c>\n\tphp_value display_errors 0\n</IfModule>\n<IfModule mod_php.c>\n\tphp_value display_errors 0\n</IfModule>";
|
5139 |
$content = "";
|
5140 |
if (file_exists($htaccess)) {
|
5141 |
$content = file_get_contents($htaccess);
|
6212 |
wp_redirect($wafMenuURL);
|
6213 |
exit;
|
6214 |
}
|
6215 |
+
|
6216 |
+
if (version_compare(PHP_VERSION, '8.0', '>=') && !get_user_option('wordfence_php8_nag')) {
|
6217 |
+
wfAdminNoticeQueue::addAdminNotice(wfAdminNotice::SEVERITY_INFO, <<<HTML
|
6218 |
+
PHP 8 includes significant changes from PHP 7, which may cause unexpected bugs in plugins, themes, and WordPress itself. Wordfence is not yet officially supported on PHP 8, but will be supported in the near future. <a href="https://www.wordfence.com/blog/2020/11/php-8-what-wordpress-users-need-to-know/">Read More</a>
|
6219 |
+
HTML
|
6220 |
+
, 'php8', array(get_current_user_id()));
|
6221 |
+
update_user_option(get_current_user_id(), 'wordfence_php8_nag', 1);
|
6222 |
+
}
|
6223 |
+
|
6224 |
$notificationCount = count(wfNotification::notifications());
|
6225 |
$updatingNotifications = get_site_transient('wordfence_updating_notifications');
|
6226 |
$hidden = ($notificationCount == 0 || $updatingNotifications ? ' wf-hidden' : '');
|
7128 |
}
|
7129 |
$data = array(
|
7130 |
'timestamp' => time(),
|
7131 |
+
'description' => 'Allowlisted via Firewall Options page',
|
7132 |
'ip' => wfUtils::getIP(),
|
7133 |
'disabled' => empty($_POST['whitelistedEnabled']),
|
7134 |
);
|
7415 |
if (isset($_POST['path']) && isset($_POST['paramKey']) && isset($_POST['failedRules'])) {
|
7416 |
$data = array(
|
7417 |
'timestamp' => time(),
|
7418 |
+
'description' => 'Allowlisted via Live Traffic',
|
7419 |
'source' => 'live-traffic',
|
7420 |
'ip' => wfUtils::getIP(),
|
7421 |
);
|
7983 |
}
|
7984 |
|
7985 |
if (isset($actionData['failedRules']) && $actionData['failedRules'] == 'blocked') {
|
7986 |
+
$row->longDescription = "Blocked because the IP is blocklisted";
|
7987 |
}
|
7988 |
else {
|
7989 |
$row->longDescription = "Blocked for " . $row->actionDescription;
|
8133 |
if (isset($whitelistedData['source'])) {
|
8134 |
$source = $whitelistedData['source'];
|
8135 |
}
|
8136 |
+
else if ($whitelistedData['description'] == 'Allowlisted by via false positive dialog') {
|
8137 |
$source = 'false-positive';
|
8138 |
}
|
8139 |
+
else if ($whitelistedData['description'] == 'Allowlisted via Live Traffic') {
|
8140 |
$source = 'live-traffic';
|
8141 |
}
|
8142 |
+
else if ($whitelistedData['description'] == 'Allowlisted while in Learning Mode.') {
|
8143 |
$source = 'learning-mode';
|
8144 |
}
|
8145 |
else { //A user-entered description or Whitelisted via Firewall Options page
|
8959 |
$wafBlock = $matches[0];
|
8960 |
$hasPHP5 = preg_match('/<IfModule mod_php5\.c>\s*php_value auto_prepend_file \'.*?\'\s*<\/IfModule>/is', $wafBlock);
|
8961 |
$hasPHP7 = preg_match('/<IfModule mod_php7\.c>\s*php_value auto_prepend_file \'.*?\'\s*<\/IfModule>/is', $wafBlock);
|
8962 |
+
$hasPHP8 = preg_match('/<IfModule mod_php\.c>\s*php_value auto_prepend_file \'.*?\'\s*<\/IfModule>/is', $wafBlock);
|
8963 |
+
if ($hasPHP5 && (!$hasPHP7 || !$hasPHP8)) { //Check if PHP 5 is configured, but not 7 or 8.
|
8964 |
return false;
|
8965 |
}
|
8966 |
}
|
8982 |
if (preg_match($regex, $htaccessContent, $matches, PREG_OFFSET_CAPTURE)) {
|
8983 |
$wafBlock = $matches[0][0];
|
8984 |
$hasPHP5 = preg_match('/<IfModule mod_php5\.c>\s*php_value auto_prepend_file \'(.*?)\'\s*<\/IfModule>/is', $wafBlock, $php5Matches, PREG_OFFSET_CAPTURE);
|
8985 |
+
$hasPHP7 = preg_match('/<IfModule mod_php7\.c>\s*php_value auto_prepend_file \'.*?\'\s*<\/IfModule>/is', $wafBlock, $php7Matches, PREG_OFFSET_CAPTURE);
|
8986 |
+
$hasPHP8 = preg_match('/<IfModule mod_php\.c>\s*php_value auto_prepend_file \'.*?\'\s*<\/IfModule>/is', $wafBlock);
|
8987 |
+
if ($hasPHP5 && !$hasPHP7) {
|
8988 |
$beforeWAFBlock = substr($htaccessContent, 0, $matches[0][1]);
|
8989 |
$afterWAFBlock = substr($htaccessContent, $matches[0][1] + strlen($wafBlock));
|
8990 |
$beforeMod_php = substr($wafBlock, 0, $php5Matches[0][1]);
|
8991 |
$afterMod_php = substr($wafBlock, $php5Matches[0][1] + strlen($php5Matches[0][0]));
|
8992 |
+
$updatedHtaccessContent = $beforeWAFBlock . $beforeMod_php . $php5Matches[0][0] . "\n" . sprintf("<IfModule mod_php7.c>\n\tphp_value auto_prepend_file '%1\$s'\n</IfModule>\n<IfModule mod_php.c>\n\tphp_value auto_prepend_file '%1\$s'\n</IfModule>", $php5Matches[1][0] /* already escaped */) . $afterMod_php . $afterWAFBlock;
|
8993 |
+
return file_put_contents($htaccessPath, $updatedHtaccessContent) !== false;
|
8994 |
+
}
|
8995 |
+
if ($hasPHP5 && $hasPHP7 && !$hasPHP8) {
|
8996 |
+
$beforeWAFBlock = substr($htaccessContent, 0, $matches[0][1]);
|
8997 |
+
$afterWAFBlock = substr($htaccessContent, $matches[0][1] + strlen($wafBlock));
|
8998 |
+
$beforeMod_php = substr($wafBlock, 0, $php5Matches[0][1]);
|
8999 |
+
$afterMod_php = substr($wafBlock, $php7Matches[0][1] + strlen($php7Matches[0][0]));
|
9000 |
+
$updatedHtaccessContent = $beforeWAFBlock . $beforeMod_php . $php5Matches[0][0] . "\n" . $php7Matches[0][0] . "\n" . sprintf("<IfModule mod_php.c>\n\tphp_value auto_prepend_file '%s'\n</IfModule>", $php5Matches[1][0] /* already escaped */) . $afterMod_php . $afterWAFBlock;
|
9001 |
return file_put_contents($htaccessPath, $updatedHtaccessContent) !== false;
|
9002 |
}
|
9003 |
}
|
9114 |
case 'apache-mod_php':
|
9115 |
$autoPrependDirective = sprintf("# Wordfence WAF
|
9116 |
<IfModule mod_php5.c>
|
9117 |
+
php_value auto_prepend_file '%1\$s'
|
9118 |
</IfModule>
|
9119 |
<IfModule mod_php7.c>
|
9120 |
+
php_value auto_prepend_file '%1\$s'
|
9121 |
+
</IfModule>
|
9122 |
+
<IfModule mod_php.c>
|
9123 |
+
php_value auto_prepend_file '%1\$s'
|
9124 |
</IfModule>
|
9125 |
$userIniHtaccessDirectives
|
9126 |
# END Wordfence WAF
|
9127 |
+
", addcslashes($bootstrapPath, "'"));
|
9128 |
break;
|
9129 |
|
9130 |
case 'litespeed':
|
lib/wordfenceScanner.php
CHANGED
@@ -87,16 +87,6 @@ class wordfenceScanner {
|
|
87 |
throw new Exception(__('Wordfence could not get the attack signature patterns from the scanning server.', 'wordfence'));
|
88 |
}
|
89 |
|
90 |
-
if (wfWAF::getInstance() && method_exists(wfWAF::getInstance(), 'setMalwareSignatures')) {
|
91 |
-
try { wfWAF::getInstance()->setMalwareSignatures(array()); } catch (Exception $e) { /* Ignore */ }
|
92 |
-
if (method_exists(wfWAF::getInstance(), 'setMalwareSignatureCommonStrings')) {
|
93 |
-
try {
|
94 |
-
wfWAF::getInstance()->setMalwareSignatureCommonStrings(array(), array());
|
95 |
-
}
|
96 |
-
catch (Exception $e) { /* Ignore */ }
|
97 |
-
}
|
98 |
-
}
|
99 |
-
|
100 |
if (is_array($sigData['rules'])) {
|
101 |
$wafPatterns = array();
|
102 |
$wafCommonStringIndexes = array();
|
@@ -117,16 +107,6 @@ class wordfenceScanner {
|
|
117 |
$wafCommonStringIndexes[] = $commonStringIndexes;
|
118 |
}
|
119 |
}
|
120 |
-
|
121 |
-
if (wfWAF::getInstance() && method_exists(wfWAF::getInstance(), 'setMalwareSignatures')) {
|
122 |
-
try { wfWAF::getInstance()->setMalwareSignatures($wafPatterns); } catch (Exception $e) { /* Ignore */ }
|
123 |
-
if (method_exists(wfWAF::getInstance(), 'setMalwareSignatureCommonStrings') && isset($sigData['commonStrings']) && is_array($sigData['commonStrings'])) {
|
124 |
-
try {
|
125 |
-
wfWAF::getInstance()->setMalwareSignatureCommonStrings($sigData['commonStrings'], $wafCommonStringIndexes);
|
126 |
-
}
|
127 |
-
catch (Exception $e) { /* Ignore */ }
|
128 |
-
}
|
129 |
-
}
|
130 |
}
|
131 |
|
132 |
$userSignatures = wfScanner::shared()->userScanSignatures();
|
@@ -385,7 +365,6 @@ class wordfenceScanner {
|
|
385 |
$type = (isset($rule[4]) && !empty($rule[4])) ? $rule[4] : 'server';
|
386 |
$logOnly = (isset($rule[5]) && !empty($rule[5])) ? $rule[5] : false;
|
387 |
$commonStringIndexes = (isset($rule[8]) && is_array($rule[8])) ? $rule[8] : array();
|
388 |
-
$customMessage = isset($rule[9]) ? $rule[9] : __('This file appears to be installed or modified by a hacker to perform malicious activity. If you know about this file you can choose to ignore it to exclude it from future scans.', 'wordfence');
|
389 |
if ($type == 'server' && !$treatAsBinary) { continue; }
|
390 |
else if (($type == 'both' || $type == 'browser') && $isJS) { $extraMsg = ''; }
|
391 |
else if (($type == 'both' || $type == 'browser') && !$treatAsBinary) { continue; }
|
@@ -412,6 +391,7 @@ class wordfenceScanner {
|
|
412 |
}*/
|
413 |
|
414 |
if (preg_match('/(' . $rule[2] . ')/iS', $data, $matches, PREG_OFFSET_CAPTURE)) {
|
|
|
415 |
$matchString = $matches[1][0];
|
416 |
$matchOffset = $matches[1][1];
|
417 |
$beforeString = wfWAFUtils::substr($data, max(0, $matchOffset - 100), $matchOffset - max(0, $matchOffset - 100));
|
@@ -566,7 +546,7 @@ class wordfenceScanner {
|
|
566 |
'ignoreP' => $this->path . $file,
|
567 |
'ignoreC' => md5_file($this->path . $file),
|
568 |
'shortMsg' => __('File contains suspected malware URL: ', 'wordfence') . esc_html($file),
|
569 |
-
'longMsg' => __('This file contains a URL that is currently listed on Wordfence\'s domain
|
570 |
'data' => array_merge(array(
|
571 |
'file' => $file,
|
572 |
'shac' => $record->SHAC,
|
87 |
throw new Exception(__('Wordfence could not get the attack signature patterns from the scanning server.', 'wordfence'));
|
88 |
}
|
89 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
90 |
if (is_array($sigData['rules'])) {
|
91 |
$wafPatterns = array();
|
92 |
$wafCommonStringIndexes = array();
|
107 |
$wafCommonStringIndexes[] = $commonStringIndexes;
|
108 |
}
|
109 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
110 |
}
|
111 |
|
112 |
$userSignatures = wfScanner::shared()->userScanSignatures();
|
365 |
$type = (isset($rule[4]) && !empty($rule[4])) ? $rule[4] : 'server';
|
366 |
$logOnly = (isset($rule[5]) && !empty($rule[5])) ? $rule[5] : false;
|
367 |
$commonStringIndexes = (isset($rule[8]) && is_array($rule[8])) ? $rule[8] : array();
|
|
|
368 |
if ($type == 'server' && !$treatAsBinary) { continue; }
|
369 |
else if (($type == 'both' || $type == 'browser') && $isJS) { $extraMsg = ''; }
|
370 |
else if (($type == 'both' || $type == 'browser') && !$treatAsBinary) { continue; }
|
391 |
}*/
|
392 |
|
393 |
if (preg_match('/(' . $rule[2] . ')/iS', $data, $matches, PREG_OFFSET_CAPTURE)) {
|
394 |
+
$customMessage = isset($rule[9]) ? $rule[9] : __('This file appears to be installed or modified by a hacker to perform malicious activity. If you know about this file you can choose to ignore it to exclude it from future scans.', 'wordfence');
|
395 |
$matchString = $matches[1][0];
|
396 |
$matchOffset = $matches[1][1];
|
397 |
$beforeString = wfWAFUtils::substr($data, max(0, $matchOffset - 100), $matchOffset - max(0, $matchOffset - 100));
|
546 |
'ignoreP' => $this->path . $file,
|
547 |
'ignoreC' => md5_file($this->path . $file),
|
548 |
'shortMsg' => __('File contains suspected malware URL: ', 'wordfence') . esc_html($file),
|
549 |
+
'longMsg' => __('This file contains a URL that is currently listed on Wordfence\'s domain blocklist. The URL is: ', 'wordfence') . esc_html($result['URL']),
|
550 |
'data' => array_merge(array(
|
551 |
'file' => $file,
|
552 |
'shac' => $record->SHAC,
|
models/block/wfBlock.php
CHANGED
@@ -177,7 +177,7 @@ class wfBlock {
|
|
177 |
|
178 |
if ($payload['type'] == 'ip-address') {
|
179 |
if (!isset($payload['ip']) || !filter_var(trim($payload['ip']), FILTER_VALIDATE_IP) || @wfUtils::inet_pton(trim($payload['ip'])) === false) { return __('Invalid IP address.', 'wordfence'); }
|
180 |
-
if (self::isWhitelisted(trim($payload['ip']))) { return sprintf(__('This IP address is in a range of addresses that Wordfence does not block. The IP range may be internal or belong to a service that is always allowed.
|
181 |
}
|
182 |
else if ($payload['type'] == 'country') {
|
183 |
if (!isset($payload['blockLogin']) || !isset($payload['blockSite'])) { return __('Nothing selected to block.', 'wordfence'); }
|
177 |
|
178 |
if ($payload['type'] == 'ip-address') {
|
179 |
if (!isset($payload['ip']) || !filter_var(trim($payload['ip']), FILTER_VALIDATE_IP) || @wfUtils::inet_pton(trim($payload['ip'])) === false) { return __('Invalid IP address.', 'wordfence'); }
|
180 |
+
if (self::isWhitelisted(trim($payload['ip']))) { return sprintf(__('This IP address is in a range of addresses that Wordfence does not block. The IP range may be internal or belong to a service that is always allowed. Allowlisting of external services can be disabled. <a href="%s" target="_blank" rel="noopener noreferrer">Learn More</a>', 'wordfence'), wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_OPTION_WHITELISTED_SERVICES)); }
|
181 |
}
|
182 |
else if ($payload['type'] == 'country') {
|
183 |
if (!isset($payload['blockLogin']) || !isset($payload['blockSite'])) { return __('Nothing selected to block.', 'wordfence'); }
|
models/firewall/wfFirewall.php
CHANGED
@@ -458,7 +458,7 @@ class wfFirewall
|
|
458 |
}
|
459 |
return array(
|
460 |
'percentage' => 1.0,
|
461 |
-
'title' => __('Enable Real-Time IP
|
462 |
);
|
463 |
}
|
464 |
catch (Exception $e) {
|
@@ -467,7 +467,7 @@ class wfFirewall
|
|
467 |
|
468 |
return array(
|
469 |
'percentage' => 1.0,
|
470 |
-
'title' => __('Enable Real-Time IP
|
471 |
);
|
472 |
}
|
473 |
|
458 |
}
|
459 |
return array(
|
460 |
'percentage' => 1.0,
|
461 |
+
'title' => __('Enable Real-Time IP Blocklist.', 'wordfence'),
|
462 |
);
|
463 |
}
|
464 |
catch (Exception $e) {
|
467 |
|
468 |
return array(
|
469 |
'percentage' => 1.0,
|
470 |
+
'title' => __('Enable Real-Time IP Blocklist.', 'wordfence'),
|
471 |
);
|
472 |
}
|
473 |
|
models/scanner/wfScanner.php
CHANGED
@@ -819,7 +819,7 @@ class wfScanner {
|
|
819 |
$reputationChecks = array(
|
820 |
'spamvertizeCheck' => __('Enable scan option to check if this website is being "Spamvertised".', 'wordfence'),
|
821 |
'checkSpamIP' => __('Enable scan option to check if your website IP is generating spam.', 'wordfence'),
|
822 |
-
'scansEnabled_checkGSB' => __('Enable scan option to check if your website is on a domain
|
823 |
);
|
824 |
|
825 |
foreach ($reputationChecks as $option => $optionLabel) {
|
819 |
$reputationChecks = array(
|
820 |
'spamvertizeCheck' => __('Enable scan option to check if this website is being "Spamvertised".', 'wordfence'),
|
821 |
'checkSpamIP' => __('Enable scan option to check if your website IP is generating spam.', 'wordfence'),
|
822 |
+
'scansEnabled_checkGSB' => __('Enable scan option to check if your website is on a domain blocklist.', 'wordfence'),
|
823 |
);
|
824 |
|
825 |
foreach ($reputationChecks as $option => $optionLabel) {
|
modules/login-security/classes/controller/wordfencels.php
CHANGED
@@ -73,7 +73,7 @@ class Controller_WordfenceLS {
|
|
73 |
\wfModuleController::shared()->addOptionIndex('wfls-option-allow-remember', __('Login Security: Allow remembering device for 30 days', 'wordfence-2fa'));
|
74 |
\wfModuleController::shared()->addOptionIndex('wfls-option-require-2fa-xml-rpc', __('Login Security: Require 2FA for XML-RPC call authentication', 'wordfence-2fa'));
|
75 |
\wfModuleController::shared()->addOptionIndex('wfls-option-disable-xml-rpc', __('Login Security: Disable XML-RPC authentication', 'wordfence-2fa'));
|
76 |
-
\wfModuleController::shared()->addOptionIndex('wfls-option-whitelist-2fa', __('Login Security:
|
77 |
\wfModuleController::shared()->addOptionIndex('wfls-option-enable-captcha', __('Login Security: Enable reCAPTCHA on the login and user registration pages', 'wordfence-2fa'));
|
78 |
|
79 |
$title = __('Login Security Options', 'wordfence-ls');
|
73 |
\wfModuleController::shared()->addOptionIndex('wfls-option-allow-remember', __('Login Security: Allow remembering device for 30 days', 'wordfence-2fa'));
|
74 |
\wfModuleController::shared()->addOptionIndex('wfls-option-require-2fa-xml-rpc', __('Login Security: Require 2FA for XML-RPC call authentication', 'wordfence-2fa'));
|
75 |
\wfModuleController::shared()->addOptionIndex('wfls-option-disable-xml-rpc', __('Login Security: Disable XML-RPC authentication', 'wordfence-2fa'));
|
76 |
+
\wfModuleController::shared()->addOptionIndex('wfls-option-whitelist-2fa', __('Login Security: Allowlisted IP addresses that bypass 2FA', 'wordfence-2fa'));
|
77 |
\wfModuleController::shared()->addOptionIndex('wfls-option-enable-captcha', __('Login Security: Enable reCAPTCHA on the login and user registration pages', 'wordfence-2fa'));
|
78 |
|
79 |
$title = __('Login Security Options', 'wordfence-ls');
|
modules/login-security/css/{admin-global.1603293147.css → admin-global.1607007971.css}
RENAMED
File without changes
|
modules/login-security/css/{admin.1603293147.css → admin.1607007971.css}
RENAMED
File without changes
|
modules/login-security/css/{colorbox.1603293147.css → colorbox.1607007971.css}
RENAMED
File without changes
|
modules/login-security/css/{font-awesome.1603293147.css → font-awesome.1607007971.css}
RENAMED
File without changes
|
modules/login-security/css/{ionicons.1603293147.css → ionicons.1607007971.css}
RENAMED
File without changes
|
modules/login-security/css/{jquery-ui-timepicker-addon.1603293147.css → jquery-ui-timepicker-addon.1607007971.css}
RENAMED
File without changes
|
modules/login-security/css/{jquery-ui.min.1603293147.css → jquery-ui.min.1607007971.css}
RENAMED
File without changes
|
modules/login-security/css/{jquery-ui.structure.min.1603293147.css → jquery-ui.structure.min.1607007971.css}
RENAMED
File without changes
|
modules/login-security/css/{jquery-ui.theme.min.1603293147.css → jquery-ui.theme.min.1607007971.css}
RENAMED
File without changes
|
modules/login-security/css/{login.1603293147.css → login.1607007971.css}
RENAMED
File without changes
|
modules/login-security/js/{admin-global.1603293147.js → admin-global.1607007971.js}
RENAMED
File without changes
|
modules/login-security/js/{admin.1603293147.js → admin.1607007971.js}
RENAMED
File without changes
|
modules/login-security/js/{jquery-ui-timepicker-addon.1603293147.js → jquery-ui-timepicker-addon.1607007971.js}
RENAMED
File without changes
|
modules/login-security/js/{jquery.colorbox.1603293147.js → jquery.colorbox.1607007971.js}
RENAMED
File without changes
|
modules/login-security/js/{jquery.colorbox.min.1603293147.js → jquery.colorbox.min.1607007971.js}
RENAMED
File without changes
|
modules/login-security/js/{jquery.qrcode.min.1603293147.js → jquery.qrcode.min.1607007971.js}
RENAMED
File without changes
|
modules/login-security/js/{jquery.tmpl.min.1603293147.js → jquery.tmpl.min.1607007971.js}
RENAMED
File without changes
|
modules/login-security/js/{login.1603293147.js → login.1607007971.js}
RENAMED
File without changes
|
modules/login-security/views/options/option-ip-source.php
CHANGED
@@ -116,7 +116,7 @@ $selectOptions = array(
|
|
116 |
var option = optionElement.data('option');
|
117 |
var originalValue = optionElement.data('originalValue');
|
118 |
|
119 |
-
$(this).
|
120 |
});
|
121 |
|
122 |
$('#wfls-ip-source-trusted-proxies textarea').each(function() {
|
116 |
var option = optionElement.data('option');
|
117 |
var originalValue = optionElement.data('originalValue');
|
118 |
|
119 |
+
$(this).prop('checked', originalValue == $(this).attr('value'));
|
120 |
});
|
121 |
|
122 |
$('#wfls-ip-source-trusted-proxies textarea').each(function() {
|
modules/login-security/views/page/manage.php
CHANGED
@@ -110,5 +110,5 @@ else if (WORDFENCE_LS_FROM_CORE && $correctedTime != $time) {
|
|
110 |
echo __('Corrected Time (WF):', 'wordfence-2fa') . ' ' . date('Y-m-d H:i:s', $correctedTime) . ' UTC (' . \WordfenceLS\Controller_Time::format_local_time('Y-m-d H:i:s', $correctedTime) . ' ' . $tz . ')<br>';
|
111 |
}
|
112 |
?>
|
113 |
-
<?php _e('Detected IP:', 'wordfence-2fa'); ?> <?php echo \WordfenceLS\Text\Model_HTML::esc_html(\WordfenceLS\Model_Request::current()->ip()); if (\WordfenceLS\Controller_Whitelist::shared()->is_whitelisted(\WordfenceLS\Model_Request::current()->ip())) { echo ' (' . __('
|
114 |
<?php endif; ?>
|
110 |
echo __('Corrected Time (WF):', 'wordfence-2fa') . ' ' . date('Y-m-d H:i:s', $correctedTime) . ' UTC (' . \WordfenceLS\Controller_Time::format_local_time('Y-m-d H:i:s', $correctedTime) . ' ' . $tz . ')<br>';
|
111 |
}
|
112 |
?>
|
113 |
+
<?php _e('Detected IP:', 'wordfence-2fa'); ?> <?php echo \WordfenceLS\Text\Model_HTML::esc_html(\WordfenceLS\Model_Request::current()->ip()); if (\WordfenceLS\Controller_Whitelist::shared()->is_whitelisted(\WordfenceLS\Model_Request::current()->ip())) { echo ' (' . __('allowlisted', 'wordfence-2fa') . ')'; } ?></p>
|
114 |
<?php endif; ?>
|
modules/login-security/views/settings/options.php
CHANGED
@@ -99,9 +99,9 @@ if (!defined('WORDFENCE_LS_VERSION')) { exit; }
|
|
99 |
echo \WordfenceLS\Model_View::create('options/option-textarea', array(
|
100 |
'textOptionName' => \WordfenceLS\Controller_Settings::OPTION_2FA_WHITELISTED,
|
101 |
'textValue' => implode("\n", \WordfenceLS\Controller_Settings::shared()->whitelisted_ips()),
|
102 |
-
'title' => new \WordfenceLS\Text\Model_HTML('<strong>' . __('
|
103 |
'alignTitle' => 'top',
|
104 |
-
'subtitle' => __('
|
105 |
'subtitlePosition' => 'value',
|
106 |
'noSpacer' => true,
|
107 |
))->render();
|
99 |
echo \WordfenceLS\Model_View::create('options/option-textarea', array(
|
100 |
'textOptionName' => \WordfenceLS\Controller_Settings::OPTION_2FA_WHITELISTED,
|
101 |
'textValue' => implode("\n", \WordfenceLS\Controller_Settings::shared()->whitelisted_ips()),
|
102 |
+
'title' => new \WordfenceLS\Text\Model_HTML('<strong>' . __('Allowlisted IP addresses that bypass 2FA', 'wordfence-2fa') . '</strong>'),
|
103 |
'alignTitle' => 'top',
|
104 |
+
'subtitle' => __('Allowlisted IPs must be placed on separate lines. You can specify ranges using the following formats: 127.0.0.1/24, 127.0.0.[1-100], or 127.0.0.1-127.0.1.100.', 'wordfence-2fa'),
|
105 |
'subtitlePosition' => 'value',
|
106 |
'noSpacer' => true,
|
107 |
))->render();
|
modules/login-security/wordfence-login-security.php
CHANGED
@@ -27,7 +27,7 @@ else {
|
|
27 |
define('WORDFENCE_LS_FROM_CORE', ($wfCoreActive && isset($wfCoreLoading) && $wfCoreLoading));
|
28 |
|
29 |
define('WORDFENCE_LS_VERSION', '1.0.5');
|
30 |
-
define('WORDFENCE_LS_BUILD_NUMBER', '
|
31 |
|
32 |
if (!defined('WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES')) { define('WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES', 15); }
|
33 |
|
27 |
define('WORDFENCE_LS_FROM_CORE', ($wfCoreActive && isset($wfCoreLoading) && $wfCoreLoading));
|
28 |
|
29 |
define('WORDFENCE_LS_VERSION', '1.0.5');
|
30 |
+
define('WORDFENCE_LS_BUILD_NUMBER', '1607007971');
|
31 |
|
32 |
if (!defined('WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES')) { define('WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES', 15); }
|
33 |
|
readme.txt
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
=== Wordfence Security - Firewall & Malware Scan ===
|
2 |
Contributors: mmaunder, wfryan, wfmatt, wfmattr
|
3 |
-
Tags: security, firewall, malware scanner, web application firewall, two factor authentication, block hackers, country blocking, clean hacked site,
|
4 |
Requires at least: 3.9
|
5 |
Requires PHP: 5.3
|
6 |
-
Tested up to: 5.
|
7 |
-
Stable tag: 7.4.
|
8 |
|
9 |
Secure your website with the most comprehensive WordPress security plugin. Firewall, malware scan, blocking, live traffic, login security & more.
|
10 |
|
@@ -17,7 +17,7 @@ Wordfence includes an endpoint firewall and malware scanner that were built from
|
|
17 |
#### WORDPRESS FIREWALL
|
18 |
* Web Application Firewall identifies and blocks malicious traffic. Built and maintained by a large team focused 100% on WordPress security.
|
19 |
* [Premium] Real-time firewall rule and malware signature updates via the Threat Defense Feed (free version is delayed by 30 days).
|
20 |
-
* [Premium] Real-time IP
|
21 |
* Protects your site at the endpoint, enabling deep integration with WordPress. Unlike cloud alternatives does not break encryption, cannot be bypassed and cannot leak data.
|
22 |
* Integrated malware scanner blocks requests that include malicious code or content.
|
23 |
* Protection from brute force attacks by limiting login attempts.
|
@@ -29,7 +29,7 @@ Wordfence includes an endpoint firewall and malware scanner that were built from
|
|
29 |
* Repair files that have changed by overwriting them with a pristine, original version. Delete any files that don’t belong easily within the Wordfence interface.
|
30 |
* Checks your site for known security vulnerabilities and alerts you to any issues. Also alerts you to potential security issues when a plugin has been closed or abandoned.
|
31 |
* Checks your content safety by scanning file contents, posts and comments for dangerous URLs and suspicious content.
|
32 |
-
* [Premium] Checks to see if your site or IP have been
|
33 |
|
34 |
#### LOGIN SECURITY
|
35 |
* Two-factor authentication (2FA), one of the most secure forms of remote system authentication available via any TOTP-based authenticator app or service.
|
@@ -82,7 +82,7 @@ The WordPress security plugin provides the best protection available for your we
|
|
82 |
|
83 |
= What features does Wordfence Premium enable? =
|
84 |
|
85 |
-
We offer a Premium API key that gives you real-time updates to the Threat Defense Feed which includes a real-time IP
|
86 |
|
87 |
= How does the Wordfence WordPress Firewall protect websites? =
|
88 |
|
@@ -153,7 +153,7 @@ Yes. We fully support IPv6 with all security functions including country blockin
|
|
153 |
|
154 |
= Does Wordfence Security support Multi-Site installations? =
|
155 |
|
156 |
-
Yes. WordPress Multi-Site is fully supported. Using Wordfence you can scan every blog in your network for malware with one click. If one of your customers posts a page or post with a known malware URL that threatens your whole domain with being
|
157 |
|
158 |
= What support options are available for Wordfence users? =
|
159 |
|
@@ -183,6 +183,16 @@ Secure your website with Wordfence.
|
|
183 |
|
184 |
== Changelog ==
|
185 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
186 |
= 7.4.12 - October 21, 2020 =
|
187 |
|
188 |
* Improvement: Initial integration of i18n in Wordfence.
|
@@ -193,7 +203,7 @@ Secure your website with Wordfence.
|
|
193 |
* Fix: Removed new scan issues when WordPress update occurs mid-scan.
|
194 |
* Fix: Specified category when saving `whitelistedServiceIPs` to WAF storage engine.
|
195 |
* Fix: Removed localhost IP for auto-update email alerts.
|
196 |
-
* Fix: Fixed broken message in Live Traffic with MySQLi storage engine for
|
197 |
* Fix: Removed optional parameter values for PHP 8 compatibility.
|
198 |
|
199 |
= 7.4.11 - August 27, 2020 =
|
@@ -299,7 +309,7 @@ Secure your website with Wordfence.
|
|
299 |
|
300 |
= 7.3.6 - July 31, 2019 =
|
301 |
* Improvement: Multiple "php.ini file in core directory" issues are now consolidated into a single issue for clearer scan results.
|
302 |
-
* Improvement: The AJAX error detection for false positive WAF blocks now better detects and processes the response for presenting the
|
303 |
* Improvement: Added overdue cron detection and highlighting to diagnostics to help identify issues.
|
304 |
* Improvement: Added the necessary directives to exclude backwards compatibility code from creating warnings with phpcs for future compatibility with WP Tide.
|
305 |
* Improvement: Normalized all PHP require/include calls to use full paths for better code quality.
|
@@ -318,7 +328,7 @@ Secure your website with Wordfence.
|
|
318 |
* Improvement: Reworked the reCAPTCHA implementation to trigger the token check on login/registration form submission to avoid the token expiring.
|
319 |
* Fix: Widened the reCAPTCHA key fields to allow the full keys to be visible.
|
320 |
* Fix: Fixed encoding of the ellipsis character when reporting malware finds.
|
321 |
-
* Fix: Disabling the IP
|
322 |
* Fix: Addressed an issue when outbound UDP connections are blocked where the NTP check could log an error.
|
323 |
* Fix: Added handling for reCAPTCHA's JavaScript failing to load, which previously blocked logging in.
|
324 |
* Fix: Fixed the functionality of the button to send 2FA grace period notifications.
|
@@ -374,7 +384,7 @@ Secure your website with Wordfence.
|
|
374 |
|
375 |
= 7.2.3 - February 28, 2019 =
|
376 |
* Improvement: Country names are now shown instead of two letter codes where appropriate.
|
377 |
-
* Improvement: Updated the service
|
378 |
* Improvement: Added alerting for when the WAF is disabled for any reason.
|
379 |
* Improvement: Additional alerting and troubleshooting steps for WAF configuration issues.
|
380 |
* Change: Live Traffic human/bot status will additionally be based on the browscap record in security-only mode.
|
@@ -393,7 +403,7 @@ Secure your website with Wordfence.
|
|
393 |
= 7.2.1 - February 5, 2019 =
|
394 |
* Improvement: Integrated Wordfence with Wordfence Central, a new service allowing you to manage multiple Wordfence installations from a single interface.
|
395 |
* Improvement: Added a help link to the mode display when a host disabling Live Traffic is active.
|
396 |
-
* Improvement: Added an option for
|
397 |
* Fix: Enqueued fonts used in admin notices on all admin pages.
|
398 |
* Fix: Change false positive user-reports link to use https.
|
399 |
* Fix: Fix reference to non-existent function when registering menus.
|
@@ -404,7 +414,7 @@ Secure your website with Wordfence.
|
|
404 |
= 7.1.19 - January 8, 2019 =
|
405 |
* Improvement: Speed optimizations for WAF rule compilation.
|
406 |
* Improvement: Added Kosovo to country blocking.
|
407 |
-
* Improvement: Additional flexibility for
|
408 |
* Fix: Added compensation for really long file lists in the "Exclude files from scan" setting.
|
409 |
* Fix: Fixed an issue where the GeoIP database update check would never get marked as completed.
|
410 |
* Fix: Login credentials passed as arrays no longer trigger a PHP notice from our filters.
|
@@ -433,7 +443,7 @@ Secure your website with Wordfence.
|
|
433 |
* Fix: PHP 7.3 syntax compatibility fixes.
|
434 |
|
435 |
= 7.1.16 - October 16, 2018 =
|
436 |
-
* Improvement: Service
|
437 |
* Improvement: Updated bundled GeoIP database.
|
438 |
* Change: Removed the "Disable Wordfence Cookies" option as we've removed all cookies it affected.
|
439 |
* Change: Updates that refresh country statistics are more efficient and now only affect the most recent records.
|
@@ -454,7 +464,7 @@ Secure your website with Wordfence.
|
|
454 |
* Fix: Wordfence crons will now automatically reschedule if missing for any reason.
|
455 |
* Fix: Fixed an issue where the block counts and total IPs blocked values on the dashboard might not agree.
|
456 |
* Fix: Corrected the message shown on Live Traffic when a country blocking bypass URL is used.
|
457 |
-
* Fix: Removed extra spacing in the example ranges for "
|
458 |
|
459 |
= 7.1.12 - September 12, 2018 =
|
460 |
* Improvement: Updated bundled GeoIP database.
|
@@ -528,7 +538,7 @@ Secure your website with Wordfence.
|
|
528 |
* Improvement: The list of blocks now shows the most recently-added blocks at the top by default.
|
529 |
* Improvement: Added better table status display to Diagnostics to help with debugging.
|
530 |
* Improvement: Added deferred loading to Live Traffic avatars to improve performance with some plugins.
|
531 |
-
* Improvement: The server's own IP is now automatically
|
532 |
* Fix: Added a workaround to Live Traffic human/bot detection to compensate for other scripts that modify our event handlers.
|
533 |
* Fix: Fixed an error with Live Traffic human/bot detection when plugins change the load order.
|
534 |
* Fix: Fixed auto-enabling of some controls when pasting values.
|
@@ -570,7 +580,7 @@ Secure your website with Wordfence.
|
|
570 |
* Improvement: readme.html and wp-config-sample.php are no longer scanned for changes due to differences between languages (malware signatures still run).
|
571 |
* Improvement: When the license status changes, it now triggers a fresh pull of the WAF rules.
|
572 |
* Improvement: Added dedicated messaging for leftover WordPress core files that were not fully removed during upgrade.
|
573 |
-
* Improvement: Improved labeling in Live Traffic for hits blocked by the real-time IP
|
574 |
* Improvement: Added forced wrapping to the file paths in the activity report email to avoid scroll bar overlap making them unreadable.
|
575 |
* Improvement: Updated the bundled GeoIP database.
|
576 |
* Improvement: Updated the bundled browscap database.
|
@@ -605,7 +615,7 @@ Secure your website with Wordfence.
|
|
605 |
* Improvement: Better messaging about the scan options that need to be enabled for free installations to achieve 100%.
|
606 |
* Improvement: The country blocking selection drawer behavior has been changed to now allow saving directly from it.
|
607 |
* Improvement: Increased the textarea size for the advanced firewall options to make editing easier.
|
608 |
-
* Improvement: The URL
|
609 |
* Change: Adjusted messaging when blocks are loading.
|
610 |
* Change: Wording change for the option "Maximum execution time for each stage".
|
611 |
* Change: Permanent blocks now display "Permanent" rather than "Indefinite" for the expiration for consistency.
|
@@ -703,17 +713,17 @@ Secure your website with Wordfence.
|
|
703 |
* Improvement: New scan stage includes a new check for TrafficTrade malware.
|
704 |
* Improvement: Reduced net memory usage during forked scan stages by up to 50%.
|
705 |
* Improvement: Reduced the number of queries executed for some configuration options.
|
706 |
-
* Improvement: Modified the default
|
707 |
* Fix: Synchronized the scan option names between the main options page and smaller scan options page.
|
708 |
* Fix: Fixed CSS positioning issue for dashboard metabox with IPv6.
|
709 |
* Fix: Fixed a compatibility issue with determining the site's home_url when WPML is installed.
|
710 |
|
711 |
= 6.3.15 - July 24, 2017 =
|
712 |
* Improvement: Reduced memory usage on scan forking and during the known files scan stage.
|
713 |
-
* Improvement: Added additional scan options to allow for disabling the
|
714 |
* Improvement: Added a Wordfence Application Firewall code block for the lsapi variant of LiteSpeed.
|
715 |
* Improvement: Updated the bundled GeoIP database.
|
716 |
-
* Fix: Added a validation check to IP range
|
717 |
|
718 |
= 6.3.14 - July 17, 2017 =
|
719 |
* Improvement: Introduced smart scan distribution. Scan times are now distributed intelligently across servers to provide consistent server performance.
|
@@ -745,7 +755,7 @@ Secure your website with Wordfence.
|
|
745 |
* Improvement: Added an anti-crawler feature to the lockout page to avoid crawlers erroneously following the unlock link.
|
746 |
* Improvement: The live traffic "Group By" options now dynamically show the results in a more useful format depending on the option selected.
|
747 |
* Improvement: Improved the unknown core files check to include all extra files in core locations regardless of whether or not the "Scan images, binary, and other files as if they were executable" option is on.
|
748 |
-
* Improvement: Better wording for the
|
749 |
* Fix: Addressed a performance issue on databases with tens of thousands of tables when trying to load the diagnostics page.
|
750 |
* Fix: All dashboard and activity report email times are now displayed in the time zone configured for the WordPress installation.
|
751 |
|
@@ -764,7 +774,7 @@ Secure your website with Wordfence.
|
|
764 |
* Fix: Adjusted the changelog link in the scan results email to work for the new wordpress.org repository.
|
765 |
* Fix: Fixed some broken links in the activity summary email.
|
766 |
* Fix: Fixed a typo in the scan summary text.
|
767 |
-
* Fix: The increased attack rate emails now correctly identify
|
768 |
* Fix: Fixed an issue with the dashboard where it could show the last scan failed when one has never ran.
|
769 |
* Fix: Brute force records are now coalesced when possible prior to sending.
|
770 |
|
@@ -780,7 +790,7 @@ Secure your website with Wordfence.
|
|
780 |
* Change: Changed how administrator accounts are detected to compensate for managed WordPress sites that do not have the standard permissions.
|
781 |
* Change: The table list on the diagnostics page is now limited in length to avoid being exceedingly large on big multisite installations.
|
782 |
* Fix: Improved updating of WAF config values to minimize writing to disk.
|
783 |
-
* Fix: The
|
784 |
* Fix: Added error suppression to the WAF attack data functions to prevent corrupt records from breaking the no-cache headers.
|
785 |
* Fix: Fixed some incorrect documentation links on the diagnostics page.
|
786 |
* Fix: Fixed a typo in a constant on the diagnostics page.
|
@@ -789,13 +799,13 @@ Secure your website with Wordfence.
|
|
789 |
* Fix: Addressed an issue that could cause scans to time out on sites with tens of thousands of potential URLs in files, comments, and posts.
|
790 |
|
791 |
= 6.3.7 - April 25, 2017 =
|
792 |
-
* Improvement: All URLs are now checked against the Wordfence Domain
|
793 |
* Improvement: Better page load performance for multisite installations with thousands of tables.
|
794 |
* Improvement: Updated the bundled GeoIP database.
|
795 |
-
* Improvement: Integrated
|
796 |
* Fix: Added locking to the automatic update process to ensure non-standard crons don't break Wordfence.
|
797 |
* Fix: Fixed an activation error on multisite installations on very old WordPress versions.
|
798 |
-
* Fix: Adjusted the behavior of the
|
799 |
|
800 |
= 6.3.6 - April 5, 2017 =
|
801 |
* Improvement: Optimized the malware signature scan to reduce memory usage.
|
@@ -821,15 +831,15 @@ Secure your website with Wordfence.
|
|
821 |
* Improvement: Changes to readme.txt and readme.md are now ignored by the scanner unless high sensitivity is on.
|
822 |
* Fix: Addressed an issue with multisite installations where they would execute the upgrade handler for each subsite.
|
823 |
* Fix: Added additional error handling to the blocked IP list to avoid outputting notices when another plugin resets the error handler.
|
824 |
-
* Fix: Made the description in the summary email for blocks resulting from the
|
825 |
* Fix: Updated the copyright date on several pages.
|
826 |
* Fix: Fixed incorrect wrapping of the Group by field on the live traffic page.
|
827 |
|
828 |
= 6.3.4 - March 13, 2017 =
|
829 |
-
* Improvement: Added a path for people blocked by the IP
|
830 |
|
831 |
= 6.3.3 - March 9, 2017 =
|
832 |
-
* New: Malicious IPs are now preemptively blocked by a regularly-updated
|
833 |
* Improvement: Better layout and display for mobile screen sizes.
|
834 |
* Improvement: Dashboard chart data is now updated more frequently.
|
835 |
* Fix: Fixed database errors on notifications page on multisite installations.
|
@@ -905,7 +915,7 @@ Secure your website with Wordfence.
|
|
905 |
* Improvement: Added additional contextual help links.
|
906 |
* Improvement: Significant performance improvement for determining the connecting IP.
|
907 |
* Improvement: Better messaging for two-factor recovery codes.
|
908 |
-
* Fix: Adjusted message when trying to block an IP in the
|
909 |
* Fix: Error log download links now work on Windows servers.
|
910 |
* Fix: Avoid running out of memory when viewing very large activity logs.
|
911 |
* Fix: Fixed warning that could be logged when following an unlock email link.
|
@@ -939,14 +949,14 @@ Secure your website with Wordfence.
|
|
939 |
* Improvement: Reworked blocking for IP ranges, country blocking, and direct IP blocking to minimize server impact when under attack.
|
940 |
* Improvement: Live traffic better indicates the action taken by country blocking when it redirects a visitor.
|
941 |
* Improvement: Added support for finding server logs to the Diagnostics page to help with troubleshooting.
|
942 |
-
* Improvement:
|
943 |
* Improvement: Updated GeoIP database.
|
944 |
* Improvement: Disabling Wordfence now sends an alert.
|
945 |
* Improvement: Improved detection for uploaded PHP content in the firewall.
|
946 |
* Fix: Eliminated memory-related errors resulting from the scan on sites with very large numbers of issues and low memory.
|
947 |
* Fix: Fixed admin page layout for sites using RTL languages.
|
948 |
* Fix: Reduced overhead of the dashboard widget.
|
949 |
-
* Fix: Improved performance of checking for
|
950 |
* Fix: Changes to the default plugin hello.php are now detected correctly in scans.
|
951 |
* Fix: Fixed IPv6 warning in the dashboard widget.
|
952 |
|
@@ -990,14 +1000,14 @@ Secure your website with Wordfence.
|
|
990 |
* Improvement: Added Web Application Firewall activity to Wordfence summary email.
|
991 |
* Fix: Now using 503 response code in the page displayed when an IP is locked out.
|
992 |
* Fix: `wflogs` directory is now correctly removed on uninstall.
|
993 |
-
* Fix: Fixed recently introduced bug which caused the
|
994 |
* Fix: Added try/catch to uncaught exception thrown when pinging the API key.
|
995 |
* Improvement: Improved performance of the Live Traffic page in Firefox.
|
996 |
* Improvement: Updated GeoIP database.
|
997 |
|
998 |
= 6.1.15 - August 25, 2016 =
|
999 |
* Improvement: Removed file-based config caching, added support for caching via WordPress's object cache.
|
1000 |
-
* Improvement:
|
1001 |
* Fix: Notify users if suPHP_ConfigPath is in their WAF setup, and prompt to update Extended Protection.
|
1002 |
* Fix: Fixed bug with allowing logins on admin accounts that are not fully activated with invalid 2FA codes when 2FA is required for all admins.
|
1003 |
* Fix: Removed usage of `wp_get_sites()` which was deprecated in WordPress 4.6.
|
@@ -1021,7 +1031,7 @@ Secure your website with Wordfence.
|
|
1021 |
* Fix: Fixed bug with specific Advanced Blocking user-agent patterns causing 500 errors.
|
1022 |
* Improvement: Plugin updates are now only a critical issue if there is a security related fix, and a warning otherwise. A link to the changelog is included.
|
1023 |
* Fix: Added group writable permissions to Firewall's configuration files.
|
1024 |
-
* Improvement: Changed
|
1025 |
* Fix: Move flags and logo served from wordfence.com over to locally hosted files.
|
1026 |
* Fix: Fixed issues with scan in WordPress 4.6 beta.
|
1027 |
* Fix: Fixed bug where Firewall rules could be missing on some sites running IIS.
|
@@ -1043,7 +1053,7 @@ Secure your website with Wordfence.
|
|
1043 |
* Improvement: Added a method to view which files are currently used for WAF and to remove without reinstalling Wordfence.
|
1044 |
* Improvement: Changed rule compilation to use atomic writes.
|
1045 |
* Improvement: Removed security levels from Options page.
|
1046 |
-
* Improvement: Added option to disable ajaxwatcher (for
|
1047 |
|
1048 |
= 6.1.8 - May 26, 2016 =
|
1049 |
* Fix: Change wfConfig::set_ser to split large objects into multiple queries.
|
@@ -1070,7 +1080,7 @@ Secure your website with Wordfence.
|
|
1070 |
* Fix: Fixed bug with 2FA not properly handling email address login.
|
1071 |
* Fix: Show logins/logouts when Live Traffic is disabled.
|
1072 |
* Fix: Fixed bug with PCRE versions < 7.0 (repeated subpattern is too long).
|
1073 |
-
* Fix: Now able to delete
|
1074 |
* Improvement: Reduced 2FA activation code to expire after 30 days.
|
1075 |
* Improvement: Live Traffic now only shows verified Googlebot under Google Crawler filter for new visits.
|
1076 |
* Improvement: Adjusted permissions on Firewall log/config files to be 0640.
|
@@ -1088,7 +1098,7 @@ Secure your website with Wordfence.
|
|
1088 |
|
1089 |
= 6.1.4 - April 20, 2016 =
|
1090 |
* Fix: Fixed potential bug with 'stored data not found after a fork. Got type: boolean'.
|
1091 |
-
* Improvement: Added bulk actions and filters to WAF
|
1092 |
* Improvement: Added a check while in learning mode to verify the response is not 404 before whitelising.
|
1093 |
* Fix: Added index to attackLogTime. wfHits trimmed on runInstall now.
|
1094 |
* Fix: Fixed attack data sync for hosts that cannot use wp-cron.
|
@@ -1112,7 +1122,7 @@ Secure your website with Wordfence.
|
|
1112 |
* Fix: Fixed bug with multiple API calls to 'get_known_files'.
|
1113 |
|
1114 |
= 6.1.2 - April 12, 2016 =
|
1115 |
-
* Fix: Fixed fatal error when using a
|
1116 |
|
1117 |
= 6.1.1 - April 12, 2016 =
|
1118 |
* Enhancement: Added Web Application Firewall
|
1 |
=== Wordfence Security - Firewall & Malware Scan ===
|
2 |
Contributors: mmaunder, wfryan, wfmatt, wfmattr
|
3 |
+
Tags: security, firewall, malware scanner, web application firewall, two factor authentication, block hackers, country blocking, clean hacked site, blocklist, waf, login security
|
4 |
Requires at least: 3.9
|
5 |
Requires PHP: 5.3
|
6 |
+
Tested up to: 5.7
|
7 |
+
Stable tag: 7.4.14
|
8 |
|
9 |
Secure your website with the most comprehensive WordPress security plugin. Firewall, malware scan, blocking, live traffic, login security & more.
|
10 |
|
17 |
#### WORDPRESS FIREWALL
|
18 |
* Web Application Firewall identifies and blocks malicious traffic. Built and maintained by a large team focused 100% on WordPress security.
|
19 |
* [Premium] Real-time firewall rule and malware signature updates via the Threat Defense Feed (free version is delayed by 30 days).
|
20 |
+
* [Premium] Real-time IP Blocklist blocks all requests from the most malicious IPs, protecting your site while reducing load.
|
21 |
* Protects your site at the endpoint, enabling deep integration with WordPress. Unlike cloud alternatives does not break encryption, cannot be bypassed and cannot leak data.
|
22 |
* Integrated malware scanner blocks requests that include malicious code or content.
|
23 |
* Protection from brute force attacks by limiting login attempts.
|
29 |
* Repair files that have changed by overwriting them with a pristine, original version. Delete any files that don’t belong easily within the Wordfence interface.
|
30 |
* Checks your site for known security vulnerabilities and alerts you to any issues. Also alerts you to potential security issues when a plugin has been closed or abandoned.
|
31 |
* Checks your content safety by scanning file contents, posts and comments for dangerous URLs and suspicious content.
|
32 |
+
* [Premium] Checks to see if your site or IP have been blocklisted for malicious activity, generating spam or other security issue.
|
33 |
|
34 |
#### LOGIN SECURITY
|
35 |
* Two-factor authentication (2FA), one of the most secure forms of remote system authentication available via any TOTP-based authenticator app or service.
|
82 |
|
83 |
= What features does Wordfence Premium enable? =
|
84 |
|
85 |
+
We offer a Premium API key that gives you real-time updates to the Threat Defense Feed which includes a real-time IP blocklist, firewall rules, and malware signatures. Premium support, country blocking, more frequent scans, and spam and spamvertising checks are also included. [Click here to sign-up for Wordfence Premium now](http://www.wordfence.com/) or simply install Wordfence free and start protecting your website.
|
86 |
|
87 |
= How does the Wordfence WordPress Firewall protect websites? =
|
88 |
|
153 |
|
154 |
= Does Wordfence Security support Multi-Site installations? =
|
155 |
|
156 |
+
Yes. WordPress Multi-Site is fully supported. Using Wordfence you can scan every blog in your network for malware with one click. If one of your customers posts a page or post with a known malware URL that threatens your whole domain with being blocklisted by Google, we will alert you in the next scan.
|
157 |
|
158 |
= What support options are available for Wordfence users? =
|
159 |
|
183 |
|
184 |
== Changelog ==
|
185 |
|
186 |
+
= 7.4.14 - December 3, 2020 =
|
187 |
+
|
188 |
+
* Improvement: Added option to disable application passwords.
|
189 |
+
* Improvement: Updated site cleaning callout with 1-year guarantee.
|
190 |
+
* Improvement: Upgraded sodium_compat library to 1.13.0.
|
191 |
+
* Improvement: Replaced the terms whitelist and blacklist with allowlist and blocklist.
|
192 |
+
* Improvement: Made a number of WordPress 5.6 and jQuery 3.x compatibility improvements.
|
193 |
+
* Improvement: Made a number of PHP8 compatilibility improvements.
|
194 |
+
* Improvement: Added dismissable notice informing users of possible PHP8 compatibility issues.
|
195 |
+
|
196 |
= 7.4.12 - October 21, 2020 =
|
197 |
|
198 |
* Improvement: Initial integration of i18n in Wordfence.
|
203 |
* Fix: Removed new scan issues when WordPress update occurs mid-scan.
|
204 |
* Fix: Specified category when saving `whitelistedServiceIPs` to WAF storage engine.
|
205 |
* Fix: Removed localhost IP for auto-update email alerts.
|
206 |
+
* Fix: Fixed broken message in Live Traffic with MySQLi storage engine for blocklisted hits.
|
207 |
* Fix: Removed optional parameter values for PHP 8 compatibility.
|
208 |
|
209 |
= 7.4.11 - August 27, 2020 =
|
309 |
|
310 |
= 7.3.6 - July 31, 2019 =
|
311 |
* Improvement: Multiple "php.ini file in core directory" issues are now consolidated into a single issue for clearer scan results.
|
312 |
+
* Improvement: The AJAX error detection for false positive WAF blocks now better detects and processes the response for presenting the allowlisting prompt.
|
313 |
* Improvement: Added overdue cron detection and highlighting to diagnostics to help identify issues.
|
314 |
* Improvement: Added the necessary directives to exclude backwards compatibility code from creating warnings with phpcs for future compatibility with WP Tide.
|
315 |
* Improvement: Normalized all PHP require/include calls to use full paths for better code quality.
|
328 |
* Improvement: Reworked the reCAPTCHA implementation to trigger the token check on login/registration form submission to avoid the token expiring.
|
329 |
* Fix: Widened the reCAPTCHA key fields to allow the full keys to be visible.
|
330 |
* Fix: Fixed encoding of the ellipsis character when reporting malware finds.
|
331 |
+
* Fix: Disabling the IP blocklist once again correctly clears the block cache.
|
332 |
* Fix: Addressed an issue when outbound UDP connections are blocked where the NTP check could log an error.
|
333 |
* Fix: Added handling for reCAPTCHA's JavaScript failing to load, which previously blocked logging in.
|
334 |
* Fix: Fixed the functionality of the button to send 2FA grace period notifications.
|
384 |
|
385 |
= 7.2.3 - February 28, 2019 =
|
386 |
* Improvement: Country names are now shown instead of two letter codes where appropriate.
|
387 |
+
* Improvement: Updated the service allowlist to reflect additions to the Facebook IP ranges.
|
388 |
* Improvement: Added alerting for when the WAF is disabled for any reason.
|
389 |
* Improvement: Additional alerting and troubleshooting steps for WAF configuration issues.
|
390 |
* Change: Live Traffic human/bot status will additionally be based on the browscap record in security-only mode.
|
403 |
= 7.2.1 - February 5, 2019 =
|
404 |
* Improvement: Integrated Wordfence with Wordfence Central, a new service allowing you to manage multiple Wordfence installations from a single interface.
|
405 |
* Improvement: Added a help link to the mode display when a host disabling Live Traffic is active.
|
406 |
+
* Improvement: Added an option for allowlisting ManageWP in "Allowlisted Services".
|
407 |
* Fix: Enqueued fonts used in admin notices on all admin pages.
|
408 |
* Fix: Change false positive user-reports link to use https.
|
409 |
* Fix: Fix reference to non-existent function when registering menus.
|
414 |
= 7.1.19 - January 8, 2019 =
|
415 |
* Improvement: Speed optimizations for WAF rule compilation.
|
416 |
* Improvement: Added Kosovo to country blocking.
|
417 |
+
* Improvement: Additional flexibility for allowlist rules.
|
418 |
* Fix: Added compensation for really long file lists in the "Exclude files from scan" setting.
|
419 |
* Fix: Fixed an issue where the GeoIP database update check would never get marked as completed.
|
420 |
* Fix: Login credentials passed as arrays no longer trigger a PHP notice from our filters.
|
443 |
* Fix: PHP 7.3 syntax compatibility fixes.
|
444 |
|
445 |
= 7.1.16 - October 16, 2018 =
|
446 |
+
* Improvement: Service allowlisting can now be selectively toggled on or off per service.
|
447 |
* Improvement: Updated bundled GeoIP database.
|
448 |
* Change: Removed the "Disable Wordfence Cookies" option as we've removed all cookies it affected.
|
449 |
* Change: Updates that refresh country statistics are more efficient and now only affect the most recent records.
|
464 |
* Fix: Wordfence crons will now automatically reschedule if missing for any reason.
|
465 |
* Fix: Fixed an issue where the block counts and total IPs blocked values on the dashboard might not agree.
|
466 |
* Fix: Corrected the message shown on Live Traffic when a country blocking bypass URL is used.
|
467 |
+
* Fix: Removed extra spacing in the example ranges for "Allowlisted IP addresses that bypass all rules"
|
468 |
|
469 |
= 7.1.12 - September 12, 2018 =
|
470 |
* Improvement: Updated bundled GeoIP database.
|
538 |
* Improvement: The list of blocks now shows the most recently-added blocks at the top by default.
|
539 |
* Improvement: Added better table status display to Diagnostics to help with debugging.
|
540 |
* Improvement: Added deferred loading to Live Traffic avatars to improve performance with some plugins.
|
541 |
+
* Improvement: The server's own IP is now automatically allowlisted for known safe requests.
|
542 |
* Fix: Added a workaround to Live Traffic human/bot detection to compensate for other scripts that modify our event handlers.
|
543 |
* Fix: Fixed an error with Live Traffic human/bot detection when plugins change the load order.
|
544 |
* Fix: Fixed auto-enabling of some controls when pasting values.
|
580 |
* Improvement: readme.html and wp-config-sample.php are no longer scanned for changes due to differences between languages (malware signatures still run).
|
581 |
* Improvement: When the license status changes, it now triggers a fresh pull of the WAF rules.
|
582 |
* Improvement: Added dedicated messaging for leftover WordPress core files that were not fully removed during upgrade.
|
583 |
+
* Improvement: Improved labeling in Live Traffic for hits blocked by the real-time IP blocklist.
|
584 |
* Improvement: Added forced wrapping to the file paths in the activity report email to avoid scroll bar overlap making them unreadable.
|
585 |
* Improvement: Updated the bundled GeoIP database.
|
586 |
* Improvement: Updated the bundled browscap database.
|
615 |
* Improvement: Better messaging about the scan options that need to be enabled for free installations to achieve 100%.
|
616 |
* Improvement: The country blocking selection drawer behavior has been changed to now allow saving directly from it.
|
617 |
* Improvement: Increased the textarea size for the advanced firewall options to make editing easier.
|
618 |
+
* Improvement: The URL blocklist check now includes additional variants in some checks to more accurately match.
|
619 |
* Change: Adjusted messaging when blocks are loading.
|
620 |
* Change: Wording change for the option "Maximum execution time for each stage".
|
621 |
* Change: Permanent blocks now display "Permanent" rather than "Indefinite" for the expiration for consistency.
|
713 |
* Improvement: New scan stage includes a new check for TrafficTrade malware.
|
714 |
* Improvement: Reduced net memory usage during forked scan stages by up to 50%.
|
715 |
* Improvement: Reduced the number of queries executed for some configuration options.
|
716 |
+
* Improvement: Modified the default allowlisting to include the new core AJAX action in WordPress 4.8.1.
|
717 |
* Fix: Synchronized the scan option names between the main options page and smaller scan options page.
|
718 |
* Fix: Fixed CSS positioning issue for dashboard metabox with IPv6.
|
719 |
* Fix: Fixed a compatibility issue with determining the site's home_url when WPML is installed.
|
720 |
|
721 |
= 6.3.15 - July 24, 2017 =
|
722 |
* Improvement: Reduced memory usage on scan forking and during the known files scan stage.
|
723 |
+
* Improvement: Added additional scan options to allow for disabling the blocklist checks while still allowing malware scanning to be enabled.
|
724 |
* Improvement: Added a Wordfence Application Firewall code block for the lsapi variant of LiteSpeed.
|
725 |
* Improvement: Updated the bundled GeoIP database.
|
726 |
+
* Fix: Added a validation check to IP range allowlisting to avoid log warnings if they're malformed.
|
727 |
|
728 |
= 6.3.14 - July 17, 2017 =
|
729 |
* Improvement: Introduced smart scan distribution. Scan times are now distributed intelligently across servers to provide consistent server performance.
|
755 |
* Improvement: Added an anti-crawler feature to the lockout page to avoid crawlers erroneously following the unlock link.
|
756 |
* Improvement: The live traffic "Group By" options now dynamically show the results in a more useful format depending on the option selected.
|
757 |
* Improvement: Improved the unknown core files check to include all extra files in core locations regardless of whether or not the "Scan images, binary, and other files as if they were executable" option is on.
|
758 |
+
* Improvement: Better wording for the allowlisting IP range error message.
|
759 |
* Fix: Addressed a performance issue on databases with tens of thousands of tables when trying to load the diagnostics page.
|
760 |
* Fix: All dashboard and activity report email times are now displayed in the time zone configured for the WordPress installation.
|
761 |
|
774 |
* Fix: Adjusted the changelog link in the scan results email to work for the new wordpress.org repository.
|
775 |
* Fix: Fixed some broken links in the activity summary email.
|
776 |
* Fix: Fixed a typo in the scan summary text.
|
777 |
+
* Fix: The increased attack rate emails now correctly identify blocklist blocks.
|
778 |
* Fix: Fixed an issue with the dashboard where it could show the last scan failed when one has never ran.
|
779 |
* Fix: Brute force records are now coalesced when possible prior to sending.
|
780 |
|
790 |
* Change: Changed how administrator accounts are detected to compensate for managed WordPress sites that do not have the standard permissions.
|
791 |
* Change: The table list on the diagnostics page is now limited in length to avoid being exceedingly large on big multisite installations.
|
792 |
* Fix: Improved updating of WAF config values to minimize writing to disk.
|
793 |
+
* Fix: The blocklist's blocked IP records are now correctly trimmed when expired.
|
794 |
* Fix: Added error suppression to the WAF attack data functions to prevent corrupt records from breaking the no-cache headers.
|
795 |
* Fix: Fixed some incorrect documentation links on the diagnostics page.
|
796 |
* Fix: Fixed a typo in a constant on the diagnostics page.
|
799 |
* Fix: Addressed an issue that could cause scans to time out on sites with tens of thousands of potential URLs in files, comments, and posts.
|
800 |
|
801 |
= 6.3.7 - April 25, 2017 =
|
802 |
+
* Improvement: All URLs are now checked against the Wordfence Domain Blocklist in addition to Google's.
|
803 |
* Improvement: Better page load performance for multisite installations with thousands of tables.
|
804 |
* Improvement: Updated the bundled GeoIP database.
|
805 |
+
* Improvement: Integrated blocklist blocking statistics into the dashboard for Premium users.
|
806 |
* Fix: Added locking to the automatic update process to ensure non-standard crons don't break Wordfence.
|
807 |
* Fix: Fixed an activation error on multisite installations on very old WordPress versions.
|
808 |
+
* Fix: Adjusted the behavior of the blocklist toggle for Free users.
|
809 |
|
810 |
= 6.3.6 - April 5, 2017 =
|
811 |
* Improvement: Optimized the malware signature scan to reduce memory usage.
|
831 |
* Improvement: Changes to readme.txt and readme.md are now ignored by the scanner unless high sensitivity is on.
|
832 |
* Fix: Addressed an issue with multisite installations where they would execute the upgrade handler for each subsite.
|
833 |
* Fix: Added additional error handling to the blocked IP list to avoid outputting notices when another plugin resets the error handler.
|
834 |
+
* Fix: Made the description in the summary email for blocks resulting from the blocklist more descriptive.
|
835 |
* Fix: Updated the copyright date on several pages.
|
836 |
* Fix: Fixed incorrect wrapping of the Group by field on the live traffic page.
|
837 |
|
838 |
= 6.3.4 - March 13, 2017 =
|
839 |
+
* Improvement: Added a path for people blocked by the IP blocklist (Premium Feature) to report false positives.
|
840 |
|
841 |
= 6.3.3 - March 9, 2017 =
|
842 |
+
* New: Malicious IPs are now preemptively blocked by a regularly-updated blocklist. [Premium Feature]
|
843 |
* Improvement: Better layout and display for mobile screen sizes.
|
844 |
* Improvement: Dashboard chart data is now updated more frequently.
|
845 |
* Fix: Fixed database errors on notifications page on multisite installations.
|
915 |
* Improvement: Added additional contextual help links.
|
916 |
* Improvement: Significant performance improvement for determining the connecting IP.
|
917 |
* Improvement: Better messaging for two-factor recovery codes.
|
918 |
+
* Fix: Adjusted message when trying to block an IP in the allowlist.
|
919 |
* Fix: Error log download links now work on Windows servers.
|
920 |
* Fix: Avoid running out of memory when viewing very large activity logs.
|
921 |
* Fix: Fixed warning that could be logged when following an unlock email link.
|
949 |
* Improvement: Reworked blocking for IP ranges, country blocking, and direct IP blocking to minimize server impact when under attack.
|
950 |
* Improvement: Live traffic better indicates the action taken by country blocking when it redirects a visitor.
|
951 |
* Improvement: Added support for finding server logs to the Diagnostics page to help with troubleshooting.
|
952 |
+
* Improvement: Allowlisted StatusCake IP addresses.
|
953 |
* Improvement: Updated GeoIP database.
|
954 |
* Improvement: Disabling Wordfence now sends an alert.
|
955 |
* Improvement: Improved detection for uploaded PHP content in the firewall.
|
956 |
* Fix: Eliminated memory-related errors resulting from the scan on sites with very large numbers of issues and low memory.
|
957 |
* Fix: Fixed admin page layout for sites using RTL languages.
|
958 |
* Fix: Reduced overhead of the dashboard widget.
|
959 |
+
* Fix: Improved performance of checking for Allowlisted IPs.
|
960 |
* Fix: Changes to the default plugin hello.php are now detected correctly in scans.
|
961 |
* Fix: Fixed IPv6 warning in the dashboard widget.
|
962 |
|
1000 |
* Improvement: Added Web Application Firewall activity to Wordfence summary email.
|
1001 |
* Fix: Now using 503 response code in the page displayed when an IP is locked out.
|
1002 |
* Fix: `wflogs` directory is now correctly removed on uninstall.
|
1003 |
+
* Fix: Fixed recently introduced bug which caused the Allowlisted 404 URLs feature to no longer work.
|
1004 |
* Fix: Added try/catch to uncaught exception thrown when pinging the API key.
|
1005 |
* Improvement: Improved performance of the Live Traffic page in Firefox.
|
1006 |
* Improvement: Updated GeoIP database.
|
1007 |
|
1008 |
= 6.1.15 - August 25, 2016 =
|
1009 |
* Improvement: Removed file-based config caching, added support for caching via WordPress's object cache.
|
1010 |
+
* Improvement: Allowlisted Uptime Robot's IP range.
|
1011 |
* Fix: Notify users if suPHP_ConfigPath is in their WAF setup, and prompt to update Extended Protection.
|
1012 |
* Fix: Fixed bug with allowing logins on admin accounts that are not fully activated with invalid 2FA codes when 2FA is required for all admins.
|
1013 |
* Fix: Removed usage of `wp_get_sites()` which was deprecated in WordPress 4.6.
|
1031 |
* Fix: Fixed bug with specific Advanced Blocking user-agent patterns causing 500 errors.
|
1032 |
* Improvement: Plugin updates are now only a critical issue if there is a security related fix, and a warning otherwise. A link to the changelog is included.
|
1033 |
* Fix: Added group writable permissions to Firewall's configuration files.
|
1034 |
+
* Improvement: Changed allowlist entry area to textbox on options page.
|
1035 |
* Fix: Move flags and logo served from wordfence.com over to locally hosted files.
|
1036 |
* Fix: Fixed issues with scan in WordPress 4.6 beta.
|
1037 |
* Fix: Fixed bug where Firewall rules could be missing on some sites running IIS.
|
1053 |
* Improvement: Added a method to view which files are currently used for WAF and to remove without reinstalling Wordfence.
|
1054 |
* Improvement: Changed rule compilation to use atomic writes.
|
1055 |
* Improvement: Removed security levels from Options page.
|
1056 |
+
* Improvement: Added option to disable ajaxwatcher (for allowlisting only for Admins) on the front end.
|
1057 |
|
1058 |
= 6.1.8 - May 26, 2016 =
|
1059 |
* Fix: Change wfConfig::set_ser to split large objects into multiple queries.
|
1080 |
* Fix: Fixed bug with 2FA not properly handling email address login.
|
1081 |
* Fix: Show logins/logouts when Live Traffic is disabled.
|
1082 |
* Fix: Fixed bug with PCRE versions < 7.0 (repeated subpattern is too long).
|
1083 |
+
* Fix: Now able to delete allowlisted URL/params containing ampersands and non-UTF8 characters.
|
1084 |
* Improvement: Reduced 2FA activation code to expire after 30 days.
|
1085 |
* Improvement: Live Traffic now only shows verified Googlebot under Google Crawler filter for new visits.
|
1086 |
* Improvement: Adjusted permissions on Firewall log/config files to be 0640.
|
1098 |
|
1099 |
= 6.1.4 - April 20, 2016 =
|
1100 |
* Fix: Fixed potential bug with 'stored data not found after a fork. Got type: boolean'.
|
1101 |
+
* Improvement: Added bulk actions and filters to WAF allowlist table.
|
1102 |
* Improvement: Added a check while in learning mode to verify the response is not 404 before whitelising.
|
1103 |
* Fix: Added index to attackLogTime. wfHits trimmed on runInstall now.
|
1104 |
* Fix: Fixed attack data sync for hosts that cannot use wp-cron.
|
1122 |
* Fix: Fixed bug with multiple API calls to 'get_known_files'.
|
1123 |
|
1124 |
= 6.1.2 - April 12, 2016 =
|
1125 |
+
* Fix: Fixed fatal error when using a allowlisted IPv6 range and connecting with an IPv6 address.
|
1126 |
|
1127 |
= 6.1.1 - April 12, 2016 =
|
1128 |
* Enhancement: Added Web Application Firewall
|
vendor/wordfence/wf-waf/src/lib/rules.php
CHANGED
@@ -775,6 +775,9 @@ class wfWAFRuleComparison implements wfWAFRuleInterface {
|
|
775 |
|
776 |
foreach ($files as $file) {
|
777 |
if ($file['name'] == (string) $subject) {
|
|
|
|
|
|
|
778 |
$fh = @fopen($file['tmp_name'], 'r');
|
779 |
if (!$fh) {
|
780 |
continue;
|
@@ -836,6 +839,9 @@ class wfWAFRuleComparison implements wfWAFRuleInterface {
|
|
836 |
|
837 |
foreach ($files as $file) {
|
838 |
if ($file['name'] == (string) $subject) {
|
|
|
|
|
|
|
839 |
$fh = @fopen($file['tmp_name'], 'r');
|
840 |
if (!$fh) {
|
841 |
continue;
|
775 |
|
776 |
foreach ($files as $file) {
|
777 |
if ($file['name'] == (string) $subject) {
|
778 |
+
if (!is_file($file['tmp_name'])) {
|
779 |
+
continue;
|
780 |
+
}
|
781 |
$fh = @fopen($file['tmp_name'], 'r');
|
782 |
if (!$fh) {
|
783 |
continue;
|
839 |
|
840 |
foreach ($files as $file) {
|
841 |
if ($file['name'] == (string) $subject) {
|
842 |
+
if (!is_file($file['tmp_name'])) {
|
843 |
+
continue;
|
844 |
+
}
|
845 |
$fh = @fopen($file['tmp_name'], 'r');
|
846 |
if (!$fh) {
|
847 |
continue;
|
vendor/wordfence/wf-waf/src/lib/waf.php
CHANGED
@@ -245,14 +245,14 @@ auEa+7b+FGTKs7dUo2BNGR7OVifK4GZ8w/ajS0TelhrSRi3BBQCGXLzUO/UURUAh
|
|
245 |
if ($path && $paramKey && $ruleID) {
|
246 |
$this->whitelistRuleForParam($path, $paramKey, $ruleID, array(
|
247 |
'timestamp' => time(),
|
248 |
-
'description' => '
|
249 |
'source' => 'false-positive',
|
250 |
'ip' => $request->getIP(),
|
251 |
));
|
252 |
$whitelistCount++;
|
253 |
}
|
254 |
}
|
255 |
-
exit("Successfully
|
256 |
}
|
257 |
}
|
258 |
|
@@ -1261,7 +1261,7 @@ HTML
|
|
1261 |
|
1262 |
$data = array(
|
1263 |
'timestamp' => time(),
|
1264 |
-
'description' => '
|
1265 |
'source' => 'learning-mode',
|
1266 |
'ip' => $this->getRequest()->getIP(),
|
1267 |
);
|
245 |
if ($path && $paramKey && $ruleID) {
|
246 |
$this->whitelistRuleForParam($path, $paramKey, $ruleID, array(
|
247 |
'timestamp' => time(),
|
248 |
+
'description' => 'Allowlisted by via false positive dialog',
|
249 |
'source' => 'false-positive',
|
250 |
'ip' => $request->getIP(),
|
251 |
));
|
252 |
$whitelistCount++;
|
253 |
}
|
254 |
}
|
255 |
+
exit("Successfully allowlisted $whitelistCount params.");
|
256 |
}
|
257 |
}
|
258 |
|
1261 |
|
1262 |
$data = array(
|
1263 |
'timestamp' => time(),
|
1264 |
+
'description' => 'Allowlisted while in Learning Mode.',
|
1265 |
'source' => 'learning-mode',
|
1266 |
'ip' => $this->getRequest()->getIP(),
|
1267 |
);
|
vendor/wordfence/wf-waf/src/views/403-roadblock.php
CHANGED
@@ -363,7 +363,7 @@ foreach ($waf->getFailedRules() as $paramKey => $categories) {
|
|
363 |
<?php endif; ?>
|
364 |
<?php if ($urlParamsToWhitelist): ?>
|
365 |
<hr>
|
366 |
-
<p><?php echo wfWAFI18n::__('If you are an administrator and you are certain this is a false positive, you can automatically
|
367 |
|
368 |
<form id="whitelist-form" action="<?php echo htmlentities($waf->getRequest()->getPath(), ENT_QUOTES, 'utf-8') ?>" method="post">
|
369 |
<input type="hidden" name="wfwaf-false-positive-params" value="<?php echo htmlentities(wfWAFUtils::json_encode($urlParamsToWhitelist), ENT_QUOTES, 'utf-8') ?>">
|
@@ -372,11 +372,11 @@ foreach ($waf->getFailedRules() as $paramKey => $categories) {
|
|
372 |
<div id="whitelist-actions">
|
373 |
<p><label><input id="verified-false-positive-checkbox" type="checkbox" name="wfwaf-false-positive-verified" value="1"> <em><?php echo wfWAFI18n::__('I am certain this is a false positive.') ?></em></label></p>
|
374 |
|
375 |
-
<p><button id="whitelist-button" type="submit"><?php echo wfWAFI18n::__('
|
376 |
</div>
|
377 |
|
378 |
<p id="success" style="color: #35b13a; font-weight: bold; display: none"><em><?php echo wfWAFI18n::__('All set! You can refresh the page to try this action again.') ?></em></p>
|
379 |
-
<p id="error" style="color: #dd422c; font-weight: bold; display: none"><em><?php echo wfWAFI18n::__('Something went wrong
|
380 |
</form>
|
381 |
<script>
|
382 |
var whitelistButton = document.getElementById('whitelist-button');
|
@@ -391,7 +391,7 @@ foreach ($waf->getFailedRules() as $paramKey => $categories) {
|
|
391 |
evt.preventDefault();
|
392 |
var request = new XMLHttpRequest();
|
393 |
request.addEventListener("load", function() {
|
394 |
-
if (this.status === 200 && this.responseText.indexOf('Successfully
|
395 |
document.getElementById('whitelist-actions').style.display = 'none';
|
396 |
document.getElementById('success').style.display = 'block';
|
397 |
} else {
|
363 |
<?php endif; ?>
|
364 |
<?php if ($urlParamsToWhitelist): ?>
|
365 |
<hr>
|
366 |
+
<p><?php echo wfWAFI18n::__('If you are an administrator and you are certain this is a false positive, you can automatically allowlist this request and repeat the same action.') ?></p>
|
367 |
|
368 |
<form id="whitelist-form" action="<?php echo htmlentities($waf->getRequest()->getPath(), ENT_QUOTES, 'utf-8') ?>" method="post">
|
369 |
<input type="hidden" name="wfwaf-false-positive-params" value="<?php echo htmlentities(wfWAFUtils::json_encode($urlParamsToWhitelist), ENT_QUOTES, 'utf-8') ?>">
|
372 |
<div id="whitelist-actions">
|
373 |
<p><label><input id="verified-false-positive-checkbox" type="checkbox" name="wfwaf-false-positive-verified" value="1"> <em><?php echo wfWAFI18n::__('I am certain this is a false positive.') ?></em></label></p>
|
374 |
|
375 |
+
<p><button id="whitelist-button" type="submit"><?php echo wfWAFI18n::__('Allowlist This Action') ?></button></p>
|
376 |
</div>
|
377 |
|
378 |
<p id="success" style="color: #35b13a; font-weight: bold; display: none"><em><?php echo wfWAFI18n::__('All set! You can refresh the page to try this action again.') ?></em></p>
|
379 |
+
<p id="error" style="color: #dd422c; font-weight: bold; display: none"><em><?php echo wfWAFI18n::__('Something went wrong allowlisting this request. You can try setting the Firewall Status to Learning Mode under Web App Firewall in the Wordfence menu, and retry this same action.') ?></em></p>
|
380 |
</form>
|
381 |
<script>
|
382 |
var whitelistButton = document.getElementById('whitelist-button');
|
391 |
evt.preventDefault();
|
392 |
var request = new XMLHttpRequest();
|
393 |
request.addEventListener("load", function() {
|
394 |
+
if (this.status === 200 && this.responseText.indexOf('Successfully allowlisted') > -1) {
|
395 |
document.getElementById('whitelist-actions').style.display = 'none';
|
396 |
document.getElementById('success').style.display = 'block';
|
397 |
} else {
|
views/blocking/blocking-create.php
CHANGED
@@ -260,7 +260,7 @@ $wfBlockRange = filter_input(INPUT_GET, 'wfBlockRange', FILTER_DEFAULT, FILTER_R
|
|
260 |
.off('click.wfselect2-copy')
|
261 |
.on('click.wfselect2-copy', function(e) {
|
262 |
var opt = $(this).data('wfselect2-opt');
|
263 |
-
opt.
|
264 |
opt.parents('select').trigger('change');
|
265 |
}).data('wfselect2-opt', $(value));
|
266 |
list.append(li);
|
260 |
.off('click.wfselect2-copy')
|
261 |
.on('click.wfselect2-copy', function(e) {
|
262 |
var opt = $(this).data('wfselect2-opt');
|
263 |
+
opt.prop('selected', false);
|
264 |
opt.parents('select').trigger('change');
|
265 |
}).data('wfselect2-opt', $(value));
|
266 |
list.append(li);
|
views/dashboard/option-howgetips.php
CHANGED
@@ -122,7 +122,7 @@ $selectOptions = array(
|
|
122 |
var option = optionElement.data('option');
|
123 |
var originalValue = optionElement.data('originalValue');
|
124 |
|
125 |
-
$(this).
|
126 |
});
|
127 |
|
128 |
$('#howGetIPs-trusted-proxies textarea').each(function() {
|
122 |
var option = optionElement.data('option');
|
123 |
var originalValue = optionElement.data('originalValue');
|
124 |
|
125 |
+
$(this).prop('checked', originalValue == $(this).attr('value'));
|
126 |
});
|
127 |
|
128 |
$('#howGetIPs-trusted-proxies textarea').each(function() {
|
views/diagnostics/text.php
CHANGED
@@ -167,7 +167,7 @@ $wordPressValues = array(
|
|
167 |
'IMAGE_EDIT_OVERWRITE' => array('description' => __('Overwrite image edits when restoring the original', 'wordfence'), 'value' => (defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE ? __('Yes', 'wordfence') : __('No', 'wordfence'))),
|
168 |
'FORCE_SSL_ADMIN' => array('description' => __('Force SSL for administrative logins', 'wordfence'), 'value' => (defined('FORCE_SSL_ADMIN') && FORCE_SSL_ADMIN ? __('Yes', 'wordfence') : __('No', 'wordfence'))),
|
169 |
'WP_HTTP_BLOCK_EXTERNAL' => array('description' => __('Block external URL requests', 'wordfence'), 'value' => (defined('WP_HTTP_BLOCK_EXTERNAL') && WP_HTTP_BLOCK_EXTERNAL ? __('Yes', 'wordfence') : __('No', 'wordfence'))),
|
170 |
-
'WP_ACCESSIBLE_HOSTS' => __('
|
171 |
'WP_AUTO_UPDATE_CORE' => array('description' => __('Automatic WP Core updates', 'wordfence'), 'value' => defined('WP_AUTO_UPDATE_CORE') ? (is_bool(WP_AUTO_UPDATE_CORE) ? (WP_AUTO_UPDATE_CORE ? __('Everything', 'wordfence') : __('None', 'wordfence')) : WP_AUTO_UPDATE_CORE) : __('Default', 'wordfence')),
|
172 |
'WP_PROXY_HOST' => array('description' => __('Hostname for a proxy server', 'wordfence'), 'value' => defined('WP_PROXY_HOST') ? WP_PROXY_HOST : __('(not set)', 'wordfence')),
|
173 |
'WP_PROXY_PORT' => array('description' => __('Port for a proxy server', 'wordfence'), 'value' => defined('WP_PROXY_PORT') ? WP_PROXY_PORT : __('(not set)', 'wordfence')),
|
167 |
'IMAGE_EDIT_OVERWRITE' => array('description' => __('Overwrite image edits when restoring the original', 'wordfence'), 'value' => (defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE ? __('Yes', 'wordfence') : __('No', 'wordfence'))),
|
168 |
'FORCE_SSL_ADMIN' => array('description' => __('Force SSL for administrative logins', 'wordfence'), 'value' => (defined('FORCE_SSL_ADMIN') && FORCE_SSL_ADMIN ? __('Yes', 'wordfence') : __('No', 'wordfence'))),
|
169 |
'WP_HTTP_BLOCK_EXTERNAL' => array('description' => __('Block external URL requests', 'wordfence'), 'value' => (defined('WP_HTTP_BLOCK_EXTERNAL') && WP_HTTP_BLOCK_EXTERNAL ? __('Yes', 'wordfence') : __('No', 'wordfence'))),
|
170 |
+
'WP_ACCESSIBLE_HOSTS' => __('Allowlisted hosts', 'wordfence'),
|
171 |
'WP_AUTO_UPDATE_CORE' => array('description' => __('Automatic WP Core updates', 'wordfence'), 'value' => defined('WP_AUTO_UPDATE_CORE') ? (is_bool(WP_AUTO_UPDATE_CORE) ? (WP_AUTO_UPDATE_CORE ? __('Everything', 'wordfence') : __('None', 'wordfence')) : WP_AUTO_UPDATE_CORE) : __('Default', 'wordfence')),
|
172 |
'WP_PROXY_HOST' => array('description' => __('Hostname for a proxy server', 'wordfence'), 'value' => defined('WP_PROXY_HOST') ? WP_PROXY_HOST : __('(not set)', 'wordfence')),
|
173 |
'WP_PROXY_PORT' => array('description' => __('Port for a proxy server', 'wordfence'), 'value' => defined('WP_PROXY_PORT') ? WP_PROXY_PORT : __('(not set)', 'wordfence')),
|
views/scanner/options-group-general.php
CHANGED
@@ -29,7 +29,7 @@ if (!isset($collapseable)) {
|
|
29 |
<ul class="wf-block-list">
|
30 |
<?php
|
31 |
$options = array(
|
32 |
-
array('key' => 'scansEnabled_checkGSB', 'label' => __('Check if this website is on a domain
|
33 |
array('key' => 'spamvertizeCheck', 'label' => __('Check if this website is being "Spamvertised"', 'wordfence'), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_SCAN_OPTION_CHECK_SITE_SPAMVERTIZED), 'premium' => true, 'subtitleHTML' => __('<em>Reputation check</em>', 'wordfence')),
|
34 |
array('key' => 'checkSpamIP', 'label' => __('Check if this website IP is generating spam', 'wordfence'), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_SCAN_OPTION_CHECK_IP_SPAMMING), 'premium' => true, 'subtitleHTML' => __('<em>Reputation check</em>', 'wordfence')),
|
35 |
array('key' => 'scansEnabled_checkHowGetIPs', 'label' => __('Scan for misconfigured How does Wordfence get IPs', 'wordfence'), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_SCAN_OPTION_CHECK_MISCONFIGURED_HOW_GET_IPS)),
|
29 |
<ul class="wf-block-list">
|
30 |
<?php
|
31 |
$options = array(
|
32 |
+
array('key' => 'scansEnabled_checkGSB', 'label' => __('Check if this website is on a domain blocklist', 'wordfence'), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_SCAN_OPTION_CHECK_SITE_BLACKLISTED), 'premium' => true, 'subtitleHTML' => __('<em>Reputation check</em>', 'wordfence')),
|
33 |
array('key' => 'spamvertizeCheck', 'label' => __('Check if this website is being "Spamvertised"', 'wordfence'), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_SCAN_OPTION_CHECK_SITE_SPAMVERTIZED), 'premium' => true, 'subtitleHTML' => __('<em>Reputation check</em>', 'wordfence')),
|
34 |
array('key' => 'checkSpamIP', 'label' => __('Check if this website IP is generating spam', 'wordfence'), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_SCAN_OPTION_CHECK_IP_SPAMMING), 'premium' => true, 'subtitleHTML' => __('<em>Reputation check</em>', 'wordfence')),
|
35 |
array('key' => 'scansEnabled_checkHowGetIPs', 'label' => __('Scan for misconfigured How does Wordfence get IPs', 'wordfence'), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_SCAN_OPTION_CHECK_MISCONFIGURED_HOW_GET_IPS)),
|
views/scanner/scan-progress.php
CHANGED
@@ -29,7 +29,7 @@ $status = $scanner->stageStatus();
|
|
29 |
echo wfView::create('scanner/scan-progress-element', array(
|
30 |
'scanner' => $scanner,
|
31 |
'id' => 'wf-scan-blacklist',
|
32 |
-
'title' => __('
|
33 |
'status' => $status[wfScanner::STAGE_BLACKLIST_CHECK],
|
34 |
))->render();
|
35 |
|
29 |
echo wfView::create('scanner/scan-progress-element', array(
|
30 |
'scanner' => $scanner,
|
31 |
'id' => 'wf-scan-blacklist',
|
32 |
+
'title' => __('Blocklist Check', 'wordfence'),
|
33 |
'status' => $status[wfScanner::STAGE_BLACKLIST_CHECK],
|
34 |
))->render();
|
35 |
|
views/scanner/scanner-status.php
CHANGED
@@ -51,7 +51,7 @@ if (!defined('WORDFENCE_VERSION')) { exit; }
|
|
51 |
<?php if ($scanner->signatureMode() == wfScanner::SIGNATURE_MODE_COMMUNITY): ?>
|
52 |
<div>
|
53 |
<p><h3><?php _e('Premium Protection Disabled', 'wordfence'); ?></h3></p>
|
54 |
-
<p><?php printf(__('As a free Wordfence user, you are currently using the Community version of the Threat Defense Feed. Premium users are protected by an additional %d firewall rules and malware signatures as well as the Wordfence real-time IP
|
55 |
<p><a class="wf-btn wf-btn-primary wf-btn-callout-subtle" href="https://www.wordfence.com/gnl1scanUpgrade/wordfence-signup/#premium-order-form" target="_blank" rel="noopener noreferrer"><?php _e('Upgrade to Premium', 'wordfence'); ?></a> <a class="wf-btn wf-btn-callout-subtle wf-btn-default" href="https://www.wordfence.com/gnl1scanLearn/wordfence-signup/" target="_blank" rel="noopener noreferrer"><?php _e('Learn More', 'wordfence'); ?></a></p>
|
56 |
</div>
|
57 |
<?php else: ?>
|
51 |
<?php if ($scanner->signatureMode() == wfScanner::SIGNATURE_MODE_COMMUNITY): ?>
|
52 |
<div>
|
53 |
<p><h3><?php _e('Premium Protection Disabled', 'wordfence'); ?></h3></p>
|
54 |
+
<p><?php printf(__('As a free Wordfence user, you are currently using the Community version of the Threat Defense Feed. Premium users are protected by an additional %d firewall rules and malware signatures as well as the Wordfence real-time IP blocklist. Upgrade to Premium today to improve your protection.', 'wordfence'), ($dashboard->tdfPremium - $dashboard->tdfCommunity)); ?></p>
|
55 |
<p><a class="wf-btn wf-btn-primary wf-btn-callout-subtle" href="https://www.wordfence.com/gnl1scanUpgrade/wordfence-signup/#premium-order-form" target="_blank" rel="noopener noreferrer"><?php _e('Upgrade to Premium', 'wordfence'); ?></a> <a class="wf-btn wf-btn-callout-subtle wf-btn-default" href="https://www.wordfence.com/gnl1scanLearn/wordfence-signup/" target="_blank" rel="noopener noreferrer"><?php _e('Learn More', 'wordfence'); ?></a></p>
|
56 |
</div>
|
57 |
<?php else: ?>
|
views/scanner/site-cleaning-bottom.php
CHANGED
@@ -9,8 +9,8 @@ if (!defined('WORDFENCE_VERSION')) { exit; }
|
|
9 |
<ul class="wf-block-list">
|
10 |
<li>
|
11 |
<div class="wf-flex-vertical">
|
12 |
-
<h3 class="wf-center"><?php _e('Need help from
|
13 |
-
<p class="wf-center wf-no-top"><?php _e('
|
14 |
<p class="wf-center wf-add-bottom">
|
15 |
<a class="wf-btn wf-btn-default wf-btn-callout-subtle" href="https://www.wordfence.com/gnl1scanLowerAd/site-security-audit/" target="_blank" rel="noopener noreferrer"><?php _e('Audit My Site Security', 'wordfence'); ?></a>
|
16 |
|
9 |
<ul class="wf-block-list">
|
10 |
<li>
|
11 |
<div class="wf-flex-vertical">
|
12 |
+
<h3 class="wf-center"><?php _e('Need help from the WordPress security experts?', 'wordfence'); ?></h3>
|
13 |
+
<p class="wf-center wf-no-top"><?php _e('Wordfence security analysts can help you tighten site security or remove an active infection for good. All security services include a detailed report and a <strong class="wf-blue">Wordfence Premium license, with a 1-year clean site guarantee.</strong>', 'wordfence'); ?></p>
|
14 |
<p class="wf-center wf-add-bottom">
|
15 |
<a class="wf-btn wf-btn-default wf-btn-callout-subtle" href="https://www.wordfence.com/gnl1scanLowerAd/site-security-audit/" target="_blank" rel="noopener noreferrer"><?php _e('Audit My Site Security', 'wordfence'); ?></a>
|
16 |
|
views/tours/login-security.php
CHANGED
@@ -41,8 +41,8 @@
|
|
41 |
</script>
|
42 |
<script type="text/x-jquery-template" id="wfNewTour2">
|
43 |
<div>
|
44 |
-
<h3><?php _e('Individual
|
45 |
-
<p><?php _e('Two-factor authentication now has its own IP
|
46 |
<div class="wf-pointer-footer">
|
47 |
<ul class="wf-tour-pagination">
|
48 |
<li>•</li>
|
41 |
</script>
|
42 |
<script type="text/x-jquery-template" id="wfNewTour2">
|
43 |
<div>
|
44 |
+
<h3><?php _e('Individual Allowlisting', 'wordfence'); ?></h3>
|
45 |
+
<p><?php _e('Two-factor authentication now has its own IP allowlist. If necessary, you can allow specific IP addresses or ranges to skip 2FA when logging in.', 'wordfence'); ?></p>
|
46 |
<div class="wf-pointer-footer">
|
47 |
<ul class="wf-tour-pagination">
|
48 |
<li>•</li>
|
views/waf/debug.php
CHANGED
@@ -86,7 +86,7 @@ $failedRules = array();
|
|
86 |
try {
|
87 |
$waf->runRules();
|
88 |
} catch (wfWAFAllowException $e) {
|
89 |
-
$result = '<strong class="ok">
|
90 |
} catch (wfWAFBlockException $e) {
|
91 |
$result = '<strong class="error">Blocked</strong>';
|
92 |
$failedRules = $waf->getFailedRules();
|
86 |
try {
|
87 |
$waf->runRules();
|
88 |
} catch (wfWAFAllowException $e) {
|
89 |
+
$result = '<strong class="ok">Allowlisted</strong>';
|
90 |
} catch (wfWAFBlockException $e) {
|
91 |
$result = '<strong class="error">Blocked</strong>';
|
92 |
$failedRules = $waf->getFailedRules();
|
views/waf/option-whitelist.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
if (!defined('WORDFENCE_VERSION')) { exit; }
|
3 |
?>
|
4 |
<ul id="wf-option-wafWhitelist" class="wf-option wf-flex-vertical wf-flex-full-width">
|
5 |
-
<li><strong><?php _e('Add
|
6 |
<li id="whitelist-form">
|
7 |
<div class="wf-form-inline">
|
8 |
<div class="wf-form-group">
|
@@ -50,14 +50,14 @@ if (!defined('WORDFENCE_VERSION')) { exit; }
|
|
50 |
var key = pathKey + '|' + paramKey;
|
51 |
var matches = $('#waf-whitelisted-urls-wrapper .whitelist-table > tbody > tr[data-key="' + key + '"]');
|
52 |
if (matches.length > 0) {
|
53 |
-
WFAD.colorboxModal((WFAD.isSmallScreen ? '300px' : '400px'), '<?php esc_attr_e('
|
54 |
return;
|
55 |
}
|
56 |
|
57 |
//Generate entry and add to display data set
|
58 |
var entry = {
|
59 |
data: {
|
60 |
-
description: "<?php esc_attr_e('
|
61 |
source: 'waf-options',
|
62 |
disabled: false,
|
63 |
ip: "<?php echo esc_attr(wfUtils::getIP()); ?>",
|
2 |
if (!defined('WORDFENCE_VERSION')) { exit; }
|
3 |
?>
|
4 |
<ul id="wf-option-wafWhitelist" class="wf-option wf-flex-vertical wf-flex-full-width">
|
5 |
+
<li><strong><?php _e('Add Allowlisted URL/Param', 'wordfence'); ?></strong> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_WHITELIST); ?>" target="_blank" rel="noopener noreferrer" class="wf-inline-help"><i class="wf-fa wf-fa-question-circle-o" aria-hidden="true"></i></a> <?php _e('The URL/parameters in this table will not be tested by the firewall. They are typically added while the firewall is in Learning Mode or by an admin who identifies a particular action/request is a false positive.', 'wordfence'); ?></li>
|
6 |
<li id="whitelist-form">
|
7 |
<div class="wf-form-inline">
|
8 |
<div class="wf-form-group">
|
50 |
var key = pathKey + '|' + paramKey;
|
51 |
var matches = $('#waf-whitelisted-urls-wrapper .whitelist-table > tbody > tr[data-key="' + key + '"]');
|
52 |
if (matches.length > 0) {
|
53 |
+
WFAD.colorboxModal((WFAD.isSmallScreen ? '300px' : '400px'), '<?php esc_attr_e('Allowlist Entry Exists', 'wordfence'); ?>', '<?php esc_attr_e('An allowlist entry for this URL and parameter already exists.', 'wordfence'); ?>');
|
54 |
return;
|
55 |
}
|
56 |
|
57 |
//Generate entry and add to display data set
|
58 |
var entry = {
|
59 |
data: {
|
60 |
+
description: "<?php esc_attr_e('Allowlisted via Firewall Options page', 'wordfence'); ?>",
|
61 |
source: 'waf-options',
|
62 |
disabled: false,
|
63 |
ip: "<?php echo esc_attr(wfUtils::getIP()); ?>",
|
views/waf/options-group-advanced-firewall.php
CHANGED
@@ -49,9 +49,9 @@ if (!isset($collapseable)) {
|
|
49 |
echo wfView::create('options/option-textarea', array(
|
50 |
'textOptionName' => 'whitelisted',
|
51 |
'textValue' => wfUtils::cleanupOneEntryPerLine(wfConfig::get('whitelisted')),
|
52 |
-
'title' => __('
|
53 |
'alignTitle' => 'top',
|
54 |
-
'subtitleHTML' => __('
|
55 |
'subtitlePosition' => 'value',
|
56 |
'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_OPTION_WHITELISTED_IPS),
|
57 |
))->render();
|
@@ -85,7 +85,7 @@ if (!isset($collapseable)) {
|
|
85 |
|
86 |
echo wfView::create('options/option-toggled-multiple', array(
|
87 |
'options' => $options,
|
88 |
-
'title' => __('
|
89 |
'id' => 'wf-option-whitelistedServices',
|
90 |
'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_OPTION_WHITELISTED_SERVICES),
|
91 |
))->render();
|
49 |
echo wfView::create('options/option-textarea', array(
|
50 |
'textOptionName' => 'whitelisted',
|
51 |
'textValue' => wfUtils::cleanupOneEntryPerLine(wfConfig::get('whitelisted')),
|
52 |
+
'title' => __('Allowlisted IP addresses that bypass all rules', 'wordfence'),
|
53 |
'alignTitle' => 'top',
|
54 |
+
'subtitleHTML' => __('Allowlisted IPs must be separated by commas or placed on separate lines. You can specify ranges using the following formats: 127.0.0.1/24, 127.0.0.[1-100], or 127.0.0.1-127.0.1.100<br/>Wordfence automatically allowlists <a href="http://en.wikipedia.org/wiki/Private_network" target="_blank" rel="noopener noreferrer">private networks</a> because these are not routable on the public Internet.', 'wordfence'),
|
55 |
'subtitlePosition' => 'value',
|
56 |
'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_OPTION_WHITELISTED_IPS),
|
57 |
))->render();
|
85 |
|
86 |
echo wfView::create('options/option-toggled-multiple', array(
|
87 |
'options' => $options,
|
88 |
+
'title' => __('Allowlisted services', 'wordfence'),
|
89 |
'id' => 'wf-option-whitelistedServices',
|
90 |
'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_OPTION_WHITELISTED_SERVICES),
|
91 |
))->render();
|
views/waf/options-group-basic-firewall.php
CHANGED
@@ -461,14 +461,14 @@ if (!isset($collapseable)) {
|
|
461 |
</script>
|
462 |
</li>
|
463 |
<li id="wf-option-disableWAFBlacklistBlocking" class="wf-flex-vertical wf-flex-align-left">
|
464 |
-
<h3><?php esc_html_e('Real-Time IP
|
465 |
<?php if ($firewall->ruleMode() == wfFirewall::RULE_MODE_COMMUNITY): ?>
|
466 |
-
<p class="wf-no-top"><strong><?php _e('Premium Feature:', 'wordfence'); ?></strong> <?php _e('This feature blocks all traffic from IPs with a high volume of recent malicious activity using Wordfence\'s real-time
|
467 |
<p><a class="wf-btn wf-btn-primary wf-btn-callout-subtle" href="https://www.wordfence.com/gnl1blacklistUpgrade/wordfence-signup/#premium-order-form" target="_blank" rel="noopener noreferrer"><?php _e('Upgrade to Premium', 'wordfence'); ?></a> <a class="wf-btn wf-btn-callout-subtle wf-btn-default" href="https://www.wordfence.com/gnl1blacklistLearn/wordfence-signup/" target="_blank" rel="noopener noreferrer"><?php _e('Learn More', 'wordfence'); ?></a></p>
|
468 |
<?php elseif ($firewall->isSubDirectoryInstallation()): ?>
|
469 |
<p class="wf-no-top"><?php printf(__('You are currently running the Wordfence Web Application Firewall from another WordPress installation. Please <a href="%s">click here</a> to configure the Firewall to run correctly on this site.', 'wordfence'), esc_attr(network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#configureAutoPrepend'))); ?></p>
|
470 |
<?php else: ?>
|
471 |
-
<p class="wf-no-top"><?php _e('This feature blocks all traffic from IPs with a high volume of recent malicious activity using Wordfence\'s real-time
|
472 |
<div class="wf-option wf-option-switch wf-padding-add-bottom" data-option-name="disableWAFBlacklistBlocking" data-original-value="<?php try { echo $config->getConfig('disableWAFBlacklistBlocking') ? '1': '0'; } catch (Exception $e) { echo 0; } ?>">
|
473 |
<ul class="wf-switch" role="radiogroup">
|
474 |
<?php
|
461 |
</script>
|
462 |
</li>
|
463 |
<li id="wf-option-disableWAFBlacklistBlocking" class="wf-flex-vertical wf-flex-align-left">
|
464 |
+
<h3><?php esc_html_e('Real-Time IP Blocklist', 'wordfence'); ?></h3>
|
465 |
<?php if ($firewall->ruleMode() == wfFirewall::RULE_MODE_COMMUNITY): ?>
|
466 |
+
<p class="wf-no-top"><strong><?php _e('Premium Feature:', 'wordfence'); ?></strong> <?php _e('This feature blocks all traffic from IPs with a high volume of recent malicious activity using Wordfence\'s real-time blocklist.', 'wordfence'); ?></p>
|
467 |
<p><a class="wf-btn wf-btn-primary wf-btn-callout-subtle" href="https://www.wordfence.com/gnl1blacklistUpgrade/wordfence-signup/#premium-order-form" target="_blank" rel="noopener noreferrer"><?php _e('Upgrade to Premium', 'wordfence'); ?></a> <a class="wf-btn wf-btn-callout-subtle wf-btn-default" href="https://www.wordfence.com/gnl1blacklistLearn/wordfence-signup/" target="_blank" rel="noopener noreferrer"><?php _e('Learn More', 'wordfence'); ?></a></p>
|
468 |
<?php elseif ($firewall->isSubDirectoryInstallation()): ?>
|
469 |
<p class="wf-no-top"><?php printf(__('You are currently running the Wordfence Web Application Firewall from another WordPress installation. Please <a href="%s">click here</a> to configure the Firewall to run correctly on this site.', 'wordfence'), esc_attr(network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#configureAutoPrepend'))); ?></p>
|
470 |
<?php else: ?>
|
471 |
+
<p class="wf-no-top"><?php _e('This feature blocks all traffic from IPs with a high volume of recent malicious activity using Wordfence\'s real-time blocklist.', 'wordfence'); ?></p>
|
472 |
<div class="wf-option wf-option-switch wf-padding-add-bottom" data-option-name="disableWAFBlacklistBlocking" data-original-value="<?php try { echo $config->getConfig('disableWAFBlacklistBlocking') ? '1': '0'; } catch (Exception $e) { echo 0; } ?>">
|
473 |
<ul class="wf-switch" role="radiogroup">
|
474 |
<?php
|
views/waf/options-group-brute-force.php
CHANGED
@@ -216,6 +216,18 @@ if (!isset($collapseable)) {
|
|
216 |
))->render();
|
217 |
?>
|
218 |
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
219 |
<li>
|
220 |
<?php
|
221 |
echo wfView::create('options/option-toggled', array(
|
216 |
))->render();
|
217 |
?>
|
218 |
</li>
|
219 |
+
<li>
|
220 |
+
<?php
|
221 |
+
echo wfView::create('options/option-toggled', array(
|
222 |
+
'optionName' => 'loginSec_disableApplicationPasswords',
|
223 |
+
'enabledValue' => 1,
|
224 |
+
'disabledValue' => 0,
|
225 |
+
'value' => wfConfig::get('loginSec_disableApplicationPasswords') ? 1 : 0,
|
226 |
+
'title' => __('Disable WordPress application passwords', 'wordfence'),
|
227 |
+
'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_OPTION_DISABLE_APPLICATION_PASSWORDS),
|
228 |
+
))->render();
|
229 |
+
?>
|
230 |
+
</li>
|
231 |
<li>
|
232 |
<?php
|
233 |
echo wfView::create('options/option-toggled', array(
|
views/waf/options-group-rate-limiting.php
CHANGED
@@ -191,7 +191,7 @@ if (!isset($collapseable)) {
|
|
191 |
echo wfView::create('options/option-textarea', array(
|
192 |
'textOptionName' => 'allowed404s',
|
193 |
'textValue' => wfUtils::cleanupOneEntryPerLine(wfConfig::get('allowed404s')),
|
194 |
-
'title' => __('
|
195 |
'subtitle' => __('These URL patterns will be excluded from the throttling rules used to limit crawlers.', 'wordfence'),
|
196 |
'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_OPTION_WHITELISTED_404),
|
197 |
))->render();
|
191 |
echo wfView::create('options/option-textarea', array(
|
192 |
'textOptionName' => 'allowed404s',
|
193 |
'textValue' => wfUtils::cleanupOneEntryPerLine(wfConfig::get('allowed404s')),
|
194 |
+
'title' => __('Allowlisted 404 URLs', 'wordfence'),
|
195 |
'subtitle' => __('These URL patterns will be excluded from the throttling rules used to limit crawlers.', 'wordfence'),
|
196 |
'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_OPTION_WHITELISTED_404),
|
197 |
))->render();
|
views/waf/options-group-whitelisted.php
CHANGED
@@ -23,7 +23,7 @@ if (!isset($collapseable)) {
|
|
23 |
<div class="wf-block-header">
|
24 |
<div class="wf-block-header-content">
|
25 |
<div class="wf-block-title">
|
26 |
-
<strong><?php _e('
|
27 |
</div>
|
28 |
<?php if ($collapseable): ?><div class="wf-block-header-action"><div class="wf-block-header-action-disclosure" role="checkbox" aria-checked="<?php echo (wfPersistenceController::shared()->isActive($stateKey) ? 'true' : 'false'); ?>" tabindex="0"></div></div><?php endif; ?>
|
29 |
</div>
|
@@ -154,7 +154,7 @@ if (!isset($collapseable)) {
|
|
154 |
{{/each}}
|
155 |
{{if (whitelistedURLParams.length == 0)}}
|
156 |
<tr>
|
157 |
-
<td colspan="8"><?php _e('No
|
158 |
</tr>
|
159 |
{{/if}}
|
160 |
</tbody>
|
23 |
<div class="wf-block-header">
|
24 |
<div class="wf-block-header-content">
|
25 |
<div class="wf-block-title">
|
26 |
+
<strong><?php _e('Allowlisted URLs', 'wordfence'); ?></strong>
|
27 |
</div>
|
28 |
<?php if ($collapseable): ?><div class="wf-block-header-action"><div class="wf-block-header-action-disclosure" role="checkbox" aria-checked="<?php echo (wfPersistenceController::shared()->isActive($stateKey) ? 'true' : 'false'); ?>" tabindex="0"></div></div><?php endif; ?>
|
29 |
</div>
|
154 |
{{/each}}
|
155 |
{{if (whitelistedURLParams.length == 0)}}
|
156 |
<tr>
|
157 |
+
<td colspan="8"><?php _e('No allowlisted URLs currently set.', 'wordfence'); ?></td>
|
158 |
</tr>
|
159 |
{{/if}}
|
160 |
</tbody>
|
waf/bootstrap.php
CHANGED
@@ -232,7 +232,7 @@ class wfWAFWordPressObserver extends wfWAFBaseObserver {
|
|
232 |
}
|
233 |
$whitelistPattern = '/^(?:' . wfWAFUtils::substr($whitelistPattern, 0, -1) . ')$/i';
|
234 |
|
235 |
-
wfWAFRule::create(wfWAF::getInstance(), 0x8000000, 'rule', 'whitelist', 0, 'User Supplied
|
236 |
new wfWAFRuleComparisonGroup(
|
237 |
new wfWAFRuleComparison(wfWAF::getInstance(), 'match', $whitelistPattern, array(
|
238 |
'request.uri',
|
@@ -250,7 +250,7 @@ class wfWAFWordPressObserver extends wfWAFBaseObserver {
|
|
250 |
foreach ($whitelistedIPs as $whitelistedIP) {
|
251 |
$ipRange = new wfWAFUserIPRange($whitelistedIP);
|
252 |
if ($ipRange->isIPInRange(wfWAF::getInstance()->getRequest()->getIP())) {
|
253 |
-
throw new wfWAFAllowException('Wordfence
|
254 |
}
|
255 |
}
|
256 |
}
|
232 |
}
|
233 |
$whitelistPattern = '/^(?:' . wfWAFUtils::substr($whitelistPattern, 0, -1) . ')$/i';
|
234 |
|
235 |
+
wfWAFRule::create(wfWAF::getInstance(), 0x8000000, 'rule', 'whitelist', 0, 'User Supplied Allowlisted URL', 'allow',
|
236 |
new wfWAFRuleComparisonGroup(
|
237 |
new wfWAFRuleComparison(wfWAF::getInstance(), 'match', $whitelistPattern, array(
|
238 |
'request.uri',
|
250 |
foreach ($whitelistedIPs as $whitelistedIP) {
|
251 |
$ipRange = new wfWAFUserIPRange($whitelistedIP);
|
252 |
if ($ipRange->isIPInRange(wfWAF::getInstance()->getRequest()->getIP())) {
|
253 |
+
throw new wfWAFAllowException('Wordfence allowlisted IP.');
|
254 |
}
|
255 |
}
|
256 |
}
|
wordfence.php
CHANGED
@@ -4,7 +4,7 @@ Plugin Name: Wordfence Security
|
|
4 |
Plugin URI: http://www.wordfence.com/
|
5 |
Description: Wordfence Security - Anti-virus, Firewall and Malware Scan
|
6 |
Author: Wordfence
|
7 |
-
Version: 7.4.
|
8 |
Author URI: http://www.wordfence.com/
|
9 |
Text Domain: wordfence
|
10 |
Domain Path: /languages
|
@@ -17,8 +17,8 @@ if(defined('WP_INSTALLING') && WP_INSTALLING){
|
|
17 |
if (!defined('ABSPATH')) {
|
18 |
exit;
|
19 |
}
|
20 |
-
define('WORDFENCE_VERSION', '7.4.
|
21 |
-
define('WORDFENCE_BUILD_NUMBER', '
|
22 |
define('WORDFENCE_BASENAME', function_exists('plugin_basename') ? plugin_basename(__FILE__) :
|
23 |
basename(dirname(__FILE__)) . '/' . basename(__FILE__));
|
24 |
|
4 |
Plugin URI: http://www.wordfence.com/
|
5 |
Description: Wordfence Security - Anti-virus, Firewall and Malware Scan
|
6 |
Author: Wordfence
|
7 |
+
Version: 7.4.14
|
8 |
Author URI: http://www.wordfence.com/
|
9 |
Text Domain: wordfence
|
10 |
Domain Path: /languages
|
17 |
if (!defined('ABSPATH')) {
|
18 |
exit;
|
19 |
}
|
20 |
+
define('WORDFENCE_VERSION', '7.4.14');
|
21 |
+
define('WORDFENCE_BUILD_NUMBER', '1607007971');
|
22 |
define('WORDFENCE_BASENAME', function_exists('plugin_basename') ? plugin_basename(__FILE__) :
|
23 |
basename(dirname(__FILE__)) . '/' . basename(__FILE__));
|
24 |
|