Wordfence Security – Firewall & Malware Scan - Version 7.5.5

Version Description

  • August 16, 2021 =
  • Improvement: Enhanced accessibility
  • Improvement: Replaced regex in scan log with signature ID
  • Improvement: Updated Knockout JS dependency to version 3.5.1
  • Improvement: Removed PHP 8 compatibility notice
  • Improvement: Added NTP status for Login Security to Diagnostics
  • Improvement: Updated plugin headers for compatibility with WordPress 5.8
  • Improvement: Updated Nginx documentation links to HTTPS
  • Improvement: Updated IP address geolocation database
  • Improvement: Expanded WAF SQL syntax support
  • Improvement: Added optional constants to configure WAF database connection
  • Improvement: Added support for matching punycode domain names
  • Improvement: Updated Wordfence install count
  • Improvement: Deprecated support for WordPress versions older than 4.4.0
  • Improvement: Added warning messages when blocking U.S.
  • Improvement: Added MYSQLI_CLIENT_SSL support to WAF database connection
  • Improvement: Added 2FA and reCAPTCHA support for WooCommerce login and registration forms
  • Improvement: Added option to require 2FA for any role
  • Improvement: Added logic to automatically disable NTP after repeated failures and option to manually disable NTP
  • Improvement: Updated reCAPTCHA setup note
  • Fix: Prevented issue where country blocking changes are not saved
  • Fix: Corrected string placeholder
  • Fix: Added missing text domain to translation calls
  • Fix: Corrected warning about sprintf arguments on Central setup page
  • Fix: Prevented lost password functionality from revealing valid logins
Download this release

Release Info

Developer wfalexk
Plugin Icon 128x128 Wordfence Security – Firewall & Malware Scan
Version 7.5.5
Comparing to
See all releases

Code changes from version 7.5.4 to 7.5.5

Files changed (94) hide show
  1. css/{activity-report-widget.1623076348.css → activity-report-widget.1629122067.css} +0 -0
  2. css/{diff.1623076348.css → diff.1629122067.css} +0 -0
  3. css/{dt_table.1623076348.css → dt_table.1629122067.css} +0 -0
  4. css/{fullLog.1623076348.css → fullLog.1629122067.css} +0 -0
  5. css/{iptraf.1623076348.css → iptraf.1629122067.css} +0 -0
  6. css/{jquery-ui-timepicker-addon.1623076348.css → jquery-ui-timepicker-addon.1629122067.css} +0 -0
  7. css/{jquery-ui.min.1623076348.css → jquery-ui.min.1629122067.css} +0 -0
  8. css/{jquery-ui.structure.min.1623076348.css → jquery-ui.structure.min.1629122067.css} +0 -0
  9. css/{jquery-ui.theme.min.1623076348.css → jquery-ui.theme.min.1629122067.css} +0 -0
  10. css/{main.1623076348.css → main.1629122067.css} +0 -0
  11. css/{phpinfo.1623076348.css → phpinfo.1629122067.css} +0 -0
  12. css/{wf-adminbar.1623076348.css → wf-adminbar.1629122067.css} +0 -0
  13. css/{wf-colorbox.1623076348.css → wf-colorbox.1629122067.css} +0 -0
  14. css/{wf-font-awesome.1623076348.css → wf-font-awesome.1629122067.css} +0 -0
  15. css/{wf-global.1623076348.css → wf-global.1629122067.css} +0 -0
  16. css/{wf-ionicons.1623076348.css → wf-ionicons.1629122067.css} +0 -0
  17. css/{wf-onboarding.1623076348.css → wf-onboarding.1629122067.css} +0 -0
  18. css/{wf-roboto-font.1623076348.css → wf-roboto-font.1629122067.css} +0 -0
  19. css/{wfselect2.min.1623076348.css → wfselect2.min.1629122067.css} +0 -0
  20. css/{wordfenceBox.1623076348.css → wordfenceBox.1629122067.css} +0 -0
  21. js/{Chart.bundle.min.1623076348.js → Chart.bundle.min.1629122067.js} +0 -0
  22. js/{admin.1623076348.js → admin.1629122067.js} +8 -7
  23. js/{admin.ajaxWatcher.1623076348.js → admin.ajaxWatcher.1629122067.js} +4 -3
  24. js/{admin.liveTraffic.1623076348.js → admin.liveTraffic.1629122067.js} +0 -0
  25. js/{date.1623076348.js → date.1629122067.js} +0 -0
  26. js/{jquery-ui-timepicker-addon.1623076348.js → jquery-ui-timepicker-addon.1629122067.js} +0 -0
  27. js/{jquery.colorbox-min.1623076348.js → jquery.colorbox-min.1629122067.js} +0 -0
  28. js/{jquery.colorbox.1623076348.js → jquery.colorbox.1629122067.js} +0 -0
  29. js/{jquery.dataTables.min.1623076348.js → jquery.dataTables.min.1629122067.js} +0 -0
  30. js/{jquery.qrcode.min.1623076348.js → jquery.qrcode.min.1629122067.js} +0 -0
  31. js/{jquery.tmpl.min.1623076348.js → jquery.tmpl.min.1629122067.js} +0 -0
  32. js/{jquery.tools.min.1623076348.js → jquery.tools.min.1629122067.js} +0 -0
  33. js/knockout-3.3.0.1623076348.js +0 -115
  34. js/knockout-3.5.1.1629122067.js +139 -0
  35. js/{wfdashboard.1623076348.js → wfdashboard.1629122067.js} +0 -0
  36. js/{wfdropdown.1623076348.js → wfdropdown.1629122067.js} +0 -0
  37. js/{wfglobal.1623076348.js → wfglobal.1629122067.js} +12 -0
  38. js/{wfi18n.1623076348.js → wfi18n.1629122067.js} +0 -0
  39. js/{wfpopover.1623076348.js → wfpopover.1629122067.js} +0 -0
  40. js/{wfselect2.min.1623076348.js → wfselect2.min.1629122067.js} +0 -0
  41. languages/wordfence.po +1547 -1083
  42. lib/GeoLite2-Country.mmdb +0 -0
  43. lib/IPTrafList.php +3 -3
  44. lib/dashboard/widget_countries.php +2 -2
  45. lib/dashboard/widget_ips.php +6 -6
  46. lib/dashboard/widget_localattacks.php +1 -1
  47. lib/dashboard/widget_logins.php +4 -4
  48. lib/dashboard/widget_networkattacks.php +2 -3
  49. lib/dashboard/widget_notifications.php +5 -5
  50. lib/email_unsubscribeRequest.php +1 -1
  51. lib/live_activity.php +1 -1
  52. lib/menu_dashboard.php +22 -22
  53. lib/menu_dashboard_options.php +2 -2
  54. lib/menu_firewall_blocking.php +15 -15
  55. lib/menu_firewall_waf.php +14 -14
  56. lib/menu_scanner.php +15 -15
  57. lib/menu_support.php +11 -11
  58. lib/menu_tools.php +5 -5
  59. lib/menu_tools_diagnostic.php +25 -24
  60. lib/menu_tools_importExport.php +1 -1
  61. lib/menu_tools_livetraffic.php +17 -17
  62. lib/menu_tools_twoFactor.php +5 -5
  63. lib/menu_tools_whois.php +2 -2
  64. lib/menu_wordfence_central.php +2 -2
  65. lib/wf503.php +32 -2
  66. lib/wfAPI.php +1 -1
  67. lib/wfActivityReport.php +1 -1
  68. lib/wfAdminNoticeQueue.php +16 -3
  69. lib/wfDiagnostic.php +34 -4
  70. lib/wfIssues.php +2 -2
  71. lib/wfLockedOut.php +32 -2
  72. lib/wfScan.php +3 -3
  73. lib/wfScanEngine.php +18 -19
  74. lib/wfVersionCheckController.php +7 -7
  75. lib/wordfenceClass.php +129 -83
  76. lib/wordfenceHash.php +5 -5
  77. lib/wordfenceScanner.php +6 -6
  78. lib/wordfenceURLHoover.php +7 -16
  79. models/block/wfBlock.php +2 -2
  80. models/firewall/wfFirewall.php +1 -1
  81. models/scanner/wfScanner.php +1 -1
  82. modules/login-security/classes/controller/ajax.php +127 -40
  83. modules/login-security/classes/controller/captcha.php +26 -0
  84. modules/login-security/classes/controller/notices.php +34 -1
  85. modules/login-security/classes/controller/permissions.php +42 -7
  86. modules/login-security/classes/controller/settings.php +126 -6
  87. modules/login-security/classes/controller/support.php +2 -0
  88. modules/login-security/classes/controller/time.php +14 -5
  89. modules/login-security/classes/controller/users.php +312 -33
  90. modules/login-security/classes/controller/wordfencels.php +304 -136
  91. modules/login-security/classes/model/view/title.php +1 -1
  92. modules/login-security/css/{admin-global.1623076348.css → admin-global.1629122067.css} +1 -1
  93. modules/login-security/css/admin.1623076348.css +0 -1
  94. modules/login-security/css/admin.1629122067.css +1 -0
css/{activity-report-widget.1623076348.css → activity-report-widget.1629122067.css} RENAMED
File without changes
css/{diff.1623076348.css → diff.1629122067.css} RENAMED
File without changes
css/{dt_table.1623076348.css → dt_table.1629122067.css} RENAMED
File without changes
css/{fullLog.1623076348.css → fullLog.1629122067.css} RENAMED
File without changes
css/{iptraf.1623076348.css → iptraf.1629122067.css} RENAMED
File without changes
css/{jquery-ui-timepicker-addon.1623076348.css → jquery-ui-timepicker-addon.1629122067.css} RENAMED
File without changes
css/{jquery-ui.min.1623076348.css → jquery-ui.min.1629122067.css} RENAMED
File without changes
css/{jquery-ui.structure.min.1623076348.css → jquery-ui.structure.min.1629122067.css} RENAMED
File without changes
css/{jquery-ui.theme.min.1623076348.css → jquery-ui.theme.min.1629122067.css} RENAMED
File without changes
css/{main.1623076348.css → main.1629122067.css} RENAMED
File without changes
css/{phpinfo.1623076348.css → phpinfo.1629122067.css} RENAMED
File without changes
css/{wf-adminbar.1623076348.css → wf-adminbar.1629122067.css} RENAMED
File without changes
css/{wf-colorbox.1623076348.css → wf-colorbox.1629122067.css} RENAMED
File without changes
css/{wf-font-awesome.1623076348.css → wf-font-awesome.1629122067.css} RENAMED
File without changes
css/{wf-global.1623076348.css → wf-global.1629122067.css} RENAMED
File without changes
css/{wf-ionicons.1623076348.css → wf-ionicons.1629122067.css} RENAMED
File without changes
css/{wf-onboarding.1623076348.css → wf-onboarding.1629122067.css} RENAMED
File without changes
css/{wf-roboto-font.1623076348.css → wf-roboto-font.1629122067.css} RENAMED
File without changes
css/{wfselect2.min.1623076348.css → wfselect2.min.1629122067.css} RENAMED
File without changes
css/{wordfenceBox.1623076348.css → wordfenceBox.1629122067.css} RENAMED
File without changes
js/{Chart.bundle.min.1623076348.js → Chart.bundle.min.1629122067.js} RENAMED
File without changes
js/{admin.1623076348.js → admin.1629122067.js} RENAMED
@@ -135,11 +135,12 @@
135
  var tabs = jQuery('.wf-page-tabs').find('.wf-tab a');
136
  if (tabs.length > 0) {
137
  tabs.click(function() {
138
- jQuery('.wf-page-tabs').find('.wf-tab').removeClass('wf-active');
139
  jQuery('.wf-tab-content').removeClass('wf-active');
140
 
141
  var tab = jQuery(this).closest('.wf-tab');
142
  tab.addClass('wf-active');
 
143
  var content = jQuery('#' + tab.data('target'));
144
  content.addClass('wf-active');
145
  document.title = tab.data('pageTitle') + " \u2039 " + self.basePageName;
@@ -1164,7 +1165,7 @@
1164
  summaryUpdated = true;
1165
  } else if (item.msg.indexOf('SUM_PAIDONLY:') != -1) {
1166
  msg = item.msg.replace('SUM_PAIDONLY:', '');
1167
- jQuery('#consoleSummary').append('<div class="wfSummaryLine"><div class="wfSummaryDate">[' + item.date + ']</div><div class="wfSummaryMsg">' + msg + '</div><div class="wfSummaryResult"><a href="https://www.wordfence.com/wordfence-signup/" target="_blank" rel="noopener noreferrer">' + __('Paid Members Only') + '</a></div><div class="wfClear"></div>');
1168
  summaryUpdated = true;
1169
  } else if (item.msg.indexOf('SUM_FINAL:') != -1) {
1170
  msg = item.msg.replace('SUM_FINAL:', '');
@@ -2031,7 +2032,7 @@
2031
  '<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;" />' +
2032
  '<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>' +
2033
  '</p>' +
2034
- '<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>'
2035
  );
2036
  },
2037
  promptToRepairFileDone: function(issueID, dontPromptAgain) {
@@ -2192,7 +2193,7 @@
2192
  '<br /><br />' +
2193
  '<button class="wf-btn wf-btn-default" type="button" id="wf-htaccess-confirm" disabled="disabled" onclick="WFAD.confirmDisableDirectoryListing(' + issueID + ');">' + __('Add code to .htaccess') + '</button>');
2194
  } else if (res.nginx) {
2195
- self.colorboxModalHTML((self.isSmallScreen ? '300px' : '400px'), __("You are using Nginx as your web server. You'll need to disable autoindexing in your nginx.conf. See the <a target='_blank' rel='noopener noreferrer' href='http://nginx.org/en/docs/http/ngx_http_autoindex_module.html'>Nginx docs for more info</a> on how to do this."));
2196
  } else if (res.err) {
2197
  self.colorboxModal((self.isSmallScreen ? '300px' : '400px'), __("We encountered a problem"), sprintf(__("We can't modify your .htaccess file for you because: %s"), res.err));
2198
  }
@@ -2251,7 +2252,7 @@
2251
  },
2252
  completeLiveTabSwitch: function() {
2253
  this.ajax('wordfence_loadActivityLog', {}, function(res) {
2254
- var html = '<a href="#" class="wfALogMailLink" onclick="WFAD.emailActivityLog(); return false;"></a><a href="#" class="wfALogReloadLink" onclick="WFAD.reloadActivityData(); return false;"></a>';
2255
  if (res.events && res.events.length > 0) {
2256
  jQuery('#wfActivity').empty();
2257
  for (var i = 0; i < res.events.length; i++) {
@@ -3915,7 +3916,7 @@ jQuery.fn.wfCircularProgress = function(options) {
3915
  var menu = $('<div class="wf-mobile-menu"><ul class="wf-mobile-menu-items"></ul></div>').css('width', opts.width).css('bottom', '-9999px');
3916
  var itemsWrapper = menu.find('.wf-mobile-menu-items');
3917
  for (var i = 0; i < opts.menuItems.length; i++) {
3918
- var button = $('<li><a href="#" class="wf-btn wf-btn-callout-subtle"></a></li>');
3919
  button.find('a').text(opts.menuItems[i].title).css('width', opts.width).on('click', null, {action: opts.menuItems[i].action}, function(e) {
3920
  e.preventDefault();
3921
  e.stopPropagation();
@@ -3939,7 +3940,7 @@ jQuery.fn.wfCircularProgress = function(options) {
3939
  itemsWrapper.append(button);
3940
  }
3941
 
3942
- var button = $('<li class="wf-padding-add-top-small"><a href="#" class="wf-btn wf-btn-callout-subtle wf-btn-default">' + __('Close') + '</a></li>');
3943
  button.find('a').css('width', opts.width).on('click', function(e) {
3944
  e.preventDefault();
3945
  e.stopPropagation();
135
  var tabs = jQuery('.wf-page-tabs').find('.wf-tab a');
136
  if (tabs.length > 0) {
137
  tabs.click(function() {
138
+ jQuery('.wf-page-tabs').find('.wf-tab').removeClass('wf-active').find('a').attr('aria-selected', 'false');
139
  jQuery('.wf-tab-content').removeClass('wf-active');
140
 
141
  var tab = jQuery(this).closest('.wf-tab');
142
  tab.addClass('wf-active');
143
+ tab.find('a').attr('aria-selected', 'true');
144
  var content = jQuery('#' + tab.data('target'));
145
  content.addClass('wf-active');
146
  document.title = tab.data('pageTitle') + " \u2039 " + self.basePageName;
1165
  summaryUpdated = true;
1166
  } else if (item.msg.indexOf('SUM_PAIDONLY:') != -1) {
1167
  msg = item.msg.replace('SUM_PAIDONLY:', '');
1168
+ jQuery('#consoleSummary').append('<div class="wfSummaryLine"><div class="wfSummaryDate">[' + item.date + ']</div><div class="wfSummaryMsg">' + msg + '</div><div class="wfSummaryResult"><a href="https://www.wordfence.com/wordfence-signup/" target="_blank" rel="noopener noreferrer">' + __('Paid Members Only') + ' (' + __('opens in new tab') + ')</a></div><div class="wfClear"></div>');
1169
  summaryUpdated = true;
1170
  } else if (item.msg.indexOf('SUM_FINAL:') != -1) {
1171
  msg = item.msg.replace('SUM_FINAL:', '');
2032
  '<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;" />' +
2033
  '<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>' +
2034
  '</p>' +
2035
+ '<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.') + ' (' + __('opens in new tab') + ')</a></div>'
2036
  );
2037
  },
2038
  promptToRepairFileDone: function(issueID, dontPromptAgain) {
2193
  '<br /><br />' +
2194
  '<button class="wf-btn wf-btn-default" type="button" id="wf-htaccess-confirm" disabled="disabled" onclick="WFAD.confirmDisableDirectoryListing(' + issueID + ');">' + __('Add code to .htaccess') + '</button>');
2195
  } else if (res.nginx) {
2196
+ self.colorboxModalHTML((self.isSmallScreen ? '300px' : '400px'), __("You are using Nginx as your web server. You'll need to disable autoindexing in your nginx.conf. See the <a target='_blank' rel='noopener noreferrer' href='https://nginx.org/en/docs/http/ngx_http_autoindex_module.html'>Nginx docs for more info</a> on how to do this."));
2197
  } else if (res.err) {
2198
  self.colorboxModal((self.isSmallScreen ? '300px' : '400px'), __("We encountered a problem"), sprintf(__("We can't modify your .htaccess file for you because: %s"), res.err));
2199
  }
2252
  },
2253
  completeLiveTabSwitch: function() {
2254
  this.ajax('wordfence_loadActivityLog', {}, function(res) {
2255
+ var html = '<a href="#" class="wfALogMailLink" onclick="WFAD.emailActivityLog(); return false;" role="button"></a><a href="#" class="wfALogReloadLink" onclick="WFAD.reloadActivityData(); return false;" role="button"></a>';
2256
  if (res.events && res.events.length > 0) {
2257
  jQuery('#wfActivity').empty();
2258
  for (var i = 0; i < res.events.length; i++) {
3916
  var menu = $('<div class="wf-mobile-menu"><ul class="wf-mobile-menu-items"></ul></div>').css('width', opts.width).css('bottom', '-9999px');
3917
  var itemsWrapper = menu.find('.wf-mobile-menu-items');
3918
  for (var i = 0; i < opts.menuItems.length; i++) {
3919
+ var button = $('<li><a href="#" class="wf-btn wf-btn-callout-subtle" role="button"></a></li>');
3920
  button.find('a').text(opts.menuItems[i].title).css('width', opts.width).on('click', null, {action: opts.menuItems[i].action}, function(e) {
3921
  e.preventDefault();
3922
  e.stopPropagation();
3940
  itemsWrapper.append(button);
3941
  }
3942
 
3943
+ var button = $('<li class="wf-padding-add-top-small"><a href="#" class="wf-btn wf-btn-callout-subtle wf-btn-default" role="button">' + __('Close') + '</a></li>');
3944
  button.find('a').css('width', opts.width).on('click', function(e) {
3945
  e.preventDefault();
3946
  e.stopPropagation();
js/{admin.ajaxWatcher.1623076348.js → admin.ajaxWatcher.1629122067.js} RENAMED
@@ -1,3 +1,5 @@
 
 
1
  (function($, document, window) {
2
  var __ = window.wfi18n.__;
3
  var sprintf = window.wfi18n.sprintf;
@@ -42,7 +44,7 @@
42
  $.wordfenceBox({
43
  closeButton: false,
44
  width: '400px',
45
- html: "<h3>" + __('Background Request Blocked') + "</h3><p>" + sprintf(__("Wordfence Firewall blocked a background request to WordPress for the URL %s. If this occurred as a result of an intentional action, you may consider allowlisting the request to allow it in the future."), "<code>" + requestURLEscaped + "</code>") + "</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>",
46
  onComplete: function() {
47
  $('#background-block-dismiss').click(function(event) {
48
  event.preventDefault();
@@ -84,8 +86,7 @@
84
  }
85
  $(function() {
86
  wordfenceAJAXWatcher.init();
 
87
  });
88
 
89
  }(jQuery, document, window));
90
-
91
- !function(t,e,i){function n(i,n,o){var r=e.createElement(i);return n&&(r.id=Z+n),o&&(r.style.cssText=o),t(r)}function o(){return i.innerHeight?i.innerHeight:t(i).height()}function r(e,i){i!==Object(i)&&(i={}),this.cache={},this.el=e,this.value=function(e){var n;return void 0===this.cache[e]&&(n=t(this.el).attr("data-wfbox-"+e),void 0!==n?this.cache[e]=n:void 0!==i[e]?this.cache[e]=i[e]:void 0!==X[e]&&(this.cache[e]=X[e])),this.cache[e]},this.get=function(e){var i=this.value(e);return t.isFunction(i)?i.call(this.el,this):i}}function h(t){var e=W.length,i=(A+t)%e;return 0>i?e+i:i}function a(t,e){return Math.round((/%/.test(t)?("x"===e?E.width():o())/100:1)*parseInt(t,10))}function s(t,e){return t.get("photo")||t.get("photoRegex").test(e)}function l(t,e){return t.get("retinaUrl")&&i.devicePixelRatio>1?e.replace(t.get("photoRegex"),t.get("retinaSuffix")):e}function d(t){"contains"in x[0]&&!x[0].contains(t.target)&&t.target!==v[0]&&(t.stopPropagation(),x.focus())}function c(t){c.str!==t&&(x.add(v).removeClass(c.str).addClass(t),c.str=t)}function g(e){A=0,e&&e!==!1&&"nofollow"!==e?(W=t("."+tt).filter(function(){var i=t.data(this,Y),n=new r(this,i);return n.get("rel")===e}),A=W.index(_.el),-1===A&&(W=W.add(_.el),A=W.length-1)):W=t(_.el)}function u(i){t(e).trigger(i),at.triggerHandler(i)}function f(i){var o;if(!G){if(o=t(i).data(Y),_=new r(i,o),g(_.get("rel")),!U){U=$=!0,c(_.get("className")),x.css({visibility:"hidden",display:"block",opacity:""}),I=n(st,"LoadedContent","width:0; height:0; overflow:hidden; visibility:hidden"),b.css({width:"",height:""}).append(I),j=T.height()+k.height()+b.outerHeight(!0)-b.height(),D=C.width()+H.width()+b.outerWidth(!0)-b.width(),N=I.outerHeight(!0),z=I.outerWidth(!0);var h=a(_.get("initialWidth"),"x"),s=a(_.get("initialHeight"),"y"),l=_.get("maxWidth"),f=_.get("maxHeight");_.w=Math.max((l!==!1?Math.min(h,a(l,"x")):h)-z-D,0),_.h=Math.max((f!==!1?Math.min(s,a(f,"y")):s)-N-j,0),I.css({width:"",height:_.h}),J.position(),u(et),_.get("onOpen"),O.add(F).hide(),x.focus(),_.get("trapFocus")&&e.addEventListener&&(e.addEventListener("focus",d,!0),at.one(rt,function(){e.removeEventListener("focus",d,!0)})),_.get("returnFocus")&&at.one(rt,function(){t(_.el).focus()})}var p=parseFloat(_.get("opacity"));v.css({opacity:p===p?p:"",cursor:_.get("overlayClose")?"pointer":"",visibility:"visible"}).show(),_.get("closeButton")?P.html(_.get("close")).appendTo(b):P.appendTo("<div/>"),w()}}function p(){x||(V=!1,E=t(i),x=n(st).attr({id:Y,"class":t.support.opacity===!1?Z+"IE":"",role:"dialog",tabindex:"-1"}).hide(),v=n(st,"Overlay").hide(),L=t([n(st,"LoadingOverlay")[0],n(st,"LoadingGraphic")[0]]),y=n(st,"Wrapper"),b=n(st,"Content").append(F=n(st,"Title"),R=n(st,"Current"),K=t('<button type="button"/>').attr({id:Z+"Previous"}),B=t('<button type="button"/>').attr({id:Z+"Next"}),S=t('<button type="button"/>').attr({id:Z+"Slideshow"}),L),P=t('<button type="button"/>').attr({id:Z+"Close"}),y.append(n(st).append(n(st,"TopLeft"),T=n(st,"TopCenter"),n(st,"TopRight")),n(st,!1,"clear:left").append(C=n(st,"MiddleLeft"),b,H=n(st,"MiddleRight")),n(st,!1,"clear:left").append(n(st,"BottomLeft"),k=n(st,"BottomCenter"),n(st,"BottomRight"))).find("div div").css({"float":"left"}),M=n(st,!1,"position:absolute; width:9999px; visibility:hidden; display:none; max-width:none;"),O=B.add(K).add(R).add(S)),e.body&&!x.parent().length&&t(e.body).append(v,x.append(y,M))}function m(){function i(t){t.which>1||t.shiftKey||t.altKey||t.metaKey||t.ctrlKey||(t.preventDefault(),f(this))}return x?(V||(V=!0,B.click(function(){J.next()}),K.click(function(){J.prev()}),P.click(function(){J.close()}),v.click(function(){_.get("overlayClose")&&J.close()}),t(e).bind("keydown."+Z,function(t){var e=t.keyCode;U&&_.get("escKey")&&27===e&&(t.preventDefault(),J.close()),U&&_.get("arrowKey")&&W[1]&&!t.altKey&&(37===e?(t.preventDefault(),K.click()):39===e&&(t.preventDefault(),B.click()))}),t.isFunction(t.fn.on)?t(e).on("click."+Z,"."+tt,i):t("."+tt).live("click."+Z,i)),!0):!1}function w(){var e,o,r,h=J.prep,d=++lt;if($=!0,q=!1,u(ht),u(it),_.get("onLoad"),_.h=_.get("height")?a(_.get("height"),"y")-N-j:_.get("innerHeight")&&a(_.get("innerHeight"),"y"),_.w=_.get("width")?a(_.get("width"),"x")-z-D:_.get("innerWidth")&&a(_.get("innerWidth"),"x"),_.mw=_.w,_.mh=_.h,_.get("maxWidth")&&(_.mw=a(_.get("maxWidth"),"x")-z-D,_.mw=_.w&&_.w<_.mw?_.w:_.mw),_.get("maxHeight")&&(_.mh=a(_.get("maxHeight"),"y")-N-j,_.mh=_.h&&_.h<_.mh?_.h:_.mh),e=_.get("href"),Q=setTimeout(function(){L.show()},100),_.get("inline")){var c=t(e).eq(0);r=t("<div>").hide().insertBefore(c),at.one(ht,function(){r.replaceWith(c)}),h(c)}else _.get("iframe")?h(" "):_.get("html")?h(_.get("html")):s(_,e)?(e=l(_,e),q=_.get("createImg"),t(q).addClass(Z+"Photo").bind("error."+Z,function(){h(n(st,"Error").html(_.get("imgError")))}).one("load",function(){d===lt&&setTimeout(function(){var e;_.get("retinaImage")&&i.devicePixelRatio>1&&(q.height=q.height/i.devicePixelRatio,q.width=q.width/i.devicePixelRatio),_.get("scalePhotos")&&(o=function(){q.height-=q.height*e,q.width-=q.width*e},_.mw&&q.width>_.mw&&(e=(q.width-_.mw)/q.width,o()),_.mh&&q.height>_.mh&&(e=(q.height-_.mh)/q.height,o())),_.h&&(q.style.marginTop=Math.max(_.mh-q.height,0)/2+"px"),W[1]&&(_.get("loop")||W[A+1])&&(q.style.cursor="pointer",t(q).bind("click."+Z,function(){J.next()})),q.style.width=q.width+"px",q.style.height=q.height+"px",h(q)},1)}),q.src=e):e&&M.load(e,_.get("data"),function(e,i){d===lt&&h("error"===i?n(st,"Error").html(_.get("xhrError")):t(this).contents())})}var v,x,y,b,T,C,H,k,W,E,I,M,L,F,R,S,B,K,P,O,_,j,D,N,z,A,q,U,$,G,Q,J,V,X={html:!1,photo:!1,iframe:!1,inline:!1,transition:"elastic",speed:300,fadeOut:300,width:!1,initialWidth:"600",innerWidth:!1,maxWidth:!1,height:!1,initialHeight:"450",innerHeight:!1,maxHeight:!1,scalePhotos:!0,scrolling:!0,opacity:.9,preloading:!0,className:!1,overlayClose:!0,escKey:!0,arrowKey:!0,top:!1,bottom:!1,left:!1,right:!1,fixed:!1,data:void 0,closeButton:!0,fastIframe:!0,open:!1,reposition:!0,loop:!0,slideshow:!1,slideshowAuto:!0,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",photoRegex:/\.(gif|png|jp(e|g|eg)|bmp|ico|webp|jxr|svg)((#|\?).*)?$/i,retinaImage:!1,retinaUrl:!1,retinaSuffix:"@2x.$1",current:"image {current} of {total}",previous:"previous",next:"next",close:"close",xhrError:"This content failed to load.",imgError:"This image failed to load.",returnFocus:!0,trapFocus:!0,onOpen:!1,onLoad:!1,onComplete:!1,onCleanup:!1,onClosed:!1,rel:function(){return this.rel},href:function(){return t(this).attr("href")},title:function(){return this.title},createImg:function(){var e=new Image,i=t(this).data("cbox-img-attrs");return"object"==typeof i&&t.each(i,function(t,i){e[t]=i}),e},createIframe:function(){var i=e.createElement("iframe"),n=t(this).data("cbox-iframe-attrs");return"object"==typeof n&&t.each(n,function(t,e){i[t]=e}),"frameBorder"in i&&(i.frameBorder=0),"allowTransparency"in i&&(i.allowTransparency="true"),i.name=(new Date).getTime(),i.allowFullscreen=!0,i}},Y="wordfenceBox",Z="wfbox",tt=Z+"Element",et=Z+"_open",it=Z+"_load",nt=Z+"_complete",ot=Z+"_cleanup",rt=Z+"_closed",ht=Z+"_purge",at=t("<a/>"),st="div",lt=0,dt={},ct=function(){function t(){clearTimeout(h)}function e(){(_.get("loop")||W[A+1])&&(t(),h=setTimeout(J.next,_.get("slideshowSpeed")))}function i(){S.html(_.get("slideshowStop")).unbind(s).one(s,n),at.bind(nt,e).bind(it,t),x.removeClass(a+"off").addClass(a+"on")}function n(){t(),at.unbind(nt,e).unbind(it,t),S.html(_.get("slideshowStart")).unbind(s).one(s,function(){J.next(),i()}),x.removeClass(a+"on").addClass(a+"off")}function o(){r=!1,S.hide(),t(),at.unbind(nt,e).unbind(it,t),x.removeClass(a+"off "+a+"on")}var r,h,a=Z+"Slideshow_",s="click."+Z;return function(){r?_.get("slideshow")||(at.unbind(ot,o),o()):_.get("slideshow")&&W[1]&&(r=!0,at.one(ot,o),_.get("slideshowAuto")?i():n(),S.show())}}();t[Y]||(t(p),J=t.fn[Y]=t[Y]=function(e,i){var n,o=this;return e=e||{},t.isFunction(o)&&(o=t("<a/>"),e.open=!0),o[0]?(p(),m()&&(i&&(e.onComplete=i),o.each(function(){var i=t.data(this,Y)||{};t.data(this,Y,t.extend(i,e))}).addClass(tt),n=new r(o[0],e),n.get("open")&&f(o[0])),o):o},J.position=function(e,i){function n(){T[0].style.width=k[0].style.width=b[0].style.width=parseInt(x[0].style.width,10)-D+"px",b[0].style.height=C[0].style.height=H[0].style.height=parseInt(x[0].style.height,10)-j+"px"}var r,h,s,l=0,d=0,c=x.offset();if(E.unbind("resize."+Z),x.css({top:-9e4,left:-9e4}),h=E.scrollTop(),s=E.scrollLeft(),_.get("fixed")?(c.top-=h,c.left-=s,x.css({position:"fixed"})):(l=h,d=s,x.css({position:"absolute"})),d+=_.get("right")!==!1?Math.max(E.width()-_.w-z-D-a(_.get("right"),"x"),0):_.get("left")!==!1?a(_.get("left"),"x"):Math.round(Math.max(E.width()-_.w-z-D,0)/2),l+=_.get("bottom")!==!1?Math.max(o()-_.h-N-j-a(_.get("bottom"),"y"),0):_.get("top")!==!1?a(_.get("top"),"y"):Math.round(Math.max(o()-_.h-N-j,0)/2),x.css({top:c.top,left:c.left,visibility:"visible"}),y[0].style.width=y[0].style.height="9999px",r={width:_.w+z+D,height:_.h+N+j,top:l,left:d},e){var g=0;t.each(r,function(t){return r[t]!==dt[t]?void(g=e):void 0}),e=g}dt=r,e||x.css(r),x.dequeue().animate(r,{duration:e||0,complete:function(){n(),$=!1,y[0].style.width=_.w+z+D+"px",y[0].style.height=_.h+N+j+"px",_.get("reposition")&&setTimeout(function(){E.bind("resize."+Z,J.position)},1),t.isFunction(i)&&i()},step:n})},J.resize=function(t){var e;U&&(t=t||{},t.width&&(_.w=a(t.width,"x")-z-D),t.innerWidth&&(_.w=a(t.innerWidth,"x")),I.css({width:_.w}),t.height&&(_.h=a(t.height,"y")-N-j),t.innerHeight&&(_.h=a(t.innerHeight,"y")),t.innerHeight||t.height||(e=I.scrollTop(),I.css({height:"auto"}),_.h=I.height()),I.css({height:_.h}),e&&I.scrollTop(e),J.position("none"===_.get("transition")?0:_.get("speed")))},J.prep=function(i){function o(){return _.w=_.w||I.width(),_.w=_.mw&&_.mw<_.w?_.mw:_.w,_.w}function a(){return _.h=_.h||I.height(),_.h=_.mh&&_.mh<_.h?_.mh:_.h,_.h}if(U){var d,g="none"===_.get("transition")?0:_.get("speed");I.remove(),I=n(st,"LoadedContent").append(i),I.hide().appendTo(M.show()).css({width:o(),overflow:_.get("scrolling")?"auto":"hidden"}).css({height:a()}).prependTo(b),M.hide(),t(q).css({"float":"none"}),c(_.get("className")),d=function(){function i(){t.support.opacity===!1&&x[0].style.removeAttribute("filter")}var n,o,a=W.length;U&&(o=function(){clearTimeout(Q),L.hide(),u(nt),_.get("onComplete")},F.html(_.get("title")).show(),I.show(),a>1?("string"==typeof _.get("current")&&R.html(_.get("current").replace("{current}",A+1).replace("{total}",a)).show(),B[_.get("loop")||a-1>A?"show":"hide"]().html(_.get("next")),K[_.get("loop")||A?"show":"hide"]().html(_.get("previous")),ct(),_.get("preloading")&&t.each([h(-1),h(1)],function(){var i,n=W[this],o=new r(n,t.data(n,Y)),h=o.get("href");h&&s(o,h)&&(h=l(o,h),i=e.createElement("img"),i.src=h)})):O.hide(),_.get("iframe")?(n=_.get("createIframe"),_.get("scrolling")||(n.scrolling="no"),t(n).attr({src:_.get("href"),"class":Z+"Iframe"}).one("load",o).appendTo(I),at.one(ht,function(){n.src="//about:blank"}),_.get("fastIframe")&&t(n).trigger("load")):o(),"fade"===_.get("transition")?x.fadeTo(g,1,i):i())},"fade"===_.get("transition")?x.fadeTo(g,0,function(){J.position(0,d)}):J.position(g,d)}},J.next=function(){!$&&W[1]&&(_.get("loop")||W[A+1])&&(A=h(1),f(W[A]))},J.prev=function(){!$&&W[1]&&(_.get("loop")||A)&&(A=h(-1),f(W[A]))},J.close=function(){U&&!G&&(G=!0,U=!1,u(ot),_.get("onCleanup"),E.unbind("."+Z),v.fadeTo(_.get("fadeOut")||0,0),x.stop().fadeTo(_.get("fadeOut")||0,0,function(){x.hide(),v.hide(),u(ht),I.remove(),setTimeout(function(){G=!1,u(rt),_.get("onClosed")},1)}))},J.remove=function(){x&&(x.stop(),t[Y].close(),x.stop(!1,!0).remove(),v.remove(),G=!1,x=null,t("."+tt).removeData(Y).removeClass(tt),t(e).unbind("click."+Z).unbind("keydown."+Z))},J.element=function(){return t(_.el)},J.settings=X)}(jQuery,document,window);
1
+ !function(t,e,i){function n(i,n,o){var r=e.createElement(i);return n&&(r.id=Z+n),o&&(r.style.cssText=o),t(r)}function o(){return i.innerHeight?i.innerHeight:t(i).height()}function r(e,i){i!==Object(i)&&(i={}),this.cache={},this.el=e,this.value=function(e){var n;return void 0===this.cache[e]&&(n=t(this.el).attr("data-wfbox-"+e),void 0!==n?this.cache[e]=n:void 0!==i[e]?this.cache[e]=i[e]:void 0!==X[e]&&(this.cache[e]=X[e])),this.cache[e]},this.get=function(e){var i=this.value(e);return t.isFunction(i)?i.call(this.el,this):i}}function h(t){var e=W.length,i=(A+t)%e;return 0>i?e+i:i}function a(t,e){return Math.round((/%/.test(t)?("x"===e?E.width():o())/100:1)*parseInt(t,10))}function s(t,e){return t.get("photo")||t.get("photoRegex").test(e)}function l(t,e){return t.get("retinaUrl")&&i.devicePixelRatio>1?e.replace(t.get("photoRegex"),t.get("retinaSuffix")):e}function d(t){"contains"in x[0]&&!x[0].contains(t.target)&&t.target!==v[0]&&(t.stopPropagation(),x.focus())}function c(t){c.str!==t&&(x.add(v).removeClass(c.str).addClass(t),c.str=t)}function g(e){A=0,e&&e!==!1&&"nofollow"!==e?(W=t("."+tt).filter(function(){var i=t.data(this,Y),n=new r(this,i);return n.get("rel")===e}),A=W.index(_.el),-1===A&&(W=W.add(_.el),A=W.length-1)):W=t(_.el)}function u(i){t(e).trigger(i),at.triggerHandler(i)}function f(i){var o;if(!G){if(o=t(i).data(Y),_=new r(i,o),g(_.get("rel")),!U){U=$=!0,c(_.get("className")),x.css({visibility:"hidden",display:"block",opacity:""}),I=n(st,"LoadedContent","width:0; height:0; overflow:hidden; visibility:hidden"),b.css({width:"",height:""}).append(I),j=T.height()+k.height()+b.outerHeight(!0)-b.height(),D=C.width()+H.width()+b.outerWidth(!0)-b.width(),N=I.outerHeight(!0),z=I.outerWidth(!0);var h=a(_.get("initialWidth"),"x"),s=a(_.get("initialHeight"),"y"),l=_.get("maxWidth"),f=_.get("maxHeight");_.w=Math.max((l!==!1?Math.min(h,a(l,"x")):h)-z-D,0),_.h=Math.max((f!==!1?Math.min(s,a(f,"y")):s)-N-j,0),I.css({width:"",height:_.h}),J.position(),u(et),_.get("onOpen"),O.add(F).hide(),x.focus(),_.get("trapFocus")&&e.addEventListener&&(e.addEventListener("focus",d,!0),at.one(rt,function(){e.removeEventListener("focus",d,!0)})),_.get("returnFocus")&&at.one(rt,function(){t(_.el).focus()})}var p=parseFloat(_.get("opacity"));v.css({opacity:p===p?p:"",cursor:_.get("overlayClose")?"pointer":"",visibility:"visible"}).show(),_.get("closeButton")?P.html(_.get("close")).appendTo(b):P.appendTo("<div/>"),w()}}function p(){x||(V=!1,E=t(i),x=n(st).attr({id:Y,"class":t.support.opacity===!1?Z+"IE":"",role:"dialog",tabindex:"-1"}).hide(),v=n(st,"Overlay").hide(),L=t([n(st,"LoadingOverlay")[0],n(st,"LoadingGraphic")[0]]),y=n(st,"Wrapper"),b=n(st,"Content").append(F=n(st,"Title"),R=n(st,"Current"),K=t('<button type="button"/>').attr({id:Z+"Previous"}),B=t('<button type="button"/>').attr({id:Z+"Next"}),S=t('<button type="button"/>').attr({id:Z+"Slideshow"}),L),P=t('<button type="button"/>').attr({id:Z+"Close"}),y.append(n(st).append(n(st,"TopLeft"),T=n(st,"TopCenter"),n(st,"TopRight")),n(st,!1,"clear:left").append(C=n(st,"MiddleLeft"),b,H=n(st,"MiddleRight")),n(st,!1,"clear:left").append(n(st,"BottomLeft"),k=n(st,"BottomCenter"),n(st,"BottomRight"))).find("div div").css({"float":"left"}),M=n(st,!1,"position:absolute; width:9999px; visibility:hidden; display:none; max-width:none;"),O=B.add(K).add(R).add(S)),e.body&&!x.parent().length&&t(e.body).append(v,x.append(y,M))}function m(){function i(t){t.which>1||t.shiftKey||t.altKey||t.metaKey||t.ctrlKey||(t.preventDefault(),f(this))}return x?(V||(V=!0,B.click(function(){J.next()}),K.click(function(){J.prev()}),P.click(function(){J.close()}),v.click(function(){_.get("overlayClose")&&J.close()}),t(e).bind("keydown."+Z,function(t){var e=t.keyCode;U&&_.get("escKey")&&27===e&&(t.preventDefault(),J.close()),U&&_.get("arrowKey")&&W[1]&&!t.altKey&&(37===e?(t.preventDefault(),K.click()):39===e&&(t.preventDefault(),B.click()))}),t.isFunction(t.fn.on)?t(e).on("click."+Z,"."+tt,i):t("."+tt).live("click."+Z,i)),!0):!1}function w(){var e,o,r,h=J.prep,d=++lt;if($=!0,q=!1,u(ht),u(it),_.get("onLoad"),_.h=_.get("height")?a(_.get("height"),"y")-N-j:_.get("innerHeight")&&a(_.get("innerHeight"),"y"),_.w=_.get("width")?a(_.get("width"),"x")-z-D:_.get("innerWidth")&&a(_.get("innerWidth"),"x"),_.mw=_.w,_.mh=_.h,_.get("maxWidth")&&(_.mw=a(_.get("maxWidth"),"x")-z-D,_.mw=_.w&&_.w<_.mw?_.w:_.mw),_.get("maxHeight")&&(_.mh=a(_.get("maxHeight"),"y")-N-j,_.mh=_.h&&_.h<_.mh?_.h:_.mh),e=_.get("href"),Q=setTimeout(function(){L.show()},100),_.get("inline")){var c=t(e).eq(0);r=t("<div>").hide().insertBefore(c),at.one(ht,function(){r.replaceWith(c)}),h(c)}else _.get("iframe")?h(" "):_.get("html")?h(_.get("html")):s(_,e)?(e=l(_,e),q=_.get("createImg"),t(q).addClass(Z+"Photo").bind("error."+Z,function(){h(n(st,"Error").html(_.get("imgError")))}).one("load",function(){d===lt&&setTimeout(function(){var e;_.get("retinaImage")&&i.devicePixelRatio>1&&(q.height=q.height/i.devicePixelRatio,q.width=q.width/i.devicePixelRatio),_.get("scalePhotos")&&(o=function(){q.height-=q.height*e,q.width-=q.width*e},_.mw&&q.width>_.mw&&(e=(q.width-_.mw)/q.width,o()),_.mh&&q.height>_.mh&&(e=(q.height-_.mh)/q.height,o())),_.h&&(q.style.marginTop=Math.max(_.mh-q.height,0)/2+"px"),W[1]&&(_.get("loop")||W[A+1])&&(q.style.cursor="pointer",t(q).bind("click."+Z,function(){J.next()})),q.style.width=q.width+"px",q.style.height=q.height+"px",h(q)},1)}),q.src=e):e&&M.load(e,_.get("data"),function(e,i){d===lt&&h("error"===i?n(st,"Error").html(_.get("xhrError")):t(this).contents())})}var v,x,y,b,T,C,H,k,W,E,I,M,L,F,R,S,B,K,P,O,_,j,D,N,z,A,q,U,$,G,Q,J,V,X={html:!1,photo:!1,iframe:!1,inline:!1,transition:"elastic",speed:300,fadeOut:300,width:!1,initialWidth:"600",innerWidth:!1,maxWidth:!1,height:!1,initialHeight:"450",innerHeight:!1,maxHeight:!1,scalePhotos:!0,scrolling:!0,opacity:.9,preloading:!0,className:!1,overlayClose:!0,escKey:!0,arrowKey:!0,top:!1,bottom:!1,left:!1,right:!1,fixed:!1,data:void 0,closeButton:!0,fastIframe:!0,open:!1,reposition:!0,loop:!0,slideshow:!1,slideshowAuto:!0,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",photoRegex:/\.(gif|png|jp(e|g|eg)|bmp|ico|webp|jxr|svg)((#|\?).*)?$/i,retinaImage:!1,retinaUrl:!1,retinaSuffix:"@2x.$1",current:"image {current} of {total}",previous:"previous",next:"next",close:"close",xhrError:"This content failed to load.",imgError:"This image failed to load.",returnFocus:!0,trapFocus:!0,onOpen:!1,onLoad:!1,onComplete:!1,onCleanup:!1,onClosed:!1,rel:function(){return this.rel},href:function(){return t(this).attr("href")},title:function(){return this.title},createImg:function(){var e=new Image,i=t(this).data("cbox-img-attrs");return"object"==typeof i&&t.each(i,function(t,i){e[t]=i}),e},createIframe:function(){var i=e.createElement("iframe"),n=t(this).data("cbox-iframe-attrs");return"object"==typeof n&&t.each(n,function(t,e){i[t]=e}),"frameBorder"in i&&(i.frameBorder=0),"allowTransparency"in i&&(i.allowTransparency="true"),i.name=(new Date).getTime(),i.allowFullscreen=!0,i}},Y="wordfenceBox",Z="wfbox",tt=Z+"Element",et=Z+"_open",it=Z+"_load",nt=Z+"_complete",ot=Z+"_cleanup",rt=Z+"_closed",ht=Z+"_purge",at=t("<a/>"),st="div",lt=0,dt={},ct=function(){function t(){clearTimeout(h)}function e(){(_.get("loop")||W[A+1])&&(t(),h=setTimeout(J.next,_.get("slideshowSpeed")))}function i(){S.html(_.get("slideshowStop")).unbind(s).one(s,n),at.bind(nt,e).bind(it,t),x.removeClass(a+"off").addClass(a+"on")}function n(){t(),at.unbind(nt,e).unbind(it,t),S.html(_.get("slideshowStart")).unbind(s).one(s,function(){J.next(),i()}),x.removeClass(a+"on").addClass(a+"off")}function o(){r=!1,S.hide(),t(),at.unbind(nt,e).unbind(it,t),x.removeClass(a+"off "+a+"on")}var r,h,a=Z+"Slideshow_",s="click."+Z;return function(){r?_.get("slideshow")||(at.unbind(ot,o),o()):_.get("slideshow")&&W[1]&&(r=!0,at.one(ot,o),_.get("slideshowAuto")?i():n(),S.show())}}();t[Y]||(t(p),J=t.fn[Y]=t[Y]=function(e,i){var n,o=this;return e=e||{},t.isFunction(o)&&(o=t("<a/>"),e.open=!0),o[0]?(p(),m()&&(i&&(e.onComplete=i),o.each(function(){var i=t.data(this,Y)||{};t.data(this,Y,t.extend(i,e))}).addClass(tt),n=new r(o[0],e),n.get("open")&&f(o[0])),o):o},J.position=function(e,i){function n(){T[0].style.width=k[0].style.width=b[0].style.width=parseInt(x[0].style.width,10)-D+"px",b[0].style.height=C[0].style.height=H[0].style.height=parseInt(x[0].style.height,10)-j+"px"}var r,h,s,l=0,d=0,c=x.offset();if(E.unbind("resize."+Z),x.css({top:-9e4,left:-9e4}),h=E.scrollTop(),s=E.scrollLeft(),_.get("fixed")?(c.top-=h,c.left-=s,x.css({position:"fixed"})):(l=h,d=s,x.css({position:"absolute"})),d+=_.get("right")!==!1?Math.max(E.width()-_.w-z-D-a(_.get("right"),"x"),0):_.get("left")!==!1?a(_.get("left"),"x"):Math.round(Math.max(E.width()-_.w-z-D,0)/2),l+=_.get("bottom")!==!1?Math.max(o()-_.h-N-j-a(_.get("bottom"),"y"),0):_.get("top")!==!1?a(_.get("top"),"y"):Math.round(Math.max(o()-_.h-N-j,0)/2),x.css({top:c.top,left:c.left,visibility:"visible"}),y[0].style.width=y[0].style.height="9999px",r={width:_.w+z+D,height:_.h+N+j,top:l,left:d},e){var g=0;t.each(r,function(t){return r[t]!==dt[t]?void(g=e):void 0}),e=g}dt=r,e||x.css(r),x.dequeue().animate(r,{duration:e||0,complete:function(){n(),$=!1,y[0].style.width=_.w+z+D+"px",y[0].style.height=_.h+N+j+"px",_.get("reposition")&&setTimeout(function(){E.bind("resize."+Z,J.position)},1),t.isFunction(i)&&i()},step:n})},J.resize=function(t){var e;U&&(t=t||{},t.width&&(_.w=a(t.width,"x")-z-D),t.innerWidth&&(_.w=a(t.innerWidth,"x")),I.css({width:_.w}),t.height&&(_.h=a(t.height,"y")-N-j),t.innerHeight&&(_.h=a(t.innerHeight,"y")),t.innerHeight||t.height||(e=I.scrollTop(),I.css({height:"auto"}),_.h=I.height()),I.css({height:_.h}),e&&I.scrollTop(e),J.position("none"===_.get("transition")?0:_.get("speed")))},J.prep=function(i){function o(){return _.w=_.w||I.width(),_.w=_.mw&&_.mw<_.w?_.mw:_.w,_.w}function a(){return _.h=_.h||I.height(),_.h=_.mh&&_.mh<_.h?_.mh:_.h,_.h}if(U){var d,g="none"===_.get("transition")?0:_.get("speed");I.remove(),I=n(st,"LoadedContent").append(i),I.hide().appendTo(M.show()).css({width:o(),overflow:_.get("scrolling")?"auto":"hidden"}).css({height:a()}).prependTo(b),M.hide(),t(q).css({"float":"none"}),c(_.get("className")),d=function(){function i(){t.support.opacity===!1&&x[0].style.removeAttribute("filter")}var n,o,a=W.length;U&&(o=function(){clearTimeout(Q),L.hide(),u(nt),_.get("onComplete")},F.html(_.get("title")).show(),I.show(),a>1?("string"==typeof _.get("current")&&R.html(_.get("current").replace("{current}",A+1).replace("{total}",a)).show(),B[_.get("loop")||a-1>A?"show":"hide"]().html(_.get("next")),K[_.get("loop")||A?"show":"hide"]().html(_.get("previous")),ct(),_.get("preloading")&&t.each([h(-1),h(1)],function(){var i,n=W[this],o=new r(n,t.data(n,Y)),h=o.get("href");h&&s(o,h)&&(h=l(o,h),i=e.createElement("img"),i.src=h)})):O.hide(),_.get("iframe")?(n=_.get("createIframe"),_.get("scrolling")||(n.scrolling="no"),t(n).attr({src:_.get("href"),"class":Z+"Iframe"}).one("load",o).appendTo(I),at.one(ht,function(){n.src="//about:blank"}),_.get("fastIframe")&&t(n).trigger("load")):o(),"fade"===_.get("transition")?x.fadeTo(g,1,i):i())},"fade"===_.get("transition")?x.fadeTo(g,0,function(){J.position(0,d)}):J.position(g,d)}},J.next=function(){!$&&W[1]&&(_.get("loop")||W[A+1])&&(A=h(1),f(W[A]))},J.prev=function(){!$&&W[1]&&(_.get("loop")||A)&&(A=h(-1),f(W[A]))},J.close=function(){U&&!G&&(G=!0,U=!1,u(ot),_.get("onCleanup"),E.unbind("."+Z),v.fadeTo(_.get("fadeOut")||0,0),x.stop().fadeTo(_.get("fadeOut")||0,0,function(){x.hide(),v.hide(),u(ht),I.remove(),setTimeout(function(){G=!1,u(rt),_.get("onClosed")},1)}))},J.remove=function(){x&&(x.stop(),t[Y].close(),x.stop(!1,!0).remove(),v.remove(),G=!1,x=null,t("."+tt).removeData(Y).removeClass(tt),t(e).unbind("click."+Z).unbind("keydown."+Z))},J.element=function(){return t(_.el)},J.settings=X)}(jQuery,document,window);
2
+
3
  (function($, document, window) {
4
  var __ = window.wfi18n.__;
5
  var sprintf = window.wfi18n.sprintf;
44
  $.wordfenceBox({
45
  closeButton: false,
46
  width: '400px',
47
+ html: "<h3>" + __('Background Request Blocked') + "</h3><p>" + sprintf(__("Wordfence Firewall blocked a background request to WordPress for the URL %s. If this occurred as a result of an intentional action, you may consider allowlisting the request to allow it in the future."), "<code>" + requestURLEscaped + "</code>") + "</p><p class=\"wf-right\"><a href=\"https://www.wordfence.com/help/?query=ajax-blocked\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wfboxhelp\" title=\"" + __("Help") + "\"></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>",
48
  onComplete: function() {
49
  $('#background-block-dismiss').click(function(event) {
50
  event.preventDefault();
86
  }
87
  $(function() {
88
  wordfenceAJAXWatcher.init();
89
+ $('#wfboxPrevious, #wfboxNext, #wfboxSlideshow').remove();
90
  });
91
 
92
  }(jQuery, document, window));
 
 
js/{admin.liveTraffic.1623076348.js → admin.liveTraffic.1629122067.js} RENAMED
File without changes
js/{date.1623076348.js → date.1629122067.js} RENAMED
File without changes
js/{jquery-ui-timepicker-addon.1623076348.js → jquery-ui-timepicker-addon.1629122067.js} RENAMED
File without changes
js/{jquery.colorbox-min.1623076348.js → jquery.colorbox-min.1629122067.js} RENAMED
File without changes
js/{jquery.colorbox.1623076348.js → jquery.colorbox.1629122067.js} RENAMED
File without changes
js/{jquery.dataTables.min.1623076348.js → jquery.dataTables.min.1629122067.js} RENAMED
File without changes
js/{jquery.qrcode.min.1623076348.js → jquery.qrcode.min.1629122067.js} RENAMED
File without changes
js/{jquery.tmpl.min.1623076348.js → jquery.tmpl.min.1629122067.js} RENAMED
File without changes
js/{jquery.tools.min.1623076348.js → jquery.tools.min.1629122067.js} RENAMED
File without changes
js/knockout-3.3.0.1623076348.js DELETED
@@ -1,115 +0,0 @@
1
- /*!
2
- * Knockout JavaScript library v3.3.0
3
- * (c) Steven Sanderson - http://knockoutjs.com/
4
- * License: MIT (http://www.opensource.org/licenses/mit-license.php)
5
- */
6
-
7
- (function() {(function(p){var y=this||(0,eval)("this"),w=y.document,M=y.navigator,u=y.jQuery,E=y.JSON;(function(p){"function"===typeof define&&define.amd?define(["exports","require"],p):"function"===typeof require&&"object"===typeof exports&&"object"===typeof module?p(module.exports||exports):p(y.ko={})})(function(N,O){function J(a,d){return null===a||typeof a in Q?a===d:!1}function R(a,d){var c;return function(){c||(c=setTimeout(function(){c=p;a()},d))}}function S(a,d){var c;return function(){clearTimeout(c);
8
- c=setTimeout(a,d)}}function K(b,d,c,e){a.d[b]={init:function(b,k,h,l,g){var m,x;a.w(function(){var q=a.a.c(k()),n=!c!==!q,r=!x;if(r||d||n!==m)r&&a.Z.oa()&&(x=a.a.la(a.e.childNodes(b),!0)),n?(r||a.e.T(b,a.a.la(x)),a.Ja(e?e(g,q):g,b)):a.e.ma(b),m=n},null,{q:b});return{controlsDescendantBindings:!0}}};a.h.ka[b]=!1;a.e.R[b]=!0}var a="undefined"!==typeof N?N:{};a.b=function(b,d){for(var c=b.split("."),e=a,f=0;f<c.length-1;f++)e=e[c[f]];e[c[c.length-1]]=d};a.D=function(a,d,c){a[d]=c};a.version="3.3.0";
9
- a.b("version",a.version);a.a=function(){function b(a,b){for(var c in a)a.hasOwnProperty(c)&&b(c,a[c])}function d(a,b){if(b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function c(a,b){a.__proto__=b;return a}function e(b,c,g,d){var e=b[c].match(m)||[];a.a.o(g.match(m),function(b){a.a.ga(e,b,d)});b[c]=e.join(" ")}var f={__proto__:[]}instanceof Array,k={},h={};k[M&&/Firefox\/2/i.test(M.userAgent)?"KeyboardEvent":"UIEvents"]=["keyup","keydown","keypress"];k.MouseEvents="click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" ");
10
- b(k,function(a,b){if(b.length)for(var c=0,g=b.length;c<g;c++)h[b[c]]=a});var l={propertychange:!0},g=w&&function(){for(var a=3,b=w.createElement("div"),c=b.getElementsByTagName("i");b.innerHTML="\x3c!--[if gt IE "+ ++a+"]><i></i><![endif]--\x3e",c[0];);return 4<a?a:p}(),m=/\S+/g;return{Bb:["authenticity_token",/^__RequestVerificationToken(_.*)?$/],o:function(a,b){for(var c=0,g=a.length;c<g;c++)b(a[c],c)},m:function(a,b){if("function"==typeof Array.prototype.indexOf)return Array.prototype.indexOf.call(a,
11
- b);for(var c=0,g=a.length;c<g;c++)if(a[c]===b)return c;return-1},vb:function(a,b,c){for(var g=0,d=a.length;g<d;g++)if(b.call(c,a[g],g))return a[g];return null},ya:function(b,c){var g=a.a.m(b,c);0<g?b.splice(g,1):0===g&&b.shift()},wb:function(b){b=b||[];for(var c=[],g=0,d=b.length;g<d;g++)0>a.a.m(c,b[g])&&c.push(b[g]);return c},Ka:function(a,b){a=a||[];for(var c=[],g=0,d=a.length;g<d;g++)c.push(b(a[g],g));return c},xa:function(a,b){a=a||[];for(var c=[],g=0,d=a.length;g<d;g++)b(a[g],g)&&c.push(a[g]);
12
- return c},ia:function(a,b){if(b instanceof Array)a.push.apply(a,b);else for(var c=0,g=b.length;c<g;c++)a.push(b[c]);return a},ga:function(b,c,g){var d=a.a.m(a.a.cb(b),c);0>d?g&&b.push(c):g||b.splice(d,1)},za:f,extend:d,Fa:c,Ga:f?c:d,A:b,pa:function(a,b){if(!a)return a;var c={},g;for(g in a)a.hasOwnProperty(g)&&(c[g]=b(a[g],g,a));return c},Ra:function(b){for(;b.firstChild;)a.removeNode(b.firstChild)},Jb:function(b){b=a.a.O(b);for(var c=(b[0]&&b[0].ownerDocument||w).createElement("div"),g=0,d=b.length;g<
13
- d;g++)c.appendChild(a.S(b[g]));return c},la:function(b,c){for(var g=0,d=b.length,e=[];g<d;g++){var m=b[g].cloneNode(!0);e.push(c?a.S(m):m)}return e},T:function(b,c){a.a.Ra(b);if(c)for(var g=0,d=c.length;g<d;g++)b.appendChild(c[g])},Qb:function(b,c){var g=b.nodeType?[b]:b;if(0<g.length){for(var d=g[0],e=d.parentNode,m=0,f=c.length;m<f;m++)e.insertBefore(c[m],d);m=0;for(f=g.length;m<f;m++)a.removeNode(g[m])}},na:function(a,b){if(a.length){for(b=8===b.nodeType&&b.parentNode||b;a.length&&a[0].parentNode!==
14
- b;)a.splice(0,1);if(1<a.length){var c=a[0],g=a[a.length-1];for(a.length=0;c!==g;)if(a.push(c),c=c.nextSibling,!c)return;a.push(g)}}return a},Sb:function(a,b){7>g?a.setAttribute("selected",b):a.selected=b},ib:function(a){return null===a||a===p?"":a.trim?a.trim():a.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},Dc:function(a,b){a=a||"";return b.length>a.length?!1:a.substring(0,b.length)===b},jc:function(a,b){if(a===b)return!0;if(11===a.nodeType)return!1;if(b.contains)return b.contains(3===a.nodeType?
15
- a.parentNode:a);if(b.compareDocumentPosition)return 16==(b.compareDocumentPosition(a)&16);for(;a&&a!=b;)a=a.parentNode;return!!a},Qa:function(b){return a.a.jc(b,b.ownerDocument.documentElement)},tb:function(b){return!!a.a.vb(b,a.a.Qa)},v:function(a){return a&&a.tagName&&a.tagName.toLowerCase()},n:function(b,c,d){var m=g&&l[c];if(!m&&u)u(b).bind(c,d);else if(m||"function"!=typeof b.addEventListener)if("undefined"!=typeof b.attachEvent){var e=function(a){d.call(b,a)},f="on"+c;b.attachEvent(f,e);a.a.C.fa(b,
16
- function(){b.detachEvent(f,e)})}else throw Error("Browser doesn't support addEventListener or attachEvent");else b.addEventListener(c,d,!1)},qa:function(b,c){if(!b||!b.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var g;"input"===a.a.v(b)&&b.type&&"click"==c.toLowerCase()?(g=b.type,g="checkbox"==g||"radio"==g):g=!1;if(u&&!g)u(b).trigger(c);else if("function"==typeof w.createEvent)if("function"==typeof b.dispatchEvent)g=w.createEvent(h[c]||"HTMLEvents"),g.initEvent(c,
17
- !0,!0,y,0,0,0,0,0,!1,!1,!1,!1,0,b),b.dispatchEvent(g);else throw Error("The supplied element doesn't support dispatchEvent");else if(g&&b.click)b.click();else if("undefined"!=typeof b.fireEvent)b.fireEvent("on"+c);else throw Error("Browser doesn't support triggering events");},c:function(b){return a.F(b)?b():b},cb:function(b){return a.F(b)?b.B():b},Ia:function(b,c,g){var d;c&&("object"===typeof b.classList?(d=b.classList[g?"add":"remove"],a.a.o(c.match(m),function(a){d.call(b.classList,a)})):"string"===
18
- typeof b.className.baseVal?e(b.className,"baseVal",c,g):e(b,"className",c,g))},Ha:function(b,c){var g=a.a.c(c);if(null===g||g===p)g="";var d=a.e.firstChild(b);!d||3!=d.nodeType||a.e.nextSibling(d)?a.e.T(b,[b.ownerDocument.createTextNode(g)]):d.data=g;a.a.mc(b)},Rb:function(a,b){a.name=b;if(7>=g)try{a.mergeAttributes(w.createElement("<input name='"+a.name+"'/>"),!1)}catch(c){}},mc:function(a){9<=g&&(a=1==a.nodeType?a:a.parentNode,a.style&&(a.style.zoom=a.style.zoom))},kc:function(a){if(g){var b=a.style.width;
19
- a.style.width=0;a.style.width=b}},Bc:function(b,c){b=a.a.c(b);c=a.a.c(c);for(var g=[],d=b;d<=c;d++)g.push(d);return g},O:function(a){for(var b=[],c=0,g=a.length;c<g;c++)b.push(a[c]);return b},Hc:6===g,Ic:7===g,M:g,Db:function(b,c){for(var g=a.a.O(b.getElementsByTagName("input")).concat(a.a.O(b.getElementsByTagName("textarea"))),d="string"==typeof c?function(a){return a.name===c}:function(a){return c.test(a.name)},m=[],e=g.length-1;0<=e;e--)d(g[e])&&m.push(g[e]);return m},yc:function(b){return"string"==
20
- typeof b&&(b=a.a.ib(b))?E&&E.parse?E.parse(b):(new Function("return "+b))():null},jb:function(b,c,g){if(!E||!E.stringify)throw Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js");return E.stringify(a.a.c(b),c,g)},zc:function(c,g,d){d=d||{};var m=d.params||{},e=d.includeFields||this.Bb,f=c;if("object"==typeof c&&"form"===a.a.v(c))for(var f=c.action,
21
- l=e.length-1;0<=l;l--)for(var k=a.a.Db(c,e[l]),h=k.length-1;0<=h;h--)m[k[h].name]=k[h].value;g=a.a.c(g);var s=w.createElement("form");s.style.display="none";s.action=f;s.method="post";for(var p in g)c=w.createElement("input"),c.type="hidden",c.name=p,c.value=a.a.jb(a.a.c(g[p])),s.appendChild(c);b(m,function(a,b){var c=w.createElement("input");c.type="hidden";c.name=a;c.value=b;s.appendChild(c)});w.body.appendChild(s);d.submitter?d.submitter(s):s.submit();setTimeout(function(){s.parentNode.removeChild(s)},
22
- 0)}}}();a.b("utils",a.a);a.b("utils.arrayForEach",a.a.o);a.b("utils.arrayFirst",a.a.vb);a.b("utils.arrayFilter",a.a.xa);a.b("utils.arrayGetDistinctValues",a.a.wb);a.b("utils.arrayIndexOf",a.a.m);a.b("utils.arrayMap",a.a.Ka);a.b("utils.arrayPushAll",a.a.ia);a.b("utils.arrayRemoveItem",a.a.ya);a.b("utils.extend",a.a.extend);a.b("utils.fieldsIncludedWithJsonPost",a.a.Bb);a.b("utils.getFormFields",a.a.Db);a.b("utils.peekObservable",a.a.cb);a.b("utils.postJson",a.a.zc);a.b("utils.parseJson",a.a.yc);a.b("utils.registerEventHandler",
23
- a.a.n);a.b("utils.stringifyJson",a.a.jb);a.b("utils.range",a.a.Bc);a.b("utils.toggleDomNodeCssClass",a.a.Ia);a.b("utils.triggerEvent",a.a.qa);a.b("utils.unwrapObservable",a.a.c);a.b("utils.objectForEach",a.a.A);a.b("utils.addOrRemoveItem",a.a.ga);a.b("utils.setTextContent",a.a.Ha);a.b("unwrap",a.a.c);Function.prototype.bind||(Function.prototype.bind=function(a){var d=this;if(1===arguments.length)return function(){return d.apply(a,arguments)};var c=Array.prototype.slice.call(arguments,1);return function(){var e=
24
- c.slice(0);e.push.apply(e,arguments);return d.apply(a,e)}});a.a.f=new function(){function a(b,k){var h=b[c];if(!h||"null"===h||!e[h]){if(!k)return p;h=b[c]="ko"+d++;e[h]={}}return e[h]}var d=0,c="__ko__"+(new Date).getTime(),e={};return{get:function(c,d){var e=a(c,!1);return e===p?p:e[d]},set:function(c,d,e){if(e!==p||a(c,!1)!==p)a(c,!0)[d]=e},clear:function(a){var b=a[c];return b?(delete e[b],a[c]=null,!0):!1},I:function(){return d++ +c}}};a.b("utils.domData",a.a.f);a.b("utils.domData.clear",a.a.f.clear);
25
- a.a.C=new function(){function b(b,d){var e=a.a.f.get(b,c);e===p&&d&&(e=[],a.a.f.set(b,c,e));return e}function d(c){var e=b(c,!1);if(e)for(var e=e.slice(0),l=0;l<e.length;l++)e[l](c);a.a.f.clear(c);a.a.C.cleanExternalData(c);if(f[c.nodeType])for(e=c.firstChild;c=e;)e=c.nextSibling,8===c.nodeType&&d(c)}var c=a.a.f.I(),e={1:!0,8:!0,9:!0},f={1:!0,9:!0};return{fa:function(a,c){if("function"!=typeof c)throw Error("Callback must be a function");b(a,!0).push(c)},Pb:function(d,e){var f=b(d,!1);f&&(a.a.ya(f,
26
- e),0==f.length&&a.a.f.set(d,c,p))},S:function(b){if(e[b.nodeType]&&(d(b),f[b.nodeType])){var c=[];a.a.ia(c,b.getElementsByTagName("*"));for(var l=0,g=c.length;l<g;l++)d(c[l])}return b},removeNode:function(b){a.S(b);b.parentNode&&b.parentNode.removeChild(b)},cleanExternalData:function(a){u&&"function"==typeof u.cleanData&&u.cleanData([a])}}};a.S=a.a.C.S;a.removeNode=a.a.C.removeNode;a.b("cleanNode",a.S);a.b("removeNode",a.removeNode);a.b("utils.domNodeDisposal",a.a.C);a.b("utils.domNodeDisposal.addDisposeCallback",
27
- a.a.C.fa);a.b("utils.domNodeDisposal.removeDisposeCallback",a.a.C.Pb);(function(){a.a.ca=function(b,d){var c;if(u)if(u.parseHTML)c=u.parseHTML(b,d)||[];else{if((c=u.clean([b],d))&&c[0]){for(var e=c[0];e.parentNode&&11!==e.parentNode.nodeType;)e=e.parentNode;e.parentNode&&e.parentNode.removeChild(e)}}else{(e=d)||(e=w);c=e.parentWindow||e.defaultView||y;var f=a.a.ib(b).toLowerCase(),e=e.createElement("div"),f=f.match(/^<(thead|tbody|tfoot)/)&&[1,"<table>","</table>"]||!f.indexOf("<tr")&&[2,"<table><tbody>",
28
- "</tbody></table>"]||(!f.indexOf("<td")||!f.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||[0,"",""],k="ignored<div>"+f[1]+b+f[2]+"</div>";for("function"==typeof c.innerShiv?e.appendChild(c.innerShiv(k)):e.innerHTML=k;f[0]--;)e=e.lastChild;c=a.a.O(e.lastChild.childNodes)}return c};a.a.gb=function(b,d){a.a.Ra(b);d=a.a.c(d);if(null!==d&&d!==p)if("string"!=typeof d&&(d=d.toString()),u)u(b).html(d);else for(var c=a.a.ca(d,b.ownerDocument),e=0;e<c.length;e++)b.appendChild(c[e])}})();
29
- a.b("utils.parseHtmlFragment",a.a.ca);a.b("utils.setHtml",a.a.gb);a.H=function(){function b(c,d){if(c)if(8==c.nodeType){var f=a.H.Lb(c.nodeValue);null!=f&&d.push({ic:c,wc:f})}else if(1==c.nodeType)for(var f=0,k=c.childNodes,h=k.length;f<h;f++)b(k[f],d)}var d={};return{$a:function(a){if("function"!=typeof a)throw Error("You can only pass a function to ko.memoization.memoize()");var b=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);
30
- d[b]=a;return"\x3c!--[ko_memo:"+b+"]--\x3e"},Wb:function(a,b){var f=d[a];if(f===p)throw Error("Couldn't find any memo with ID "+a+". Perhaps it's already been unmemoized.");try{return f.apply(null,b||[]),!0}finally{delete d[a]}},Xb:function(c,d){var f=[];b(c,f);for(var k=0,h=f.length;k<h;k++){var l=f[k].ic,g=[l];d&&a.a.ia(g,d);a.H.Wb(f[k].wc,g);l.nodeValue="";l.parentNode&&l.parentNode.removeChild(l)}},Lb:function(a){return(a=a.match(/^\[ko_memo\:(.*?)\]$/))?a[1]:null}}}();a.b("memoization",a.H);
31
- a.b("memoization.memoize",a.H.$a);a.b("memoization.unmemoize",a.H.Wb);a.b("memoization.parseMemoText",a.H.Lb);a.b("memoization.unmemoizeDomNodeAndDescendants",a.H.Xb);a.Sa={throttle:function(b,d){b.throttleEvaluation=d;var c=null;return a.j({read:b,write:function(a){clearTimeout(c);c=setTimeout(function(){b(a)},d)}})},rateLimit:function(a,d){var c,e,f;"number"==typeof d?c=d:(c=d.timeout,e=d.method);f="notifyWhenChangesStop"==e?S:R;a.Za(function(a){return f(a,c)})},notify:function(a,d){a.equalityComparer=
32
- "always"==d?null:J}};var Q={undefined:1,"boolean":1,number:1,string:1};a.b("extenders",a.Sa);a.Ub=function(b,d,c){this.da=b;this.La=d;this.hc=c;this.Gb=!1;a.D(this,"dispose",this.p)};a.Ub.prototype.p=function(){this.Gb=!0;this.hc()};a.Q=function(){a.a.Ga(this,a.Q.fn);this.G={};this.rb=1};var z={U:function(b,d,c){var e=this;c=c||"change";var f=new a.Ub(e,d?b.bind(d):b,function(){a.a.ya(e.G[c],f);e.ua&&e.ua(c)});e.ja&&e.ja(c);e.G[c]||(e.G[c]=[]);e.G[c].push(f);return f},notifySubscribers:function(b,
33
- d){d=d||"change";"change"===d&&this.Yb();if(this.Ba(d))try{a.k.xb();for(var c=this.G[d].slice(0),e=0,f;f=c[e];++e)f.Gb||f.La(b)}finally{a.k.end()}},Aa:function(){return this.rb},pc:function(a){return this.Aa()!==a},Yb:function(){++this.rb},Za:function(b){var d=this,c=a.F(d),e,f,k;d.ta||(d.ta=d.notifySubscribers,d.notifySubscribers=function(a,b){b&&"change"!==b?"beforeChange"===b?d.pb(a):d.ta(a,b):d.qb(a)});var h=b(function(){c&&k===d&&(k=d());e=!1;d.Wa(f,k)&&d.ta(f=k)});d.qb=function(a){e=!0;k=a;
34
- h()};d.pb=function(a){e||(f=a,d.ta(a,"beforeChange"))}},Ba:function(a){return this.G[a]&&this.G[a].length},nc:function(b){if(b)return this.G[b]&&this.G[b].length||0;var d=0;a.a.A(this.G,function(a,b){d+=b.length});return d},Wa:function(a,d){return!this.equalityComparer||!this.equalityComparer(a,d)},extend:function(b){var d=this;b&&a.a.A(b,function(b,e){var f=a.Sa[b];"function"==typeof f&&(d=f(d,e)||d)});return d}};a.D(z,"subscribe",z.U);a.D(z,"extend",z.extend);a.D(z,"getSubscriptionsCount",z.nc);
35
- a.a.za&&a.a.Fa(z,Function.prototype);a.Q.fn=z;a.Hb=function(a){return null!=a&&"function"==typeof a.U&&"function"==typeof a.notifySubscribers};a.b("subscribable",a.Q);a.b("isSubscribable",a.Hb);a.Z=a.k=function(){function b(a){c.push(e);e=a}function d(){e=c.pop()}var c=[],e,f=0;return{xb:b,end:d,Ob:function(b){if(e){if(!a.Hb(b))throw Error("Only subscribable things can act as dependencies");e.La(b,b.ac||(b.ac=++f))}},u:function(a,c,e){try{return b(),a.apply(c,e||[])}finally{d()}},oa:function(){if(e)return e.w.oa()},
36
- Ca:function(){if(e)return e.Ca}}}();a.b("computedContext",a.Z);a.b("computedContext.getDependenciesCount",a.Z.oa);a.b("computedContext.isInitial",a.Z.Ca);a.b("computedContext.isSleeping",a.Z.Jc);a.b("ignoreDependencies",a.Gc=a.k.u);a.r=function(b){function d(){if(0<arguments.length)return d.Wa(c,arguments[0])&&(d.X(),c=arguments[0],d.W()),this;a.k.Ob(d);return c}var c=b;a.Q.call(d);a.a.Ga(d,a.r.fn);d.B=function(){return c};d.W=function(){d.notifySubscribers(c)};d.X=function(){d.notifySubscribers(c,
37
- "beforeChange")};a.D(d,"peek",d.B);a.D(d,"valueHasMutated",d.W);a.D(d,"valueWillMutate",d.X);return d};a.r.fn={equalityComparer:J};var H=a.r.Ac="__ko_proto__";a.r.fn[H]=a.r;a.a.za&&a.a.Fa(a.r.fn,a.Q.fn);a.Ta=function(b,d){return null===b||b===p||b[H]===p?!1:b[H]===d?!0:a.Ta(b[H],d)};a.F=function(b){return a.Ta(b,a.r)};a.Da=function(b){return"function"==typeof b&&b[H]===a.r||"function"==typeof b&&b[H]===a.j&&b.qc?!0:!1};a.b("observable",a.r);a.b("isObservable",a.F);a.b("isWriteableObservable",a.Da);
38
- a.b("isWritableObservable",a.Da);a.ba=function(b){b=b||[];if("object"!=typeof b||!("length"in b))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");b=a.r(b);a.a.Ga(b,a.ba.fn);return b.extend({trackArrayChanges:!0})};a.ba.fn={remove:function(b){for(var d=this.B(),c=[],e="function"!=typeof b||a.F(b)?function(a){return a===b}:b,f=0;f<d.length;f++){var k=d[f];e(k)&&(0===c.length&&this.X(),c.push(k),d.splice(f,1),f--)}c.length&&this.W();return c},
39
- removeAll:function(b){if(b===p){var d=this.B(),c=d.slice(0);this.X();d.splice(0,d.length);this.W();return c}return b?this.remove(function(c){return 0<=a.a.m(b,c)}):[]},destroy:function(b){var d=this.B(),c="function"!=typeof b||a.F(b)?function(a){return a===b}:b;this.X();for(var e=d.length-1;0<=e;e--)c(d[e])&&(d[e]._destroy=!0);this.W()},destroyAll:function(b){return b===p?this.destroy(function(){return!0}):b?this.destroy(function(d){return 0<=a.a.m(b,d)}):[]},indexOf:function(b){var d=this();return a.a.m(d,
40
- b)},replace:function(a,d){var c=this.indexOf(a);0<=c&&(this.X(),this.B()[c]=d,this.W())}};a.a.o("pop push reverse shift sort splice unshift".split(" "),function(b){a.ba.fn[b]=function(){var a=this.B();this.X();this.yb(a,b,arguments);a=a[b].apply(a,arguments);this.W();return a}});a.a.o(["slice"],function(b){a.ba.fn[b]=function(){var a=this();return a[b].apply(a,arguments)}});a.a.za&&a.a.Fa(a.ba.fn,a.r.fn);a.b("observableArray",a.ba);a.Sa.trackArrayChanges=function(b){function d(){if(!c){c=!0;var g=
41
- b.notifySubscribers;b.notifySubscribers=function(a,b){b&&"change"!==b||++k;return g.apply(this,arguments)};var d=[].concat(b.B()||[]);e=null;f=b.U(function(c){c=[].concat(c||[]);if(b.Ba("arrayChange")){var g;if(!e||1<k)e=a.a.Ma(d,c,{sparse:!0});g=e}d=c;e=null;k=0;g&&g.length&&b.notifySubscribers(g,"arrayChange")})}}if(!b.yb){var c=!1,e=null,f,k=0,h=b.ja,l=b.ua;b.ja=function(a){h&&h.call(b,a);"arrayChange"===a&&d()};b.ua=function(a){l&&l.call(b,a);"arrayChange"!==a||b.Ba("arrayChange")||(f.p(),c=!1)};
42
- b.yb=function(b,d,f){function l(a,b,c){return h[h.length]={status:a,value:b,index:c}}if(c&&!k){var h=[],r=b.length,v=f.length,t=0;switch(d){case "push":t=r;case "unshift":for(d=0;d<v;d++)l("added",f[d],t+d);break;case "pop":t=r-1;case "shift":r&&l("deleted",b[t],t);break;case "splice":d=Math.min(Math.max(0,0>f[0]?r+f[0]:f[0]),r);for(var r=1===v?r:Math.min(d+(f[1]||0),r),v=d+v-2,t=Math.max(r,v),G=[],A=[],p=2;d<t;++d,++p)d<r&&A.push(l("deleted",b[d],d)),d<v&&G.push(l("added",f[p],d));a.a.Cb(A,G);break;
43
- default:return}e=h}}}};a.w=a.j=function(b,d,c){function e(a,b,c){if(I&&b===g)throw Error("A 'pure' computed must not be called recursively");B[a]=c;c.sa=F++;c.ea=b.Aa()}function f(){var a,b;for(a in B)if(B.hasOwnProperty(a)&&(b=B[a],b.da.pc(b.ea)))return!0}function k(){!s&&B&&a.a.A(B,function(a,b){b.p&&b.p()});B=null;F=0;G=!0;s=r=!1}function h(){var a=g.throttleEvaluation;a&&0<=a?(clearTimeout(z),z=setTimeout(function(){l(!0)},a)):g.nb?g.nb():l(!0)}function l(b){if(!v&&!G){if(y&&y()){if(!t){w();return}}else t=
44
- !1;v=!0;try{var c=B,m=F,f=I?p:!F;a.k.xb({La:function(a,b){G||(m&&c[b]?(e(b,a,c[b]),delete c[b],--m):B[b]||e(b,a,s?{da:a}:a.U(h)))},w:g,Ca:f});B={};F=0;try{var l=d?A.call(d):A()}finally{a.k.end(),m&&!s&&a.a.A(c,function(a,b){b.p&&b.p()}),r=!1}g.Wa(n,l)&&(s||q(n,"beforeChange"),n=l,s?g.Yb():b&&q(n));f&&q(n,"awake")}finally{v=!1}F||w()}}function g(){if(0<arguments.length){if("function"===typeof C)C.apply(d,arguments);else throw Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");
45
- return this}a.k.Ob(g);(r||s&&f())&&l();return n}function m(){(r&&!F||s&&f())&&l();return n}function x(){return r||0<F}function q(a,b){g.notifySubscribers(a,b)}var n,r=!0,v=!1,t=!1,G=!1,A=b,I=!1,s=!1;A&&"object"==typeof A?(c=A,A=c.read):(c=c||{},A||(A=c.read));if("function"!=typeof A)throw Error("Pass a function that returns the value of the ko.computed");var C=c.write,D=c.disposeWhenNodeIsRemoved||c.q||null,u=c.disposeWhen||c.Pa,y=u,w=k,B={},F=0,z=null;d||(d=c.owner);a.Q.call(g);a.a.Ga(g,a.j.fn);
46
- g.B=m;g.oa=function(){return F};g.qc="function"===typeof C;g.p=function(){w()};g.$=x;var T=g.Za;g.Za=function(a){T.call(g,a);g.nb=function(){g.pb(n);r=!0;g.qb(g)}};c.pure?(s=I=!0,g.ja=function(b){if(!G&&s&&"change"==b){s=!1;if(r||f())B=null,F=0,r=!0,l();else{var c=[];a.a.A(B,function(a,b){c[b.sa]=a});a.a.o(c,function(a,b){var c=B[a],g=c.da.U(h);g.sa=b;g.ea=c.ea;B[a]=g})}G||q(n,"awake")}},g.ua=function(b){G||"change"!=b||g.Ba("change")||(a.a.A(B,function(a,b){b.p&&(B[a]={da:b.da,sa:b.sa,ea:b.ea},b.p())}),
47
- s=!0,q(p,"asleep"))},g.bc=g.Aa,g.Aa=function(){s&&(r||f())&&l();return g.bc()}):c.deferEvaluation&&(g.ja=function(a){"change"!=a&&"beforeChange"!=a||m()});a.D(g,"peek",g.B);a.D(g,"dispose",g.p);a.D(g,"isActive",g.$);a.D(g,"getDependenciesCount",g.oa);D&&(t=!0,D.nodeType&&(y=function(){return!a.a.Qa(D)||u&&u()}));s||c.deferEvaluation||l();D&&x()&&D.nodeType&&(w=function(){a.a.C.Pb(D,w);k()},a.a.C.fa(D,w));return g};a.sc=function(b){return a.Ta(b,a.j)};z=a.r.Ac;a.j[z]=a.r;a.j.fn={equalityComparer:J};
48
- a.j.fn[z]=a.j;a.a.za&&a.a.Fa(a.j.fn,a.Q.fn);a.b("dependentObservable",a.j);a.b("computed",a.j);a.b("isComputed",a.sc);a.Nb=function(b,d){if("function"===typeof b)return a.w(b,d,{pure:!0});b=a.a.extend({},b);b.pure=!0;return a.w(b,d)};a.b("pureComputed",a.Nb);(function(){function b(a,f,k){k=k||new c;a=f(a);if("object"!=typeof a||null===a||a===p||a instanceof Date||a instanceof String||a instanceof Number||a instanceof Boolean)return a;var h=a instanceof Array?[]:{};k.save(a,h);d(a,function(c){var g=
49
- f(a[c]);switch(typeof g){case "boolean":case "number":case "string":case "function":h[c]=g;break;case "object":case "undefined":var d=k.get(g);h[c]=d!==p?d:b(g,f,k)}});return h}function d(a,b){if(a instanceof Array){for(var c=0;c<a.length;c++)b(c);"function"==typeof a.toJSON&&b("toJSON")}else for(c in a)b(c)}function c(){this.keys=[];this.mb=[]}a.Vb=function(c){if(0==arguments.length)throw Error("When calling ko.toJS, pass the object you want to convert.");return b(c,function(b){for(var c=0;a.F(b)&&
50
- 10>c;c++)b=b();return b})};a.toJSON=function(b,c,d){b=a.Vb(b);return a.a.jb(b,c,d)};c.prototype={save:function(b,c){var d=a.a.m(this.keys,b);0<=d?this.mb[d]=c:(this.keys.push(b),this.mb.push(c))},get:function(b){b=a.a.m(this.keys,b);return 0<=b?this.mb[b]:p}}})();a.b("toJS",a.Vb);a.b("toJSON",a.toJSON);(function(){a.i={s:function(b){switch(a.a.v(b)){case "option":return!0===b.__ko__hasDomDataOptionValue__?a.a.f.get(b,a.d.options.ab):7>=a.a.M?b.getAttributeNode("value")&&b.getAttributeNode("value").specified?
51
- b.value:b.text:b.value;case "select":return 0<=b.selectedIndex?a.i.s(b.options[b.selectedIndex]):p;default:return b.value}},Y:function(b,d,c){switch(a.a.v(b)){case "option":switch(typeof d){case "string":a.a.f.set(b,a.d.options.ab,p);"__ko__hasDomDataOptionValue__"in b&&delete b.__ko__hasDomDataOptionValue__;b.value=d;break;default:a.a.f.set(b,a.d.options.ab,d),b.__ko__hasDomDataOptionValue__=!0,b.value="number"===typeof d?d:""}break;case "select":if(""===d||null===d)d=p;for(var e=-1,f=0,k=b.options.length,
52
- h;f<k;++f)if(h=a.i.s(b.options[f]),h==d||""==h&&d===p){e=f;break}if(c||0<=e||d===p&&1<b.size)b.selectedIndex=e;break;default:if(null===d||d===p)d="";b.value=d}}}})();a.b("selectExtensions",a.i);a.b("selectExtensions.readValue",a.i.s);a.b("selectExtensions.writeValue",a.i.Y);a.h=function(){function b(b){b=a.a.ib(b);123===b.charCodeAt(0)&&(b=b.slice(1,-1));var c=[],d=b.match(e),x,h=[],n=0;if(d){d.push(",");for(var r=0,v;v=d[r];++r){var t=v.charCodeAt(0);if(44===t){if(0>=n){c.push(x&&h.length?{key:x,
53
- value:h.join("")}:{unknown:x||h.join("")});x=n=0;h=[];continue}}else if(58===t){if(!n&&!x&&1===h.length){x=h.pop();continue}}else 47===t&&r&&1<v.length?(t=d[r-1].match(f))&&!k[t[0]]&&(b=b.substr(b.indexOf(v)+1),d=b.match(e),d.push(","),r=-1,v="/"):40===t||123===t||91===t?++n:41===t||125===t||93===t?--n:x||h.length||34!==t&&39!==t||(v=v.slice(1,-1));h.push(v)}}return c}var d=["true","false","null","undefined"],c=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,e=RegExp("\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'|/(?:[^/\\\\]|\\\\.)*/w*|[^\\s:,/][^,\"'{}()/:[\\]]*[^\\s,\"'{}()/:[\\]]|[^\\s]",
54
- "g"),f=/[\])"'A-Za-z0-9_$]+$/,k={"in":1,"return":1,"typeof":1},h={};return{ka:[],V:h,bb:b,Ea:function(e,g){function m(b,g){var e;if(!r){var l=a.getBindingHandler(b);if(l&&l.preprocess&&!(g=l.preprocess(g,b,m)))return;if(l=h[b])e=g,0<=a.a.m(d,e)?e=!1:(l=e.match(c),e=null===l?!1:l[1]?"Object("+l[1]+")"+l[2]:e),l=e;l&&k.push("'"+b+"':function(_z){"+e+"=_z}")}n&&(g="function(){return "+g+" }");f.push("'"+b+"':"+g)}g=g||{};var f=[],k=[],n=g.valueAccessors,r=g.bindingParams,v="string"===typeof e?b(e):e;
55
- a.a.o(v,function(a){m(a.key||a.unknown,a.value)});k.length&&m("_ko_property_writers","{"+k.join(",")+" }");return f.join(",")},vc:function(a,b){for(var c=0;c<a.length;c++)if(a[c].key==b)return!0;return!1},ra:function(b,c,d,e,f){if(b&&a.F(b))!a.Da(b)||f&&b.B()===e||b(e);else if((b=c.get("_ko_property_writers"))&&b[d])b[d](e)}}}();a.b("expressionRewriting",a.h);a.b("expressionRewriting.bindingRewriteValidators",a.h.ka);a.b("expressionRewriting.parseObjectLiteral",a.h.bb);a.b("expressionRewriting.preProcessBindings",
56
- a.h.Ea);a.b("expressionRewriting._twoWayBindings",a.h.V);a.b("jsonExpressionRewriting",a.h);a.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson",a.h.Ea);(function(){function b(a){return 8==a.nodeType&&k.test(f?a.text:a.nodeValue)}function d(a){return 8==a.nodeType&&h.test(f?a.text:a.nodeValue)}function c(a,c){for(var e=a,f=1,l=[];e=e.nextSibling;){if(d(e)&&(f--,0===f))return l;l.push(e);b(e)&&f++}if(!c)throw Error("Cannot find closing comment tag to match: "+a.nodeValue);return null}function e(a,
57
- b){var d=c(a,b);return d?0<d.length?d[d.length-1].nextSibling:a.nextSibling:null}var f=w&&"\x3c!--test--\x3e"===w.createComment("test").text,k=f?/^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/:/^\s*ko(?:\s+([\s\S]+))?\s*$/,h=f?/^\x3c!--\s*\/ko\s*--\x3e$/:/^\s*\/ko\s*$/,l={ul:!0,ol:!0};a.e={R:{},childNodes:function(a){return b(a)?c(a):a.childNodes},ma:function(c){if(b(c)){c=a.e.childNodes(c);for(var d=0,e=c.length;d<e;d++)a.removeNode(c[d])}else a.a.Ra(c)},T:function(c,d){if(b(c)){a.e.ma(c);for(var e=c.nextSibling,
58
- f=0,l=d.length;f<l;f++)e.parentNode.insertBefore(d[f],e)}else a.a.T(c,d)},Mb:function(a,c){b(a)?a.parentNode.insertBefore(c,a.nextSibling):a.firstChild?a.insertBefore(c,a.firstChild):a.appendChild(c)},Fb:function(c,d,e){e?b(c)?c.parentNode.insertBefore(d,e.nextSibling):e.nextSibling?c.insertBefore(d,e.nextSibling):c.appendChild(d):a.e.Mb(c,d)},firstChild:function(a){return b(a)?!a.nextSibling||d(a.nextSibling)?null:a.nextSibling:a.firstChild},nextSibling:function(a){b(a)&&(a=e(a));return a.nextSibling&&
59
- d(a.nextSibling)?null:a.nextSibling},oc:b,Fc:function(a){return(a=(f?a.text:a.nodeValue).match(k))?a[1]:null},Kb:function(c){if(l[a.a.v(c)]){var m=c.firstChild;if(m){do if(1===m.nodeType){var f;f=m.firstChild;var h=null;if(f){do if(h)h.push(f);else if(b(f)){var k=e(f,!0);k?f=k:h=[f]}else d(f)&&(h=[f]);while(f=f.nextSibling)}if(f=h)for(h=m.nextSibling,k=0;k<f.length;k++)h?c.insertBefore(f[k],h):c.appendChild(f[k])}while(m=m.nextSibling)}}}}})();a.b("virtualElements",a.e);a.b("virtualElements.allowedBindings",
60
- a.e.R);a.b("virtualElements.emptyNode",a.e.ma);a.b("virtualElements.insertAfter",a.e.Fb);a.b("virtualElements.prepend",a.e.Mb);a.b("virtualElements.setDomNodeChildren",a.e.T);(function(){a.L=function(){this.ec={}};a.a.extend(a.L.prototype,{nodeHasBindings:function(b){switch(b.nodeType){case 1:return null!=b.getAttribute("data-bind")||a.g.getComponentNameForNode(b);case 8:return a.e.oc(b);default:return!1}},getBindings:function(b,d){var c=this.getBindingsString(b,d),c=c?this.parseBindingsString(c,
61
- d,b):null;return a.g.sb(c,b,d,!1)},getBindingAccessors:function(b,d){var c=this.getBindingsString(b,d),c=c?this.parseBindingsString(c,d,b,{valueAccessors:!0}):null;return a.g.sb(c,b,d,!0)},getBindingsString:function(b){switch(b.nodeType){case 1:return b.getAttribute("data-bind");case 8:return a.e.Fc(b);default:return null}},parseBindingsString:function(b,d,c,e){try{var f=this.ec,k=b+(e&&e.valueAccessors||""),h;if(!(h=f[k])){var l,g="with($context){with($data||{}){return{"+a.h.Ea(b,e)+"}}}";l=new Function("$context",
62
- "$element",g);h=f[k]=l}return h(d,c)}catch(m){throw m.message="Unable to parse bindings.\nBindings value: "+b+"\nMessage: "+m.message,m;}}});a.L.instance=new a.L})();a.b("bindingProvider",a.L);(function(){function b(a){return function(){return a}}function d(a){return a()}function c(b){return a.a.pa(a.k.u(b),function(a,c){return function(){return b()[c]}})}function e(d,g,e){return"function"===typeof d?c(d.bind(null,g,e)):a.a.pa(d,b)}function f(a,b){return c(this.getBindings.bind(this,a,b))}function k(b,
63
- c,d){var g,e=a.e.firstChild(c),f=a.L.instance,m=f.preprocessNode;if(m){for(;g=e;)e=a.e.nextSibling(g),m.call(f,g);e=a.e.firstChild(c)}for(;g=e;)e=a.e.nextSibling(g),h(b,g,d)}function h(b,c,d){var e=!0,f=1===c.nodeType;f&&a.e.Kb(c);if(f&&d||a.L.instance.nodeHasBindings(c))e=g(c,null,b,d).shouldBindDescendants;e&&!x[a.a.v(c)]&&k(b,c,!f)}function l(b){var c=[],d={},g=[];a.a.A(b,function I(e){if(!d[e]){var f=a.getBindingHandler(e);f&&(f.after&&(g.push(e),a.a.o(f.after,function(c){if(b[c]){if(-1!==a.a.m(g,
64
- c))throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+g.join(", "));I(c)}}),g.length--),c.push({key:e,Eb:f}));d[e]=!0}});return c}function g(b,c,g,e){var m=a.a.f.get(b,q);if(!c){if(m)throw Error("You cannot apply bindings multiple times to the same element.");a.a.f.set(b,q,!0)}!m&&e&&a.Tb(b,g);var h;if(c&&"function"!==typeof c)h=c;else{var k=a.L.instance,x=k.getBindingAccessors||f,n=a.j(function(){(h=c?c(g,b):x.call(k,b,g))&&g.K&&g.K();return h},null,{q:b});
65
- h&&n.$()||(n=null)}var u;if(h){var w=n?function(a){return function(){return d(n()[a])}}:function(a){return h[a]},y=function(){return a.a.pa(n?n():h,d)};y.get=function(a){return h[a]&&d(w(a))};y.has=function(a){return a in h};e=l(h);a.a.o(e,function(c){var d=c.Eb.init,e=c.Eb.update,f=c.key;if(8===b.nodeType&&!a.e.R[f])throw Error("The binding '"+f+"' cannot be used with virtual elements");try{"function"==typeof d&&a.k.u(function(){var a=d(b,w(f),y,g.$data,g);if(a&&a.controlsDescendantBindings){if(u!==
66
- p)throw Error("Multiple bindings ("+u+" and "+f+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");u=f}}),"function"==typeof e&&a.j(function(){e(b,w(f),y,g.$data,g)},null,{q:b})}catch(m){throw m.message='Unable to process binding "'+f+": "+h[f]+'"\nMessage: '+m.message,m;}})}return{shouldBindDescendants:u===p}}function m(b){return b&&b instanceof a.N?b:new a.N(b)}a.d={};var x={script:!0,textarea:!0};a.getBindingHandler=function(b){return a.d[b]};
67
- a.N=function(b,c,d,g){var e=this,f="function"==typeof b&&!a.F(b),m,l=a.j(function(){var m=f?b():b,h=a.a.c(m);c?(c.K&&c.K(),a.a.extend(e,c),l&&(e.K=l)):(e.$parents=[],e.$root=h,e.ko=a);e.$rawData=m;e.$data=h;d&&(e[d]=h);g&&g(e,c,h);return e.$data},null,{Pa:function(){return m&&!a.a.tb(m)},q:!0});l.$()&&(e.K=l,l.equalityComparer=null,m=[],l.Zb=function(b){m.push(b);a.a.C.fa(b,function(b){a.a.ya(m,b);m.length||(l.p(),e.K=l=p)})})};a.N.prototype.createChildContext=function(b,c,d){return new a.N(b,this,
68
- c,function(a,b){a.$parentContext=b;a.$parent=b.$data;a.$parents=(b.$parents||[]).slice(0);a.$parents.unshift(a.$parent);d&&d(a)})};a.N.prototype.extend=function(b){return new a.N(this.K||this.$data,this,null,function(c,d){c.$rawData=d.$rawData;a.a.extend(c,"function"==typeof b?b():b)})};var q=a.a.f.I(),n=a.a.f.I();a.Tb=function(b,c){if(2==arguments.length)a.a.f.set(b,n,c),c.K&&c.K.Zb(b);else return a.a.f.get(b,n)};a.va=function(b,c,d){1===b.nodeType&&a.e.Kb(b);return g(b,c,m(d),!0)};a.cc=function(b,
69
- c,d){d=m(d);return a.va(b,e(c,d,b),d)};a.Ja=function(a,b){1!==b.nodeType&&8!==b.nodeType||k(m(a),b,!0)};a.ub=function(a,b){!u&&y.jQuery&&(u=y.jQuery);if(b&&1!==b.nodeType&&8!==b.nodeType)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");b=b||y.document.body;h(m(a),b,!0)};a.Oa=function(b){switch(b.nodeType){case 1:case 8:var c=a.Tb(b);if(c)return c;if(b.parentNode)return a.Oa(b.parentNode)}return p};a.gc=function(b){return(b=a.Oa(b))?
70
- b.$data:p};a.b("bindingHandlers",a.d);a.b("applyBindings",a.ub);a.b("applyBindingsToDescendants",a.Ja);a.b("applyBindingAccessorsToNode",a.va);a.b("applyBindingsToNode",a.cc);a.b("contextFor",a.Oa);a.b("dataFor",a.gc)})();(function(b){function d(d,e){var g=f.hasOwnProperty(d)?f[d]:b,m;g?g.U(e):(g=f[d]=new a.Q,g.U(e),c(d,function(a,b){var c=!(!b||!b.synchronous);k[d]={definition:a,tc:c};delete f[d];m||c?g.notifySubscribers(a):setTimeout(function(){g.notifySubscribers(a)},0)}),m=!0)}function c(a,b){e("getConfig",
71
- [a],function(c){c?e("loadComponent",[a,c],function(a){b(a,c)}):b(null,null)})}function e(c,d,g,f){f||(f=a.g.loaders.slice(0));var k=f.shift();if(k){var q=k[c];if(q){var n=!1;if(q.apply(k,d.concat(function(a){n?g(null):null!==a?g(a):e(c,d,g,f)}))!==b&&(n=!0,!k.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.");}else e(c,d,g,f)}else g(null)}var f={},k={};a.g={get:function(c,e){var g=k.hasOwnProperty(c)?k[c]:
72
- b;g?g.tc?a.k.u(function(){e(g.definition)}):setTimeout(function(){e(g.definition)},0):d(c,e)},zb:function(a){delete k[a]},ob:e};a.g.loaders=[];a.b("components",a.g);a.b("components.get",a.g.get);a.b("components.clearCachedDefinition",a.g.zb)})();(function(){function b(b,c,d,e){function k(){0===--v&&e(h)}var h={},v=2,t=d.template;d=d.viewModel;t?f(c,t,function(c){a.g.ob("loadTemplate",[b,c],function(a){h.template=a;k()})}):k();d?f(c,d,function(c){a.g.ob("loadViewModel",[b,c],function(a){h[l]=a;k()})}):
73
- k()}function d(a,b,c){if("function"===typeof b)c(function(a){return new b(a)});else if("function"===typeof b[l])c(b[l]);else if("instance"in b){var e=b.instance;c(function(){return e})}else"viewModel"in b?d(a,b.viewModel,c):a("Unknown viewModel value: "+b)}function c(b){switch(a.a.v(b)){case "script":return a.a.ca(b.text);case "textarea":return a.a.ca(b.value);case "template":if(e(b.content))return a.a.la(b.content.childNodes)}return a.a.la(b.childNodes)}function e(a){return y.DocumentFragment?a instanceof
74
- DocumentFragment:a&&11===a.nodeType}function f(a,b,c){"string"===typeof b.require?O||y.require?(O||y.require)([b.require],c):a("Uses require, but no AMD loader is present"):c(b)}function k(a){return function(b){throw Error("Component '"+a+"': "+b);}}var h={};a.g.register=function(b,c){if(!c)throw Error("Invalid configuration for "+b);if(a.g.Xa(b))throw Error("Component "+b+" is already registered");h[b]=c};a.g.Xa=function(a){return a in h};a.g.Ec=function(b){delete h[b];a.g.zb(b)};a.g.Ab={getConfig:function(a,
75
- b){b(h.hasOwnProperty(a)?h[a]:null)},loadComponent:function(a,c,d){var e=k(a);f(e,c,function(c){b(a,e,c,d)})},loadTemplate:function(b,d,f){b=k(b);if("string"===typeof d)f(a.a.ca(d));else if(d instanceof Array)f(d);else if(e(d))f(a.a.O(d.childNodes));else if(d.element)if(d=d.element,y.HTMLElement?d instanceof HTMLElement:d&&d.tagName&&1===d.nodeType)f(c(d));else if("string"===typeof d){var l=w.getElementById(d);l?f(c(l)):b("Cannot find element with ID "+d)}else b("Unknown element type: "+d);else b("Unknown template value: "+
76
- d)},loadViewModel:function(a,b,c){d(k(a),b,c)}};var l="createViewModel";a.b("components.register",a.g.register);a.b("components.isRegistered",a.g.Xa);a.b("components.unregister",a.g.Ec);a.b("components.defaultLoader",a.g.Ab);a.g.loaders.push(a.g.Ab);a.g.$b=h})();(function(){function b(b,e){var f=b.getAttribute("params");if(f){var f=d.parseBindingsString(f,e,b,{valueAccessors:!0,bindingParams:!0}),f=a.a.pa(f,function(d){return a.w(d,null,{q:b})}),k=a.a.pa(f,function(d){var e=d.B();return d.$()?a.w({read:function(){return a.a.c(d())},
77
- write:a.Da(e)&&function(a){d()(a)},q:b}):e});k.hasOwnProperty("$raw")||(k.$raw=f);return k}return{$raw:{}}}a.g.getComponentNameForNode=function(b){b=a.a.v(b);return a.g.Xa(b)&&b};a.g.sb=function(c,d,f,k){if(1===d.nodeType){var h=a.g.getComponentNameForNode(d);if(h){c=c||{};if(c.component)throw Error('Cannot use the "component" binding on a custom element matching a component');var l={name:h,params:b(d,f)};c.component=k?function(){return l}:l}}return c};var d=new a.L;9>a.a.M&&(a.g.register=function(a){return function(b){w.createElement(b);
78
- return a.apply(this,arguments)}}(a.g.register),w.createDocumentFragment=function(b){return function(){var d=b(),f=a.g.$b,k;for(k in f)f.hasOwnProperty(k)&&d.createElement(k);return d}}(w.createDocumentFragment))})();(function(b){function d(b,c,d){c=c.template;if(!c)throw Error("Component '"+b+"' has no template");b=a.a.la(c);a.e.T(d,b)}function c(a,b,c,d){var e=a.createViewModel;return e?e.call(a,d,{element:b,templateNodes:c}):d}var e=0;a.d.component={init:function(f,k,h,l,g){function m(){var a=x&&
79
- x.dispose;"function"===typeof a&&a.call(x);q=null}var x,q,n=a.a.O(a.e.childNodes(f));a.a.C.fa(f,m);a.w(function(){var l=a.a.c(k()),h,t;"string"===typeof l?h=l:(h=a.a.c(l.name),t=a.a.c(l.params));if(!h)throw Error("No component name specified");var p=q=++e;a.g.get(h,function(e){if(q===p){m();if(!e)throw Error("Unknown component '"+h+"'");d(h,e,f);var l=c(e,f,n,t);e=g.createChildContext(l,b,function(a){a.$component=l;a.$componentTemplateNodes=n});x=l;a.Ja(e,f)}})},null,{q:f});return{controlsDescendantBindings:!0}}};
80
- a.e.R.component=!0})();var P={"class":"className","for":"htmlFor"};a.d.attr={update:function(b,d){var c=a.a.c(d())||{};a.a.A(c,function(c,d){d=a.a.c(d);var k=!1===d||null===d||d===p;k&&b.removeAttribute(c);8>=a.a.M&&c in P?(c=P[c],k?b.removeAttribute(c):b[c]=d):k||b.setAttribute(c,d.toString());"name"===c&&a.a.Rb(b,k?"":d.toString())})}};(function(){a.d.checked={after:["value","attr"],init:function(b,d,c){function e(){var e=b.checked,f=x?k():e;if(!a.Z.Ca()&&(!l||e)){var h=a.k.u(d);g?m!==f?(e&&(a.a.ga(h,
81
- f,!0),a.a.ga(h,m,!1)),m=f):a.a.ga(h,f,e):a.h.ra(h,c,"checked",f,!0)}}function f(){var c=a.a.c(d());b.checked=g?0<=a.a.m(c,k()):h?c:k()===c}var k=a.Nb(function(){return c.has("checkedValue")?a.a.c(c.get("checkedValue")):c.has("value")?a.a.c(c.get("value")):b.value}),h="checkbox"==b.type,l="radio"==b.type;if(h||l){var g=h&&a.a.c(d())instanceof Array,m=g?k():p,x=l||g;l&&!b.name&&a.d.uniqueName.init(b,function(){return!0});a.w(e,null,{q:b});a.a.n(b,"click",e);a.w(f,null,{q:b})}}};a.h.V.checked=!0;a.d.checkedValue=
82
- {update:function(b,d){b.value=a.a.c(d())}}})();a.d.css={update:function(b,d){var c=a.a.c(d());null!==c&&"object"==typeof c?a.a.A(c,function(c,d){d=a.a.c(d);a.a.Ia(b,c,d)}):(c=String(c||""),a.a.Ia(b,b.__ko__cssValue,!1),b.__ko__cssValue=c,a.a.Ia(b,c,!0))}};a.d.enable={update:function(b,d){var c=a.a.c(d());c&&b.disabled?b.removeAttribute("disabled"):c||b.disabled||(b.disabled=!0)}};a.d.disable={update:function(b,d){a.d.enable.update(b,function(){return!a.a.c(d())})}};a.d.event={init:function(b,d,c,
83
- e,f){var k=d()||{};a.a.A(k,function(h){"string"==typeof h&&a.a.n(b,h,function(b){var g,m=d()[h];if(m){try{var k=a.a.O(arguments);e=f.$data;k.unshift(e);g=m.apply(e,k)}finally{!0!==g&&(b.preventDefault?b.preventDefault():b.returnValue=!1)}!1===c.get(h+"Bubble")&&(b.cancelBubble=!0,b.stopPropagation&&b.stopPropagation())}})})}};a.d.foreach={Ib:function(b){return function(){var d=b(),c=a.a.cb(d);if(!c||"number"==typeof c.length)return{foreach:d,templateEngine:a.P.Va};a.a.c(d);return{foreach:c.data,as:c.as,
84
- includeDestroyed:c.includeDestroyed,afterAdd:c.afterAdd,beforeRemove:c.beforeRemove,afterRender:c.afterRender,beforeMove:c.beforeMove,afterMove:c.afterMove,templateEngine:a.P.Va}}},init:function(b,d){return a.d.template.init(b,a.d.foreach.Ib(d))},update:function(b,d,c,e,f){return a.d.template.update(b,a.d.foreach.Ib(d),c,e,f)}};a.h.ka.foreach=!1;a.e.R.foreach=!0;a.d.hasfocus={init:function(b,d,c){function e(e){b.__ko_hasfocusUpdating=!0;var f=b.ownerDocument;if("activeElement"in f){var g;try{g=f.activeElement}catch(m){g=
85
- f.body}e=g===b}f=d();a.h.ra(f,c,"hasfocus",e,!0);b.__ko_hasfocusLastValue=e;b.__ko_hasfocusUpdating=!1}var f=e.bind(null,!0),k=e.bind(null,!1);a.a.n(b,"focus",f);a.a.n(b,"focusin",f);a.a.n(b,"blur",k);a.a.n(b,"focusout",k)},update:function(b,d){var c=!!a.a.c(d());b.__ko_hasfocusUpdating||b.__ko_hasfocusLastValue===c||(c?b.focus():b.blur(),a.k.u(a.a.qa,null,[b,c?"focusin":"focusout"]))}};a.h.V.hasfocus=!0;a.d.hasFocus=a.d.hasfocus;a.h.V.hasFocus=!0;a.d.html={init:function(){return{controlsDescendantBindings:!0}},
86
- update:function(b,d){a.a.gb(b,d())}};K("if");K("ifnot",!1,!0);K("with",!0,!1,function(a,d){return a.createChildContext(d)});var L={};a.d.options={init:function(b){if("select"!==a.a.v(b))throw Error("options binding applies only to SELECT elements");for(;0<b.length;)b.remove(0);return{controlsDescendantBindings:!0}},update:function(b,d,c){function e(){return a.a.xa(b.options,function(a){return a.selected})}function f(a,b,c){var d=typeof b;return"function"==d?b(a):"string"==d?a[b]:c}function k(d,e){if(r&&
87
- m)a.i.Y(b,a.a.c(c.get("value")),!0);else if(n.length){var g=0<=a.a.m(n,a.i.s(e[0]));a.a.Sb(e[0],g);r&&!g&&a.k.u(a.a.qa,null,[b,"change"])}}var h=b.multiple,l=0!=b.length&&h?b.scrollTop:null,g=a.a.c(d()),m=c.get("valueAllowUnset")&&c.has("value"),x=c.get("optionsIncludeDestroyed");d={};var q,n=[];m||(h?n=a.a.Ka(e(),a.i.s):0<=b.selectedIndex&&n.push(a.i.s(b.options[b.selectedIndex])));g&&("undefined"==typeof g.length&&(g=[g]),q=a.a.xa(g,function(b){return x||b===p||null===b||!a.a.c(b._destroy)}),c.has("optionsCaption")&&
88
- (g=a.a.c(c.get("optionsCaption")),null!==g&&g!==p&&q.unshift(L)));var r=!1;d.beforeRemove=function(a){b.removeChild(a)};g=k;c.has("optionsAfterRender")&&"function"==typeof c.get("optionsAfterRender")&&(g=function(b,d){k(0,d);a.k.u(c.get("optionsAfterRender"),null,[d[0],b!==L?b:p])});a.a.fb(b,q,function(d,e,g){g.length&&(n=!m&&g[0].selected?[a.i.s(g[0])]:[],r=!0);e=b.ownerDocument.createElement("option");d===L?(a.a.Ha(e,c.get("optionsCaption")),a.i.Y(e,p)):(g=f(d,c.get("optionsValue"),d),a.i.Y(e,a.a.c(g)),
89
- d=f(d,c.get("optionsText"),g),a.a.Ha(e,d));return[e]},d,g);a.k.u(function(){m?a.i.Y(b,a.a.c(c.get("value")),!0):(h?n.length&&e().length<n.length:n.length&&0<=b.selectedIndex?a.i.s(b.options[b.selectedIndex])!==n[0]:n.length||0<=b.selectedIndex)&&a.a.qa(b,"change")});a.a.kc(b);l&&20<Math.abs(l-b.scrollTop)&&(b.scrollTop=l)}};a.d.options.ab=a.a.f.I();a.d.selectedOptions={after:["options","foreach"],init:function(b,d,c){a.a.n(b,"change",function(){var e=d(),f=[];a.a.o(b.getElementsByTagName("option"),
90
- function(b){b.selected&&f.push(a.i.s(b))});a.h.ra(e,c,"selectedOptions",f)})},update:function(b,d){if("select"!=a.a.v(b))throw Error("values binding applies only to SELECT elements");var c=a.a.c(d());c&&"number"==typeof c.length&&a.a.o(b.getElementsByTagName("option"),function(b){var d=0<=a.a.m(c,a.i.s(b));a.a.Sb(b,d)})}};a.h.V.selectedOptions=!0;a.d.style={update:function(b,d){var c=a.a.c(d()||{});a.a.A(c,function(c,d){d=a.a.c(d);if(null===d||d===p||!1===d)d="";b.style[c]=d})}};a.d.submit={init:function(b,
91
- d,c,e,f){if("function"!=typeof d())throw Error("The value for a submit binding must be a function");a.a.n(b,"submit",function(a){var c,e=d();try{c=e.call(f.$data,b)}finally{!0!==c&&(a.preventDefault?a.preventDefault():a.returnValue=!1)}})}};a.d.text={init:function(){return{controlsDescendantBindings:!0}},update:function(b,d){a.a.Ha(b,d())}};a.e.R.text=!0;(function(){if(y&&y.navigator)var b=function(a){if(a)return parseFloat(a[1])},d=y.opera&&y.opera.version&&parseInt(y.opera.version()),c=y.navigator.userAgent,
92
- e=b(c.match(/^(?:(?!chrome).)*version\/([^ ]*) safari/i)),f=b(c.match(/Firefox\/([^ ]*)/));if(10>a.a.M)var k=a.a.f.I(),h=a.a.f.I(),l=function(b){var c=this.activeElement;(c=c&&a.a.f.get(c,h))&&c(b)},g=function(b,c){var d=b.ownerDocument;a.a.f.get(d,k)||(a.a.f.set(d,k,!0),a.a.n(d,"selectionchange",l));a.a.f.set(b,h,c)};a.d.textInput={init:function(b,c,l){function h(c,d){a.a.n(b,c,d)}function k(){var d=a.a.c(c());if(null===d||d===p)d="";w!==p&&d===w?setTimeout(k,4):b.value!==d&&(u=d,b.value=d)}function v(){A||
93
- (w=b.value,A=setTimeout(t,4))}function t(){clearTimeout(A);w=A=p;var d=b.value;u!==d&&(u=d,a.h.ra(c(),l,"textInput",d))}var u=b.value,A,w;10>a.a.M?(h("propertychange",function(a){"value"===a.propertyName&&t()}),8==a.a.M&&(h("keyup",t),h("keydown",t)),8<=a.a.M&&(g(b,t),h("dragend",v))):(h("input",t),5>e&&"textarea"===a.a.v(b)?(h("keydown",v),h("paste",v),h("cut",v)):11>d?h("keydown",v):4>f&&(h("DOMAutoComplete",t),h("dragdrop",t),h("drop",t)));h("change",t);a.w(k,null,{q:b})}};a.h.V.textInput=!0;a.d.textinput=
94
- {preprocess:function(a,b,c){c("textInput",a)}}})();a.d.uniqueName={init:function(b,d){if(d()){var c="ko_unique_"+ ++a.d.uniqueName.fc;a.a.Rb(b,c)}}};a.d.uniqueName.fc=0;a.d.value={after:["options","foreach"],init:function(b,d,c){if("input"!=b.tagName.toLowerCase()||"checkbox"!=b.type&&"radio"!=b.type){var e=["change"],f=c.get("valueUpdate"),k=!1,h=null;f&&("string"==typeof f&&(f=[f]),a.a.ia(e,f),e=a.a.wb(e));var l=function(){h=null;k=!1;var e=d(),g=a.i.s(b);a.h.ra(e,c,"value",g)};!a.a.M||"input"!=
95
- b.tagName.toLowerCase()||"text"!=b.type||"off"==b.autocomplete||b.form&&"off"==b.form.autocomplete||-1!=a.a.m(e,"propertychange")||(a.a.n(b,"propertychange",function(){k=!0}),a.a.n(b,"focus",function(){k=!1}),a.a.n(b,"blur",function(){k&&l()}));a.a.o(e,function(c){var d=l;a.a.Dc(c,"after")&&(d=function(){h=a.i.s(b);setTimeout(l,0)},c=c.substring(5));a.a.n(b,c,d)});var g=function(){var e=a.a.c(d()),f=a.i.s(b);if(null!==h&&e===h)setTimeout(g,0);else if(e!==f)if("select"===a.a.v(b)){var l=c.get("valueAllowUnset"),
96
- f=function(){a.i.Y(b,e,l)};f();l||e===a.i.s(b)?setTimeout(f,0):a.k.u(a.a.qa,null,[b,"change"])}else a.i.Y(b,e)};a.w(g,null,{q:b})}else a.va(b,{checkedValue:d})},update:function(){}};a.h.V.value=!0;a.d.visible={update:function(b,d){var c=a.a.c(d()),e="none"!=b.style.display;c&&!e?b.style.display="":!c&&e&&(b.style.display="none")}};(function(b){a.d[b]={init:function(d,c,e,f,k){return a.d.event.init.call(this,d,function(){var a={};a[b]=c();return a},e,f,k)}}})("click");a.J=function(){};a.J.prototype.renderTemplateSource=
97
- function(){throw Error("Override renderTemplateSource");};a.J.prototype.createJavaScriptEvaluatorBlock=function(){throw Error("Override createJavaScriptEvaluatorBlock");};a.J.prototype.makeTemplateSource=function(b,d){if("string"==typeof b){d=d||w;var c=d.getElementById(b);if(!c)throw Error("Cannot find template with ID "+b);return new a.t.l(c)}if(1==b.nodeType||8==b.nodeType)return new a.t.ha(b);throw Error("Unknown template type: "+b);};a.J.prototype.renderTemplate=function(a,d,c,e){a=this.makeTemplateSource(a,
98
- e);return this.renderTemplateSource(a,d,c,e)};a.J.prototype.isTemplateRewritten=function(a,d){return!1===this.allowTemplateRewriting?!0:this.makeTemplateSource(a,d).data("isRewritten")};a.J.prototype.rewriteTemplate=function(a,d,c){a=this.makeTemplateSource(a,c);d=d(a.text());a.text(d);a.data("isRewritten",!0)};a.b("templateEngine",a.J);a.kb=function(){function b(b,c,d,h){b=a.h.bb(b);for(var l=a.h.ka,g=0;g<b.length;g++){var m=b[g].key;if(l.hasOwnProperty(m)){var x=l[m];if("function"===typeof x){if(m=
99
- x(b[g].value))throw Error(m);}else if(!x)throw Error("This template engine does not support the '"+m+"' binding within its templates");}}d="ko.__tr_ambtns(function($context,$element){return(function(){return{ "+a.h.Ea(b,{valueAccessors:!0})+" } })()},'"+d.toLowerCase()+"')";return h.createJavaScriptEvaluatorBlock(d)+c}var d=/(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'|[^>]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi,c=/\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;return{lc:function(b,
100
- c,d){c.isTemplateRewritten(b,d)||c.rewriteTemplate(b,function(b){return a.kb.xc(b,c)},d)},xc:function(a,f){return a.replace(d,function(a,c,d,e,m){return b(m,c,d,f)}).replace(c,function(a,c){return b(c,"\x3c!-- ko --\x3e","#comment",f)})},dc:function(b,c){return a.H.$a(function(d,h){var l=d.nextSibling;l&&l.nodeName.toLowerCase()===c&&a.va(l,b,h)})}}}();a.b("__tr_ambtns",a.kb.dc);(function(){a.t={};a.t.l=function(a){this.l=a};a.t.l.prototype.text=function(){var b=a.a.v(this.l),b="script"===b?"text":
101
- "textarea"===b?"value":"innerHTML";if(0==arguments.length)return this.l[b];var d=arguments[0];"innerHTML"===b?a.a.gb(this.l,d):this.l[b]=d};var b=a.a.f.I()+"_";a.t.l.prototype.data=function(c){if(1===arguments.length)return a.a.f.get(this.l,b+c);a.a.f.set(this.l,b+c,arguments[1])};var d=a.a.f.I();a.t.ha=function(a){this.l=a};a.t.ha.prototype=new a.t.l;a.t.ha.prototype.text=function(){if(0==arguments.length){var b=a.a.f.get(this.l,d)||{};b.lb===p&&b.Na&&(b.lb=b.Na.innerHTML);return b.lb}a.a.f.set(this.l,
102
- d,{lb:arguments[0]})};a.t.l.prototype.nodes=function(){if(0==arguments.length)return(a.a.f.get(this.l,d)||{}).Na;a.a.f.set(this.l,d,{Na:arguments[0]})};a.b("templateSources",a.t);a.b("templateSources.domElement",a.t.l);a.b("templateSources.anonymousTemplate",a.t.ha)})();(function(){function b(b,c,d){var e;for(c=a.e.nextSibling(c);b&&(e=b)!==c;)b=a.e.nextSibling(e),d(e,b)}function d(c,d){if(c.length){var e=c[0],f=c[c.length-1],h=e.parentNode,k=a.L.instance,r=k.preprocessNode;if(r){b(e,f,function(a,
103
- b){var c=a.previousSibling,d=r.call(k,a);d&&(a===e&&(e=d[0]||b),a===f&&(f=d[d.length-1]||c))});c.length=0;if(!e)return;e===f?c.push(e):(c.push(e,f),a.a.na(c,h))}b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.ub(d,b)});b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.H.Xb(b,[d])});a.a.na(c,h)}}function c(a){return a.nodeType?a:0<a.length?a[0]:null}function e(b,e,f,h,q){q=q||{};var n=(b&&c(b)||f||{}).ownerDocument,r=q.templateEngine||k;a.kb.lc(f,r,n);f=r.renderTemplate(f,h,q,n);if("number"!=
104
- typeof f.length||0<f.length&&"number"!=typeof f[0].nodeType)throw Error("Template engine must return an array of DOM nodes");n=!1;switch(e){case "replaceChildren":a.e.T(b,f);n=!0;break;case "replaceNode":a.a.Qb(b,f);n=!0;break;case "ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+e);}n&&(d(f,h),q.afterRender&&a.k.u(q.afterRender,null,[f,h.$data]));return f}function f(b,c,d){return a.F(b)?b():"function"===typeof b?b(c,d):b}var k;a.hb=function(b){if(b!=p&&!(b instanceof a.J))throw Error("templateEngine must inherit from ko.templateEngine");
105
- k=b};a.eb=function(b,d,h,x,q){h=h||{};if((h.templateEngine||k)==p)throw Error("Set a template engine before calling renderTemplate");q=q||"replaceChildren";if(x){var n=c(x);return a.j(function(){var k=d&&d instanceof a.N?d:new a.N(a.a.c(d)),p=f(b,k.$data,k),k=e(x,q,p,k,h);"replaceNode"==q&&(x=k,n=c(x))},null,{Pa:function(){return!n||!a.a.Qa(n)},q:n&&"replaceNode"==q?n.parentNode:n})}return a.H.$a(function(c){a.eb(b,d,h,c,"replaceNode")})};a.Cc=function(b,c,h,k,q){function n(a,b){d(b,v);h.afterRender&&
106
- h.afterRender(b,a);v=null}function r(a,c){v=q.createChildContext(a,h.as,function(a){a.$index=c});var d=f(b,a,v);return e(null,"ignoreTargetNode",d,v,h)}var v;return a.j(function(){var b=a.a.c(c)||[];"undefined"==typeof b.length&&(b=[b]);b=a.a.xa(b,function(b){return h.includeDestroyed||b===p||null===b||!a.a.c(b._destroy)});a.k.u(a.a.fb,null,[k,b,r,h,n])},null,{q:k})};var h=a.a.f.I();a.d.template={init:function(b,c){var d=a.a.c(c());if("string"==typeof d||d.name)a.e.ma(b);else{if("nodes"in d){if(d=
107
- d.nodes||[],a.F(d))throw Error('The "nodes" option must be a plain, non-observable array.');}else d=a.e.childNodes(b);d=a.a.Jb(d);(new a.t.ha(b)).nodes(d)}return{controlsDescendantBindings:!0}},update:function(b,c,d,e,f){var k=c(),r;c=a.a.c(k);d=!0;e=null;"string"==typeof c?c={}:(k=c.name,"if"in c&&(d=a.a.c(c["if"])),d&&"ifnot"in c&&(d=!a.a.c(c.ifnot)),r=a.a.c(c.data));"foreach"in c?e=a.Cc(k||b,d&&c.foreach||[],c,b,f):d?(f="data"in c?f.createChildContext(r,c.as):f,e=a.eb(k||b,f,c,b)):a.e.ma(b);f=
108
- e;(r=a.a.f.get(b,h))&&"function"==typeof r.p&&r.p();a.a.f.set(b,h,f&&f.$()?f:p)}};a.h.ka.template=function(b){b=a.h.bb(b);return 1==b.length&&b[0].unknown||a.h.vc(b,"name")?null:"This template engine does not support anonymous templates nested within its templates"};a.e.R.template=!0})();a.b("setTemplateEngine",a.hb);a.b("renderTemplate",a.eb);a.a.Cb=function(a,d,c){if(a.length&&d.length){var e,f,k,h,l;for(e=f=0;(!c||e<c)&&(h=a[f]);++f){for(k=0;l=d[k];++k)if(h.value===l.value){h.moved=l.index;l.moved=
109
- h.index;d.splice(k,1);e=k=0;break}e+=k}}};a.a.Ma=function(){function b(b,c,e,f,k){var h=Math.min,l=Math.max,g=[],m,p=b.length,q,n=c.length,r=n-p||1,v=p+n+1,t,u,w;for(m=0;m<=p;m++)for(u=t,g.push(t=[]),w=h(n,m+r),q=l(0,m-1);q<=w;q++)t[q]=q?m?b[m-1]===c[q-1]?u[q-1]:h(u[q]||v,t[q-1]||v)+1:q+1:m+1;h=[];l=[];r=[];m=p;for(q=n;m||q;)n=g[m][q]-1,q&&n===g[m][q-1]?l.push(h[h.length]={status:e,value:c[--q],index:q}):m&&n===g[m-1][q]?r.push(h[h.length]={status:f,value:b[--m],index:m}):(--q,--m,k.sparse||h.push({status:"retained",
110
- value:c[q]}));a.a.Cb(l,r,10*p);return h.reverse()}return function(a,c,e){e="boolean"===typeof e?{dontLimitMoves:e}:e||{};a=a||[];c=c||[];return a.length<=c.length?b(a,c,"added","deleted",e):b(c,a,"deleted","added",e)}}();a.b("utils.compareArrays",a.a.Ma);(function(){function b(b,d,f,k,h){var l=[],g=a.j(function(){var g=d(f,h,a.a.na(l,b))||[];0<l.length&&(a.a.Qb(l,g),k&&a.k.u(k,null,[f,g,h]));l.length=0;a.a.ia(l,g)},null,{q:b,Pa:function(){return!a.a.tb(l)}});return{aa:l,j:g.$()?g:p}}var d=a.a.f.I();
111
- a.a.fb=function(c,e,f,k,h){function l(b,d){s=u[d];t!==d&&(z[b]=s);s.Ua(t++);a.a.na(s.aa,c);r.push(s);y.push(s)}function g(b,c){if(b)for(var d=0,e=c.length;d<e;d++)c[d]&&a.a.o(c[d].aa,function(a){b(a,d,c[d].wa)})}e=e||[];k=k||{};var m=a.a.f.get(c,d)===p,u=a.a.f.get(c,d)||[],q=a.a.Ka(u,function(a){return a.wa}),n=a.a.Ma(q,e,k.dontLimitMoves),r=[],v=0,t=0,w=[],y=[];e=[];for(var z=[],q=[],s,C=0,D,E;D=n[C];C++)switch(E=D.moved,D.status){case "deleted":E===p&&(s=u[v],s.j&&s.j.p(),w.push.apply(w,a.a.na(s.aa,
112
- c)),k.beforeRemove&&(e[C]=s,y.push(s)));v++;break;case "retained":l(C,v++);break;case "added":E!==p?l(C,E):(s={wa:D.value,Ua:a.r(t++)},r.push(s),y.push(s),m||(q[C]=s))}g(k.beforeMove,z);a.a.o(w,k.beforeRemove?a.S:a.removeNode);for(var C=0,m=a.e.firstChild(c),H;s=y[C];C++){s.aa||a.a.extend(s,b(c,f,s.wa,h,s.Ua));for(v=0;n=s.aa[v];m=n.nextSibling,H=n,v++)n!==m&&a.e.Fb(c,n,H);!s.rc&&h&&(h(s.wa,s.aa,s.Ua),s.rc=!0)}g(k.beforeRemove,e);g(k.afterMove,z);g(k.afterAdd,q);a.a.f.set(c,d,r)}})();a.b("utils.setDomNodeChildrenFromArrayMapping",
113
- a.a.fb);a.P=function(){this.allowTemplateRewriting=!1};a.P.prototype=new a.J;a.P.prototype.renderTemplateSource=function(b,d,c,e){if(d=(9>a.a.M?0:b.nodes)?b.nodes():null)return a.a.O(d.cloneNode(!0).childNodes);b=b.text();return a.a.ca(b,e)};a.P.Va=new a.P;a.hb(a.P.Va);a.b("nativeTemplateEngine",a.P);(function(){a.Ya=function(){var a=this.uc=function(){if(!u||!u.tmpl)return 0;try{if(0<=u.tmpl.tag.tmpl.open.toString().indexOf("__"))return 2}catch(a){}return 1}();this.renderTemplateSource=function(b,
114
- e,f,k){k=k||w;f=f||{};if(2>a)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var h=b.data("precompiled");h||(h=b.text()||"",h=u.template(null,"{{ko_with $item.koBindingContext}}"+h+"{{/ko_with}}"),b.data("precompiled",h));b=[e.$data];e=u.extend({koBindingContext:e},f.templateOptions);e=u.tmpl(h,b,e);e.appendTo(k.createElement("div"));u.fragments={};return e};this.createJavaScriptEvaluatorBlock=function(a){return"{{ko_code ((function() { return "+
115
- a+" })()) }}"};this.addTemplate=function(a,b){w.write("<script type='text/html' id='"+a+"'>"+b+"\x3c/script>")};0<a&&(u.tmpl.tag.ko_code={open:"__.push($1 || '');"},u.tmpl.tag.ko_with={open:"with($1) {",close:"} "})};a.Ya.prototype=new a.J;var b=new a.Ya;0<b.uc&&a.hb(b);a.b("jqueryTmplTemplateEngine",a.Ya)})()})})();})();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
js/knockout-3.5.1.1629122067.js ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Knockout JavaScript library v3.5.1
3
+ * (c) The Knockout.js team - http://knockoutjs.com/
4
+ * License: MIT (http://www.opensource.org/licenses/mit-license.php)
5
+ */
6
+
7
+ (function() {(function(n){var A=this||(0,eval)("this"),w=A.document,R=A.navigator,v=A.jQuery,H=A.JSON;v||"undefined"===typeof jQuery||(v=jQuery);(function(n){"function"===typeof define&&define.amd?define(["exports","require"],n):"object"===typeof exports&&"object"===typeof module?n(module.exports||exports):n(A.ko={})})(function(S,T){function K(a,c){return null===a||typeof a in W?a===c:!1}function X(b,c){var d;return function(){d||(d=a.a.setTimeout(function(){d=n;b()},c))}}function Y(b,c){var d;return function(){clearTimeout(d);
8
+ d=a.a.setTimeout(b,c)}}function Z(a,c){c&&"change"!==c?"beforeChange"===c?this.pc(a):this.gb(a,c):this.qc(a)}function aa(a,c){null!==c&&c.s&&c.s()}function ba(a,c){var d=this.qd,e=d[r];e.ra||(this.Qb&&this.mb[c]?(d.uc(c,a,this.mb[c]),this.mb[c]=null,--this.Qb):e.I[c]||d.uc(c,a,e.J?{da:a}:d.$c(a)),a.Ja&&a.gd())}var a="undefined"!==typeof S?S:{};a.b=function(b,c){for(var d=b.split("."),e=a,f=0;f<d.length-1;f++)e=e[d[f]];e[d[d.length-1]]=c};a.L=function(a,c,d){a[c]=d};a.version="3.5.1";a.b("version",
9
+ a.version);a.options={deferUpdates:!1,useOnlyNativeEvents:!1,foreachHidesDestroyed:!1};a.a=function(){function b(a,b){for(var c in a)f.call(a,c)&&b(c,a[c])}function c(a,b){if(b)for(var c in b)f.call(b,c)&&(a[c]=b[c]);return a}function d(a,b){a.__proto__=b;return a}function e(b,c,d,e){var l=b[c].match(q)||[];a.a.D(d.match(q),function(b){a.a.Na(l,b,e)});b[c]=l.join(" ")}var f=Object.prototype.hasOwnProperty,g={__proto__:[]}instanceof Array,h="function"===typeof Symbol,m={},k={};m[R&&/Firefox\/2/i.test(R.userAgent)?
10
+ "KeyboardEvent":"UIEvents"]=["keyup","keydown","keypress"];m.MouseEvents="click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" ");b(m,function(a,b){if(b.length)for(var c=0,d=b.length;c<d;c++)k[b[c]]=a});var l={propertychange:!0},p=w&&function(){for(var a=3,b=w.createElement("div"),c=b.getElementsByTagName("i");b.innerHTML="\x3c!--[if gt IE "+ ++a+"]><i></i><![endif]--\x3e",c[0];);return 4<a?a:n}(),q=/\S+/g,t;return{Jc:["authenticity_token",/^__RequestVerificationToken(_.*)?$/],
11
+ D:function(a,b,c){for(var d=0,e=a.length;d<e;d++)b.call(c,a[d],d,a)},A:"function"==typeof Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b)}:function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},Lb:function(a,b,c){for(var d=0,e=a.length;d<e;d++)if(b.call(c,a[d],d,a))return a[d];return n},Pa:function(b,c){var d=a.a.A(b,c);0<d?b.splice(d,1):0===d&&b.shift()},wc:function(b){var c=[];b&&a.a.D(b,function(b){0>a.a.A(c,b)&&c.push(b)});return c},Mb:function(a,
12
+ b,c){var d=[];if(a)for(var e=0,l=a.length;e<l;e++)d.push(b.call(c,a[e],e));return d},jb:function(a,b,c){var d=[];if(a)for(var e=0,l=a.length;e<l;e++)b.call(c,a[e],e)&&d.push(a[e]);return d},Nb:function(a,b){if(b instanceof Array)a.push.apply(a,b);else for(var c=0,d=b.length;c<d;c++)a.push(b[c]);return a},Na:function(b,c,d){var e=a.a.A(a.a.bc(b),c);0>e?d&&b.push(c):d||b.splice(e,1)},Ba:g,extend:c,setPrototypeOf:d,Ab:g?d:c,P:b,Ga:function(a,b,c){if(!a)return a;var d={},e;for(e in a)f.call(a,e)&&(d[e]=
13
+ b.call(c,a[e],e,a));return d},Tb:function(b){for(;b.firstChild;)a.removeNode(b.firstChild)},Yb:function(b){b=a.a.la(b);for(var c=(b[0]&&b[0].ownerDocument||w).createElement("div"),d=0,e=b.length;d<e;d++)c.appendChild(a.oa(b[d]));return c},Ca:function(b,c){for(var d=0,e=b.length,l=[];d<e;d++){var k=b[d].cloneNode(!0);l.push(c?a.oa(k):k)}return l},va:function(b,c){a.a.Tb(b);if(c)for(var d=0,e=c.length;d<e;d++)b.appendChild(c[d])},Xc:function(b,c){var d=b.nodeType?[b]:b;if(0<d.length){for(var e=d[0],
14
+ l=e.parentNode,k=0,f=c.length;k<f;k++)l.insertBefore(c[k],e);k=0;for(f=d.length;k<f;k++)a.removeNode(d[k])}},Ua:function(a,b){if(a.length){for(b=8===b.nodeType&&b.parentNode||b;a.length&&a[0].parentNode!==b;)a.splice(0,1);for(;1<a.length&&a[a.length-1].parentNode!==b;)a.length--;if(1<a.length){var c=a[0],d=a[a.length-1];for(a.length=0;c!==d;)a.push(c),c=c.nextSibling;a.push(d)}}return a},Zc:function(a,b){7>p?a.setAttribute("selected",b):a.selected=b},Db:function(a){return null===a||a===n?"":a.trim?
15
+ a.trim():a.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},Ud:function(a,b){a=a||"";return b.length>a.length?!1:a.substring(0,b.length)===b},vd:function(a,b){if(a===b)return!0;if(11===a.nodeType)return!1;if(b.contains)return b.contains(1!==a.nodeType?a.parentNode:a);if(b.compareDocumentPosition)return 16==(b.compareDocumentPosition(a)&16);for(;a&&a!=b;)a=a.parentNode;return!!a},Sb:function(b){return a.a.vd(b,b.ownerDocument.documentElement)},kd:function(b){return!!a.a.Lb(b,a.a.Sb)},R:function(a){return a&&
16
+ a.tagName&&a.tagName.toLowerCase()},Ac:function(b){return a.onError?function(){try{return b.apply(this,arguments)}catch(c){throw a.onError&&a.onError(c),c;}}:b},setTimeout:function(b,c){return setTimeout(a.a.Ac(b),c)},Gc:function(b){setTimeout(function(){a.onError&&a.onError(b);throw b;},0)},B:function(b,c,d){var e=a.a.Ac(d);d=l[c];if(a.options.useOnlyNativeEvents||d||!v)if(d||"function"!=typeof b.addEventListener)if("undefined"!=typeof b.attachEvent){var k=function(a){e.call(b,a)},f="on"+c;b.attachEvent(f,
17
+ k);a.a.K.za(b,function(){b.detachEvent(f,k)})}else throw Error("Browser doesn't support addEventListener or attachEvent");else b.addEventListener(c,e,!1);else t||(t="function"==typeof v(b).on?"on":"bind"),v(b)[t](c,e)},Fb:function(b,c){if(!b||!b.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var d;"input"===a.a.R(b)&&b.type&&"click"==c.toLowerCase()?(d=b.type,d="checkbox"==d||"radio"==d):d=!1;if(a.options.useOnlyNativeEvents||!v||d)if("function"==typeof w.createEvent)if("function"==
18
+ typeof b.dispatchEvent)d=w.createEvent(k[c]||"HTMLEvents"),d.initEvent(c,!0,!0,A,0,0,0,0,0,!1,!1,!1,!1,0,b),b.dispatchEvent(d);else throw Error("The supplied element doesn't support dispatchEvent");else if(d&&b.click)b.click();else if("undefined"!=typeof b.fireEvent)b.fireEvent("on"+c);else throw Error("Browser doesn't support triggering events");else v(b).trigger(c)},f:function(b){return a.O(b)?b():b},bc:function(b){return a.O(b)?b.v():b},Eb:function(b,c,d){var l;c&&("object"===typeof b.classList?
19
+ (l=b.classList[d?"add":"remove"],a.a.D(c.match(q),function(a){l.call(b.classList,a)})):"string"===typeof b.className.baseVal?e(b.className,"baseVal",c,d):e(b,"className",c,d))},Bb:function(b,c){var d=a.a.f(c);if(null===d||d===n)d="";var e=a.h.firstChild(b);!e||3!=e.nodeType||a.h.nextSibling(e)?a.h.va(b,[b.ownerDocument.createTextNode(d)]):e.data=d;a.a.Ad(b)},Yc:function(a,b){a.name=b;if(7>=p)try{var c=a.name.replace(/[&<>'"]/g,function(a){return"&#"+a.charCodeAt(0)+";"});a.mergeAttributes(w.createElement("<input name='"+
20
+ c+"'/>"),!1)}catch(d){}},Ad:function(a){9<=p&&(a=1==a.nodeType?a:a.parentNode,a.style&&(a.style.zoom=a.style.zoom))},wd:function(a){if(p){var b=a.style.width;a.style.width=0;a.style.width=b}},Pd:function(b,c){b=a.a.f(b);c=a.a.f(c);for(var d=[],e=b;e<=c;e++)d.push(e);return d},la:function(a){for(var b=[],c=0,d=a.length;c<d;c++)b.push(a[c]);return b},Da:function(a){return h?Symbol(a):a},Zd:6===p,$d:7===p,W:p,Lc:function(b,c){for(var d=a.a.la(b.getElementsByTagName("input")).concat(a.a.la(b.getElementsByTagName("textarea"))),
21
+ e="string"==typeof c?function(a){return a.name===c}:function(a){return c.test(a.name)},l=[],k=d.length-1;0<=k;k--)e(d[k])&&l.push(d[k]);return l},Nd:function(b){return"string"==typeof b&&(b=a.a.Db(b))?H&&H.parse?H.parse(b):(new Function("return "+b))():null},hc:function(b,c,d){if(!H||!H.stringify)throw Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js");
22
+ return H.stringify(a.a.f(b),c,d)},Od:function(c,d,e){e=e||{};var l=e.params||{},k=e.includeFields||this.Jc,f=c;if("object"==typeof c&&"form"===a.a.R(c))for(var f=c.action,h=k.length-1;0<=h;h--)for(var g=a.a.Lc(c,k[h]),m=g.length-1;0<=m;m--)l[g[m].name]=g[m].value;d=a.a.f(d);var p=w.createElement("form");p.style.display="none";p.action=f;p.method="post";for(var q in d)c=w.createElement("input"),c.type="hidden",c.name=q,c.value=a.a.hc(a.a.f(d[q])),p.appendChild(c);b(l,function(a,b){var c=w.createElement("input");
23
+ c.type="hidden";c.name=a;c.value=b;p.appendChild(c)});w.body.appendChild(p);e.submitter?e.submitter(p):p.submit();setTimeout(function(){p.parentNode.removeChild(p)},0)}}}();a.b("utils",a.a);a.b("utils.arrayForEach",a.a.D);a.b("utils.arrayFirst",a.a.Lb);a.b("utils.arrayFilter",a.a.jb);a.b("utils.arrayGetDistinctValues",a.a.wc);a.b("utils.arrayIndexOf",a.a.A);a.b("utils.arrayMap",a.a.Mb);a.b("utils.arrayPushAll",a.a.Nb);a.b("utils.arrayRemoveItem",a.a.Pa);a.b("utils.cloneNodes",a.a.Ca);a.b("utils.createSymbolOrString",
24
+ a.a.Da);a.b("utils.extend",a.a.extend);a.b("utils.fieldsIncludedWithJsonPost",a.a.Jc);a.b("utils.getFormFields",a.a.Lc);a.b("utils.objectMap",a.a.Ga);a.b("utils.peekObservable",a.a.bc);a.b("utils.postJson",a.a.Od);a.b("utils.parseJson",a.a.Nd);a.b("utils.registerEventHandler",a.a.B);a.b("utils.stringifyJson",a.a.hc);a.b("utils.range",a.a.Pd);a.b("utils.toggleDomNodeCssClass",a.a.Eb);a.b("utils.triggerEvent",a.a.Fb);a.b("utils.unwrapObservable",a.a.f);a.b("utils.objectForEach",a.a.P);a.b("utils.addOrRemoveItem",
25
+ a.a.Na);a.b("utils.setTextContent",a.a.Bb);a.b("unwrap",a.a.f);Function.prototype.bind||(Function.prototype.bind=function(a){var c=this;if(1===arguments.length)return function(){return c.apply(a,arguments)};var d=Array.prototype.slice.call(arguments,1);return function(){var e=d.slice(0);e.push.apply(e,arguments);return c.apply(a,e)}});a.a.g=new function(){var b=0,c="__ko__"+(new Date).getTime(),d={},e,f;a.a.W?(e=function(a,e){var f=a[c];if(!f||"null"===f||!d[f]){if(!e)return n;f=a[c]="ko"+b++;d[f]=
26
+ {}}return d[f]},f=function(a){var b=a[c];return b?(delete d[b],a[c]=null,!0):!1}):(e=function(a,b){var d=a[c];!d&&b&&(d=a[c]={});return d},f=function(a){return a[c]?(delete a[c],!0):!1});return{get:function(a,b){var c=e(a,!1);return c&&c[b]},set:function(a,b,c){(a=e(a,c!==n))&&(a[b]=c)},Ub:function(a,b,c){a=e(a,!0);return a[b]||(a[b]=c)},clear:f,Z:function(){return b++ +c}}};a.b("utils.domData",a.a.g);a.b("utils.domData.clear",a.a.g.clear);a.a.K=new function(){function b(b,c){var d=a.a.g.get(b,e);
27
+ d===n&&c&&(d=[],a.a.g.set(b,e,d));return d}function c(c){var e=b(c,!1);if(e)for(var e=e.slice(0),k=0;k<e.length;k++)e[k](c);a.a.g.clear(c);a.a.K.cleanExternalData(c);g[c.nodeType]&&d(c.childNodes,!0)}function d(b,d){for(var e=[],l,f=0;f<b.length;f++)if(!d||8===b[f].nodeType)if(c(e[e.length]=l=b[f]),b[f]!==l)for(;f--&&-1==a.a.A(e,b[f]););}var e=a.a.g.Z(),f={1:!0,8:!0,9:!0},g={1:!0,9:!0};return{za:function(a,c){if("function"!=typeof c)throw Error("Callback must be a function");b(a,!0).push(c)},yb:function(c,
28
+ d){var f=b(c,!1);f&&(a.a.Pa(f,d),0==f.length&&a.a.g.set(c,e,n))},oa:function(b){a.u.G(function(){f[b.nodeType]&&(c(b),g[b.nodeType]&&d(b.getElementsByTagName("*")))});return b},removeNode:function(b){a.oa(b);b.parentNode&&b.parentNode.removeChild(b)},cleanExternalData:function(a){v&&"function"==typeof v.cleanData&&v.cleanData([a])}}};a.oa=a.a.K.oa;a.removeNode=a.a.K.removeNode;a.b("cleanNode",a.oa);a.b("removeNode",a.removeNode);a.b("utils.domNodeDisposal",a.a.K);a.b("utils.domNodeDisposal.addDisposeCallback",
29
+ a.a.K.za);a.b("utils.domNodeDisposal.removeDisposeCallback",a.a.K.yb);(function(){var b=[0,"",""],c=[1,"<table>","</table>"],d=[3,"<table><tbody><tr>","</tr></tbody></table>"],e=[1,"<select multiple='multiple'>","</select>"],f={thead:c,tbody:c,tfoot:c,tr:[2,"<table><tbody>","</tbody></table>"],td:d,th:d,option:e,optgroup:e},g=8>=a.a.W;a.a.ua=function(c,d){var e;if(v)if(v.parseHTML)e=v.parseHTML(c,d)||[];else{if((e=v.clean([c],d))&&e[0]){for(var l=e[0];l.parentNode&&11!==l.parentNode.nodeType;)l=l.parentNode;
30
+ l.parentNode&&l.parentNode.removeChild(l)}}else{(e=d)||(e=w);var l=e.parentWindow||e.defaultView||A,p=a.a.Db(c).toLowerCase(),q=e.createElement("div"),t;t=(p=p.match(/^(?:\x3c!--.*?--\x3e\s*?)*?<([a-z]+)[\s>]/))&&f[p[1]]||b;p=t[0];t="ignored<div>"+t[1]+c+t[2]+"</div>";"function"==typeof l.innerShiv?q.appendChild(l.innerShiv(t)):(g&&e.body.appendChild(q),q.innerHTML=t,g&&q.parentNode.removeChild(q));for(;p--;)q=q.lastChild;e=a.a.la(q.lastChild.childNodes)}return e};a.a.Md=function(b,c){var d=a.a.ua(b,
31
+ c);return d.length&&d[0].parentElement||a.a.Yb(d)};a.a.fc=function(b,c){a.a.Tb(b);c=a.a.f(c);if(null!==c&&c!==n)if("string"!=typeof c&&(c=c.toString()),v)v(b).html(c);else for(var d=a.a.ua(c,b.ownerDocument),e=0;e<d.length;e++)b.appendChild(d[e])}})();a.b("utils.parseHtmlFragment",a.a.ua);a.b("utils.setHtml",a.a.fc);a.aa=function(){function b(c,e){if(c)if(8==c.nodeType){var f=a.aa.Uc(c.nodeValue);null!=f&&e.push({ud:c,Kd:f})}else if(1==c.nodeType)for(var f=0,g=c.childNodes,h=g.length;f<h;f++)b(g[f],
32
+ e)}var c={};return{Xb:function(a){if("function"!=typeof a)throw Error("You can only pass a function to ko.memoization.memoize()");var b=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);c[b]=a;return"\x3c!--[ko_memo:"+b+"]--\x3e"},bd:function(a,b){var f=c[a];if(f===n)throw Error("Couldn't find any memo with ID "+a+". Perhaps it's already been unmemoized.");try{return f.apply(null,b||[]),!0}finally{delete c[a]}},cd:function(c,e){var f=
33
+ [];b(c,f);for(var g=0,h=f.length;g<h;g++){var m=f[g].ud,k=[m];e&&a.a.Nb(k,e);a.aa.bd(f[g].Kd,k);m.nodeValue="";m.parentNode&&m.parentNode.removeChild(m)}},Uc:function(a){return(a=a.match(/^\[ko_memo\:(.*?)\]$/))?a[1]:null}}}();a.b("memoization",a.aa);a.b("memoization.memoize",a.aa.Xb);a.b("memoization.unmemoize",a.aa.bd);a.b("memoization.parseMemoText",a.aa.Uc);a.b("memoization.unmemoizeDomNodeAndDescendants",a.aa.cd);a.na=function(){function b(){if(f)for(var b=f,c=0,d;h<f;)if(d=e[h++]){if(h>b){if(5E3<=
34
+ ++c){h=f;a.a.Gc(Error("'Too much recursion' after processing "+c+" task groups."));break}b=f}try{d()}catch(p){a.a.Gc(p)}}}function c(){b();h=f=e.length=0}var d,e=[],f=0,g=1,h=0;A.MutationObserver?d=function(a){var b=w.createElement("div");(new MutationObserver(a)).observe(b,{attributes:!0});return function(){b.classList.toggle("foo")}}(c):d=w&&"onreadystatechange"in w.createElement("script")?function(a){var b=w.createElement("script");b.onreadystatechange=function(){b.onreadystatechange=null;w.documentElement.removeChild(b);
35
+ b=null;a()};w.documentElement.appendChild(b)}:function(a){setTimeout(a,0)};return{scheduler:d,zb:function(b){f||a.na.scheduler(c);e[f++]=b;return g++},cancel:function(a){a=a-(g-f);a>=h&&a<f&&(e[a]=null)},resetForTesting:function(){var a=f-h;h=f=e.length=0;return a},Sd:b}}();a.b("tasks",a.na);a.b("tasks.schedule",a.na.zb);a.b("tasks.runEarly",a.na.Sd);a.Ta={throttle:function(b,c){b.throttleEvaluation=c;var d=null;return a.$({read:b,write:function(e){clearTimeout(d);d=a.a.setTimeout(function(){b(e)},
36
+ c)}})},rateLimit:function(a,c){var d,e,f;"number"==typeof c?d=c:(d=c.timeout,e=c.method);a.Hb=!1;f="function"==typeof e?e:"notifyWhenChangesStop"==e?Y:X;a.ub(function(a){return f(a,d,c)})},deferred:function(b,c){if(!0!==c)throw Error("The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.");b.Hb||(b.Hb=!0,b.ub(function(c){var e,f=!1;return function(){if(!f){a.na.cancel(e);e=a.na.zb(c);try{f=!0,b.notifySubscribers(n,"dirty")}finally{f=
37
+ !1}}}}))},notify:function(a,c){a.equalityComparer="always"==c?null:K}};var W={undefined:1,"boolean":1,number:1,string:1};a.b("extenders",a.Ta);a.ic=function(b,c,d){this.da=b;this.lc=c;this.mc=d;this.Ib=!1;this.fb=this.Jb=null;a.L(this,"dispose",this.s);a.L(this,"disposeWhenNodeIsRemoved",this.l)};a.ic.prototype.s=function(){this.Ib||(this.fb&&a.a.K.yb(this.Jb,this.fb),this.Ib=!0,this.mc(),this.da=this.lc=this.mc=this.Jb=this.fb=null)};a.ic.prototype.l=function(b){this.Jb=b;a.a.K.za(b,this.fb=this.s.bind(this))};
38
+ a.T=function(){a.a.Ab(this,D);D.qb(this)};var D={qb:function(a){a.U={change:[]};a.sc=1},subscribe:function(b,c,d){var e=this;d=d||"change";var f=new a.ic(e,c?b.bind(c):b,function(){a.a.Pa(e.U[d],f);e.hb&&e.hb(d)});e.Qa&&e.Qa(d);e.U[d]||(e.U[d]=[]);e.U[d].push(f);return f},notifySubscribers:function(b,c){c=c||"change";"change"===c&&this.Gb();if(this.Wa(c)){var d="change"===c&&this.ed||this.U[c].slice(0);try{a.u.xc();for(var e=0,f;f=d[e];++e)f.Ib||f.lc(b)}finally{a.u.end()}}},ob:function(){return this.sc},
39
+ Dd:function(a){return this.ob()!==a},Gb:function(){++this.sc},ub:function(b){var c=this,d=a.O(c),e,f,g,h,m;c.gb||(c.gb=c.notifySubscribers,c.notifySubscribers=Z);var k=b(function(){c.Ja=!1;d&&h===c&&(h=c.nc?c.nc():c());var a=f||m&&c.sb(g,h);m=f=e=!1;a&&c.gb(g=h)});c.qc=function(a,b){b&&c.Ja||(m=!b);c.ed=c.U.change.slice(0);c.Ja=e=!0;h=a;k()};c.pc=function(a){e||(g=a,c.gb(a,"beforeChange"))};c.rc=function(){m=!0};c.gd=function(){c.sb(g,c.v(!0))&&(f=!0)}},Wa:function(a){return this.U[a]&&this.U[a].length},
40
+ Bd:function(b){if(b)return this.U[b]&&this.U[b].length||0;var c=0;a.a.P(this.U,function(a,b){"dirty"!==a&&(c+=b.length)});return c},sb:function(a,c){return!this.equalityComparer||!this.equalityComparer(a,c)},toString:function(){return"[object Object]"},extend:function(b){var c=this;b&&a.a.P(b,function(b,e){var f=a.Ta[b];"function"==typeof f&&(c=f(c,e)||c)});return c}};a.L(D,"init",D.qb);a.L(D,"subscribe",D.subscribe);a.L(D,"extend",D.extend);a.L(D,"getSubscriptionsCount",D.Bd);a.a.Ba&&a.a.setPrototypeOf(D,
41
+ Function.prototype);a.T.fn=D;a.Qc=function(a){return null!=a&&"function"==typeof a.subscribe&&"function"==typeof a.notifySubscribers};a.b("subscribable",a.T);a.b("isSubscribable",a.Qc);a.S=a.u=function(){function b(a){d.push(e);e=a}function c(){e=d.pop()}var d=[],e,f=0;return{xc:b,end:c,cc:function(b){if(e){if(!a.Qc(b))throw Error("Only subscribable things can act as dependencies");e.od.call(e.pd,b,b.fd||(b.fd=++f))}},G:function(a,d,e){try{return b(),a.apply(d,e||[])}finally{c()}},qa:function(){if(e)return e.o.qa()},
42
+ Va:function(){if(e)return e.o.Va()},Ya:function(){if(e)return e.Ya},o:function(){if(e)return e.o}}}();a.b("computedContext",a.S);a.b("computedContext.getDependenciesCount",a.S.qa);a.b("computedContext.getDependencies",a.S.Va);a.b("computedContext.isInitial",a.S.Ya);a.b("computedContext.registerDependency",a.S.cc);a.b("ignoreDependencies",a.Yd=a.u.G);var I=a.a.Da("_latestValue");a.ta=function(b){function c(){if(0<arguments.length)return c.sb(c[I],arguments[0])&&(c.ya(),c[I]=arguments[0],c.xa()),this;
43
+ a.u.cc(c);return c[I]}c[I]=b;a.a.Ba||a.a.extend(c,a.T.fn);a.T.fn.qb(c);a.a.Ab(c,F);a.options.deferUpdates&&a.Ta.deferred(c,!0);return c};var F={equalityComparer:K,v:function(){return this[I]},xa:function(){this.notifySubscribers(this[I],"spectate");this.notifySubscribers(this[I])},ya:function(){this.notifySubscribers(this[I],"beforeChange")}};a.a.Ba&&a.a.setPrototypeOf(F,a.T.fn);var G=a.ta.Ma="__ko_proto__";F[G]=a.ta;a.O=function(b){if((b="function"==typeof b&&b[G])&&b!==F[G]&&b!==a.o.fn[G])throw Error("Invalid object that looks like an observable; possibly from another Knockout instance");
44
+ return!!b};a.Za=function(b){return"function"==typeof b&&(b[G]===F[G]||b[G]===a.o.fn[G]&&b.Nc)};a.b("observable",a.ta);a.b("isObservable",a.O);a.b("isWriteableObservable",a.Za);a.b("isWritableObservable",a.Za);a.b("observable.fn",F);a.L(F,"peek",F.v);a.L(F,"valueHasMutated",F.xa);a.L(F,"valueWillMutate",F.ya);a.Ha=function(b){b=b||[];if("object"!=typeof b||!("length"in b))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");b=a.ta(b);a.a.Ab(b,
45
+ a.Ha.fn);return b.extend({trackArrayChanges:!0})};a.Ha.fn={remove:function(b){for(var c=this.v(),d=[],e="function"!=typeof b||a.O(b)?function(a){return a===b}:b,f=0;f<c.length;f++){var g=c[f];if(e(g)){0===d.length&&this.ya();if(c[f]!==g)throw Error("Array modified during remove; cannot remove item");d.push(g);c.splice(f,1);f--}}d.length&&this.xa();return d},removeAll:function(b){if(b===n){var c=this.v(),d=c.slice(0);this.ya();c.splice(0,c.length);this.xa();return d}return b?this.remove(function(c){return 0<=
46
+ a.a.A(b,c)}):[]},destroy:function(b){var c=this.v(),d="function"!=typeof b||a.O(b)?function(a){return a===b}:b;this.ya();for(var e=c.length-1;0<=e;e--){var f=c[e];d(f)&&(f._destroy=!0)}this.xa()},destroyAll:function(b){return b===n?this.destroy(function(){return!0}):b?this.destroy(function(c){return 0<=a.a.A(b,c)}):[]},indexOf:function(b){var c=this();return a.a.A(c,b)},replace:function(a,c){var d=this.indexOf(a);0<=d&&(this.ya(),this.v()[d]=c,this.xa())},sorted:function(a){var c=this().slice(0);
47
+ return a?c.sort(a):c.sort()},reversed:function(){return this().slice(0).reverse()}};a.a.Ba&&a.a.setPrototypeOf(a.Ha.fn,a.ta.fn);a.a.D("pop push reverse shift sort splice unshift".split(" "),function(b){a.Ha.fn[b]=function(){var a=this.v();this.ya();this.zc(a,b,arguments);var d=a[b].apply(a,arguments);this.xa();return d===a?this:d}});a.a.D(["slice"],function(b){a.Ha.fn[b]=function(){var a=this();return a[b].apply(a,arguments)}});a.Pc=function(b){return a.O(b)&&"function"==typeof b.remove&&"function"==
48
+ typeof b.push};a.b("observableArray",a.Ha);a.b("isObservableArray",a.Pc);a.Ta.trackArrayChanges=function(b,c){function d(){function c(){if(m){var d=[].concat(b.v()||[]),e;if(b.Wa("arrayChange")){if(!f||1<m)f=a.a.Pb(k,d,b.Ob);e=f}k=d;f=null;m=0;e&&e.length&&b.notifySubscribers(e,"arrayChange")}}e?c():(e=!0,h=b.subscribe(function(){++m},null,"spectate"),k=[].concat(b.v()||[]),f=null,g=b.subscribe(c))}b.Ob={};c&&"object"==typeof c&&a.a.extend(b.Ob,c);b.Ob.sparse=!0;if(!b.zc){var e=!1,f=null,g,h,m=0,
49
+ k,l=b.Qa,p=b.hb;b.Qa=function(a){l&&l.call(b,a);"arrayChange"===a&&d()};b.hb=function(a){p&&p.call(b,a);"arrayChange"!==a||b.Wa("arrayChange")||(g&&g.s(),h&&h.s(),h=g=null,e=!1,k=n)};b.zc=function(b,c,d){function l(a,b,c){return k[k.length]={status:a,value:b,index:c}}if(e&&!m){var k=[],p=b.length,g=d.length,h=0;switch(c){case "push":h=p;case "unshift":for(c=0;c<g;c++)l("added",d[c],h+c);break;case "pop":h=p-1;case "shift":p&&l("deleted",b[h],h);break;case "splice":c=Math.min(Math.max(0,0>d[0]?p+d[0]:
50
+ d[0]),p);for(var p=1===g?p:Math.min(c+(d[1]||0),p),g=c+g-2,h=Math.max(p,g),U=[],L=[],n=2;c<h;++c,++n)c<p&&L.push(l("deleted",b[c],c)),c<g&&U.push(l("added",d[n],c));a.a.Kc(L,U);break;default:return}f=k}}}};var r=a.a.Da("_state");a.o=a.$=function(b,c,d){function e(){if(0<arguments.length){if("function"===typeof f)f.apply(g.nb,arguments);else throw Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");return this}g.ra||
51
+ a.u.cc(e);(g.ka||g.J&&e.Xa())&&e.ha();return g.X}"object"===typeof b?d=b:(d=d||{},b&&(d.read=b));if("function"!=typeof d.read)throw Error("Pass a function that returns the value of the ko.computed");var f=d.write,g={X:n,sa:!0,ka:!0,rb:!1,jc:!1,ra:!1,wb:!1,J:!1,Wc:d.read,nb:c||d.owner,l:d.disposeWhenNodeIsRemoved||d.l||null,Sa:d.disposeWhen||d.Sa,Rb:null,I:{},V:0,Ic:null};e[r]=g;e.Nc="function"===typeof f;a.a.Ba||a.a.extend(e,a.T.fn);a.T.fn.qb(e);a.a.Ab(e,C);d.pure?(g.wb=!0,g.J=!0,a.a.extend(e,da)):
52
+ d.deferEvaluation&&a.a.extend(e,ea);a.options.deferUpdates&&a.Ta.deferred(e,!0);g.l&&(g.jc=!0,g.l.nodeType||(g.l=null));g.J||d.deferEvaluation||e.ha();g.l&&e.ja()&&a.a.K.za(g.l,g.Rb=function(){e.s()});return e};var C={equalityComparer:K,qa:function(){return this[r].V},Va:function(){var b=[];a.a.P(this[r].I,function(a,d){b[d.Ka]=d.da});return b},Vb:function(b){if(!this[r].V)return!1;var c=this.Va();return-1!==a.a.A(c,b)?!0:!!a.a.Lb(c,function(a){return a.Vb&&a.Vb(b)})},uc:function(a,c,d){if(this[r].wb&&
53
+ c===this)throw Error("A 'pure' computed must not be called recursively");this[r].I[a]=d;d.Ka=this[r].V++;d.La=c.ob()},Xa:function(){var a,c,d=this[r].I;for(a in d)if(Object.prototype.hasOwnProperty.call(d,a)&&(c=d[a],this.Ia&&c.da.Ja||c.da.Dd(c.La)))return!0},Jd:function(){this.Ia&&!this[r].rb&&this.Ia(!1)},ja:function(){var a=this[r];return a.ka||0<a.V},Rd:function(){this.Ja?this[r].ka&&(this[r].sa=!0):this.Hc()},$c:function(a){if(a.Hb){var c=a.subscribe(this.Jd,this,"dirty"),d=a.subscribe(this.Rd,
54
+ this);return{da:a,s:function(){c.s();d.s()}}}return a.subscribe(this.Hc,this)},Hc:function(){var b=this,c=b.throttleEvaluation;c&&0<=c?(clearTimeout(this[r].Ic),this[r].Ic=a.a.setTimeout(function(){b.ha(!0)},c)):b.Ia?b.Ia(!0):b.ha(!0)},ha:function(b){var c=this[r],d=c.Sa,e=!1;if(!c.rb&&!c.ra){if(c.l&&!a.a.Sb(c.l)||d&&d()){if(!c.jc){this.s();return}}else c.jc=!1;c.rb=!0;try{e=this.zd(b)}finally{c.rb=!1}return e}},zd:function(b){var c=this[r],d=!1,e=c.wb?n:!c.V,d={qd:this,mb:c.I,Qb:c.V};a.u.xc({pd:d,
55
+ od:ba,o:this,Ya:e});c.I={};c.V=0;var f=this.yd(c,d);c.V?d=this.sb(c.X,f):(this.s(),d=!0);d&&(c.J?this.Gb():this.notifySubscribers(c.X,"beforeChange"),c.X=f,this.notifySubscribers(c.X,"spectate"),!c.J&&b&&this.notifySubscribers(c.X),this.rc&&this.rc());e&&this.notifySubscribers(c.X,"awake");return d},yd:function(b,c){try{var d=b.Wc;return b.nb?d.call(b.nb):d()}finally{a.u.end(),c.Qb&&!b.J&&a.a.P(c.mb,aa),b.sa=b.ka=!1}},v:function(a){var c=this[r];(c.ka&&(a||!c.V)||c.J&&this.Xa())&&this.ha();return c.X},
56
+ ub:function(b){a.T.fn.ub.call(this,b);this.nc=function(){this[r].J||(this[r].sa?this.ha():this[r].ka=!1);return this[r].X};this.Ia=function(a){this.pc(this[r].X);this[r].ka=!0;a&&(this[r].sa=!0);this.qc(this,!a)}},s:function(){var b=this[r];!b.J&&b.I&&a.a.P(b.I,function(a,b){b.s&&b.s()});b.l&&b.Rb&&a.a.K.yb(b.l,b.Rb);b.I=n;b.V=0;b.ra=!0;b.sa=!1;b.ka=!1;b.J=!1;b.l=n;b.Sa=n;b.Wc=n;this.Nc||(b.nb=n)}},da={Qa:function(b){var c=this,d=c[r];if(!d.ra&&d.J&&"change"==b){d.J=!1;if(d.sa||c.Xa())d.I=null,d.V=
57
+ 0,c.ha()&&c.Gb();else{var e=[];a.a.P(d.I,function(a,b){e[b.Ka]=a});a.a.D(e,function(a,b){var e=d.I[a],m=c.$c(e.da);m.Ka=b;m.La=e.La;d.I[a]=m});c.Xa()&&c.ha()&&c.Gb()}d.ra||c.notifySubscribers(d.X,"awake")}},hb:function(b){var c=this[r];c.ra||"change"!=b||this.Wa("change")||(a.a.P(c.I,function(a,b){b.s&&(c.I[a]={da:b.da,Ka:b.Ka,La:b.La},b.s())}),c.J=!0,this.notifySubscribers(n,"asleep"))},ob:function(){var b=this[r];b.J&&(b.sa||this.Xa())&&this.ha();return a.T.fn.ob.call(this)}},ea={Qa:function(a){"change"!=
58
+ a&&"beforeChange"!=a||this.v()}};a.a.Ba&&a.a.setPrototypeOf(C,a.T.fn);var N=a.ta.Ma;C[N]=a.o;a.Oc=function(a){return"function"==typeof a&&a[N]===C[N]};a.Fd=function(b){return a.Oc(b)&&b[r]&&b[r].wb};a.b("computed",a.o);a.b("dependentObservable",a.o);a.b("isComputed",a.Oc);a.b("isPureComputed",a.Fd);a.b("computed.fn",C);a.L(C,"peek",C.v);a.L(C,"dispose",C.s);a.L(C,"isActive",C.ja);a.L(C,"getDependenciesCount",C.qa);a.L(C,"getDependencies",C.Va);a.xb=function(b,c){if("function"===typeof b)return a.o(b,
59
+ c,{pure:!0});b=a.a.extend({},b);b.pure=!0;return a.o(b,c)};a.b("pureComputed",a.xb);(function(){function b(a,f,g){g=g||new d;a=f(a);if("object"!=typeof a||null===a||a===n||a instanceof RegExp||a instanceof Date||a instanceof String||a instanceof Number||a instanceof Boolean)return a;var h=a instanceof Array?[]:{};g.save(a,h);c(a,function(c){var d=f(a[c]);switch(typeof d){case "boolean":case "number":case "string":case "function":h[c]=d;break;case "object":case "undefined":var l=g.get(d);h[c]=l!==
60
+ n?l:b(d,f,g)}});return h}function c(a,b){if(a instanceof Array){for(var c=0;c<a.length;c++)b(c);"function"==typeof a.toJSON&&b("toJSON")}else for(c in a)b(c)}function d(){this.keys=[];this.values=[]}a.ad=function(c){if(0==arguments.length)throw Error("When calling ko.toJS, pass the object you want to convert.");return b(c,function(b){for(var c=0;a.O(b)&&10>c;c++)b=b();return b})};a.toJSON=function(b,c,d){b=a.ad(b);return a.a.hc(b,c,d)};d.prototype={constructor:d,save:function(b,c){var d=a.a.A(this.keys,
61
+ b);0<=d?this.values[d]=c:(this.keys.push(b),this.values.push(c))},get:function(b){b=a.a.A(this.keys,b);return 0<=b?this.values[b]:n}}})();a.b("toJS",a.ad);a.b("toJSON",a.toJSON);a.Wd=function(b,c,d){function e(c){var e=a.xb(b,d).extend({ma:"always"}),h=e.subscribe(function(a){a&&(h.s(),c(a))});e.notifySubscribers(e.v());return h}return"function"!==typeof Promise||c?e(c.bind(d)):new Promise(e)};a.b("when",a.Wd);(function(){a.w={M:function(b){switch(a.a.R(b)){case "option":return!0===b.__ko__hasDomDataOptionValue__?
62
+ a.a.g.get(b,a.c.options.$b):7>=a.a.W?b.getAttributeNode("value")&&b.getAttributeNode("value").specified?b.value:b.text:b.value;case "select":return 0<=b.selectedIndex?a.w.M(b.options[b.selectedIndex]):n;default:return b.value}},cb:function(b,c,d){switch(a.a.R(b)){case "option":"string"===typeof c?(a.a.g.set(b,a.c.options.$b,n),"__ko__hasDomDataOptionValue__"in b&&delete b.__ko__hasDomDataOptionValue__,b.value=c):(a.a.g.set(b,a.c.options.$b,c),b.__ko__hasDomDataOptionValue__=!0,b.value="number"===
63
+ typeof c?c:"");break;case "select":if(""===c||null===c)c=n;for(var e=-1,f=0,g=b.options.length,h;f<g;++f)if(h=a.w.M(b.options[f]),h==c||""===h&&c===n){e=f;break}if(d||0<=e||c===n&&1<b.size)b.selectedIndex=e,6===a.a.W&&a.a.setTimeout(function(){b.selectedIndex=e},0);break;default:if(null===c||c===n)c="";b.value=c}}}})();a.b("selectExtensions",a.w);a.b("selectExtensions.readValue",a.w.M);a.b("selectExtensions.writeValue",a.w.cb);a.m=function(){function b(b){b=a.a.Db(b);123===b.charCodeAt(0)&&(b=b.slice(1,
64
+ -1));b+="\n,";var c=[],d=b.match(e),p,q=[],h=0;if(1<d.length){for(var x=0,B;B=d[x];++x){var u=B.charCodeAt(0);if(44===u){if(0>=h){c.push(p&&q.length?{key:p,value:q.join("")}:{unknown:p||q.join("")});p=h=0;q=[];continue}}else if(58===u){if(!h&&!p&&1===q.length){p=q.pop();continue}}else if(47===u&&1<B.length&&(47===B.charCodeAt(1)||42===B.charCodeAt(1)))continue;else 47===u&&x&&1<B.length?(u=d[x-1].match(f))&&!g[u[0]]&&(b=b.substr(b.indexOf(B)+1),d=b.match(e),x=-1,B="/"):40===u||123===u||91===u?++h:
65
+ 41===u||125===u||93===u?--h:p||q.length||34!==u&&39!==u||(B=B.slice(1,-1));q.push(B)}if(0<h)throw Error("Unbalanced parentheses, braces, or brackets");}return c}var c=["true","false","null","undefined"],d=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,e=RegExp("\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|`(?:\\\\.|[^`])*`|/\\*(?:[^*]|\\*+[^*/])*\\*+/|//.*\n|/(?:\\\\.|[^/])+/w*|[^\\s:,/][^,\"'`{}()/:[\\]]*[^\\s,\"'`{}()/:[\\]]|[^\\s]","g"),f=/[\])"'A-Za-z0-9_$]+$/,g={"in":1,"return":1,"typeof":1},
66
+ h={};return{Ra:[],wa:h,ac:b,vb:function(e,f){function l(b,e){var f;if(!x){var k=a.getBindingHandler(b);if(k&&k.preprocess&&!(e=k.preprocess(e,b,l)))return;if(k=h[b])f=e,0<=a.a.A(c,f)?f=!1:(k=f.match(d),f=null===k?!1:k[1]?"Object("+k[1]+")"+k[2]:f),k=f;k&&q.push("'"+("string"==typeof h[b]?h[b]:b)+"':function(_z){"+f+"=_z}")}g&&(e="function(){return "+e+" }");p.push("'"+b+"':"+e)}f=f||{};var p=[],q=[],g=f.valueAccessors,x=f.bindingParams,B="string"===typeof e?b(e):e;a.a.D(B,function(a){l(a.key||a.unknown,
67
+ a.value)});q.length&&l("_ko_property_writers","{"+q.join(",")+" }");return p.join(",")},Id:function(a,b){for(var c=0;c<a.length;c++)if(a[c].key==b)return!0;return!1},eb:function(b,c,d,e,f){if(b&&a.O(b))!a.Za(b)||f&&b.v()===e||b(e);else if((b=c.get("_ko_property_writers"))&&b[d])b[d](e)}}}();a.b("expressionRewriting",a.m);a.b("expressionRewriting.bindingRewriteValidators",a.m.Ra);a.b("expressionRewriting.parseObjectLiteral",a.m.ac);a.b("expressionRewriting.preProcessBindings",a.m.vb);a.b("expressionRewriting._twoWayBindings",
68
+ a.m.wa);a.b("jsonExpressionRewriting",a.m);a.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson",a.m.vb);(function(){function b(a){return 8==a.nodeType&&g.test(f?a.text:a.nodeValue)}function c(a){return 8==a.nodeType&&h.test(f?a.text:a.nodeValue)}function d(d,e){for(var f=d,h=1,g=[];f=f.nextSibling;){if(c(f)&&(a.a.g.set(f,k,!0),h--,0===h))return g;g.push(f);b(f)&&h++}if(!e)throw Error("Cannot find closing comment tag to match: "+d.nodeValue);return null}function e(a,b){var c=d(a,b);return c?
69
+ 0<c.length?c[c.length-1].nextSibling:a.nextSibling:null}var f=w&&"\x3c!--test--\x3e"===w.createComment("test").text,g=f?/^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/:/^\s*ko(?:\s+([\s\S]+))?\s*$/,h=f?/^\x3c!--\s*\/ko\s*--\x3e$/:/^\s*\/ko\s*$/,m={ul:!0,ol:!0},k="__ko_matchedEndComment__";a.h={ea:{},childNodes:function(a){return b(a)?d(a):a.childNodes},Ea:function(c){if(b(c)){c=a.h.childNodes(c);for(var d=0,e=c.length;d<e;d++)a.removeNode(c[d])}else a.a.Tb(c)},va:function(c,d){if(b(c)){a.h.Ea(c);for(var e=
70
+ c.nextSibling,f=0,k=d.length;f<k;f++)e.parentNode.insertBefore(d[f],e)}else a.a.va(c,d)},Vc:function(a,c){var d;b(a)?(d=a.nextSibling,a=a.parentNode):d=a.firstChild;d?c!==d&&a.insertBefore(c,d):a.appendChild(c)},Wb:function(c,d,e){e?(e=e.nextSibling,b(c)&&(c=c.parentNode),e?d!==e&&c.insertBefore(d,e):c.appendChild(d)):a.h.Vc(c,d)},firstChild:function(a){if(b(a))return!a.nextSibling||c(a.nextSibling)?null:a.nextSibling;if(a.firstChild&&c(a.firstChild))throw Error("Found invalid end comment, as the first child of "+
71
+ a);return a.firstChild},nextSibling:function(d){b(d)&&(d=e(d));if(d.nextSibling&&c(d.nextSibling)){var f=d.nextSibling;if(c(f)&&!a.a.g.get(f,k))throw Error("Found end comment without a matching opening comment, as child of "+d);return null}return d.nextSibling},Cd:b,Vd:function(a){return(a=(f?a.text:a.nodeValue).match(g))?a[1]:null},Sc:function(d){if(m[a.a.R(d)]){var f=d.firstChild;if(f){do if(1===f.nodeType){var k;k=f.firstChild;var h=null;if(k){do if(h)h.push(k);else if(b(k)){var g=e(k,!0);g?k=
72
+ g:h=[k]}else c(k)&&(h=[k]);while(k=k.nextSibling)}if(k=h)for(h=f.nextSibling,g=0;g<k.length;g++)h?d.insertBefore(k[g],h):d.appendChild(k[g])}while(f=f.nextSibling)}}}}})();a.b("virtualElements",a.h);a.b("virtualElements.allowedBindings",a.h.ea);a.b("virtualElements.emptyNode",a.h.Ea);a.b("virtualElements.insertAfter",a.h.Wb);a.b("virtualElements.prepend",a.h.Vc);a.b("virtualElements.setDomNodeChildren",a.h.va);(function(){a.ga=function(){this.nd={}};a.a.extend(a.ga.prototype,{nodeHasBindings:function(b){switch(b.nodeType){case 1:return null!=
73
+ b.getAttribute("data-bind")||a.j.getComponentNameForNode(b);case 8:return a.h.Cd(b);default:return!1}},getBindings:function(b,c){var d=this.getBindingsString(b,c),d=d?this.parseBindingsString(d,c,b):null;return a.j.tc(d,b,c,!1)},getBindingAccessors:function(b,c){var d=this.getBindingsString(b,c),d=d?this.parseBindingsString(d,c,b,{valueAccessors:!0}):null;return a.j.tc(d,b,c,!0)},getBindingsString:function(b){switch(b.nodeType){case 1:return b.getAttribute("data-bind");case 8:return a.h.Vd(b);default:return null}},
74
+ parseBindingsString:function(b,c,d,e){try{var f=this.nd,g=b+(e&&e.valueAccessors||""),h;if(!(h=f[g])){var m,k="with($context){with($data||{}){return{"+a.m.vb(b,e)+"}}}";m=new Function("$context","$element",k);h=f[g]=m}return h(c,d)}catch(l){throw l.message="Unable to parse bindings.\nBindings value: "+b+"\nMessage: "+l.message,l;}}});a.ga.instance=new a.ga})();a.b("bindingProvider",a.ga);(function(){function b(b){var c=(b=a.a.g.get(b,z))&&b.N;c&&(b.N=null,c.Tc())}function c(c,d,e){this.node=c;this.yc=
75
+ d;this.kb=[];this.H=!1;d.N||a.a.K.za(c,b);e&&e.N&&(e.N.kb.push(c),this.Kb=e)}function d(a){return function(){return a}}function e(a){return a()}function f(b){return a.a.Ga(a.u.G(b),function(a,c){return function(){return b()[c]}})}function g(b,c,e){return"function"===typeof b?f(b.bind(null,c,e)):a.a.Ga(b,d)}function h(a,b){return f(this.getBindings.bind(this,a,b))}function m(b,c){var d=a.h.firstChild(c);if(d){var e,f=a.ga.instance,l=f.preprocessNode;if(l){for(;e=d;)d=a.h.nextSibling(e),l.call(f,e);
76
+ d=a.h.firstChild(c)}for(;e=d;)d=a.h.nextSibling(e),k(b,e)}a.i.ma(c,a.i.H)}function k(b,c){var d=b,e=1===c.nodeType;e&&a.h.Sc(c);if(e||a.ga.instance.nodeHasBindings(c))d=p(c,null,b).bindingContextForDescendants;d&&!u[a.a.R(c)]&&m(d,c)}function l(b){var c=[],d={},e=[];a.a.P(b,function ca(f){if(!d[f]){var k=a.getBindingHandler(f);k&&(k.after&&(e.push(f),a.a.D(k.after,function(c){if(b[c]){if(-1!==a.a.A(e,c))throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+e.join(", "));
77
+ ca(c)}}),e.length--),c.push({key:f,Mc:k}));d[f]=!0}});return c}function p(b,c,d){var f=a.a.g.Ub(b,z,{}),k=f.hd;if(!c){if(k)throw Error("You cannot apply bindings multiple times to the same element.");f.hd=!0}k||(f.context=d);f.Zb||(f.Zb={});var g;if(c&&"function"!==typeof c)g=c;else{var p=a.ga.instance,q=p.getBindingAccessors||h,m=a.$(function(){if(g=c?c(d,b):q.call(p,b,d)){if(d[t])d[t]();if(d[B])d[B]()}return g},null,{l:b});g&&m.ja()||(m=null)}var x=d,u;if(g){var J=function(){return a.a.Ga(m?m():
78
+ g,e)},r=m?function(a){return function(){return e(m()[a])}}:function(a){return g[a]};J.get=function(a){return g[a]&&e(r(a))};J.has=function(a){return a in g};a.i.H in g&&a.i.subscribe(b,a.i.H,function(){var c=(0,g[a.i.H])();if(c){var d=a.h.childNodes(b);d.length&&c(d,a.Ec(d[0]))}});a.i.pa in g&&(x=a.i.Cb(b,d),a.i.subscribe(b,a.i.pa,function(){var c=(0,g[a.i.pa])();c&&a.h.firstChild(b)&&c(b)}));f=l(g);a.a.D(f,function(c){var d=c.Mc.init,e=c.Mc.update,f=c.key;if(8===b.nodeType&&!a.h.ea[f])throw Error("The binding '"+
79
+ f+"' cannot be used with virtual elements");try{"function"==typeof d&&a.u.G(function(){var a=d(b,r(f),J,x.$data,x);if(a&&a.controlsDescendantBindings){if(u!==n)throw Error("Multiple bindings ("+u+" and "+f+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");u=f}}),"function"==typeof e&&a.$(function(){e(b,r(f),J,x.$data,x)},null,{l:b})}catch(k){throw k.message='Unable to process binding "'+f+": "+g[f]+'"\nMessage: '+k.message,
80
+ k;}})}f=u===n;return{shouldBindDescendants:f,bindingContextForDescendants:f&&x}}function q(b,c){return b&&b instanceof a.fa?b:new a.fa(b,n,n,c)}var t=a.a.Da("_subscribable"),x=a.a.Da("_ancestorBindingInfo"),B=a.a.Da("_dataDependency");a.c={};var u={script:!0,textarea:!0,template:!0};a.getBindingHandler=function(b){return a.c[b]};var J={};a.fa=function(b,c,d,e,f){function k(){var b=p?h():h,f=a.a.f(b);c?(a.a.extend(l,c),x in c&&(l[x]=c[x])):(l.$parents=[],l.$root=f,l.ko=a);l[t]=q;g?f=l.$data:(l.$rawData=
81
+ b,l.$data=f);d&&(l[d]=f);e&&e(l,c,f);if(c&&c[t]&&!a.S.o().Vb(c[t]))c[t]();m&&(l[B]=m);return l.$data}var l=this,g=b===J,h=g?n:b,p="function"==typeof h&&!a.O(h),q,m=f&&f.dataDependency;f&&f.exportDependencies?k():(q=a.xb(k),q.v(),q.ja()?q.equalityComparer=null:l[t]=n)};a.fa.prototype.createChildContext=function(b,c,d,e){!e&&c&&"object"==typeof c&&(e=c,c=e.as,d=e.extend);if(c&&e&&e.noChildContext){var f="function"==typeof b&&!a.O(b);return new a.fa(J,this,null,function(a){d&&d(a);a[c]=f?b():b},e)}return new a.fa(b,
82
+ this,c,function(a,b){a.$parentContext=b;a.$parent=b.$data;a.$parents=(b.$parents||[]).slice(0);a.$parents.unshift(a.$parent);d&&d(a)},e)};a.fa.prototype.extend=function(b,c){return new a.fa(J,this,null,function(c){a.a.extend(c,"function"==typeof b?b(c):b)},c)};var z=a.a.g.Z();c.prototype.Tc=function(){this.Kb&&this.Kb.N&&this.Kb.N.sd(this.node)};c.prototype.sd=function(b){a.a.Pa(this.kb,b);!this.kb.length&&this.H&&this.Cc()};c.prototype.Cc=function(){this.H=!0;this.yc.N&&!this.kb.length&&(this.yc.N=
83
+ null,a.a.K.yb(this.node,b),a.i.ma(this.node,a.i.pa),this.Tc())};a.i={H:"childrenComplete",pa:"descendantsComplete",subscribe:function(b,c,d,e,f){var k=a.a.g.Ub(b,z,{});k.Fa||(k.Fa=new a.T);f&&f.notifyImmediately&&k.Zb[c]&&a.u.G(d,e,[b]);return k.Fa.subscribe(d,e,c)},ma:function(b,c){var d=a.a.g.get(b,z);if(d&&(d.Zb[c]=!0,d.Fa&&d.Fa.notifySubscribers(b,c),c==a.i.H))if(d.N)d.N.Cc();else if(d.N===n&&d.Fa&&d.Fa.Wa(a.i.pa))throw Error("descendantsComplete event not supported for bindings on this node");
84
+ },Cb:function(b,d){var e=a.a.g.Ub(b,z,{});e.N||(e.N=new c(b,e,d[x]));return d[x]==e?d:d.extend(function(a){a[x]=e})}};a.Td=function(b){return(b=a.a.g.get(b,z))&&b.context};a.ib=function(b,c,d){1===b.nodeType&&a.h.Sc(b);return p(b,c,q(d))};a.ld=function(b,c,d){d=q(d);return a.ib(b,g(c,d,b),d)};a.Oa=function(a,b){1!==b.nodeType&&8!==b.nodeType||m(q(a),b)};a.vc=function(a,b,c){!v&&A.jQuery&&(v=A.jQuery);if(2>arguments.length){if(b=w.body,!b)throw Error("ko.applyBindings: could not find document.body; has the document been loaded?");
85
+ }else if(!b||1!==b.nodeType&&8!==b.nodeType)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");k(q(a,c),b)};a.Dc=function(b){return!b||1!==b.nodeType&&8!==b.nodeType?n:a.Td(b)};a.Ec=function(b){return(b=a.Dc(b))?b.$data:n};a.b("bindingHandlers",a.c);a.b("bindingEvent",a.i);a.b("bindingEvent.subscribe",a.i.subscribe);a.b("bindingEvent.startPossiblyAsyncContentBinding",a.i.Cb);a.b("applyBindings",a.vc);a.b("applyBindingsToDescendants",a.Oa);
86
+ a.b("applyBindingAccessorsToNode",a.ib);a.b("applyBindingsToNode",a.ld);a.b("contextFor",a.Dc);a.b("dataFor",a.Ec)})();(function(b){function c(c,e){var k=Object.prototype.hasOwnProperty.call(f,c)?f[c]:b,l;k?k.subscribe(e):(k=f[c]=new a.T,k.subscribe(e),d(c,function(b,d){var e=!(!d||!d.synchronous);g[c]={definition:b,Gd:e};delete f[c];l||e?k.notifySubscribers(b):a.na.zb(function(){k.notifySubscribers(b)})}),l=!0)}function d(a,b){e("getConfig",[a],function(c){c?e("loadComponent",[a,c],function(a){b(a,
87
+ c)}):b(null,null)})}function e(c,d,f,l){l||(l=a.j.loaders.slice(0));var g=l.shift();if(g){var q=g[c];if(q){var t=!1;if(q.apply(g,d.concat(function(a){t?f(null):null!==a?f(a):e(c,d,f,l)}))!==b&&(t=!0,!g.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.");}else e(c,d,f,l)}else f(null)}var f={},g={};a.j={get:function(d,e){var f=Object.prototype.hasOwnProperty.call(g,d)?g[d]:b;f?f.Gd?a.u.G(function(){e(f.definition)}):
88
+ a.na.zb(function(){e(f.definition)}):c(d,e)},Bc:function(a){delete g[a]},oc:e};a.j.loaders=[];a.b("components",a.j);a.b("components.get",a.j.get);a.b("components.clearCachedDefinition",a.j.Bc)})();(function(){function b(b,c,d,e){function g(){0===--B&&e(h)}var h={},B=2,u=d.template;d=d.viewModel;u?f(c,u,function(c){a.j.oc("loadTemplate",[b,c],function(a){h.template=a;g()})}):g();d?f(c,d,function(c){a.j.oc("loadViewModel",[b,c],function(a){h[m]=a;g()})}):g()}function c(a,b,d){if("function"===typeof b)d(function(a){return new b(a)});
89
+ else if("function"===typeof b[m])d(b[m]);else if("instance"in b){var e=b.instance;d(function(){return e})}else"viewModel"in b?c(a,b.viewModel,d):a("Unknown viewModel value: "+b)}function d(b){switch(a.a.R(b)){case "script":return a.a.ua(b.text);case "textarea":return a.a.ua(b.value);case "template":if(e(b.content))return a.a.Ca(b.content.childNodes)}return a.a.Ca(b.childNodes)}function e(a){return A.DocumentFragment?a instanceof DocumentFragment:a&&11===a.nodeType}function f(a,b,c){"string"===typeof b.require?
90
+ T||A.require?(T||A.require)([b.require],function(a){a&&"object"===typeof a&&a.Xd&&a["default"]&&(a=a["default"]);c(a)}):a("Uses require, but no AMD loader is present"):c(b)}function g(a){return function(b){throw Error("Component '"+a+"': "+b);}}var h={};a.j.register=function(b,c){if(!c)throw Error("Invalid configuration for "+b);if(a.j.tb(b))throw Error("Component "+b+" is already registered");h[b]=c};a.j.tb=function(a){return Object.prototype.hasOwnProperty.call(h,a)};a.j.unregister=function(b){delete h[b];
91
+ a.j.Bc(b)};a.j.Fc={getConfig:function(b,c){c(a.j.tb(b)?h[b]:null)},loadComponent:function(a,c,d){var e=g(a);f(e,c,function(c){b(a,e,c,d)})},loadTemplate:function(b,c,f){b=g(b);if("string"===typeof c)f(a.a.ua(c));else if(c instanceof Array)f(c);else if(e(c))f(a.a.la(c.childNodes));else if(c.element)if(c=c.element,A.HTMLElement?c instanceof HTMLElement:c&&c.tagName&&1===c.nodeType)f(d(c));else if("string"===typeof c){var h=w.getElementById(c);h?f(d(h)):b("Cannot find element with ID "+c)}else b("Unknown element type: "+
92
+ c);else b("Unknown template value: "+c)},loadViewModel:function(a,b,d){c(g(a),b,d)}};var m="createViewModel";a.b("components.register",a.j.register);a.b("components.isRegistered",a.j.tb);a.b("components.unregister",a.j.unregister);a.b("components.defaultLoader",a.j.Fc);a.j.loaders.push(a.j.Fc);a.j.dd=h})();(function(){function b(b,e){var f=b.getAttribute("params");if(f){var f=c.parseBindingsString(f,e,b,{valueAccessors:!0,bindingParams:!0}),f=a.a.Ga(f,function(c){return a.o(c,null,{l:b})}),g=a.a.Ga(f,
93
+ function(c){var e=c.v();return c.ja()?a.o({read:function(){return a.a.f(c())},write:a.Za(e)&&function(a){c()(a)},l:b}):e});Object.prototype.hasOwnProperty.call(g,"$raw")||(g.$raw=f);return g}return{$raw:{}}}a.j.getComponentNameForNode=function(b){var c=a.a.R(b);if(a.j.tb(c)&&(-1!=c.indexOf("-")||"[object HTMLUnknownElement]"==""+b||8>=a.a.W&&b.tagName===c))return c};a.j.tc=function(c,e,f,g){if(1===e.nodeType){var h=a.j.getComponentNameForNode(e);if(h){c=c||{};if(c.component)throw Error('Cannot use the "component" binding on a custom element matching a component');
94
+ var m={name:h,params:b(e,f)};c.component=g?function(){return m}:m}}return c};var c=new a.ga;9>a.a.W&&(a.j.register=function(a){return function(b){return a.apply(this,arguments)}}(a.j.register),w.createDocumentFragment=function(b){return function(){var c=b(),f=a.j.dd,g;for(g in f);return c}}(w.createDocumentFragment))})();(function(){function b(b,c,d){c=c.template;if(!c)throw Error("Component '"+b+"' has no template");b=a.a.Ca(c);a.h.va(d,b)}function c(a,b,c){var d=a.createViewModel;return d?d.call(a,
95
+ b,c):b}var d=0;a.c.component={init:function(e,f,g,h,m){function k(){var a=l&&l.dispose;"function"===typeof a&&a.call(l);q&&q.s();p=l=q=null}var l,p,q,t=a.a.la(a.h.childNodes(e));a.h.Ea(e);a.a.K.za(e,k);a.o(function(){var g=a.a.f(f()),h,u;"string"===typeof g?h=g:(h=a.a.f(g.name),u=a.a.f(g.params));if(!h)throw Error("No component name specified");var n=a.i.Cb(e,m),z=p=++d;a.j.get(h,function(d){if(p===z){k();if(!d)throw Error("Unknown component '"+h+"'");b(h,d,e);var f=c(d,u,{element:e,templateNodes:t});
96
+ d=n.createChildContext(f,{extend:function(a){a.$component=f;a.$componentTemplateNodes=t}});f&&f.koDescendantsComplete&&(q=a.i.subscribe(e,a.i.pa,f.koDescendantsComplete,f));l=f;a.Oa(d,e)}})},null,{l:e});return{controlsDescendantBindings:!0}}};a.h.ea.component=!0})();var V={"class":"className","for":"htmlFor"};a.c.attr={update:function(b,c){var d=a.a.f(c())||{};a.a.P(d,function(c,d){d=a.a.f(d);var g=c.indexOf(":"),g="lookupNamespaceURI"in b&&0<g&&b.lookupNamespaceURI(c.substr(0,g)),h=!1===d||null===
97
+ d||d===n;h?g?b.removeAttributeNS(g,c):b.removeAttribute(c):d=d.toString();8>=a.a.W&&c in V?(c=V[c],h?b.removeAttribute(c):b[c]=d):h||(g?b.setAttributeNS(g,c,d):b.setAttribute(c,d));"name"===c&&a.a.Yc(b,h?"":d)})}};(function(){a.c.checked={after:["value","attr"],init:function(b,c,d){function e(){var e=b.checked,f=g();if(!a.S.Ya()&&(e||!m&&!a.S.qa())){var k=a.u.G(c);if(l){var q=p?k.v():k,z=t;t=f;z!==f?e&&(a.a.Na(q,f,!0),a.a.Na(q,z,!1)):a.a.Na(q,f,e);p&&a.Za(k)&&k(q)}else h&&(f===n?f=e:e||(f=n)),a.m.eb(k,
98
+ d,"checked",f,!0)}}function f(){var d=a.a.f(c()),e=g();l?(b.checked=0<=a.a.A(d,e),t=e):b.checked=h&&e===n?!!d:g()===d}var g=a.xb(function(){if(d.has("checkedValue"))return a.a.f(d.get("checkedValue"));if(q)return d.has("value")?a.a.f(d.get("value")):b.value}),h="checkbox"==b.type,m="radio"==b.type;if(h||m){var k=c(),l=h&&a.a.f(k)instanceof Array,p=!(l&&k.push&&k.splice),q=m||l,t=l?g():n;m&&!b.name&&a.c.uniqueName.init(b,function(){return!0});a.o(e,null,{l:b});a.a.B(b,"click",e);a.o(f,null,{l:b});
99
+ k=n}}};a.m.wa.checked=!0;a.c.checkedValue={update:function(b,c){b.value=a.a.f(c())}}})();a.c["class"]={update:function(b,c){var d=a.a.Db(a.a.f(c()));a.a.Eb(b,b.__ko__cssValue,!1);b.__ko__cssValue=d;a.a.Eb(b,d,!0)}};a.c.css={update:function(b,c){var d=a.a.f(c());null!==d&&"object"==typeof d?a.a.P(d,function(c,d){d=a.a.f(d);a.a.Eb(b,c,d)}):a.c["class"].update(b,c)}};a.c.enable={update:function(b,c){var d=a.a.f(c());d&&b.disabled?b.removeAttribute("disabled"):d||b.disabled||(b.disabled=!0)}};a.c.disable=
100
+ {update:function(b,c){a.c.enable.update(b,function(){return!a.a.f(c())})}};a.c.event={init:function(b,c,d,e,f){var g=c()||{};a.a.P(g,function(g){"string"==typeof g&&a.a.B(b,g,function(b){var k,l=c()[g];if(l){try{var p=a.a.la(arguments);e=f.$data;p.unshift(e);k=l.apply(e,p)}finally{!0!==k&&(b.preventDefault?b.preventDefault():b.returnValue=!1)}!1===d.get(g+"Bubble")&&(b.cancelBubble=!0,b.stopPropagation&&b.stopPropagation())}})})}};a.c.foreach={Rc:function(b){return function(){var c=b(),d=a.a.bc(c);
101
+ if(!d||"number"==typeof d.length)return{foreach:c,templateEngine:a.ba.Ma};a.a.f(c);return{foreach:d.data,as:d.as,noChildContext:d.noChildContext,includeDestroyed:d.includeDestroyed,afterAdd:d.afterAdd,beforeRemove:d.beforeRemove,afterRender:d.afterRender,beforeMove:d.beforeMove,afterMove:d.afterMove,templateEngine:a.ba.Ma}}},init:function(b,c){return a.c.template.init(b,a.c.foreach.Rc(c))},update:function(b,c,d,e,f){return a.c.template.update(b,a.c.foreach.Rc(c),d,e,f)}};a.m.Ra.foreach=!1;a.h.ea.foreach=
102
+ !0;a.c.hasfocus={init:function(b,c,d){function e(e){b.__ko_hasfocusUpdating=!0;var f=b.ownerDocument;if("activeElement"in f){var g;try{g=f.activeElement}catch(l){g=f.body}e=g===b}f=c();a.m.eb(f,d,"hasfocus",e,!0);b.__ko_hasfocusLastValue=e;b.__ko_hasfocusUpdating=!1}var f=e.bind(null,!0),g=e.bind(null,!1);a.a.B(b,"focus",f);a.a.B(b,"focusin",f);a.a.B(b,"blur",g);a.a.B(b,"focusout",g);b.__ko_hasfocusLastValue=!1},update:function(b,c){var d=!!a.a.f(c());b.__ko_hasfocusUpdating||b.__ko_hasfocusLastValue===
103
+ d||(d?b.focus():b.blur(),!d&&b.__ko_hasfocusLastValue&&b.ownerDocument.body.focus(),a.u.G(a.a.Fb,null,[b,d?"focusin":"focusout"]))}};a.m.wa.hasfocus=!0;a.c.hasFocus=a.c.hasfocus;a.m.wa.hasFocus="hasfocus";a.c.html={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.fc(b,c())}};(function(){function b(b,d,e){a.c[b]={init:function(b,c,h,m,k){var l,p,q={},t,x,n;if(d){m=h.get("as");var u=h.get("noChildContext");n=!(m&&u);q={as:m,noChildContext:u,exportDependencies:n}}x=(t=
104
+ "render"==h.get("completeOn"))||h.has(a.i.pa);a.o(function(){var h=a.a.f(c()),m=!e!==!h,u=!p,r;if(n||m!==l){x&&(k=a.i.Cb(b,k));if(m){if(!d||n)q.dataDependency=a.S.o();r=d?k.createChildContext("function"==typeof h?h:c,q):a.S.qa()?k.extend(null,q):k}u&&a.S.qa()&&(p=a.a.Ca(a.h.childNodes(b),!0));m?(u||a.h.va(b,a.a.Ca(p)),a.Oa(r,b)):(a.h.Ea(b),t||a.i.ma(b,a.i.H));l=m}},null,{l:b});return{controlsDescendantBindings:!0}}};a.m.Ra[b]=!1;a.h.ea[b]=!0}b("if");b("ifnot",!1,!0);b("with",!0)})();a.c.let={init:function(b,
105
+ c,d,e,f){c=f.extend(c);a.Oa(c,b);return{controlsDescendantBindings:!0}}};a.h.ea.let=!0;var Q={};a.c.options={init:function(b){if("select"!==a.a.R(b))throw Error("options binding applies only to SELECT elements");for(;0<b.length;)b.remove(0);return{controlsDescendantBindings:!0}},update:function(b,c,d){function e(){return a.a.jb(b.options,function(a){return a.selected})}function f(a,b,c){var d=typeof b;return"function"==d?b(a):"string"==d?a[b]:c}function g(c,d){if(x&&l)a.i.ma(b,a.i.H);else if(t.length){var e=
106
+ 0<=a.a.A(t,a.w.M(d[0]));a.a.Zc(d[0],e);x&&!e&&a.u.G(a.a.Fb,null,[b,"change"])}}var h=b.multiple,m=0!=b.length&&h?b.scrollTop:null,k=a.a.f(c()),l=d.get("valueAllowUnset")&&d.has("value"),p=d.get("optionsIncludeDestroyed");c={};var q,t=[];l||(h?t=a.a.Mb(e(),a.w.M):0<=b.selectedIndex&&t.push(a.w.M(b.options[b.selectedIndex])));k&&("undefined"==typeof k.length&&(k=[k]),q=a.a.jb(k,function(b){return p||b===n||null===b||!a.a.f(b._destroy)}),d.has("optionsCaption")&&(k=a.a.f(d.get("optionsCaption")),null!==
107
+ k&&k!==n&&q.unshift(Q)));var x=!1;c.beforeRemove=function(a){b.removeChild(a)};k=g;d.has("optionsAfterRender")&&"function"==typeof d.get("optionsAfterRender")&&(k=function(b,c){g(0,c);a.u.G(d.get("optionsAfterRender"),null,[c[0],b!==Q?b:n])});a.a.ec(b,q,function(c,e,g){g.length&&(t=!l&&g[0].selected?[a.w.M(g[0])]:[],x=!0);e=b.ownerDocument.createElement("option");c===Q?(a.a.Bb(e,d.get("optionsCaption")),a.w.cb(e,n)):(g=f(c,d.get("optionsValue"),c),a.w.cb(e,a.a.f(g)),c=f(c,d.get("optionsText"),g),
108
+ a.a.Bb(e,c));return[e]},c,k);if(!l){var B;h?B=t.length&&e().length<t.length:B=t.length&&0<=b.selectedIndex?a.w.M(b.options[b.selectedIndex])!==t[0]:t.length||0<=b.selectedIndex;B&&a.u.G(a.a.Fb,null,[b,"change"])}(l||a.S.Ya())&&a.i.ma(b,a.i.H);a.a.wd(b);m&&20<Math.abs(m-b.scrollTop)&&(b.scrollTop=m)}};a.c.options.$b=a.a.g.Z();a.c.selectedOptions={init:function(b,c,d){function e(){var e=c(),f=[];a.a.D(b.getElementsByTagName("option"),function(b){b.selected&&f.push(a.w.M(b))});a.m.eb(e,d,"selectedOptions",
109
+ f)}function f(){var d=a.a.f(c()),e=b.scrollTop;d&&"number"==typeof d.length&&a.a.D(b.getElementsByTagName("option"),function(b){var c=0<=a.a.A(d,a.w.M(b));b.selected!=c&&a.a.Zc(b,c)});b.scrollTop=e}if("select"!=a.a.R(b))throw Error("selectedOptions binding applies only to SELECT elements");var g;a.i.subscribe(b,a.i.H,function(){g?e():(a.a.B(b,"change",e),g=a.o(f,null,{l:b}))},null,{notifyImmediately:!0})},update:function(){}};a.m.wa.selectedOptions=!0;a.c.style={update:function(b,c){var d=a.a.f(c()||
110
+ {});a.a.P(d,function(c,d){d=a.a.f(d);if(null===d||d===n||!1===d)d="";if(v)v(b).css(c,d);else if(/^--/.test(c))b.style.setProperty(c,d);else{c=c.replace(/-(\w)/g,function(a,b){return b.toUpperCase()});var g=b.style[c];b.style[c]=d;d===g||b.style[c]!=g||isNaN(d)||(b.style[c]=d+"px")}})}};a.c.submit={init:function(b,c,d,e,f){if("function"!=typeof c())throw Error("The value for a submit binding must be a function");a.a.B(b,"submit",function(a){var d,e=c();try{d=e.call(f.$data,b)}finally{!0!==d&&(a.preventDefault?
111
+ a.preventDefault():a.returnValue=!1)}})}};a.c.text={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.Bb(b,c())}};a.h.ea.text=!0;(function(){if(A&&A.navigator){var b=function(a){if(a)return parseFloat(a[1])},c=A.navigator.userAgent,d,e,f,g,h;(d=A.opera&&A.opera.version&&parseInt(A.opera.version()))||(h=b(c.match(/Edge\/([^ ]+)$/)))||b(c.match(/Chrome\/([^ ]+)/))||(e=b(c.match(/Version\/([^ ]+) Safari/)))||(f=b(c.match(/Firefox\/([^ ]+)/)))||(g=a.a.W||b(c.match(/MSIE ([^ ]+)/)))||
112
+ (g=b(c.match(/rv:([^ )]+)/)))}if(8<=g&&10>g)var m=a.a.g.Z(),k=a.a.g.Z(),l=function(b){var c=this.activeElement;(c=c&&a.a.g.get(c,k))&&c(b)},p=function(b,c){var d=b.ownerDocument;a.a.g.get(d,m)||(a.a.g.set(d,m,!0),a.a.B(d,"selectionchange",l));a.a.g.set(b,k,c)};a.c.textInput={init:function(b,c,k){function l(c,d){a.a.B(b,c,d)}function m(){var d=a.a.f(c());if(null===d||d===n)d="";L!==n&&d===L?a.a.setTimeout(m,4):b.value!==d&&(y=!0,b.value=d,y=!1,v=b.value)}function r(){w||(L=b.value,w=a.a.setTimeout(z,
113
+ 4))}function z(){clearTimeout(w);L=w=n;var d=b.value;v!==d&&(v=d,a.m.eb(c(),k,"textInput",d))}var v=b.value,w,L,A=9==a.a.W?r:z,y=!1;g&&l("keypress",z);11>g&&l("propertychange",function(a){y||"value"!==a.propertyName||A(a)});8==g&&(l("keyup",z),l("keydown",z));p&&(p(b,A),l("dragend",r));(!g||9<=g)&&l("input",A);5>e&&"textarea"===a.a.R(b)?(l("keydown",r),l("paste",r),l("cut",r)):11>d?l("keydown",r):4>f?(l("DOMAutoComplete",z),l("dragdrop",z),l("drop",z)):h&&"number"===b.type&&l("keydown",r);l("change",
114
+ z);l("blur",z);a.o(m,null,{l:b})}};a.m.wa.textInput=!0;a.c.textinput={preprocess:function(a,b,c){c("textInput",a)}}})();a.c.uniqueName={init:function(b,c){if(c()){var d="ko_unique_"+ ++a.c.uniqueName.rd;a.a.Yc(b,d)}}};a.c.uniqueName.rd=0;a.c.using={init:function(b,c,d,e,f){var g;d.has("as")&&(g={as:d.get("as"),noChildContext:d.get("noChildContext")});c=f.createChildContext(c,g);a.Oa(c,b);return{controlsDescendantBindings:!0}}};a.h.ea.using=!0;a.c.value={init:function(b,c,d){var e=a.a.R(b),f="input"==
115
+ e;if(!f||"checkbox"!=b.type&&"radio"!=b.type){var g=[],h=d.get("valueUpdate"),m=!1,k=null;h&&("string"==typeof h?g=[h]:g=a.a.wc(h),a.a.Pa(g,"change"));var l=function(){k=null;m=!1;var e=c(),f=a.w.M(b);a.m.eb(e,d,"value",f)};!a.a.W||!f||"text"!=b.type||"off"==b.autocomplete||b.form&&"off"==b.form.autocomplete||-1!=a.a.A(g,"propertychange")||(a.a.B(b,"propertychange",function(){m=!0}),a.a.B(b,"focus",function(){m=!1}),a.a.B(b,"blur",function(){m&&l()}));a.a.D(g,function(c){var d=l;a.a.Ud(c,"after")&&
116
+ (d=function(){k=a.w.M(b);a.a.setTimeout(l,0)},c=c.substring(5));a.a.B(b,c,d)});var p;p=f&&"file"==b.type?function(){var d=a.a.f(c());null===d||d===n||""===d?b.value="":a.u.G(l)}:function(){var f=a.a.f(c()),g=a.w.M(b);if(null!==k&&f===k)a.a.setTimeout(p,0);else if(f!==g||g===n)"select"===e?(g=d.get("valueAllowUnset"),a.w.cb(b,f,g),g||f===a.w.M(b)||a.u.G(l)):a.w.cb(b,f)};if("select"===e){var q;a.i.subscribe(b,a.i.H,function(){q?d.get("valueAllowUnset")?p():l():(a.a.B(b,"change",l),q=a.o(p,null,{l:b}))},
117
+ null,{notifyImmediately:!0})}else a.a.B(b,"change",l),a.o(p,null,{l:b})}else a.ib(b,{checkedValue:c})},update:function(){}};a.m.wa.value=!0;a.c.visible={update:function(b,c){var d=a.a.f(c()),e="none"!=b.style.display;d&&!e?b.style.display="":!d&&e&&(b.style.display="none")}};a.c.hidden={update:function(b,c){a.c.visible.update(b,function(){return!a.a.f(c())})}};(function(b){a.c[b]={init:function(c,d,e,f,g){return a.c.event.init.call(this,c,function(){var a={};a[b]=d();return a},e,f,g)}}})("click");
118
+ a.ca=function(){};a.ca.prototype.renderTemplateSource=function(){throw Error("Override renderTemplateSource");};a.ca.prototype.createJavaScriptEvaluatorBlock=function(){throw Error("Override createJavaScriptEvaluatorBlock");};a.ca.prototype.makeTemplateSource=function(b,c){if("string"==typeof b){c=c||w;var d=c.getElementById(b);if(!d)throw Error("Cannot find template with ID "+b);return new a.C.F(d)}if(1==b.nodeType||8==b.nodeType)return new a.C.ia(b);throw Error("Unknown template type: "+b);};a.ca.prototype.renderTemplate=
119
+ function(a,c,d,e){a=this.makeTemplateSource(a,e);return this.renderTemplateSource(a,c,d,e)};a.ca.prototype.isTemplateRewritten=function(a,c){return!1===this.allowTemplateRewriting?!0:this.makeTemplateSource(a,c).data("isRewritten")};a.ca.prototype.rewriteTemplate=function(a,c,d){a=this.makeTemplateSource(a,d);c=c(a.text());a.text(c);a.data("isRewritten",!0)};a.b("templateEngine",a.ca);a.kc=function(){function b(b,c,d,h){b=a.m.ac(b);for(var m=a.m.Ra,k=0;k<b.length;k++){var l=b[k].key;if(Object.prototype.hasOwnProperty.call(m,
120
+ l)){var p=m[l];if("function"===typeof p){if(l=p(b[k].value))throw Error(l);}else if(!p)throw Error("This template engine does not support the '"+l+"' binding within its templates");}}d="ko.__tr_ambtns(function($context,$element){return(function(){return{ "+a.m.vb(b,{valueAccessors:!0})+" } })()},'"+d.toLowerCase()+"')";return h.createJavaScriptEvaluatorBlock(d)+c}var c=/(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'|[^>]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi,
121
+ d=/\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;return{xd:function(b,c,d){c.isTemplateRewritten(b,d)||c.rewriteTemplate(b,function(b){return a.kc.Ld(b,c)},d)},Ld:function(a,f){return a.replace(c,function(a,c,d,e,l){return b(l,c,d,f)}).replace(d,function(a,c){return b(c,"\x3c!-- ko --\x3e","#comment",f)})},md:function(b,c){return a.aa.Xb(function(d,h){var m=d.nextSibling;m&&m.nodeName.toLowerCase()===c&&a.ib(m,b,h)})}}}();a.b("__tr_ambtns",a.kc.md);(function(){a.C={};a.C.F=function(b){if(this.F=b){var c=
122
+ a.a.R(b);this.ab="script"===c?1:"textarea"===c?2:"template"==c&&b.content&&11===b.content.nodeType?3:4}};a.C.F.prototype.text=function(){var b=1===this.ab?"text":2===this.ab?"value":"innerHTML";if(0==arguments.length)return this.F[b];var c=arguments[0];"innerHTML"===b?a.a.fc(this.F,c):this.F[b]=c};var b=a.a.g.Z()+"_";a.C.F.prototype.data=function(c){if(1===arguments.length)return a.a.g.get(this.F,b+c);a.a.g.set(this.F,b+c,arguments[1])};var c=a.a.g.Z();a.C.F.prototype.nodes=function(){var b=this.F;
123
+ if(0==arguments.length){var e=a.a.g.get(b,c)||{},f=e.lb||(3===this.ab?b.content:4===this.ab?b:n);if(!f||e.jd){var g=this.text();g&&g!==e.bb&&(f=a.a.Md(g,b.ownerDocument),a.a.g.set(b,c,{lb:f,bb:g,jd:!0}))}return f}e=arguments[0];this.ab!==n&&this.text("");a.a.g.set(b,c,{lb:e})};a.C.ia=function(a){this.F=a};a.C.ia.prototype=new a.C.F;a.C.ia.prototype.constructor=a.C.ia;a.C.ia.prototype.text=function(){if(0==arguments.length){var b=a.a.g.get(this.F,c)||{};b.bb===n&&b.lb&&(b.bb=b.lb.innerHTML);return b.bb}a.a.g.set(this.F,
124
+ c,{bb:arguments[0]})};a.b("templateSources",a.C);a.b("templateSources.domElement",a.C.F);a.b("templateSources.anonymousTemplate",a.C.ia)})();(function(){function b(b,c,d){var e;for(c=a.h.nextSibling(c);b&&(e=b)!==c;)b=a.h.nextSibling(e),d(e,b)}function c(c,d){if(c.length){var e=c[0],f=c[c.length-1],g=e.parentNode,h=a.ga.instance,m=h.preprocessNode;if(m){b(e,f,function(a,b){var c=a.previousSibling,d=m.call(h,a);d&&(a===e&&(e=d[0]||b),a===f&&(f=d[d.length-1]||c))});c.length=0;if(!e)return;e===f?c.push(e):
125
+ (c.push(e,f),a.a.Ua(c,g))}b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.vc(d,b)});b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.aa.cd(b,[d])});a.a.Ua(c,g)}}function d(a){return a.nodeType?a:0<a.length?a[0]:null}function e(b,e,f,h,m){m=m||{};var n=(b&&d(b)||f||{}).ownerDocument,B=m.templateEngine||g;a.kc.xd(f,B,n);f=B.renderTemplate(f,h,m,n);if("number"!=typeof f.length||0<f.length&&"number"!=typeof f[0].nodeType)throw Error("Template engine must return an array of DOM nodes");n=!1;switch(e){case "replaceChildren":a.h.va(b,
126
+ f);n=!0;break;case "replaceNode":a.a.Xc(b,f);n=!0;break;case "ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+e);}n&&(c(f,h),m.afterRender&&a.u.G(m.afterRender,null,[f,h[m.as||"$data"]]),"replaceChildren"==e&&a.i.ma(b,a.i.H));return f}function f(b,c,d){return a.O(b)?b():"function"===typeof b?b(c,d):b}var g;a.gc=function(b){if(b!=n&&!(b instanceof a.ca))throw Error("templateEngine must inherit from ko.templateEngine");g=b};a.dc=function(b,c,h,m,t){h=h||{};if((h.templateEngine||g)==
127
+ n)throw Error("Set a template engine before calling renderTemplate");t=t||"replaceChildren";if(m){var x=d(m);return a.$(function(){var g=c&&c instanceof a.fa?c:new a.fa(c,null,null,null,{exportDependencies:!0}),n=f(b,g.$data,g),g=e(m,t,n,g,h);"replaceNode"==t&&(m=g,x=d(m))},null,{Sa:function(){return!x||!a.a.Sb(x)},l:x&&"replaceNode"==t?x.parentNode:x})}return a.aa.Xb(function(d){a.dc(b,c,h,d,"replaceNode")})};a.Qd=function(b,d,g,h,m){function x(b,c){a.u.G(a.a.ec,null,[h,b,u,g,r,c]);a.i.ma(h,a.i.H)}
128
+ function r(a,b){c(b,v);g.afterRender&&g.afterRender(b,a);v=null}function u(a,c){v=m.createChildContext(a,{as:z,noChildContext:g.noChildContext,extend:function(a){a.$index=c;z&&(a[z+"Index"]=c)}});var d=f(b,a,v);return e(h,"ignoreTargetNode",d,v,g)}var v,z=g.as,w=!1===g.includeDestroyed||a.options.foreachHidesDestroyed&&!g.includeDestroyed;if(w||g.beforeRemove||!a.Pc(d))return a.$(function(){var b=a.a.f(d)||[];"undefined"==typeof b.length&&(b=[b]);w&&(b=a.a.jb(b,function(b){return b===n||null===b||
129
+ !a.a.f(b._destroy)}));x(b)},null,{l:h});x(d.v());var A=d.subscribe(function(a){x(d(),a)},null,"arrayChange");A.l(h);return A};var h=a.a.g.Z(),m=a.a.g.Z();a.c.template={init:function(b,c){var d=a.a.f(c());if("string"==typeof d||"name"in d)a.h.Ea(b);else if("nodes"in d){d=d.nodes||[];if(a.O(d))throw Error('The "nodes" option must be a plain, non-observable array.');var e=d[0]&&d[0].parentNode;e&&a.a.g.get(e,m)||(e=a.a.Yb(d),a.a.g.set(e,m,!0));(new a.C.ia(b)).nodes(e)}else if(d=a.h.childNodes(b),0<d.length)e=
130
+ a.a.Yb(d),(new a.C.ia(b)).nodes(e);else throw Error("Anonymous template defined, but no template content was provided");return{controlsDescendantBindings:!0}},update:function(b,c,d,e,f){var g=c();c=a.a.f(g);d=!0;e=null;"string"==typeof c?c={}:(g="name"in c?c.name:b,"if"in c&&(d=a.a.f(c["if"])),d&&"ifnot"in c&&(d=!a.a.f(c.ifnot)),d&&!g&&(d=!1));"foreach"in c?e=a.Qd(g,d&&c.foreach||[],c,b,f):d?(d=f,"data"in c&&(d=f.createChildContext(c.data,{as:c.as,noChildContext:c.noChildContext,exportDependencies:!0})),
131
+ e=a.dc(g,d,c,b)):a.h.Ea(b);f=e;(c=a.a.g.get(b,h))&&"function"==typeof c.s&&c.s();a.a.g.set(b,h,!f||f.ja&&!f.ja()?n:f)}};a.m.Ra.template=function(b){b=a.m.ac(b);return 1==b.length&&b[0].unknown||a.m.Id(b,"name")?null:"This template engine does not support anonymous templates nested within its templates"};a.h.ea.template=!0})();a.b("setTemplateEngine",a.gc);a.b("renderTemplate",a.dc);a.a.Kc=function(a,c,d){if(a.length&&c.length){var e,f,g,h,m;for(e=f=0;(!d||e<d)&&(h=a[f]);++f){for(g=0;m=c[g];++g)if(h.value===
132
+ m.value){h.moved=m.index;m.moved=h.index;c.splice(g,1);e=g=0;break}e+=g}}};a.a.Pb=function(){function b(b,d,e,f,g){var h=Math.min,m=Math.max,k=[],l,p=b.length,q,n=d.length,r=n-p||1,v=p+n+1,u,w,z;for(l=0;l<=p;l++)for(w=u,k.push(u=[]),z=h(n,l+r),q=m(0,l-1);q<=z;q++)u[q]=q?l?b[l-1]===d[q-1]?w[q-1]:h(w[q]||v,u[q-1]||v)+1:q+1:l+1;h=[];m=[];r=[];l=p;for(q=n;l||q;)n=k[l][q]-1,q&&n===k[l][q-1]?m.push(h[h.length]={status:e,value:d[--q],index:q}):l&&n===k[l-1][q]?r.push(h[h.length]={status:f,value:b[--l],index:l}):
133
+ (--q,--l,g.sparse||h.push({status:"retained",value:d[q]}));a.a.Kc(r,m,!g.dontLimitMoves&&10*p);return h.reverse()}return function(a,d,e){e="boolean"===typeof e?{dontLimitMoves:e}:e||{};a=a||[];d=d||[];return a.length<d.length?b(a,d,"added","deleted",e):b(d,a,"deleted","added",e)}}();a.b("utils.compareArrays",a.a.Pb);(function(){function b(b,c,d,h,m){var k=[],l=a.$(function(){var l=c(d,m,a.a.Ua(k,b))||[];0<k.length&&(a.a.Xc(k,l),h&&a.u.G(h,null,[d,l,m]));k.length=0;a.a.Nb(k,l)},null,{l:b,Sa:function(){return!a.a.kd(k)}});
134
+ return{Y:k,$:l.ja()?l:n}}var c=a.a.g.Z(),d=a.a.g.Z();a.a.ec=function(e,f,g,h,m,k){function l(b){y={Aa:b,pb:a.ta(w++)};v.push(y);r||F.push(y)}function p(b){y=t[b];w!==y.pb.v()&&D.push(y);y.pb(w++);a.a.Ua(y.Y,e);v.push(y)}function q(b,c){if(b)for(var d=0,e=c.length;d<e;d++)a.a.D(c[d].Y,function(a){b(a,d,c[d].Aa)})}f=f||[];"undefined"==typeof f.length&&(f=[f]);h=h||{};var t=a.a.g.get(e,c),r=!t,v=[],u=0,w=0,z=[],A=[],C=[],D=[],F=[],y,I=0;if(r)a.a.D(f,l);else{if(!k||t&&t._countWaitingForRemove){var E=
135
+ a.a.Mb(t,function(a){return a.Aa});k=a.a.Pb(E,f,{dontLimitMoves:h.dontLimitMoves,sparse:!0})}for(var E=0,G,H,K;G=k[E];E++)switch(H=G.moved,K=G.index,G.status){case "deleted":for(;u<K;)p(u++);H===n&&(y=t[u],y.$&&(y.$.s(),y.$=n),a.a.Ua(y.Y,e).length&&(h.beforeRemove&&(v.push(y),I++,y.Aa===d?y=null:C.push(y)),y&&z.push.apply(z,y.Y)));u++;break;case "added":for(;w<K;)p(u++);H!==n?(A.push(v.length),p(H)):l(G.value)}for(;w<f.length;)p(u++);v._countWaitingForRemove=I}a.a.g.set(e,c,v);q(h.beforeMove,D);a.a.D(z,
136
+ h.beforeRemove?a.oa:a.removeNode);var M,O,P;try{P=e.ownerDocument.activeElement}catch(N){}if(A.length)for(;(E=A.shift())!=n;){y=v[E];for(M=n;E;)if((O=v[--E].Y)&&O.length){M=O[O.length-1];break}for(f=0;u=y.Y[f];M=u,f++)a.h.Wb(e,u,M)}for(E=0;y=v[E];E++){y.Y||a.a.extend(y,b(e,g,y.Aa,m,y.pb));for(f=0;u=y.Y[f];M=u,f++)a.h.Wb(e,u,M);!y.Ed&&m&&(m(y.Aa,y.Y,y.pb),y.Ed=!0,M=y.Y[y.Y.length-1])}P&&e.ownerDocument.activeElement!=P&&P.focus();q(h.beforeRemove,C);for(E=0;E<C.length;++E)C[E].Aa=d;q(h.afterMove,D);
137
+ q(h.afterAdd,F)}})();a.b("utils.setDomNodeChildrenFromArrayMapping",a.a.ec);a.ba=function(){this.allowTemplateRewriting=!1};a.ba.prototype=new a.ca;a.ba.prototype.constructor=a.ba;a.ba.prototype.renderTemplateSource=function(b,c,d,e){if(c=(9>a.a.W?0:b.nodes)?b.nodes():null)return a.a.la(c.cloneNode(!0).childNodes);b=b.text();return a.a.ua(b,e)};a.ba.Ma=new a.ba;a.gc(a.ba.Ma);a.b("nativeTemplateEngine",a.ba);(function(){a.$a=function(){var a=this.Hd=function(){if(!v||!v.tmpl)return 0;try{if(0<=v.tmpl.tag.tmpl.open.toString().indexOf("__"))return 2}catch(a){}return 1}();
138
+ this.renderTemplateSource=function(b,e,f,g){g=g||w;f=f||{};if(2>a)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var h=b.data("precompiled");h||(h=b.text()||"",h=v.template(null,"{{ko_with $item.koBindingContext}}"+h+"{{/ko_with}}"),b.data("precompiled",h));b=[e.$data];e=v.extend({koBindingContext:e},f.templateOptions);e=v.tmpl(h,b,e);e.appendTo(g.createElement("div"));v.fragments={};return e};this.createJavaScriptEvaluatorBlock=function(a){return"{{ko_code ((function() { return "+
139
+ a+" })()) }}"};this.addTemplate=function(a,b){w.write("<script type='text/html' id='"+a+"'>"+b+"\x3c/script>")};0<a&&(v.tmpl.tag.ko_code={open:"__.push($1 || '');"},v.tmpl.tag.ko_with={open:"with($1) {",close:"} "})};a.$a.prototype=new a.ca;a.$a.prototype.constructor=a.$a;var b=new a.$a;0<b.Hd&&a.gc(b);a.b("jqueryTmplTemplateEngine",a.$a)})()})})();})();
js/{wfdashboard.1623076348.js → wfdashboard.1629122067.js} RENAMED
File without changes
js/{wfdropdown.1623076348.js → wfdropdown.1629122067.js} RENAMED
File without changes
js/{wfglobal.1623076348.js → wfglobal.1629122067.js} RENAMED
@@ -54,6 +54,18 @@
54
  function(){ jQuery('.wf-admin-notice[data-notice-id="' + nid + '"]').fadeOut(); }
55
  );
56
  },
 
 
 
 
 
 
 
 
 
 
 
 
57
  setOption: function(key, value, successCallback) {
58
  var changes = {};
59
  changes[key] = value;
54
  function(){ jQuery('.wf-admin-notice[data-notice-id="' + nid + '"]').fadeOut(); }
55
  );
56
  },
57
+ hideNoticeForUser: function(id) {
58
+ this.ajax('wordfence_hideNoticeForUser',
59
+ {
60
+ id: id
61
+ },
62
+ function(res) {
63
+ $("#" + id).fadeOut();
64
+ },
65
+ function() {
66
+ }
67
+ );
68
+ },
69
  setOption: function(key, value, successCallback) {
70
  var changes = {};
71
  changes[key] = value;
js/{wfi18n.1623076348.js → wfi18n.1629122067.js} RENAMED
File without changes
js/{wfpopover.1623076348.js → wfpopover.1629122067.js} RENAMED
File without changes
js/{wfselect2.min.1623076348.js → wfselect2.min.1629122067.js} RENAMED
File without changes
languages/wordfence.po CHANGED
@@ -2,14 +2,14 @@
2
  # This file is distributed under the same license as the Wordfence Security plugin.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Wordfence Security 7.5.2\n"
6
- "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wordfence\n"
7
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
  "Language-Team: LANGUAGE <LL@li.org>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "POT-Creation-Date: 2021-04-05T20:09:14+00:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.4.0\n"
15
  "X-Domain: wordfence\n"
@@ -57,7 +57,7 @@ msgstr ""
57
  #: lib/dashboard/widget_content_logins.php:7
58
  #: lib/dashboard/widget_ips.php:115
59
  #: lib/dashboard/widget_logins.php:96
60
- #: lib/wordfenceClass.php:6105
61
  #: views/reports/activity-report-email-inline.php:146
62
  #: views/reports/activity-report.php:16
63
  #: views/waf/option-whitelist.php:110
@@ -68,7 +68,7 @@ msgstr ""
68
 
69
  #: lib/dashboard/widget_content_logins.php:6
70
  #: lib/dashboard/widget_logins.php:95
71
- #: lib/wordfenceClass.php:6180
72
  #: views/reports/activity-report-email-inline.php:256
73
  #: views/reports/activity-report.php:106
74
  msgid "Username"
@@ -91,7 +91,7 @@ msgstr ""
91
 
92
  #: lib/dashboard/widget_countries.php:25
93
  #: lib/dashboard/widget_networkattacks.php:8
94
- #: lib/wfDiagnostic.php:784
95
  msgid "Wordfence Network"
96
  msgstr ""
97
 
@@ -118,7 +118,7 @@ msgid "7 Days"
118
  msgstr ""
119
 
120
  #: lib/dashboard/widget_ips.php:30
121
- #: lib/dashboard/widget_networkattacks.php:24
122
  msgid "30 Days"
123
  msgstr ""
124
 
@@ -133,7 +133,7 @@ msgstr ""
133
  #. translators: WordPress username.
134
  #: lib/dashboard/widget_ips.php:96
135
  #: lib/dashboard/widget_logins.php:77
136
- #: lib/wordfenceClass.php:6051
137
  msgid "An error occurred"
138
  msgstr ""
139
 
@@ -184,6 +184,208 @@ msgstr ""
184
  msgid "How are these categorized?"
185
  msgstr ""
186
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
187
  #: lib/dashboard/widget_logins.php:9
188
  #: views/reports/activity-report-email-inline.php:257
189
  #: views/reports/activity-report.php:107
@@ -214,17 +416,17 @@ msgstr ""
214
  msgid "Blocked attack counts not available yet."
215
  msgstr ""
216
 
217
- #: lib/dashboard/widget_networkattacks.php:33
218
  msgid "Total Attacks"
219
  msgstr ""
220
 
221
  #. translators: Time since. Example: 1 minute, 2 seconds
222
- #: lib/dashboard/widget_networkattacks.php:209
223
  msgid "Last Updated: %s ago"
224
  msgstr ""
225
 
226
  #: lib/dashboard/widget_notifications.php:8
227
- #: lib/wordfenceClass.php:6654
228
  msgid "Notifications"
229
  msgstr ""
230
 
@@ -296,16 +498,17 @@ msgstr ""
296
  #: lib/dashboard/widget_notifications.php:134
297
  #: lib/menu_scanner.php:217
298
  #: lib/menu_scanner.php:228
299
- #: lib/menu_tools_diagnostic.php:981
300
  #: lib/menu_tools_twoFactor.php:235
301
  #: lib/menu_tools_twoFactor.php:273
302
- #: lib/wordfenceClass.php:7944
303
- #: lib/wordfenceClass.php:7988
304
- #: lib/wordfenceClass.php:8052
305
- #: lib/wordfenceClass.php:8112
306
- #: lib/wordfenceClass.php:8158
307
  #: views/blocking/block-list.php:501
308
  #: views/blocking/blocking-create.php:212
 
309
  #: views/dashboard/options-group-license.php:150
310
  #: views/options/block-all-options-controls.php:164
311
  #: views/options/block-controls.php:79
@@ -520,6 +723,8 @@ msgstr ""
520
  #: lib/wfVersionCheckController.php:91
521
  #: lib/wfVersionCheckController.php:167
522
  #: lib/wfVersionCheckController.php:186
 
 
523
  #: views/blocking/blocking-status.php:27
524
  #: views/dashboard/options-group-dashboard.php:107
525
  #: views/gdpr/banner.php:55
@@ -658,7 +863,7 @@ msgstr ""
658
 
659
  #. translators: URL to WordPress admin panel.
660
  #: lib/email_unsubscribeRequest.php:14
661
- msgid "<a href=\"%s\" target=\"_blank\">Click here</a> to stop receiving security alerts."
662
  msgstr ""
663
 
664
  #. translators: IP address.
@@ -674,7 +879,7 @@ msgid "&copy;&nbsp;%d to %d Wordfence &mdash; Visit <a href=\"http://wordfence.c
674
  msgstr ""
675
 
676
  #: lib/IPTrafList.php:13
677
- #: lib/wfLockedOut.php:347
678
  msgid "Time:"
679
  msgstr ""
680
 
@@ -716,8 +921,12 @@ msgstr ""
716
  msgid "Wordfence Live Activity:"
717
  msgstr ""
718
 
 
 
 
 
719
  #: lib/menu_dashboard.php:24
720
- #: lib/wordfenceClass.php:6556
721
  msgid "Wordfence Dashboard"
722
  msgstr ""
723
 
@@ -729,7 +938,7 @@ msgstr ""
729
  #: lib/menu_dashboard_options.php:98
730
  #: lib/menu_firewall.php:20
731
  #: lib/menu_firewall.php:30
732
- #: lib/wordfenceClass.php:6560
733
  #: models/page/wfPage.php:105
734
  msgid "Firewall"
735
  msgstr ""
@@ -766,7 +975,7 @@ msgstr ""
766
  #: lib/menu_dashboard_options.php:115
767
  #: lib/menu_scanner.php:31
768
  #: lib/menu_scanner.php:305
769
- #: lib/wordfenceClass.php:6567
770
  #: models/page/wfPage.php:113
771
  msgid "Scan"
772
  msgstr ""
@@ -831,7 +1040,7 @@ msgstr ""
831
 
832
  #: lib/menu_dashboard.php:109
833
  #: lib/menu_dashboard_options.php:153
834
- msgid "The license you were using has been removed from your account. Please reach out to <a href=\"mailto:billing@wordfence.com\">billing@wordfence.com</a> or create a Premium support case at <a href=\"https://support.wordfence.com/support/tickets\" target=\"_blank\">https://support.wordfence.com/support/tickets</a> for more information. Our staff is happy to help."
835
  msgstr ""
836
 
837
  #: lib/menu_dashboard.php:117
@@ -930,7 +1139,7 @@ msgid "Wordfence Premium Enabled"
930
  msgstr ""
931
 
932
  #: lib/menu_dashboard.php:220
933
- #: lib/wordfenceClass.php:6571
934
  msgid "Tools"
935
  msgstr ""
936
 
@@ -942,7 +1151,7 @@ msgstr ""
942
  #: lib/menu_firewall_waf.php:157
943
  #: lib/menu_scanner.php:139
944
  #: lib/menu_support.php:19
945
- #: lib/wordfenceClass.php:6584
946
  msgid "Help"
947
  msgstr ""
948
 
@@ -1047,7 +1256,7 @@ msgid "This update includes a number of significant interface changes. We'd like
1047
  msgstr ""
1048
 
1049
  #: lib/menu_dashboard.php:373
1050
- msgid "We welcome your feedback and comments at <a href=\"mailto:feedback@wordfence.com\">feedback@wordfence.com</a>. For a deeper dive on all of the changes, <a href=\"https://www.wordfence.com/blog/2018/01/introducing-wordfence-7/\" target=\"_blank\" rel=\"noopener noreferrer\">click here</a>."
1051
  msgstr ""
1052
 
1053
  #: lib/menu_dashboard.php:388
@@ -1139,6 +1348,7 @@ msgstr ""
1139
  #: lib/menu_dashboard_options.php:288
1140
  #: lib/menu_options.php:405
1141
  #: lib/menu_options.php:415
 
1142
  #: lib/menu_tools_importExport.php:7
1143
  #: lib/menu_tools_importExport.php:13
1144
  #: models/page/wfPage.php:121
@@ -1160,7 +1370,7 @@ msgstr ""
1160
  #: lib/menu_firewall.php:41
1161
  #: lib/menu_firewall_blocking.php:119
1162
  #: lib/menu_firewall_waf.php:142
1163
- #: lib/wordfenceClass.php:6562
1164
  #: models/page/wfPage.php:109
1165
  msgid "Blocking"
1166
  msgstr ""
@@ -1326,10 +1536,11 @@ msgstr ""
1326
 
1327
  #: lib/menu_firewall_waf.php:69
1328
  #: lib/menu_firewall_waf_options.php:175
1329
- #: lib/menu_tools_diagnostic.php:295
1330
- #: lib/menu_tools_diagnostic.php:300
1331
  #: lib/menu_tools_diagnostic.php:301
1332
- #: lib/menu_tools_diagnostic.php:304
 
 
1333
  #: models/firewall/wfFirewall.php:35
1334
  #: views/diagnostics/text.php:154
1335
  #: views/diagnostics/text.php:159
@@ -1344,11 +1555,11 @@ msgstr ""
1344
 
1345
  #: lib/menu_firewall_waf.php:69
1346
  #: lib/menu_firewall_waf_options.php:175
1347
- #: lib/menu_tools_diagnostic.php:295
1348
- #: lib/menu_tools_diagnostic.php:300
1349
  #: lib/menu_tools_diagnostic.php:301
1350
- #: lib/menu_tools_diagnostic.php:304
1351
- #: lib/wordfenceClass.php:6077
 
1352
  #: models/firewall/wfFirewall.php:41
1353
  #: views/diagnostics/text.php:154
1354
  #: views/diagnostics/text.php:159
@@ -1469,7 +1680,7 @@ msgstr ""
1469
 
1470
  #: lib/menu_options.php:24
1471
  #: lib/menu_options.php:262
1472
- #: lib/wordfenceClass.php:6579
1473
  msgid "All Options"
1474
  msgstr ""
1475
 
@@ -1506,7 +1717,7 @@ msgid "How does Wordfence get IPs"
1506
  msgstr ""
1507
 
1508
  #: lib/menu_options.php:75
1509
- #: lib/menu_tools_diagnostic.php:235
1510
  #: views/dashboard/option-howgetips.php:50
1511
  #: views/diagnostics/text.php:108
1512
  msgid "Trusted Proxies"
@@ -2108,7 +2319,7 @@ msgid "Signature updates delayed by 30 days"
2108
  msgstr ""
2109
 
2110
  #: lib/menu_scanner.php:80
2111
- #: lib/wordfenceClass.php:6595
2112
  msgid "Protect More Sites"
2113
  msgstr ""
2114
 
@@ -2165,7 +2376,7 @@ msgstr ""
2165
 
2166
  #. translators: Support URL.
2167
  #: lib/menu_scanner.php:216
2168
- msgid "Do not delete files on your system unless you're ABSOLUTELY sure you know what you're doing. If you delete the wrong file it could cause your WordPress website to stop functioning and you will probably have to restore from backups. If you're unsure, Cancel and work with your hosting provider to clean your system of infected files. If you'd like to learn more, <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">click here for our help article</a>."
2169
  msgstr ""
2170
 
2171
  #: lib/menu_scanner.php:218
@@ -2191,20 +2402,20 @@ msgstr ""
2191
  #: lib/menu_tools_twoFactor.php:255
2192
  #: lib/menu_tools_twoFactor.php:264
2193
  #: lib/menu_tools_twoFactor.php:284
2194
- #: lib/wordfenceClass.php:4927
2195
- #: lib/wordfenceClass.php:4933
2196
- #: lib/wordfenceClass.php:4939
2197
- #: lib/wordfenceClass.php:4946
2198
- #: lib/wordfenceClass.php:4952
2199
- #: lib/wordfenceClass.php:4959
2200
- #: lib/wordfenceClass.php:4967
2201
- #: lib/wordfenceClass.php:6019
2202
- #: lib/wordfenceClass.php:6021
2203
- #: lib/wordfenceClass.php:6072
2204
- #: lib/wordfenceClass.php:7969
2205
- #: lib/wordfenceClass.php:7976
2206
- #: lib/wordfenceClass.php:8083
2207
- #: lib/wordfenceClass.php:8147
2208
  #: views/dashboard/options-group-import.php:147
2209
  #: views/dashboard/options-group-import.php:157
2210
  #: views/dashboard/options-group-import.php:177
@@ -2327,7 +2538,7 @@ msgstr ""
2327
 
2328
  #. translators: URL to support page.
2329
  #: lib/menu_support.php:83
2330
- msgid "If you qualify as a data controller under the GDPR and need a data processing agreement, it can be <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">found here</a>."
2331
  msgstr ""
2332
 
2333
  #: lib/menu_support.php:92
@@ -2371,6 +2582,7 @@ msgid "Congratulations! Wordfence Premium is now active on your website. Please
2371
  msgstr ""
2372
 
2373
  #: lib/menu_support.php:269
 
2374
  #: views/onboarding/fresh-install.php:30
2375
  #: views/onboarding/modal-final-attempt.php:59
2376
  #: views/onboarding/plugin-header.php:61
@@ -2380,6 +2592,32 @@ msgstr ""
2380
  msgid "Continue"
2381
  msgstr ""
2382
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2383
  #: lib/menu_tools_diagnostic.php:24
2384
  #: models/page/wfPage.php:125
2385
  msgid "Diagnostics"
@@ -2405,37 +2643,37 @@ msgstr ""
2405
  msgid "Ticket Number/Forum Username:"
2406
  msgstr ""
2407
 
2408
- #: lib/menu_tools_diagnostic.php:122
2409
  msgid "Additional Detail"
2410
  msgstr ""
2411
 
2412
- #: lib/menu_tools_diagnostic.php:165
2413
  msgid "View Additional Detail"
2414
  msgstr ""
2415
 
2416
- #: lib/menu_tools_diagnostic.php:186
2417
  #: views/diagnostics/text.php:60
2418
  #: views/scanner/issue-checkHowGetIPs.php:8
2419
  msgid "IP Detection"
2420
  msgstr ""
2421
 
2422
- #: lib/menu_tools_diagnostic.php:187
2423
  #: views/diagnostics/text.php:60
2424
  msgid "Methods of detecting a visitor's IP address."
2425
  msgstr ""
2426
 
2427
- #: lib/menu_tools_diagnostic.php:199
2428
  #: views/diagnostics/text.php:69
2429
  msgid "IPs"
2430
  msgstr ""
2431
 
2432
- #: lib/menu_tools_diagnostic.php:200
2433
  #: views/diagnostics/text.php:70
2434
  #: views/diagnostics/text.php:189
2435
  msgid "Value"
2436
  msgstr ""
2437
 
2438
- #: lib/menu_tools_diagnostic.php:201
2439
  #: views/diagnostics/text.php:71
2440
  msgid "Used"
2441
  msgstr ""
@@ -2444,23 +2682,23 @@ msgstr ""
2444
  #. translators: WordPress theme stylesheet directory.
2445
  #. translators: WordPress custom user table.
2446
  #. translators: WordPress custom user meta table.
2447
- #: lib/menu_tools_diagnostic.php:217
2448
- #: lib/menu_tools_diagnostic.php:268
2449
  #: lib/menu_tools_diagnostic.php:269
2450
- #: lib/menu_tools_diagnostic.php:282
2451
  #: lib/menu_tools_diagnostic.php:283
2452
- #: lib/menu_tools_diagnostic.php:296
2453
  #: lib/menu_tools_diagnostic.php:297
2454
  #: lib/menu_tools_diagnostic.php:298
2455
  #: lib/menu_tools_diagnostic.php:299
2456
- #: lib/menu_tools_diagnostic.php:313
2457
  #: lib/menu_tools_diagnostic.php:314
2458
  #: lib/menu_tools_diagnostic.php:315
2459
- #: lib/menu_tools_diagnostic.php:317
2460
  #: lib/menu_tools_diagnostic.php:318
2461
  #: lib/menu_tools_diagnostic.php:319
2462
- #: lib/menu_tools_diagnostic.php:329
2463
- #: lib/wfDiagnostic.php:368
 
2464
  #: views/diagnostics/text.php:86
2465
  #: views/diagnostics/text.php:127
2466
  #: views/diagnostics/text.php:128
@@ -2480,52 +2718,52 @@ msgstr ""
2480
  msgid "(not set)"
2481
  msgstr ""
2482
 
2483
- #: lib/menu_tools_diagnostic.php:226
2484
  #: views/diagnostics/text.php:96
2485
  msgid "In use"
2486
  msgstr ""
2487
 
2488
- #: lib/menu_tools_diagnostic.php:228
2489
  #: views/diagnostics/text.php:98
2490
  msgid "Configured but not valid"
2491
  msgstr ""
2492
 
2493
- #: lib/menu_tools_diagnostic.php:249
2494
  #: views/diagnostics/text.php:117
2495
  msgid "WordPress Settings"
2496
  msgstr ""
2497
 
2498
- #: lib/menu_tools_diagnostic.php:250
2499
  #: views/diagnostics/text.php:117
2500
  msgid "WordPress version and internal settings/constants."
2501
  msgstr ""
2502
 
2503
- #: lib/menu_tools_diagnostic.php:265
2504
  #: views/diagnostics/text.php:124
2505
  msgid "Return value of is_multisite()"
2506
  msgstr ""
2507
 
2508
  #. translators: WordPress plugins directory.
2509
- #: lib/menu_tools_diagnostic.php:265
2510
- #: lib/menu_tools_diagnostic.php:276
2511
- #: lib/menu_tools_diagnostic.php:278
2512
  #: lib/menu_tools_diagnostic.php:279
2513
- #: lib/menu_tools_diagnostic.php:292
2514
- #: lib/menu_tools_diagnostic.php:305
2515
  #: lib/menu_tools_diagnostic.php:306
2516
  #: lib/menu_tools_diagnostic.php:307
2517
  #: lib/menu_tools_diagnostic.php:308
2518
  #: lib/menu_tools_diagnostic.php:309
2519
  #: lib/menu_tools_diagnostic.php:310
2520
- #: lib/menu_tools_diagnostic.php:315
2521
  #: lib/menu_tools_diagnostic.php:316
2522
  #: lib/menu_tools_diagnostic.php:317
2523
  #: lib/menu_tools_diagnostic.php:318
2524
  #: lib/menu_tools_diagnostic.php:319
2525
- #: lib/menu_tools_diagnostic.php:323
 
2526
  #: lib/menu_tools_livetraffic.php:152
2527
- #: lib/wfDiagnostic.php:358
2528
- #: lib/wfDiagnostic.php:380
2529
  #: views/diagnostics/text.php:124
2530
  #: views/diagnostics/text.php:135
2531
  #: views/diagnostics/text.php:137
@@ -2551,22 +2789,22 @@ msgstr ""
2551
  msgid "Yes"
2552
  msgstr ""
2553
 
2554
- #: lib/menu_tools_diagnostic.php:265
2555
- #: lib/menu_tools_diagnostic.php:292
2556
- #: lib/menu_tools_diagnostic.php:305
2557
  #: lib/menu_tools_diagnostic.php:306
2558
  #: lib/menu_tools_diagnostic.php:307
2559
  #: lib/menu_tools_diagnostic.php:308
2560
  #: lib/menu_tools_diagnostic.php:309
2561
  #: lib/menu_tools_diagnostic.php:310
2562
- #: lib/menu_tools_diagnostic.php:315
2563
  #: lib/menu_tools_diagnostic.php:316
2564
- #: lib/menu_tools_diagnostic.php:318
2565
  #: lib/menu_tools_diagnostic.php:319
2566
- #: lib/menu_tools_diagnostic.php:323
 
2567
  #: lib/menu_tools_livetraffic.php:153
2568
- #: lib/wfDiagnostic.php:358
2569
- #: lib/wfDiagnostic.php:380
2570
  #: views/diagnostics/text.php:124
2571
  #: views/diagnostics/text.php:151
2572
  #: views/diagnostics/text.php:164
@@ -2588,20 +2826,20 @@ msgstr ""
2588
  msgid "No"
2589
  msgstr ""
2590
 
2591
- #: lib/menu_tools_diagnostic.php:266
2592
  #: views/diagnostics/text.php:125
2593
  msgid "WordPress base path"
2594
  msgstr ""
2595
 
2596
- #: lib/menu_tools_diagnostic.php:267
2597
  #: views/diagnostics/text.php:126
2598
  msgid "WordPress debug mode"
2599
  msgstr ""
2600
 
2601
- #: lib/menu_tools_diagnostic.php:267
2602
- #: lib/menu_tools_diagnostic.php:270
2603
  #: lib/menu_tools_diagnostic.php:271
2604
- #: lib/wfDiagnostic.php:581
 
2605
  #: views/diagnostics/text.php:126
2606
  #: views/diagnostics/text.php:129
2607
  #: views/diagnostics/text.php:130
@@ -2610,10 +2848,10 @@ msgstr ""
2610
  msgid "On"
2611
  msgstr ""
2612
 
2613
- #: lib/menu_tools_diagnostic.php:267
2614
- #: lib/menu_tools_diagnostic.php:270
2615
  #: lib/menu_tools_diagnostic.php:271
2616
- #: lib/wfDiagnostic.php:581
 
2617
  #: views/diagnostics/text.php:126
2618
  #: views/diagnostics/text.php:129
2619
  #: views/diagnostics/text.php:130
@@ -2622,47 +2860,47 @@ msgstr ""
2622
  msgid "Off"
2623
  msgstr ""
2624
 
2625
- #: lib/menu_tools_diagnostic.php:268
2626
  #: views/diagnostics/text.php:127
2627
  msgid "WordPress error logging override"
2628
  msgstr ""
2629
 
2630
- #: lib/menu_tools_diagnostic.php:269
2631
  #: views/diagnostics/text.php:128
2632
  msgid "WordPress error display override"
2633
  msgstr ""
2634
 
2635
- #: lib/menu_tools_diagnostic.php:270
2636
  #: views/diagnostics/text.php:129
2637
  msgid "WordPress script debug mode"
2638
  msgstr ""
2639
 
2640
- #: lib/menu_tools_diagnostic.php:271
2641
  #: views/diagnostics/text.php:130
2642
  msgid "WordPress query debug mode"
2643
  msgstr ""
2644
 
2645
- #: lib/menu_tools_diagnostic.php:272
2646
  #: views/diagnostics/text.php:131
2647
  msgid "Database character set"
2648
  msgstr ""
2649
 
2650
- #: lib/menu_tools_diagnostic.php:273
2651
  #: views/diagnostics/text.php:132
2652
  msgid "Database collation"
2653
  msgstr ""
2654
 
2655
- #: lib/menu_tools_diagnostic.php:274
2656
  #: views/diagnostics/text.php:133
2657
  msgid "Explicitly set site URL"
2658
  msgstr ""
2659
 
2660
- #: lib/menu_tools_diagnostic.php:275
2661
  #: views/diagnostics/text.php:134
2662
  msgid "Explicitly set blog URL"
2663
  msgstr ""
2664
 
2665
- #: lib/menu_tools_diagnostic.php:276
2666
  #: views/diagnostics/text.php:135
2667
  msgid "\"wp-content\" folder is in default location"
2668
  msgstr ""
@@ -2670,9 +2908,9 @@ msgstr ""
2670
  #. translators: WordPress content directory.
2671
  #. translators: WordPress plugins directory.
2672
  #. translators: WordPress languages directory.
2673
- #: lib/menu_tools_diagnostic.php:276
2674
- #: lib/menu_tools_diagnostic.php:278
2675
  #: lib/menu_tools_diagnostic.php:279
 
2676
  #: views/diagnostics/text.php:135
2677
  #: views/diagnostics/text.php:137
2678
  #: views/diagnostics/text.php:138
@@ -2680,328 +2918,328 @@ msgid "No: %s"
2680
  msgstr ""
2681
 
2682
  #. translators: WordPress content directory.
2683
- #: lib/menu_tools_diagnostic.php:277
2684
  #: views/diagnostics/text.php:136
2685
  msgid "URL to the \"wp-content\" folder"
2686
  msgstr ""
2687
 
2688
- #: lib/menu_tools_diagnostic.php:278
2689
  #: views/diagnostics/text.php:137
2690
  msgid "\"plugins\" folder is in default location"
2691
  msgstr ""
2692
 
2693
  #. translators: WordPress plugins directory.
2694
- #: lib/menu_tools_diagnostic.php:279
2695
  #: views/diagnostics/text.php:138
2696
  msgid "\"languages\" folder is in default location"
2697
  msgstr ""
2698
 
2699
  #. translators: WordPress languages directory.
2700
- #: lib/menu_tools_diagnostic.php:280
2701
  #: views/diagnostics/text.php:139
2702
  msgid "Language choice"
2703
  msgstr ""
2704
 
2705
- #: lib/menu_tools_diagnostic.php:281
2706
  #: views/diagnostics/text.php:140
2707
  msgid "Custom upload folder location"
2708
  msgstr ""
2709
 
2710
- #: lib/menu_tools_diagnostic.php:282
2711
  #: views/diagnostics/text.php:141
2712
  msgid "Theme template folder override"
2713
  msgstr ""
2714
 
2715
  #. translators: WordPress theme template directory.
2716
  #. translators: WordPress theme stylesheet directory.
2717
- #: lib/menu_tools_diagnostic.php:282
2718
  #: lib/menu_tools_diagnostic.php:283
 
2719
  #: views/diagnostics/text.php:141
2720
  #: views/diagnostics/text.php:142
2721
  msgid "Overridden: %s"
2722
  msgstr ""
2723
 
2724
  #. translators: WordPress theme template directory.
2725
- #: lib/menu_tools_diagnostic.php:283
2726
  #: views/diagnostics/text.php:142
2727
  msgid "Theme stylesheet folder override"
2728
  msgstr ""
2729
 
2730
  #. translators: WordPress theme stylesheet directory.
2731
- #: lib/menu_tools_diagnostic.php:284
2732
  #: views/diagnostics/text.php:143
2733
  msgid "Post editing automatic saving interval"
2734
  msgstr ""
2735
 
2736
- #: lib/menu_tools_diagnostic.php:285
2737
  #: views/diagnostics/text.php:144
2738
  msgid "Post revisions saved by WordPress"
2739
  msgstr ""
2740
 
2741
- #: lib/menu_tools_diagnostic.php:285
2742
  #: views/diagnostics/text.php:144
2743
  #: views/waf/options-group-rate-limiting.php:67
2744
  msgid "Unlimited"
2745
  msgstr ""
2746
 
2747
- #: lib/menu_tools_diagnostic.php:285
2748
- #: lib/menu_tools_diagnostic.php:312
2749
- #: lib/wfDiagnostic.php:203
2750
- #: lib/wfDiagnostic.php:365
2751
- #: lib/wfDiagnostic.php:416
2752
  #: views/diagnostics/text.php:144
2753
  #: views/diagnostics/text.php:171
2754
  #: views/scanner/issue-base.php:116
2755
  msgid "None"
2756
  msgstr ""
2757
 
2758
- #: lib/menu_tools_diagnostic.php:286
2759
  #: views/diagnostics/text.php:145
2760
  msgid "WordPress cookie domain"
2761
  msgstr ""
2762
 
2763
- #: lib/menu_tools_diagnostic.php:287
2764
  #: views/diagnostics/text.php:146
2765
  msgid "WordPress cookie path"
2766
  msgstr ""
2767
 
2768
- #: lib/menu_tools_diagnostic.php:288
2769
  #: views/diagnostics/text.php:147
2770
  msgid "WordPress site cookie path"
2771
  msgstr ""
2772
 
2773
- #: lib/menu_tools_diagnostic.php:289
2774
  #: views/diagnostics/text.php:148
2775
  msgid "WordPress admin cookie path"
2776
  msgstr ""
2777
 
2778
- #: lib/menu_tools_diagnostic.php:290
2779
  #: views/diagnostics/text.php:149
2780
  msgid "WordPress plugins cookie path"
2781
  msgstr ""
2782
 
2783
- #: lib/menu_tools_diagnostic.php:291
2784
  #: views/diagnostics/text.php:150
2785
  msgid "URL redirected to if the visitor tries to access a nonexistent blog"
2786
  msgstr ""
2787
 
2788
- #: lib/menu_tools_diagnostic.php:292
2789
  #: views/diagnostics/text.php:151
2790
  msgid "Concatenate JavaScript files"
2791
  msgstr ""
2792
 
2793
- #: lib/menu_tools_diagnostic.php:293
2794
  #: views/diagnostics/text.php:152
2795
  msgid "WordPress memory limit"
2796
  msgstr ""
2797
 
2798
- #: lib/menu_tools_diagnostic.php:294
2799
  #: views/diagnostics/text.php:153
2800
  msgid "Administrative memory limit"
2801
  msgstr ""
2802
 
2803
- #: lib/menu_tools_diagnostic.php:295
2804
  #: views/diagnostics/text.php:154
2805
  msgid "Built-in caching"
2806
  msgstr ""
2807
 
2808
- #: lib/menu_tools_diagnostic.php:296
2809
  #: views/diagnostics/text.php:155
2810
  msgid "Custom \"users\" table"
2811
  msgstr ""
2812
 
2813
  #. translators: WordPress custom user table.
2814
  #. translators: WordPress custom user meta table.
2815
- #: lib/menu_tools_diagnostic.php:296
2816
  #: lib/menu_tools_diagnostic.php:297
 
2817
  #: views/diagnostics/text.php:155
2818
  #: views/diagnostics/text.php:156
2819
  msgid "Set: %s"
2820
  msgstr ""
2821
 
2822
  #. translators: WordPress custom user table.
2823
- #: lib/menu_tools_diagnostic.php:297
2824
  #: views/diagnostics/text.php:156
2825
  msgid "Custom \"usermeta\" table"
2826
  msgstr ""
2827
 
2828
  #. translators: WordPress custom user meta table.
2829
- #: lib/menu_tools_diagnostic.php:298
2830
  #: views/diagnostics/text.php:157
2831
  msgid "Overridden permissions for a new folder"
2832
  msgstr ""
2833
 
2834
- #: lib/menu_tools_diagnostic.php:299
2835
  #: views/diagnostics/text.php:158
2836
  msgid "Overridden permissions for a new file"
2837
  msgstr ""
2838
 
2839
- #: lib/menu_tools_diagnostic.php:300
2840
  #: views/diagnostics/text.php:159
2841
  msgid "Alternate WP cron"
2842
  msgstr ""
2843
 
2844
- #: lib/menu_tools_diagnostic.php:301
2845
  #: views/diagnostics/text.php:160
2846
  msgid "WP cron status"
2847
  msgstr ""
2848
 
2849
- #: lib/menu_tools_diagnostic.php:302
2850
  #: views/diagnostics/text.php:161
2851
  msgid "Cron running frequency lock"
2852
  msgstr ""
2853
 
2854
- #: lib/menu_tools_diagnostic.php:303
2855
  #: views/diagnostics/text.php:162
2856
  msgid "Interval the trash is automatically emptied at in days"
2857
  msgstr ""
2858
 
2859
- #: lib/menu_tools_diagnostic.php:303
2860
- #: lib/wordfenceClass.php:4246
2861
  #: views/diagnostics/text.php:162
2862
  msgid "Never"
2863
  msgstr ""
2864
 
2865
- #: lib/menu_tools_diagnostic.php:304
2866
  #: views/diagnostics/text.php:163
2867
  msgid "Automatic database repair"
2868
  msgstr ""
2869
 
2870
- #: lib/menu_tools_diagnostic.php:305
2871
  #: views/diagnostics/text.php:164
2872
  msgid "Do not upgrade global tables"
2873
  msgstr ""
2874
 
2875
- #: lib/menu_tools_diagnostic.php:306
2876
  #: views/diagnostics/text.php:165
2877
  msgid "Disallow plugin/theme editing"
2878
  msgstr ""
2879
 
2880
- #: lib/menu_tools_diagnostic.php:307
2881
  #: views/diagnostics/text.php:166
2882
  msgid "Disallow plugin/theme update and installation"
2883
  msgstr ""
2884
 
2885
- #: lib/menu_tools_diagnostic.php:308
2886
  #: views/diagnostics/text.php:167
2887
  msgid "Overwrite image edits when restoring the original"
2888
  msgstr ""
2889
 
2890
- #: lib/menu_tools_diagnostic.php:309
2891
  #: views/diagnostics/text.php:168
2892
  msgid "Force SSL for administrative logins"
2893
  msgstr ""
2894
 
2895
- #: lib/menu_tools_diagnostic.php:310
2896
  #: views/diagnostics/text.php:169
2897
  msgid "Block external URL requests"
2898
  msgstr ""
2899
 
2900
- #: lib/menu_tools_diagnostic.php:311
2901
  #: views/diagnostics/text.php:170
2902
  msgid "Allowlisted hosts"
2903
  msgstr ""
2904
 
2905
- #: lib/menu_tools_diagnostic.php:312
2906
  #: views/diagnostics/text.php:171
2907
  msgid "Automatic WP Core updates"
2908
  msgstr ""
2909
 
2910
- #: lib/menu_tools_diagnostic.php:312
2911
  #: views/diagnostics/text.php:171
2912
  msgid "Everything"
2913
  msgstr ""
2914
 
2915
- #: lib/menu_tools_diagnostic.php:312
2916
  #: views/diagnostics/text.php:171
2917
  msgid "Default"
2918
  msgstr ""
2919
 
2920
- #: lib/menu_tools_diagnostic.php:313
2921
  #: views/diagnostics/text.php:172
2922
  msgid "Hostname for a proxy server"
2923
  msgstr ""
2924
 
2925
- #: lib/menu_tools_diagnostic.php:314
2926
  #: views/diagnostics/text.php:173
2927
  msgid "Port for a proxy server"
2928
  msgstr ""
2929
 
2930
- #: lib/menu_tools_diagnostic.php:315
2931
  #: views/diagnostics/text.php:174
2932
  msgid "Multisite enabled"
2933
  msgstr ""
2934
 
2935
- #: lib/menu_tools_diagnostic.php:316
2936
  #: views/diagnostics/text.php:175
2937
  msgid "Multisite/network ability enabled"
2938
  msgstr ""
2939
 
2940
- #: lib/menu_tools_diagnostic.php:317
2941
  #: views/diagnostics/text.php:176
2942
  msgid "Multisite enabled, WordPress will load the /wp-content/sunrise.php file"
2943
  msgstr ""
2944
 
2945
- #: lib/menu_tools_diagnostic.php:318
2946
  #: views/diagnostics/text.php:177
2947
  msgid "Multisite enabled, subdomain installation constant"
2948
  msgstr ""
2949
 
2950
- #: lib/menu_tools_diagnostic.php:319
2951
  #: views/diagnostics/text.php:178
2952
  msgid "Multisite enabled, Older subdomain installation constant"
2953
  msgstr ""
2954
 
2955
- #: lib/menu_tools_diagnostic.php:320
2956
  #: views/diagnostics/text.php:179
2957
  msgid "Defines the multisite domain for the current site"
2958
  msgstr ""
2959
 
2960
- #: lib/menu_tools_diagnostic.php:321
2961
  #: views/diagnostics/text.php:180
2962
  msgid "Defines the multisite path for the current site"
2963
  msgstr ""
2964
 
2965
- #: lib/menu_tools_diagnostic.php:322
2966
  #: views/diagnostics/text.php:181
2967
  msgid "Defines the multisite database ID for the current site"
2968
  msgstr ""
2969
 
2970
- #: lib/menu_tools_diagnostic.php:323
2971
  #: views/diagnostics/text.php:182
2972
  msgid "Disable the fatal error handler"
2973
  msgstr ""
2974
 
2975
- #: lib/menu_tools_diagnostic.php:357
2976
  #: views/diagnostics/text.php:220
2977
  msgid "WordPress Plugins"
2978
  msgstr ""
2979
 
2980
- #: lib/menu_tools_diagnostic.php:358
2981
  #: views/diagnostics/text.php:220
2982
  msgid "Status of installed plugins."
2983
  msgstr ""
2984
 
2985
  #. translators: Plugin version.
2986
  #. translators: Theme version.
2987
- #: lib/menu_tools_diagnostic.php:382
2988
- #: lib/menu_tools_diagnostic.php:428
2989
- #: lib/menu_tools_diagnostic.php:527
2990
  #: views/diagnostics/text.php:238
2991
  #: views/diagnostics/text.php:277
2992
  #: views/diagnostics/text.php:351
2993
  msgid "Version %s"
2994
  msgstr ""
2995
 
2996
- #: lib/menu_tools_diagnostic.php:386
2997
  #: views/diagnostics/text.php:242
2998
  msgid "Network Activated"
2999
  msgstr ""
3000
 
3001
- #: lib/menu_tools_diagnostic.php:388
3002
- #: lib/menu_tools_diagnostic.php:431
3003
- #: lib/menu_tools_diagnostic.php:487
3004
- #: lib/menu_tools_diagnostic.php:530
3005
  #: views/diagnostics/text.php:244
3006
  #: views/diagnostics/text.php:282
3007
  #: views/diagnostics/text.php:324
@@ -3009,132 +3247,192 @@ msgstr ""
3009
  msgid "Active"
3010
  msgstr ""
3011
 
3012
- #: lib/menu_tools_diagnostic.php:390
3013
- #: lib/menu_tools_diagnostic.php:489
3014
- #: lib/menu_tools_diagnostic.php:532
3015
  #: views/diagnostics/text.php:246
3016
  #: views/diagnostics/text.php:324
3017
  #: views/diagnostics/text.php:357
3018
  msgid "Inactive"
3019
  msgstr ""
3020
 
3021
- #: lib/menu_tools_diagnostic.php:402
3022
  #: views/diagnostics/text.php:258
3023
  msgid "Must-Use WordPress Plugins"
3024
  msgstr ""
3025
 
3026
- #: lib/menu_tools_diagnostic.php:403
3027
  #: views/diagnostics/text.php:258
3028
  msgid "WordPress \"mu-plugins\" that are always active, including those provided by hosts."
3029
  msgstr ""
3030
 
3031
- #: lib/menu_tools_diagnostic.php:438
3032
  #: views/diagnostics/text.php:287
3033
  msgid "No MU-Plugins"
3034
  msgstr ""
3035
 
3036
- #: lib/menu_tools_diagnostic.php:450
3037
  #: views/diagnostics/text.php:296
3038
  msgid "Drop-In WordPress Plugins"
3039
  msgstr ""
3040
 
3041
- #: lib/menu_tools_diagnostic.php:451
3042
  #: views/diagnostics/text.php:296
3043
  msgid "WordPress \"drop-in\" plugins that are active."
3044
  msgstr ""
3045
 
3046
- #: lib/menu_tools_diagnostic.php:501
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3047
  #: views/diagnostics/text.php:332
3048
  #: views/reports/activity-report-email-inline.php:392
3049
  #: views/reports/activity-report.php:191
3050
  msgid "Themes"
3051
  msgstr ""
3052
 
3053
- #: lib/menu_tools_diagnostic.php:502
3054
  #: views/diagnostics/text.php:332
3055
  msgid "Status of installed themes."
3056
  msgstr ""
3057
 
3058
- #: lib/menu_tools_diagnostic.php:540
3059
  #: views/diagnostics/text.php:366
3060
  msgid "No Themes"
3061
  msgstr ""
3062
 
3063
- #: lib/menu_tools_diagnostic.php:552
3064
  #: views/diagnostics/text.php:375
3065
  msgid "Cron Jobs"
3066
  msgstr ""
3067
 
3068
- #: lib/menu_tools_diagnostic.php:553
3069
  #: views/diagnostics/text.php:375
3070
  msgid "List of WordPress cron jobs scheduled by WordPress, plugins, or themes."
3071
  msgstr ""
3072
 
3073
- #: lib/menu_tools_diagnostic.php:573
3074
  #: views/diagnostics/text.php:390
3075
  msgid "Overdue"
3076
  msgstr ""
3077
 
3078
- #: lib/menu_tools_diagnostic.php:605
3079
  #: views/diagnostics/text.php:402
3080
  msgid "Database Tables"
3081
  msgstr ""
3082
 
3083
- #: lib/menu_tools_diagnostic.php:606
3084
  #: views/diagnostics/text.php:402
3085
  msgid "Database table names, sizes, timestamps, and other metadata."
3086
  msgstr ""
3087
 
3088
- #: lib/menu_tools_diagnostic.php:616
3089
  msgid "Wordfence Table Check"
3090
  msgstr ""
3091
 
3092
- #: lib/menu_tools_diagnostic.php:619
3093
  #: views/diagnostics/text.php:420
3094
  msgid "Unable to verify - table count too high"
3095
  msgstr ""
3096
 
3097
- #: lib/menu_tools_diagnostic.php:648
3098
  #: views/diagnostics/text.php:453
3099
  msgid "All Tables Exist"
3100
  msgstr ""
3101
 
3102
  #. translators: 1. WordPress table prefix. 2. Wordfence table case. 3. List of database tables.
3103
- #: lib/menu_tools_diagnostic.php:652
3104
  msgid "Tables missing (prefix %1$s, %2$s): %3$s"
3105
  msgstr ""
3106
 
3107
  #. translators: 1. WordPress table prefix. 2. Wordfence table case. 3. List of database tables.
3108
  #. translators: 1. WordPress table prefix. 2. Wordfence tables.
3109
- #: lib/menu_tools_diagnostic.php:652
3110
  #: views/diagnostics/text.php:455
3111
  msgid "lowercase"
3112
  msgstr ""
3113
 
3114
  #. translators: 1. WordPress table prefix. 2. Wordfence table case. 3. List of database tables.
3115
  #. translators: 1. WordPress table prefix. 2. Wordfence tables.
3116
- #: lib/menu_tools_diagnostic.php:652
3117
  #: views/diagnostics/text.php:455
3118
  msgid "regular case"
3119
  msgstr ""
3120
 
3121
  #. translators: Row/record count.
3122
- #: lib/menu_tools_diagnostic.php:698
3123
  #: views/diagnostics/text.php:489
3124
  msgid "and %d more"
3125
  msgstr ""
3126
 
3127
- #: lib/menu_tools_diagnostic.php:717
3128
  #: views/diagnostics/text.php:500
3129
  msgid "Log Files"
3130
  msgstr ""
3131
 
3132
- #: lib/menu_tools_diagnostic.php:718
3133
  #: views/diagnostics/text.php:500
3134
  msgid "PHP error logs generated by your site, if enabled by your host."
3135
  msgstr ""
3136
 
3137
- #: lib/menu_tools_diagnostic.php:730
3138
  #: views/diagnostics/text.php:506
3139
  #: views/reports/activity-report-email-inline.php:341
3140
  #: views/scanner/issue-file.php:8
@@ -3142,133 +3440,133 @@ msgstr ""
3142
  msgid "File"
3143
  msgstr ""
3144
 
3145
- #: lib/menu_tools_diagnostic.php:731
3146
- #: lib/menu_tools_diagnostic.php:770
3147
- #: lib/wordfenceClass.php:6080
3148
  msgid "Download"
3149
  msgstr ""
3150
 
3151
- #: lib/menu_tools_diagnostic.php:739
3152
  #: views/diagnostics/text.php:513
3153
  msgid "No log files found."
3154
  msgstr ""
3155
 
3156
- #: lib/menu_tools_diagnostic.php:759
3157
  #: views/diagnostics/text.php:532
3158
  msgid "UTC"
3159
  msgstr ""
3160
 
3161
- #: lib/menu_tools_diagnostic.php:770
3162
  msgid "Requires downloading from the server directly"
3163
  msgstr ""
3164
 
3165
- #: lib/menu_tools_diagnostic.php:784
3166
  #: views/diagnostics/text.php:553
3167
  msgid "Scan Issues"
3168
  msgstr ""
3169
 
3170
  #. translators: Number of scan issues.
3171
- #: lib/menu_tools_diagnostic.php:789
3172
  #: views/diagnostics/text.php:561
3173
  msgid "New Issues (%d total)"
3174
  msgstr ""
3175
 
3176
- #: lib/menu_tools_diagnostic.php:810
3177
- #: lib/wordfenceClass.php:3951
3178
  #: views/diagnostics/text.php:584
3179
  msgid "No New Issues"
3180
  msgstr ""
3181
 
3182
- #: lib/menu_tools_diagnostic.php:825
3183
  msgid "Other Tests"
3184
  msgstr ""
3185
 
3186
- #: lib/menu_tools_diagnostic.php:826
3187
  msgid "System configuration, memory test, send test email from this server."
3188
  msgstr ""
3189
 
3190
- #: lib/menu_tools_diagnostic.php:837
3191
  msgid "Click to view your system's configuration in a new window"
3192
  msgstr ""
3193
 
3194
- #: lib/menu_tools_diagnostic.php:843
3195
  msgid "Test your WordPress host's available memory"
3196
  msgstr ""
3197
 
3198
- #: lib/menu_tools_diagnostic.php:849
3199
  msgid "Send a test email from this WordPress server to an email address:"
3200
  msgstr ""
3201
 
3202
- #: lib/menu_tools_diagnostic.php:851
3203
  msgid "Send Test Email"
3204
  msgstr ""
3205
 
3206
- #: lib/menu_tools_diagnostic.php:856
3207
  msgid "Send a test activity report email:"
3208
  msgstr ""
3209
 
3210
- #: lib/menu_tools_diagnostic.php:858
3211
  msgid "Send Test Activity Report"
3212
  msgstr ""
3213
 
3214
- #: lib/menu_tools_diagnostic.php:863
3215
  msgid "Clear all Wordfence Central connection data"
3216
  msgstr ""
3217
 
3218
- #: lib/menu_tools_diagnostic.php:864
3219
  msgid "Clear Connection Data"
3220
  msgstr ""
3221
 
3222
- #: lib/menu_tools_diagnostic.php:876
3223
  msgid "Debugging Options"
3224
  msgstr ""
3225
 
3226
- #: lib/menu_tools_diagnostic.php:893
3227
  msgid "Enable debugging mode (increases database load)"
3228
  msgstr ""
3229
 
3230
- #: lib/menu_tools_diagnostic.php:905
3231
  msgid "Start all scans remotely (Try this if your scans aren't starting and your site is publicly accessible)"
3232
  msgstr ""
3233
 
3234
- #: lib/menu_tools_diagnostic.php:917
3235
  msgid "Enable SSL Verification (Disable this if you are consistently unable to connect to the Wordfence servers.)"
3236
  msgstr ""
3237
 
3238
- #: lib/menu_tools_diagnostic.php:929
3239
  msgid "Disable reading of php://input"
3240
  msgstr ""
3241
 
3242
- #: lib/menu_tools_diagnostic.php:941
3243
  msgid "Enable beta threat defense feed"
3244
  msgstr ""
3245
 
3246
- #: lib/menu_tools_diagnostic.php:960
3247
- #: lib/wordfenceClass.php:6141
3248
  msgid "Restore Defaults"
3249
  msgstr ""
3250
 
3251
- #: lib/menu_tools_diagnostic.php:961
3252
- #: lib/wordfenceClass.php:6066
3253
  msgid "Cancel Changes"
3254
  msgstr ""
3255
 
3256
- #: lib/menu_tools_diagnostic.php:962
3257
- #: lib/wordfenceClass.php:6144
3258
  msgid "Save Changes"
3259
  msgstr ""
3260
 
3261
- #: lib/menu_tools_diagnostic.php:979
3262
  #: views/options/block-all-options-controls.php:162
3263
  #: views/options/block-controls.php:77
3264
  msgid "Confirm Restore Defaults"
3265
  msgstr ""
3266
 
3267
- #: lib/menu_tools_diagnostic.php:980
3268
  msgid "Are you sure you want to restore the default Diagnostics settings? This will undo any custom changes you have made to the options on this page."
3269
  msgstr ""
3270
 
3271
- #: lib/menu_tools_diagnostic.php:982
3272
  #: views/options/block-all-options-controls.php:165
3273
  #: views/options/block-controls.php:80
3274
  msgid "Restore<span class=\"wf-hidden-xs\"> Defaults</span>"
@@ -3276,25 +3574,16 @@ msgstr ""
3276
 
3277
  #. translators: URL to support page.
3278
  #: lib/menu_tools_importExport.php:16
3279
- msgid "<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wf-help-link\">Learn more<span class=\"wf-hidden-xs\"> about importing and exporting options</span></a>"
3280
- msgstr ""
3281
-
3282
- #: lib/menu_tools_importExport.php:20
3283
- msgid "To clone one site's configuration to another, use the import/export tools below."
3284
  msgstr ""
3285
 
3286
- #: lib/menu_tools_livetraffic.php:8
3287
- #: lib/menu_tools_livetraffic.php:41
3288
- #: lib/menu_tools_livetraffic.php:571
3289
- #: lib/menu_tools_livetraffic.php:602
3290
- #: lib/wordfenceClass.php:6573
3291
- #: models/page/wfPage.php:119
3292
- msgid "Live Traffic"
3293
  msgstr ""
3294
 
3295
  #. translators: URL to support page.
3296
  #: lib/menu_tools_livetraffic.php:44
3297
- msgid "<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wf-help-link\">Learn more<span class=\"wf-hidden-xs\"> about Live Traffic</span></a>"
3298
  msgstr ""
3299
 
3300
  #: lib/menu_tools_livetraffic.php:51
@@ -3316,7 +3605,7 @@ msgstr ""
3316
  #. translators: URL to support page.
3317
  #: lib/menu_tools_livetraffic.php:77
3318
  #: lib/menu_tools_livetraffic.php:86
3319
- msgid " (host setting <a href=\"%s\" class=\"wfhelp\" target=\"_blank\" rel=\"noopener noreferrer\"></a>)"
3320
  msgstr ""
3321
 
3322
  #: lib/menu_tools_livetraffic.php:78
@@ -3334,14 +3623,14 @@ msgstr ""
3334
  #: lib/menu_tools_livetraffic.php:100
3335
  #: lib/menu_tools_livetraffic.php:227
3336
  #: lib/menu_tools_livetraffic.php:458
3337
- #: lib/wordfenceClass.php:6103
3338
  msgid "Human"
3339
  msgstr ""
3340
 
3341
  #: lib/menu_tools_livetraffic.php:101
3342
  #: lib/menu_tools_livetraffic.php:228
3343
  #: lib/menu_tools_livetraffic.php:458
3344
- #: lib/wordfenceClass.php:6065
3345
  msgid "Bot"
3346
  msgstr ""
3347
 
@@ -3350,8 +3639,8 @@ msgid "Warning"
3350
  msgstr ""
3351
 
3352
  #: lib/menu_tools_livetraffic.php:103
3353
- #: lib/wfDiagnostic.php:751
3354
- #: lib/wordfenceClass.php:6057
3355
  msgid "Blocked"
3356
  msgstr ""
3357
 
@@ -3444,7 +3733,7 @@ msgid "%s hits"
3444
  msgstr ""
3445
 
3446
  #: lib/menu_tools_livetraffic.php:286
3447
- #: lib/wordfenceClass.php:6172
3448
  msgid "Type"
3449
  msgstr ""
3450
 
@@ -3457,7 +3746,7 @@ msgid "Page Visited"
3457
  msgstr ""
3458
 
3459
  #: lib/menu_tools_livetraffic.php:289
3460
- #: lib/wf503.php:338
3461
  #: views/reports/activity-report-email-inline.php:294
3462
  msgid "Time"
3463
  msgstr ""
@@ -3467,7 +3756,7 @@ msgid "IP Address"
3467
  msgstr ""
3468
 
3469
  #: lib/menu_tools_livetraffic.php:291
3470
- #: lib/wordfenceClass.php:4228
3471
  #: views/blocking/blocking-create.php:193
3472
  msgid "Hostname"
3473
  msgstr ""
@@ -3609,12 +3898,6 @@ msgstr ""
3609
  msgid "Live traffic now defaults to a summary view. Details are viewable by clicking anywhere within the summary record. To switch to the expanded view, click the <strong>Expand All Records</strong> switch. New installations will only log security-related traffic by default, though your previous setting has been preserved."
3610
  msgstr ""
3611
 
3612
- #: lib/menu_tools_twoFactor.php:14
3613
- #: lib/menu_tools_twoFactor.php:23
3614
- #: models/page/wfPage.php:117
3615
- msgid "Two-Factor Authentication"
3616
- msgstr ""
3617
-
3618
  #: lib/menu_tools_twoFactor.php:16
3619
  msgid "Learn more<span class=\"wf-hidden-xs\"> about Two-Factor Authentication</span>"
3620
  msgstr ""
@@ -3813,16 +4096,9 @@ msgstr ""
3813
  msgid "Your site is now using the legacy two-factor authentication system."
3814
  msgstr ""
3815
 
3816
- #: lib/menu_tools_whois.php:7
3817
- #: lib/menu_tools_whois.php:16
3818
- #: lib/menu_tools_whois.php:75
3819
- #: models/page/wfPage.php:123
3820
- msgid "Whois Lookup"
3821
- msgstr ""
3822
-
3823
  #. translators: URL to support page.
3824
  #: lib/menu_tools_whois.php:19
3825
- msgid "<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wf-help-link\">Learn more<span class=\"wf-hidden-xs\"> about Whois Lookup</span></a>"
3826
  msgstr ""
3827
 
3828
  #: lib/menu_tools_whois.php:23
@@ -3833,23 +4109,28 @@ msgstr ""
3833
  msgid "How to block a network"
3834
  msgstr ""
3835
 
 
 
 
 
 
3836
  #: lib/menu_tools_whois.php:95
3837
- #: lib/wordfenceClass.php:6085
3838
  msgid "Enter a valid IP or domain"
3839
  msgstr ""
3840
 
3841
  #: lib/menu_tools_whois.php:95
3842
- #: lib/wordfenceClass.php:6128
3843
  msgid "Please enter a valid IP address or domain name for your whois lookup."
3844
  msgstr ""
3845
 
3846
  #: lib/menu_tools_whois.php:99
3847
- #: lib/wordfenceClass.php:6109
3848
  msgid "Loading..."
3849
  msgstr ""
3850
 
3851
  #: lib/menu_tools_whois.php:104
3852
- #: lib/wordfenceClass.php:6115
3853
  msgid "Look up IP or Domain"
3854
  msgstr ""
3855
 
@@ -3879,7 +4160,7 @@ msgstr ""
3879
 
3880
  #: lib/menu_wordfence_central.php:44
3881
  #: lib/menu_wordfence_central.php:57
3882
- #: lib/wordfenceClass.php:6589
3883
  msgid "Wordfence Central"
3884
  msgstr ""
3885
 
@@ -3962,20 +4243,20 @@ msgstr ""
3962
  #. translators: Error message.
3963
  #: lib/rest-api/wfRESTConfigController.php:215
3964
  #: lib/rest-api/wfRESTConfigController.php:258
3965
- #: lib/wordfenceClass.php:4512
3966
  msgid "An error occurred while saving the configuration: %s"
3967
  msgstr ""
3968
 
3969
  #. translators: Error message.
3970
  #: lib/rest-api/wfRESTConfigController.php:226
3971
  #: lib/rest-api/wfRESTConfigController.php:269
3972
- #: lib/wordfenceClass.php:4521
3973
  msgid "Errors occurred while saving the configuration: %s"
3974
  msgstr ""
3975
 
3976
  #: lib/rest-api/wfRESTConfigController.php:231
3977
  #: lib/rest-api/wfRESTConfigController.php:274
3978
- #: lib/wordfenceClass.php:4526
3979
  msgid "Errors occurred while saving the configuration."
3980
  msgstr ""
3981
 
@@ -4026,58 +4307,57 @@ msgstr ""
4026
  msgid "Your access to this site has been limited"
4027
  msgstr ""
4028
 
4029
- #: lib/wf503.php:321
4030
  msgid "Your access to this site has been limited by the site owner"
4031
  msgstr ""
4032
 
4033
- #: lib/wf503.php:322
4034
  msgid "Your access to this service has been limited. (HTTP response code 503)"
4035
  msgstr ""
4036
 
4037
- #: lib/wf503.php:323
4038
- #: lib/wfLockedOut.php:328
4039
  msgid "If you think you have been blocked in error, contact the owner of this site for assistance."
4040
  msgstr ""
4041
 
4042
- #: lib/wf503.php:331
4043
- #: lib/wfLockedOut.php:340
4044
  msgid "Block Technical Data"
4045
  msgstr ""
4046
 
4047
- #: lib/wf503.php:334
4048
  msgid "Block Reason"
4049
  msgstr ""
4050
 
4051
- #: lib/wf503.php:354
4052
- #: lib/wfLockedOut.php:363
4053
  msgid "About Wordfence"
4054
  msgstr ""
4055
 
4056
- #: lib/wf503.php:355
4057
- #: lib/wfLockedOut.php:364
4058
- msgid "Wordfence is a security plugin installed on over 3 million WordPress sites. The owner of this site is using Wordfence to manage access to their site."
4059
  msgstr ""
4060
 
4061
- #: lib/wf503.php:356
4062
- #: lib/wfLockedOut.php:365
4063
  msgid "You can also read the documentation to learn about Wordfence's blocking tools, or visit wordfence.com to learn more about Wordfence."
4064
  msgstr ""
4065
 
4066
  #. translators: Support URL.
4067
- #: lib/wf503.php:360
4068
- #: lib/wfLockedOut.php:369
4069
- msgid "Click here to learn more: <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Documentation</a>"
4070
  msgstr ""
4071
 
4072
  #. translators: Localized date.
4073
- #: lib/wf503.php:361
4074
- #: lib/wfLockedOut.php:370
4075
  msgid "Generated by Wordfence at %s"
4076
  msgstr ""
4077
 
4078
  #. translators: Localized date.
4079
- #: lib/wf503.php:361
4080
- #: lib/wfLockedOut.php:370
4081
  msgid "Your computer's time:"
4082
  msgstr ""
4083
 
@@ -4093,50 +4373,51 @@ msgid "Wordfence activity for %1$s on %2$s"
4093
  msgstr ""
4094
 
4095
  #: lib/wfActivityReport.php:584
4096
- #: lib/wordfenceClass.php:8322
4097
  msgid "Blocked because the IP is blocklisted"
4098
  msgstr ""
4099
 
4100
  #. translators: Reason for firewall action.
4101
  #: lib/wfActivityReport.php:587
4102
- #: lib/wordfenceClass.php:8325
4103
  msgid "Blocked for %s"
4104
  msgstr ""
4105
 
4106
  #. translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value.
4107
  #: lib/wfActivityReport.php:599
4108
- #: lib/wordfenceClass.php:8339
4109
  msgid "Blocked for %1$s in query string: %2$s = %3$s"
4110
  msgstr ""
4111
 
4112
  #. translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value.
4113
  #: lib/wfActivityReport.php:602
4114
- #: lib/wordfenceClass.php:8344
4115
  msgid "Blocked for %1$s in POST body: %2$s = %3$s"
4116
  msgstr ""
4117
 
4118
  #. translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value.
4119
  #: lib/wfActivityReport.php:605
4120
- #: lib/wordfenceClass.php:8349
4121
  msgid "Blocked for %1$s in cookie: %2$s = %3$s"
4122
  msgstr ""
4123
 
4124
  #. translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value.
4125
  #: lib/wfActivityReport.php:608
4126
- #: lib/wordfenceClass.php:8354
4127
  msgid "Blocked for %1$s in file: %2$s = %3$s"
4128
  msgstr ""
4129
 
4130
  #: lib/wfActivityReport.php:752
4131
- #: lib/wfDiagnostic.php:483
4132
  #: models/block/wfBlock.php:95
4133
  msgid "Unknown"
4134
  msgstr ""
4135
 
4136
- #: lib/wfAdminNoticeQueue.php:180
4137
- #: lib/wordfenceClass.php:6078
4138
- #: lib/wordfenceClass.php:6333
4139
- #: lib/wordfenceClass.php:8874
 
4140
  msgid "Dismiss"
4141
  msgstr ""
4142
 
@@ -4274,6 +4555,11 @@ msgstr ""
4274
  msgid "There was an unknown error connecting to the Wordfence scanning servers."
4275
  msgstr ""
4276
 
 
 
 
 
 
4277
  #: lib/wfBulkCountries.php:5
4278
  msgid "Andorra"
4279
  msgstr ""
@@ -5363,7 +5649,7 @@ msgid "Unable to remove code execution protections applied to the .htaccess file
5363
  msgstr ""
5364
 
5365
  #: lib/wfConfig.php:1174
5366
- #: lib/wordfenceClass.php:7432
5367
  msgid "The grace period end time must be in the future."
5368
  msgstr ""
5369
 
@@ -5401,7 +5687,7 @@ msgid "An empty license key was entered."
5401
  msgstr ""
5402
 
5403
  #: lib/wfConfig.php:1300
5404
- #: lib/wordfenceClass.php:4397
5405
  msgid "The license key entered is not in a valid format. It must contain only numbers and the letters A-F."
5406
  msgstr ""
5407
 
@@ -5568,7 +5854,7 @@ msgstr ""
5568
 
5569
  #. translators: Support URL.
5570
  #: lib/wfDiagnostic.php:111
5571
- msgid "PHP version >= PHP 5.6.20<br><em> (<a href=\"https://wordpress.org/about/requirements/\" target=\"_blank\" rel=\"noopener noreferrer\">Minimum version required by WordPress</a>)</em> <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wfhelp\"></a>"
5572
  msgstr ""
5573
 
5574
  #. translators: Support URL.
@@ -5609,7 +5895,7 @@ msgid "cURL libz Version"
5609
  msgstr ""
5610
 
5611
  #: lib/wfDiagnostic.php:121
5612
- msgid "Checking <code>display_errors</code><br><em> (<a href=\"http://php.net/manual/en/errorfunc.configuration.php#ini.display-errors\" target=\"_blank\" rel=\"noopener noreferrer\">Should be disabled on production servers</a>)</em>"
5613
  msgstr ""
5614
 
5615
  #: lib/wfDiagnostic.php:125
@@ -5641,7 +5927,7 @@ msgid "Wordfence Network Time"
5641
  msgstr ""
5642
 
5643
  #: lib/wfDiagnostic.php:137
5644
- #: lib/wfDiagnostic.php:791
5645
  msgid "Server Time"
5646
  msgstr ""
5647
 
@@ -5654,109 +5940,137 @@ msgid "NTP Time Offset"
5654
  msgstr ""
5655
 
5656
  #: lib/wfDiagnostic.php:140
5657
- msgid "TOTP Time Source"
5658
  msgstr ""
5659
 
5660
  #: lib/wfDiagnostic.php:141
 
 
 
 
5661
  msgid "WordPress Time Zone"
5662
  msgstr ""
5663
 
5664
  #. translators: Number of jobs.
5665
- #: lib/wfDiagnostic.php:198
5666
  msgid "%d Job Overdue"
5667
  msgid_plural "%d Jobs Overdue"
5668
  msgstr[0] ""
5669
  msgstr[1] ""
5670
 
5671
  #. translators: Number of jobs.
5672
- #: lib/wfDiagnostic.php:198
5673
  msgid "Normal"
5674
  msgstr ""
5675
 
5676
- #: lib/wfDiagnostic.php:217
5677
- #: lib/wfDiagnostic.php:220
5678
  msgid "No files readable"
5679
  msgstr ""
5680
 
5681
  #. translators: File name.
5682
- #: lib/wfDiagnostic.php:232
5683
- #: lib/wfDiagnostic.php:268
5684
  msgid "File \"%s\" does not exist"
5685
  msgstr ""
5686
 
5687
  #. translators: File path.
5688
- #: lib/wfDiagnostic.php:235
5689
  msgid "File \"%s\" is unreadable"
5690
  msgstr ""
5691
 
5692
- #: lib/wfDiagnostic.php:253
5693
- #: lib/wfDiagnostic.php:256
5694
  msgid "No files writable"
5695
  msgstr ""
5696
 
5697
  #. translators: File name.
5698
- #: lib/wfDiagnostic.php:271
5699
  msgid "File \"%s\" is unwritable"
5700
  msgstr ""
5701
 
5702
- #: lib/wfDiagnostic.php:341
5703
  msgid "Basic config writing"
5704
  msgstr ""
5705
 
5706
- #: lib/wfDiagnostic.php:353
5707
  msgid "Serialized config writing"
5708
  msgstr ""
5709
 
5710
- #: lib/wfDiagnostic.php:361
5711
  msgid "(default)"
5712
  msgstr ""
5713
 
 
 
 
 
5714
  #. translators: Unix file permissions in octal (example 0777).
5715
- #: lib/wfDiagnostic.php:393
5716
  msgid "%s - using constant"
5717
  msgstr ""
5718
 
5719
  #. translators: Unix file permissions in octal (example 0777).
5720
- #: lib/wfDiagnostic.php:406
5721
  msgid "%s - using template"
5722
  msgstr ""
5723
 
5724
- #: lib/wfDiagnostic.php:410
5725
  msgid "0660 - using default"
5726
  msgstr ""
5727
 
5728
- #: lib/wfDiagnostic.php:444
5729
  msgid "Unavailable"
5730
  msgstr ""
5731
 
5732
- #: lib/wfDiagnostic.php:612
5733
- #: lib/wfDiagnostic.php:615
5734
  msgid "wp_remote_post() test to noc1.wordfence.com failed! Response was: "
5735
  msgstr ""
5736
 
5737
- #: lib/wfDiagnostic.php:616
5738
  msgid "This likely means that your hosting provider is blocking requests to noc1.wordfence.com or has set up a proxy that is not behaving itself."
5739
  msgstr ""
5740
 
5741
- #: lib/wfDiagnostic.php:649
5742
- #: lib/wfDiagnostic.php:652
5743
  msgid "wp_remote_post() test back to this server failed! Response was: "
5744
  msgstr ""
5745
 
5746
- #: lib/wfDiagnostic.php:653
5747
  msgid "This additional info may help you diagnose the issue. The response headers we received were:"
5748
  msgstr ""
5749
 
5750
  #. translators: PHP super global key.
5751
- #: lib/wfDiagnostic.php:682
5752
  msgid "We cannot read $_SERVER[%s]"
5753
  msgstr ""
5754
 
5755
- #: lib/wfDiagnostic.php:694
5756
  msgid "Should be: "
5757
  msgstr ""
5758
 
5759
- #: lib/wfDiagnostic.php:777
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5760
  msgid "NTP"
5761
  msgstr ""
5762
 
@@ -5788,30 +6102,34 @@ msgstr ""
5788
  msgid "You are temporarily locked out"
5789
  msgstr ""
5790
 
5791
- #: lib/wfLockedOut.php:326
5792
  msgid "Your access to this site has been temporarily limited by the site owner"
5793
  msgstr ""
5794
 
5795
- #: lib/wfLockedOut.php:327
5796
  msgid "Your access to this service has been temporarily limited. Please try again in a few minutes. (HTTP response code 503)"
5797
  msgstr ""
5798
 
5799
- #: lib/wfLockedOut.php:335
5800
  msgid "Return to the site home page"
5801
  msgstr ""
5802
 
5803
- #: lib/wfLockedOut.php:336
5804
  msgid "Attempt to return to the admin login page (you may still be locked out)"
5805
  msgstr ""
5806
 
5807
- #: lib/wfLockedOut.php:343
5808
  msgid "Block Reason:"
5809
  msgstr ""
5810
 
5811
- #: lib/wfLockedOut.php:344
5812
  msgid "You have been temporarily locked out of this system. This means that you will not be able to log in for a while."
5813
  msgstr ""
5814
 
 
 
 
 
5815
  #: lib/wfLog.php:217
5816
  msgid "Exceeded the maximum global requests per minute for crawlers or humans."
5817
  msgstr ""
@@ -5871,7 +6189,7 @@ msgid "Access from your area has been temporarily limited for security reasons"
5871
  msgstr ""
5872
 
5873
  #: lib/wfLog.php:615
5874
- #: lib/wordfenceClass.php:6116
5875
  #: waf/wfWAFIPBlocksController.php:97
5876
  msgid "Manual block by administrator"
5877
  msgstr ""
@@ -5933,6 +6251,11 @@ msgstr ""
5933
  msgid "Wordfence scan script accessed directly, or WF did not receive a cronkey."
5934
  msgstr ""
5935
 
 
 
 
 
 
5936
  #: lib/wfScan.php:81
5937
  msgid "Wordfence could not find a saved cron key to start the scan so assuming it started and exiting."
5938
  msgstr ""
@@ -5995,6 +6318,11 @@ msgstr ""
5995
  msgid "Contacting Wordfence to initiate scan"
5996
  msgstr ""
5997
 
 
 
 
 
 
5998
  #: lib/wfScan.php:202
5999
  msgid "Initiating quick scan"
6000
  msgstr ""
@@ -6007,7 +6335,7 @@ msgstr ""
6007
  #: lib/wfScan.php:263
6008
  #: lib/wfScan.php:278
6009
  #: lib/wfScan.php:293
6010
- #: lib/wfScanEngine.php:442
6011
  msgid "Wordfence used %1$s of memory for scan. Server peak memory usage was: %2$s"
6012
  msgstr ""
6013
 
@@ -6040,7 +6368,7 @@ msgstr[1] ""
6040
 
6041
  #. translators: 1. Time duration. 2. Support URL.
6042
  #: lib/wfScanEngine.php:278
6043
- msgid "The scan time limit of %1$s has been exceeded and the scan will be terminated. This limit can be customized on the options page. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Get More Information</a>"
6044
  msgstr ""
6045
 
6046
  #: lib/wfScanEngine.php:282
@@ -6053,783 +6381,780 @@ msgid "Scan interrupted. Scanned %1$d files, %2$d plugins, %3$d themes, %4$d pos
6053
  msgstr ""
6054
 
6055
  #. translators: Number of scan results.
6056
- #: lib/wfScanEngine.php:300
6057
  msgid "Scan interrupted. You have %d new issue to fix. See below."
6058
  msgid_plural "Scan interrupted. You have %d new issues to fix. See below."
6059
  msgstr[0] ""
6060
  msgstr[1] ""
6061
 
6062
- #: lib/wfScanEngine.php:309
6063
  msgid "Scan interrupted. No problems found prior to stopping."
6064
  msgstr ""
6065
 
6066
  #. translators: 1. Software version. 2. Software version.
6067
- #: lib/wfScanEngine.php:321
6068
  msgid "Aborting scan because WordPress updated from version %1$s to %2$s. The scan will be reattempted later."
6069
  msgstr ""
6070
 
6071
- #: lib/wfScanEngine.php:351
6072
  msgid "Forking during hash scan to ensure continuity."
6073
  msgstr ""
6074
 
6075
- #: lib/wfScanEngine.php:357
6076
  msgid "Entered fork()"
6077
  msgstr ""
6078
 
6079
- #: lib/wfScanEngine.php:360
6080
  msgid "Calling startScan(true)"
6081
  msgstr ""
6082
 
6083
  #. translators: 1. Number of files. 2. Number of plugins. 3. Number of themes. 4. Number of posts. 5. Number of comments. 6. Number of URLs. 7. Time duration.
6084
- #: lib/wfScanEngine.php:450
6085
  msgid "Scan Complete. Scanned %1$d files, %2$d plugins, %3$d themes, %4$d posts, %5$d comments and %6$d URLs in %7$s."
6086
  msgstr ""
6087
 
6088
  #. translators: 1. Time duration.
6089
- #: lib/wfScanEngine.php:462
6090
  msgid "Quick Scan Complete. Scanned in %s."
6091
  msgstr ""
6092
 
6093
  #. translators: Number of scan results.
6094
- #: lib/wfScanEngine.php:471
6095
  msgid "%d ignored issue was also detected."
6096
  msgid_plural "%d ignored issues were also detected."
6097
  msgstr[0] ""
6098
  msgstr[1] ""
6099
 
6100
  #. translators: Number of scan results.
6101
- #: lib/wfScanEngine.php:482
6102
  msgid "Scan complete. You have %d new issue to fix."
6103
  msgid_plural "Scan complete. You have %d new issues to fix."
6104
  msgstr[0] ""
6105
  msgstr[1] ""
6106
 
6107
- #: lib/wfScanEngine.php:490
6108
  msgid "See below."
6109
  msgstr ""
6110
 
6111
- #: lib/wfScanEngine.php:493
6112
  msgid "Scan complete. Congratulations, no new problems found."
6113
  msgstr ""
6114
 
6115
- #: lib/wfScanEngine.php:504
6116
  msgid "Checking if your site IP is generating spam"
6117
  msgstr ""
6118
 
6119
- #: lib/wfScanEngine.php:523
6120
  msgid "Checking if your IP is generating spam is for paid members only"
6121
  msgstr ""
6122
 
6123
- #: lib/wfScanEngine.php:530
6124
  msgid "Checking if your site is on a domain blocklist"
6125
  msgstr ""
6126
 
6127
- #: lib/wfScanEngine.php:535
6128
  msgid "Checking if your site is on a domain blocklist is for paid members only"
6129
  msgstr ""
6130
 
6131
  #. translators: Error message.
6132
- #: lib/wfScanEngine.php:571
6133
  msgid "Error checking domain blocklists: %s"
6134
  msgstr ""
6135
 
6136
  #. translators: WordPress site ID.
6137
- #: lib/wfScanEngine.php:605
6138
  msgid "The multisite blog with ID %d is listed on Google's Safe Browsing malware list."
6139
  msgstr ""
6140
 
6141
- #: lib/wfScanEngine.php:608
6142
  msgid "Your site is listed on Google's Safe Browsing malware list."
6143
  msgstr ""
6144
 
6145
  #. translators: 1. URL. 2. URL.
6146
- #: lib/wfScanEngine.php:612
6147
- msgid "The URL %1$s is on the malware list. More info available at <a href=\"http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%2$s&client=googlechrome&hl=en-US\" target=\"_blank\" rel=\"noopener noreferrer\">Google Safe Browsing diagnostic page</a>."
6148
  msgstr ""
6149
 
6150
  #. translators: WordPress site ID.
6151
- #: lib/wfScanEngine.php:618
6152
  msgid "The multisite blog with ID %d is listed on Google's Safe Browsing phishing list."
6153
  msgstr ""
6154
 
6155
- #: lib/wfScanEngine.php:621
6156
  msgid "Your site is listed on Google's Safe Browsing phishing list."
6157
  msgstr ""
6158
 
6159
  #. translators: 1. URL. 2. URL.
6160
- #: lib/wfScanEngine.php:625
6161
- msgid "The URL %1$s is on the phishing list. More info available at <a href=\"http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%2$s&client=googlechrome&hl=en-US\" target=\"_blank\" rel=\"noopener noreferrer\">Google Safe Browsing diagnostic page</a>."
6162
  msgstr ""
6163
 
6164
  #. translators: WordPress site ID.
6165
- #: lib/wfScanEngine.php:631
6166
  msgid "The multisite blog with ID %d is listed on the Wordfence domain blocklist."
6167
  msgstr ""
6168
 
6169
- #: lib/wfScanEngine.php:634
6170
  msgid "Your site is listed on the Wordfence domain blocklist."
6171
  msgstr ""
6172
 
6173
  #. translators: URL.
6174
- #: lib/wfScanEngine.php:638
6175
  msgid "The URL %s is on the blocklist."
6176
  msgstr ""
6177
 
6178
  #. translators: WordPress site ID.
6179
- #: lib/wfScanEngine.php:644
6180
  msgid "The multisite blog with ID %d is listed on a domain blocklist."
6181
  msgstr ""
6182
 
6183
- #: lib/wfScanEngine.php:647
6184
  msgid "Your site is listed on a domain blocklist."
6185
  msgstr ""
6186
 
6187
  #. translators: URL.
6188
- #: lib/wfScanEngine.php:649
6189
  msgid "The URL is: %s"
6190
  msgstr ""
6191
 
6192
- #: lib/wfScanEngine.php:669
6193
  msgid "Checking for the most secure way to get IPs"
6194
  msgstr ""
6195
 
6196
- #: lib/wfScanEngine.php:696
6197
  msgid "Unable to accurately detect IPs"
6198
  msgstr ""
6199
 
6200
  #. translators: Support URL.
6201
- #: lib/wfScanEngine.php:697
6202
- msgid "Wordfence was unable to validate a test request to your website. This can happen if your website is behind a proxy that does not use one of the standard ways to convey the IP of the request or it is unreachable publicly. IP blocking and live traffic information may not be accurate. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Get More Information</a>"
6203
  msgstr ""
6204
 
6205
- #: lib/wfScanEngine.php:707
6206
- #: lib/wordfenceClass.php:6310
6207
  msgid "For maximum security use PHP's built in REMOTE_ADDR."
6208
  msgstr ""
6209
 
6210
- #: lib/wfScanEngine.php:709
6211
- #: lib/wordfenceClass.php:6313
6212
  msgid "This site appears to be behind a front-end proxy, so using the X-Forwarded-For HTTP header will resolve to the correct IPs."
6213
  msgstr ""
6214
 
6215
- #: lib/wfScanEngine.php:711
6216
- #: lib/wordfenceClass.php:6316
6217
  msgid "This site appears to be behind a front-end proxy, so using the X-Real-IP HTTP header will resolve to the correct IPs."
6218
  msgstr ""
6219
 
6220
- #: lib/wfScanEngine.php:713
6221
- #: lib/wordfenceClass.php:6319
6222
  msgid "This site appears to be behind Cloudflare, so using the Cloudflare \"CF-Connecting-IP\" HTTP header will resolve to the correct IPs."
6223
  msgstr ""
6224
 
6225
- #: lib/wfScanEngine.php:717
6226
  msgid "'How does Wordfence get IPs' is misconfigured"
6227
  msgstr ""
6228
 
6229
  #. translators: Support URL.
6230
- #: lib/wfScanEngine.php:720
6231
- msgid "A test request to this website was detected on a different value for this setting. IP blocking and live traffic information may not be accurate. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Get More Information</a>"
6232
  msgstr ""
6233
 
6234
- #: lib/wfScanEngine.php:741
6235
  msgid "Check for publicly accessible configuration files, backup files and logs"
6236
  msgstr ""
6237
 
6238
  #. translators: File path.
6239
- #: lib/wfScanEngine.php:792
6240
  msgid "Publicly accessible config, backup, or log file found: %s"
6241
  msgstr ""
6242
 
6243
  #. translators: 1. URL to publicly accessible file. 2. Support URL.
6244
- #: lib/wfScanEngine.php:795
6245
- msgid "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%1$s</a> is publicly accessible and may expose source code or sensitive information about your site. Files such as this one are commonly checked for by scanners and should be made inaccessible. Alternately, some can be removed if you are certain your site does not need them. Sites using the nginx web server may need manual configuration changes to protect such files. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn more</a>"
6246
  msgstr ""
6247
 
6248
- #: lib/wfScanEngine.php:824
6249
  msgid "Checking if your server discloses the path to the document root"
6250
  msgstr ""
6251
 
6252
- #: lib/wfScanEngine.php:834
6253
  msgid "Web server exposes the document root"
6254
  msgstr ""
6255
 
6256
- #: lib/wfScanEngine.php:835
6257
  msgid "Full Path Disclosure (FPD) vulnerabilities enable the attacker to see the path to the webroot/file. e.g.: /home/user/htdocs/file/. Certain vulnerabilities, such as using the load_file() (within a SQL Injection) query to view the page source, require the attacker to have the full path to the file they wish to view."
6258
  msgstr ""
6259
 
6260
- #: lib/wfScanEngine.php:861
6261
  msgid "Directory listing is enabled"
6262
  msgstr ""
6263
 
6264
- #: lib/wfScanEngine.php:862
6265
  msgid "Directory listing provides an attacker with the complete index of all the resources located inside of the directory. The specific risks and consequences vary depending on which files are listed and accessible, but it is recommended that you disable it unless it is needed."
6266
  msgstr ""
6267
 
6268
- #: lib/wfScanEngine.php:878
6269
  msgid "Checking if your site is being Spamvertised"
6270
  msgstr ""
6271
 
6272
- #: lib/wfScanEngine.php:897
6273
  msgid "Check if your site is being Spamvertized is for paid members only"
6274
  msgstr ""
6275
 
6276
- #: lib/wfScanEngine.php:918
6277
  msgid "Wordfence could not read the contents of your base WordPress directory. This usually indicates your permissions are so strict that your web server can't read your WordPress directory."
6278
  msgstr ""
6279
 
6280
- #: lib/wfScanEngine.php:955
6281
  msgid "Checking for paths skipped due to scan settings"
6282
  msgstr ""
6283
 
6284
  #. translators: Number of paths skipped in scan.
6285
- #: lib/wfScanEngine.php:968
6286
  msgid ", and %d more."
6287
  msgstr ""
6288
 
6289
  #. translators: Number of paths skipped in scan.
6290
- #: lib/wfScanEngine.php:992
6291
  msgid "%d path was skipped for the malware scan due to scan settings"
6292
  msgid_plural "%d paths were skipped for the malware scan due to scan settings"
6293
  msgstr[0] ""
6294
  msgstr[1] ""
6295
 
6296
  #. translators: 1. Number of paths skipped in scan. 2. Support URL. 3. List of skipped paths.
6297
- #: lib/wfScanEngine.php:995
6298
- msgid "The option \"Scan files outside your WordPress installation\" is off by default, which means %1$d path and its file(s) will not be scanned for malware or unauthorized changes. To continue skipping this path, you may ignore this issue. Or to start scanning it, enable the option and subsequent scans will include it. Some paths may not be necessary to scan, so this is optional. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More</a><br><br>The path skipped is %3$s"
6299
- msgid_plural "The option \"Scan files outside your WordPress installation\" is off by default, which means %1$d paths and their file(s) will not be scanned for malware or unauthorized changes. To continue skipping these paths, you may ignore this issue. Or to start scanning them, enable the option and subsequent scans will include them. Some paths may not be necessary to scan, so this is optional. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More</a><br><br>The paths skipped are %3$s"
6300
  msgstr[0] ""
6301
  msgstr[1] ""
6302
 
6303
- #: lib/wfScanEngine.php:1023
6304
  msgid "Including files that are outside the WordPress installation in the scan."
6305
  msgstr ""
6306
 
6307
- #: lib/wfScanEngine.php:1026
6308
  msgid "Getting plugin list from WordPress"
6309
  msgstr ""
6310
 
6311
  #. translators: Number of plugins.
6312
- #: lib/wfScanEngine.php:1028
6313
  msgid "Found %d plugin"
6314
  msgid_plural "Found %d plugins"
6315
  msgstr[0] ""
6316
  msgstr[1] ""
6317
 
6318
- #: lib/wfScanEngine.php:1030
6319
  msgid "Getting theme list from WordPress"
6320
  msgstr ""
6321
 
6322
  #. translators: Number of themes.
6323
- #: lib/wfScanEngine.php:1032
6324
  msgid "Found %d theme"
6325
  msgid_plural "Found %d themes"
6326
  msgstr[0] ""
6327
  msgstr[1] ""
6328
 
6329
- #: lib/wfScanEngine.php:1049
6330
  msgid "Scanning file contents for infections and vulnerabilities"
6331
  msgstr ""
6332
 
6333
- #: lib/wfScanEngine.php:1052
6334
  msgid "Skipping scan of file contents for infections and vulnerabilities"
6335
  msgstr ""
6336
 
6337
- #: lib/wfScanEngine.php:1056
6338
  msgid "Scanning file contents for URLs on a domain blocklist"
6339
  msgstr ""
6340
 
6341
- #: lib/wfScanEngine.php:1059
6342
  msgid "Skipping scan of file contents for URLs on a domain blocklist"
6343
  msgstr ""
6344
 
6345
- #: lib/wfScanEngine.php:1064
6346
  msgid "Starting scan of file contents"
6347
  msgstr ""
6348
 
6349
- #: lib/wfScanEngine.php:1080
6350
  msgid "Done file contents scan"
6351
  msgstr ""
6352
 
6353
  #. translators: Scan result description.
6354
- #: lib/wfScanEngine.php:1088
6355
- #: lib/wfScanEngine.php:2257
6356
- #: lib/wfScanEngine.php:2299
6357
  msgid "Adding issue: %s"
6358
  msgstr ""
6359
 
6360
- #: lib/wfScanEngine.php:1121
6361
  msgid "Scanning for publicly accessible quarantined files"
6362
  msgstr ""
6363
 
6364
  #. translators: File path.
6365
- #: lib/wfScanEngine.php:1126
6366
  msgid "Testing accessibility of: %s"
6367
  msgstr ""
6368
 
6369
  #. translators: File path.
6370
- #: lib/wfScanEngine.php:1135
6371
  msgid "Publicly accessible quarantined file found: %s"
6372
  msgstr ""
6373
 
6374
  #. translators: URL to publicly accessible file.
6375
- #: lib/wfScanEngine.php:1138
6376
- msgid "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%1$s</a> is publicly accessible and may expose source code or sensitive information about your site. Files such as this one are commonly checked for by scanners and should be removed or made inaccessible."
6377
  msgstr ""
6378
 
6379
- #: lib/wfScanEngine.php:1162
6380
  msgid "Scanning posts for URLs on a domain blocklist"
6381
  msgstr ""
6382
 
6383
  #. translators: Number of posts left to scan.
6384
- #: lib/wfScanEngine.php:1185
6385
  msgid "Scanning posts with %d left to scan."
6386
  msgstr ""
6387
 
6388
- #: lib/wfScanEngine.php:1207
6389
  msgid "Post title contains suspicious code"
6390
  msgstr ""
6391
 
6392
- #: lib/wfScanEngine.php:1208
6393
  msgid "This post contains code that is suspicious. Please check the title of the post and confirm that the code in the title is not malicious."
6394
  msgstr ""
6395
 
6396
- #: lib/wfScanEngine.php:1231
6397
  msgid "Examining URLs found in posts we scanned for dangerous websites"
6398
  msgstr ""
6399
 
6400
- #: lib/wfScanEngine.php:1233
6401
- #: lib/wfScanEngine.php:2220
6402
  msgid "Done examining URLs"
6403
  msgstr ""
6404
 
6405
  #. translators: 1. WordPress Post type. 2. URL.
6406
- #: lib/wfScanEngine.php:1269
6407
- #: lib/wfScanEngine.php:1289
6408
  msgid "%1$s contains a suspected malware URL: %2$s"
6409
  msgstr ""
6410
 
6411
  #. translators: 1. WordPress Post type. 2. URL. 3. URL.
6412
- #: lib/wfScanEngine.php:1275
6413
- msgid "This %1$s contains a suspected malware URL listed on Google's list of malware sites. The URL is: %2$s - More info available at <a href=\"http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%3$s&client=googlechrome&hl=en-US\" target=\"_blank\" rel=\"noopener noreferrer\">Google Safe Browsing diagnostic page</a>."
 
 
6414
  msgstr ""
6415
 
6416
  #. translators: 1. WordPress Post type. 2. URL.
6417
- #: lib/wfScanEngine.php:1281
6418
  msgid "%1$s contains a suspected phishing site URL: %2$s"
6419
  msgstr ""
6420
 
6421
  #. translators: 1. WordPress Post type. 2. URL.
6422
  #. translators: 1. WordPress post type. 2. URL.
6423
- #: lib/wfScanEngine.php:1284
6424
- #: lib/wfScanEngine.php:1427
6425
  msgid "This %1$s contains a URL that is a suspected phishing site that is currently listed on Google's list of known phishing sites. The URL is: %2$s"
6426
  msgstr ""
6427
 
6428
  #. translators: 1. WordPress Post type. 2. URL.
6429
  #. translators: 1. WordPress post type. 2. URL.
6430
- #: lib/wfScanEngine.php:1292
6431
- #: lib/wfScanEngine.php:1435
6432
  msgid "This %1$s contains a URL that is currently listed on Wordfence's domain blocklist. The URL is: %2$s"
6433
  msgstr ""
6434
 
6435
  #. translators: Scan result description.
6436
- #: lib/wfScanEngine.php:1301
6437
  msgid "Adding issue: %1$s"
6438
  msgstr ""
6439
 
6440
- #: lib/wfScanEngine.php:1337
6441
  msgid "Scanning comments for URLs on a domain blocklist"
6442
  msgstr ""
6443
 
6444
  #. translators: Number of comments left to scan.
6445
- #: lib/wfScanEngine.php:1361
6446
  msgid "Scanning comments with %d left to scan."
6447
  msgstr ""
6448
 
6449
  #. translators: 1. WordPress post type. 2. WordPress author username.
6450
- #: lib/wfScanEngine.php:1415
6451
  msgid "%1$s with author %2$s contains a suspected malware URL."
6452
  msgstr ""
6453
 
6454
- #. translators: 1. WordPress post type. 2. URL. 3. URL.
6455
- #: lib/wfScanEngine.php:1418
6456
- msgid "This %$1s contains a suspected malware URL listed on Google's list of malware sites. The URL is: %2$s - More info available at <a href=\"http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%3$s&client=googlechrome&hl=en-US\" target=\"_blank\" rel=\"noopener noreferrer\">Google Safe Browsing diagnostic page</a>."
6457
- msgstr ""
6458
-
6459
  #. translators: WordPress post type.
6460
- #: lib/wfScanEngine.php:1424
6461
  msgid "%s contains a suspected phishing site URL."
6462
  msgstr ""
6463
 
6464
  #. translators: URL.
6465
- #: lib/wfScanEngine.php:1432
6466
  msgid "%s contains a suspected malware URL."
6467
  msgstr ""
6468
 
6469
  #. translators: WordPress username.
6470
- #: lib/wfScanEngine.php:1480
6471
  msgid "Author: %s"
6472
  msgstr ""
6473
 
6474
  #. translators: Email address.
6475
- #: lib/wfScanEngine.php:1483
6476
  msgid "Email: %s"
6477
  msgstr ""
6478
 
6479
  #. translators: IP address.
6480
- #: lib/wfScanEngine.php:1485
6481
  msgid "Source IP: %s"
6482
  msgstr ""
6483
 
6484
  #. translators: Comment description.
6485
- #: lib/wfScanEngine.php:1486
6486
  msgid "Scanning comment with %s"
6487
  msgstr ""
6488
 
6489
  #. translators: Comment description.
6490
- #: lib/wfScanEngine.php:1499
6491
- #: lib/wfScanEngine.php:1505
6492
  msgid "Marking comment as spam for containing a malware URL. Comment has %s"
6493
  msgstr ""
6494
 
6495
  #. translators: Comment description.
6496
- #: lib/wfScanEngine.php:1502
6497
  msgid "Marking comment as spam for containing a phishing URL. Comment has %s"
6498
  msgstr ""
6499
 
6500
  #. translators: Comment description.
6501
- #: lib/wfScanEngine.php:1512
6502
  msgid "Scanned comment with %s"
6503
  msgstr ""
6504
 
6505
- #: lib/wfScanEngine.php:1563
6506
  msgid "Scanning for weak passwords"
6507
  msgstr ""
6508
 
6509
- #: lib/wfScanEngine.php:1574
6510
  msgid "We were unable to generate the user list for your password check."
6511
  msgstr ""
6512
 
6513
  #. translators: Number of users.
6514
- #: lib/wfScanEngine.php:1590
6515
  msgid "Starting password strength check on %d user."
6516
  msgid_plural "Starting password strength check on %d users."
6517
  msgstr[0] ""
6518
  msgstr[1] ""
6519
 
6520
  #. translators: Number of users.
6521
- #: lib/wfScanEngine.php:1599
6522
  msgid "Total of %d users left to process in password strength check."
6523
  msgid_plural "Total of %d users left to process in password strength check."
6524
  msgstr[0] ""
6525
  msgstr[1] ""
6526
 
6527
  #. translators: WordPress user ID.
6528
- #: lib/wfScanEngine.php:1634
6529
  msgid "Could not get username for user with ID %d when checking password strength."
6530
  msgstr ""
6531
 
6532
  #. translators: 1. WordPress username. 2. WordPress user ID.
6533
- #: lib/wfScanEngine.php:1640
6534
  msgid "Checking password strength of user '%1$s' with ID %2$d"
6535
  msgstr ""
6536
 
6537
  #. translators: 1. WordPress username. 2. WordPress capability.
6538
- #: lib/wfScanEngine.php:1648
6539
  msgid "User \"%1$s\" with \"%2$s\" access has an easy password."
6540
  msgstr ""
6541
 
6542
  #. translators: WordPress capability.
6543
- #: lib/wfScanEngine.php:1654
6544
  msgid "A user with the a role of '%s' has a password that is easy to guess. Please change this password yourself or ask the user to change it."
6545
  msgstr ""
6546
 
6547
  #. translators: WordPress username.
6548
- #: lib/wfScanEngine.php:1662
6549
  msgid "User \"%s\" with 'subscriber' access has a very easy password."
6550
  msgstr ""
6551
 
6552
- #: lib/wfScanEngine.php:1663
6553
  msgid "A user with 'subscriber' access has a password that is very easy to guess. Please either change it or ask the user to change their password."
6554
  msgstr ""
6555
 
6556
  #. translators: Scan result description.
6557
- #: lib/wfScanEngine.php:1670
6558
  msgid "Adding issue %s"
6559
  msgstr ""
6560
 
6561
  #. translators: WordPress username.
6562
- #: lib/wfScanEngine.php:1687
6563
  msgid "Completed checking password strength of user '%s'"
6564
  msgstr ""
6565
 
6566
- #: lib/wfScanEngine.php:1720
6567
  msgid "Scanning to check available disk space"
6568
  msgstr ""
6569
 
6570
- #: lib/wfScanEngine.php:1727
6571
  msgid "Unable to access available disk space information"
6572
  msgstr ""
6573
 
6574
  #. translators: 1. Number of bytes. 2. Number of bytes.
6575
- #: lib/wfScanEngine.php:1736
6576
  msgid "Total disk space: %1$s -- Free disk space: %2$s"
6577
  msgstr ""
6578
 
6579
  #. translators: Number of bytes.
6580
- #: lib/wfScanEngine.php:1741
6581
  msgid "The disk has %s MB available"
6582
  msgstr ""
6583
 
6584
  #. translators: Number of bytes.
6585
- #: lib/wfScanEngine.php:1756
6586
  msgid "You have %s disk space remaining"
6587
  msgstr ""
6588
 
6589
  #. translators: Number of bytes.
6590
- #: lib/wfScanEngine.php:1757
6591
  msgid "You only have %s of your disk space remaining. Please free up disk space or your website may stop serving requests."
6592
  msgstr ""
6593
 
6594
- #: lib/wfScanEngine.php:1770
6595
  msgid "Checking Web Application Firewall status"
6596
  msgstr ""
6597
 
6598
- #: lib/wfScanEngine.php:1781
6599
  msgid "Web Application Firewall is disabled"
6600
  msgstr ""
6601
 
6602
  #. translators: Support URL.
6603
- #: lib/wfScanEngine.php:1782
6604
- msgid "Wordfence's Web Application Firewall has been unexpectedly disabled. If you see a notice at the top of the Wordfence admin pages that says \"The Wordfence Web Application Firewall cannot run,\" click the link in that message to rebuild the configuration. If this does not work, you may need to fix file permissions. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">More Details</a>"
6605
  msgstr ""
6606
 
6607
- #: lib/wfScanEngine.php:1797
6608
  msgid "Scanning for old themes, plugins and core files"
6609
  msgstr ""
6610
 
6611
- #: lib/wfScanEngine.php:1883
6612
  msgid "Your WordPress version is out of date"
6613
  msgstr ""
6614
 
6615
  #. translators: Software version.
6616
- #: lib/wfScanEngine.php:1884
6617
  msgid "WordPress version %s is now available. Please upgrade immediately to get the latest security updates from WordPress."
6618
  msgstr ""
6619
 
6620
  #. translators: 1. Plugin name. 2. Software version. 3. Software version.
6621
- #: lib/wfScanEngine.php:1911
6622
  msgid "The Plugin \"%1$s\" needs an upgrade (%2$s -> %3$s)."
6623
  msgstr ""
6624
 
6625
  #. translators: Theme name.
6626
- #: lib/wfScanEngine.php:1918
6627
- #: lib/wfScanEngine.php:1952
6628
  msgid "You need to upgrade \"%s\" to the newest version to ensure you have any security fixes the developer has released."
6629
  msgstr ""
6630
 
6631
  #. translators: 1. Theme name. 2. Software version. 3. Software version.
6632
- #: lib/wfScanEngine.php:1945
6633
  msgid "The Theme \"%1$s\" needs an upgrade (%2$s -> %3$s)."
6634
  msgstr ""
6635
 
6636
  #. translators: 1. Plugin name. 2. Software version. 3. Software version.
6637
- #: lib/wfScanEngine.php:1996
6638
  msgid "The Plugin \"%1$s\" appears to be abandoned (updated %2$s, tested to WP %3$s)."
6639
  msgstr ""
6640
 
6641
  #. translators: 1. Plugin name. 2. Software version.
6642
- #: lib/wfScanEngine.php:2003
6643
  msgid "It was last updated %1$s ago and tested up to WordPress %2$s."
6644
  msgstr ""
6645
 
6646
  #. translators: 1. Plugin name. 2. Software version.
6647
- #: lib/wfScanEngine.php:2010
6648
  msgid "The Plugin \"%1$s\" appears to be abandoned (updated %2$s)."
6649
  msgstr ""
6650
 
6651
  #. translators: Time duration.
6652
- #: lib/wfScanEngine.php:2016
6653
  msgid "It was last updated %s ago."
6654
  msgstr ""
6655
 
6656
- #: lib/wfScanEngine.php:2022
6657
- #: lib/wfScanEngine.php:2061
6658
  msgid "It has unpatched security issues and may have compatibility problems with the current version of WordPress."
6659
  msgstr ""
6660
 
6661
- #: lib/wfScanEngine.php:2024
6662
- #: lib/wfScanEngine.php:2063
6663
  msgid "Plugins can be removed from wordpress.org for various reasons. This can include benign issues like a plugin author discontinuing development or moving the plugin distribution to their own site, but some might also be due to security issues. In any case, future updates may or may not be available, so it is worth investigating the cause and deciding whether to temporarily or permanently replace or remove the plugin."
6664
  msgstr ""
6665
 
6666
  #. translators: Support URL.
6667
- #: lib/wfScanEngine.php:2028
6668
- #: lib/wfScanEngine.php:2067
6669
- #: lib/wfScanEngine.php:2255
6670
- #: lib/wfScanEngine.php:2297
6671
- msgid "<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Get more information.</a>"
6672
  msgstr ""
6673
 
6674
  #. translators: Plugin name.
6675
- #: lib/wfScanEngine.php:2059
6676
  msgid "The Plugin \"%s\" has been removed from wordpress.org."
6677
  msgstr ""
6678
 
6679
- #: lib/wfScanEngine.php:2112
6680
  msgid "Scanning for admin users not created through WordPress"
6681
  msgstr ""
6682
 
6683
  #. translators: WordPress username.
6684
- #: lib/wfScanEngine.php:2134
6685
  msgid "An admin user with the username %s was created outside of WordPress."
6686
  msgstr ""
6687
 
6688
  #. translators: WordPress username.
6689
- #: lib/wfScanEngine.php:2135
6690
  msgid "An admin user with the username %s was created outside of WordPress. It's possible a plugin could have created the account, but if you do not recognize the user, we suggest you remove it."
6691
  msgstr ""
6692
 
6693
  #. translators: WordPress username.
6694
- #: lib/wfScanEngine.php:2161
6695
  msgid "An admin user with a suspicious username %s was found."
6696
  msgstr ""
6697
 
6698
  #. translators: WordPress username.
6699
- #: lib/wfScanEngine.php:2162
6700
  msgid "An admin user with a suspicious username %s was found. Administrators accounts with usernames similar to this are commonly seen created by hackers. It's possible a plugin could have created the account, but if you do not recognize the user, we suggest you remove it."
6701
  msgstr ""
6702
 
6703
- #: lib/wfScanEngine.php:2183
6704
  msgid "Scanning for suspicious site options"
6705
  msgstr ""
6706
 
6707
- #: lib/wfScanEngine.php:2218
6708
  msgid "Examining URLs found in the options we scanned for dangerous websites"
6709
  msgstr ""
6710
 
6711
  #. translators: URL.
6712
- #: lib/wfScanEngine.php:2242
6713
- #: lib/wfScanEngine.php:2248
6714
  msgid "Option contains a suspected malware URL: %s"
6715
  msgstr ""
6716
 
6717
  #. translators: URL.
6718
- #: lib/wfScanEngine.php:2243
6719
  msgid "This option contains a suspected malware URL listed on Google's list of malware sites. It may indicate your site is infected with malware. The URL is: %s"
6720
  msgstr ""
6721
 
6722
  #. translators: URL.
6723
- #: lib/wfScanEngine.php:2245
6724
  msgid "Option contains a suspected phishing site URL: %s"
6725
  msgstr ""
6726
 
6727
  #. translators: URL.
6728
- #: lib/wfScanEngine.php:2246
6729
  msgid "This option contains a URL that is a suspected phishing site that is currently listed on Google's list of known phishing sites. It may indicate your site is infected with malware. The URL is: %s"
6730
  msgstr ""
6731
 
6732
  #. translators: URL.
6733
- #: lib/wfScanEngine.php:2249
6734
  msgid "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: %s"
6735
  msgstr ""
6736
 
6737
- #: lib/wfScanEngine.php:2289
6738
  msgid "Checking for future GeoIP support"
6739
  msgstr ""
6740
 
6741
- #: lib/wfScanEngine.php:2294
6742
  msgid "PHP Update Needed for Country Blocking"
6743
  msgstr ""
6744
 
6745
  #. translators: Software version.
6746
- #: lib/wfScanEngine.php:2295
6747
  msgid "The GeoIP database that is required for country blocking has been updated to a new format. This new format requires sites to run PHP 5.4 or newer, and this site is on PHP %s. To ensure country blocking continues functioning, please update PHP."
6748
  msgstr ""
6749
 
6750
- #: lib/wfScanEngine.php:2344
6751
  msgid "Previous scan was stopped successfully."
6752
  msgstr ""
6753
 
6754
- #: lib/wfScanEngine.php:2345
6755
  msgid "Scan was stopped on administrator request."
6756
  msgstr ""
6757
 
6758
- #: lib/wfScanEngine.php:2361
6759
  msgid "Entering start scan routine"
6760
  msgstr ""
6761
 
6762
- #: lib/wfScanEngine.php:2364
6763
  msgid "A scan is already running. Use the stop scan button if you would like to terminate the current scan."
6764
  msgstr ""
6765
 
6766
  #. translators: Support URL.
6767
- #: lib/wfScanEngine.php:2382
6768
  msgid "Test result of scan start URL fetch: %s"
6769
  msgstr ""
6770
 
6771
  #. translators: WordPress admin panel URL.
6772
- #: lib/wfScanEngine.php:2391
6773
  msgid "Starting cron with normal ajax at URL %s"
6774
  msgstr ""
6775
 
6776
  #. translators: Error message.
6777
  #. translators: WordPress admin panel URL.
6778
- #: lib/wfScanEngine.php:2413
6779
- #: lib/wfScanEngine.php:2448
6780
  msgid "There was an error starting the scan: %s."
6781
  msgstr ""
6782
 
6783
- #: lib/wfScanEngine.php:2415
6784
- #: lib/wfScanEngine.php:2450
6785
  msgid "There was an unknown error starting the scan."
6786
  msgstr ""
6787
 
6788
- #: lib/wfScanEngine.php:2422
6789
- #: lib/wfScanEngine.php:2456
6790
  msgid "Scan process ended after forking."
6791
  msgstr ""
6792
 
6793
  #. translators: WordPress admin panel URL.
6794
- #: lib/wfScanEngine.php:2426
6795
  msgid "Starting cron via proxy at URL %s"
6796
  msgstr ""
6797
 
6798
  #. translators: Time in seconds.
6799
- #: lib/wfScanEngine.php:2502
6800
  msgid "Got value from wf config maxExecutionTime: %s"
6801
  msgstr ""
6802
 
6803
  #. translators: Time in seconds.
6804
- #: lib/wfScanEngine.php:2506
6805
  msgid "getMaxExecutionTime() returning config value: %s"
6806
  msgstr ""
6807
 
6808
  #. translators: PHP ini value.
6809
- #: lib/wfScanEngine.php:2513
6810
  msgid "Got max_execution_time value from ini: %s"
6811
  msgstr ""
6812
 
6813
  #. translators: 1. PHP ini setting. 2. Time in seconds.
6814
- #: lib/wfScanEngine.php:2520
6815
  msgid "ini value of %1$d is higher than value for WORDFENCE_SCAN_MAX_INI_EXECUTION_TIME (%2$d), reducing"
6816
  msgstr ""
6817
 
6818
  #. translators: PHP ini setting.
6819
- #: lib/wfScanEngine.php:2530
6820
  msgid "getMaxExecutionTime() returning half ini value: %d"
6821
  msgstr ""
6822
 
6823
- #: lib/wfScanEngine.php:2536
6824
  msgid "getMaxExecutionTime() returning default of: 15"
6825
  msgstr ""
6826
 
6827
  #. translators: 1. HTTP status code.
6828
- #: lib/wfScanEngine.php:2738
6829
  msgid "Got error response from Wordfence servers: %s"
6830
  msgstr ""
6831
 
6832
- #: lib/wfScanEngine.php:2742
6833
  msgid "Invalid response from Wordfence servers."
6834
  msgstr ""
6835
 
@@ -6992,1364 +7317,1454 @@ msgstr ""
6992
  msgid "File last modified:"
6993
  msgstr ""
6994
 
6995
- #: lib/wordfenceClass.php:180
6996
  msgid ""
6997
  "To ensure uninterrupted Premium Wordfence protection on your site,\n"
6998
  "please renew your license by visiting http://www.wordfence.com/ Sign in, go to your dashboard,\n"
6999
  "select the license about to expire and click the button to renew that license."
7000
  msgstr ""
7001
 
7002
- #: lib/wordfenceClass.php:210
7003
  msgid "Your Premium Wordfence License is set to auto-renew in 10 days."
7004
  msgstr ""
7005
 
7006
- #: lib/wordfenceClass.php:211
7007
  msgid "To update your license settings please visit http://www.wordfence.com/zz9/dashboard"
7008
  msgstr ""
7009
 
7010
- #: lib/wordfenceClass.php:223
7011
  msgid "Your Premium Wordfence License expires in less than 2 weeks."
7012
  msgstr ""
7013
 
7014
- #: lib/wordfenceClass.php:226
7015
  msgid "Your Premium Wordfence License expires in less than a week."
7016
  msgstr ""
7017
 
7018
- #: lib/wordfenceClass.php:229
7019
  msgid "Your Premium Wordfence License expires in 2 days."
7020
  msgstr ""
7021
 
7022
- #: lib/wordfenceClass.php:232
7023
  msgid "Your Premium Wordfence License expires in 1 day."
7024
  msgstr ""
7025
 
7026
- #: lib/wordfenceClass.php:236
7027
  msgid "Your Wordfence Premium License has Expired!"
7028
  msgstr ""
7029
 
7030
- #: lib/wordfenceClass.php:267
7031
  msgid "The Wordfence Premium License in use on this site has been removed from your account."
7032
  msgstr ""
7033
 
7034
- #: lib/wordfenceClass.php:267
7035
  msgid "The license you were using has been removed from your account. Please reach out to billing@wordfence.com or create a Premium support case at https://support.wordfence.com/support/tickets for more information. Our staff is happy to help."
7036
  msgstr ""
7037
 
7038
  #. translators: Wordfence license key.
7039
- #: lib/wordfenceClass.php:273
7040
  msgid "Could not verify Wordfence License: %s"
7041
  msgstr ""
7042
 
7043
  #. translators: WordPress version.
7044
- #: lib/wordfenceClass.php:355
7045
  msgid "WordPress (v%s)"
7046
  msgstr ""
7047
 
7048
  #. translators: Number of plugins.
7049
- #: lib/wordfenceClass.php:359
7050
  msgid "%d plugin"
7051
  msgid_plural "%d plugins"
7052
  msgstr[0] ""
7053
  msgstr[1] ""
7054
 
7055
  #. translators: Number of themes.
7056
- #: lib/wordfenceClass.php:364
7057
  msgid "%d theme"
7058
  msgid_plural "%d themes"
7059
  msgstr[0] ""
7060
  msgstr[1] ""
7061
 
7062
- #: lib/wordfenceClass.php:368
7063
  msgid "An update is available for "
7064
  msgid_plural "Updates are available for "
7065
  msgstr[0] ""
7066
  msgstr[1] ""
7067
 
7068
- #: lib/wordfenceClass.php:373
7069
  msgid "and "
7070
  msgstr ""
7071
 
7072
  #. translators: Wordfence version.
7073
- #: lib/wordfenceClass.php:412
7074
  msgid "`runInstall` called with previous version = %s"
7075
  msgstr ""
7076
 
7077
- #: lib/wordfenceClass.php:464
7078
- #: lib/wordfenceClass.php:4025
7079
  msgid "Could not understand the response we received from the Wordfence servers when applying for a free license key."
7080
  msgstr ""
7081
 
7082
- #: lib/wordfenceClass.php:828
7083
  msgid "Automatically generated from previous country blocking settings"
7084
  msgstr ""
7085
 
7086
- #: lib/wordfenceClass.php:1259
7087
  msgid "Application passwords have been disabled by Wordfence."
7088
  msgstr ""
7089
 
7090
- #: lib/wordfenceClass.php:1370
7091
- #: lib/wordfenceClass.php:6598
7092
  msgid "Upgrade To Premium"
7093
  msgstr ""
7094
 
7095
- #: lib/wordfenceClass.php:1389
7096
  msgid "wp_mail from address is incomplete, attempting to fix"
7097
  msgstr ""
7098
 
7099
  #. translators: Email address.
7100
- #: lib/wordfenceClass.php:1399
7101
  msgid "Fixing wp_mail from address: %s"
7102
  msgstr ""
7103
 
7104
- #: lib/wordfenceClass.php:1492
7105
  msgid "You appear to have logged out or you are not an admin. Please sign-out and sign-in again."
7106
  msgstr ""
7107
 
7108
- #: lib/wordfenceClass.php:1497
7109
  msgid "Your browser sent an invalid security token to Wordfence. Please try reloading this page or signing out and in again."
7110
  msgstr ""
7111
 
7112
- #: lib/wordfenceClass.php:1503
7113
  msgid "Wordfence encountered an internal error executing that request."
7114
  msgstr ""
7115
 
7116
  #. translators: Error message.
7117
- #: lib/wordfenceClass.php:1609
7118
  msgid "2FA Migration Error: %s"
7119
  msgstr ""
7120
 
7121
- #: lib/wordfenceClass.php:1649
7122
  msgid "Please choose a stronger password. Try including numbers, symbols, and a mix of upper and lowercase letters and remove common words."
7123
  msgstr ""
7124
 
7125
- #: lib/wordfenceClass.php:1655
7126
  msgid "Passwords containing a space followed by \"wf\" without quotes are not allowed."
7127
  msgstr ""
7128
 
7129
  #. translators: Support URL.
7130
- #: lib/wordfenceClass.php:1670
7131
  msgid "Please choose a different password. The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. <a href=\"%s\">Learn More</a>"
7132
  msgstr ""
7133
 
7134
- #: lib/wordfenceClass.php:1798
7135
- #: lib/wordfenceClass.php:1981
 
 
 
 
 
7136
  msgid "Sorry but your browser sent an invalid security token when trying to use this form."
7137
  msgstr ""
7138
 
7139
- #: lib/wordfenceClass.php:1803
7140
  msgid "Please wait 3 minutes and try again"
7141
  msgstr ""
7142
 
7143
- #: lib/wordfenceClass.php:1804
7144
  msgid "You have used this form too much. Please wait 3 minutes and try again."
7145
  msgstr ""
7146
 
7147
- #: lib/wordfenceClass.php:1843
7148
  msgid "Unlock email requested"
7149
  msgstr ""
7150
 
7151
- #: lib/wordfenceClass.php:1845
7152
  msgid "Your request was received"
7153
  msgstr ""
7154
 
7155
  #. translators: Email address.
7156
- #: lib/wordfenceClass.php:1846
7157
  msgid "We received a request to email \"%s\" instructions to unlock their access. If that is the email address of a site administrator or someone on the Wordfence alert list, they have been emailed instructions on how to regain access to this system. The instructions we sent will expire 30 minutes from now."
7158
  msgstr ""
7159
 
7160
- #: lib/wordfenceClass.php:1852
7161
  msgid "Invalid key provided for authentication."
7162
  msgstr ""
7163
 
7164
- #: lib/wordfenceClass.php:1863
7165
  msgid "Request received via unlock email link to unblock all IPs."
7166
  msgstr ""
7167
 
7168
- #: lib/wordfenceClass.php:1872
7169
  msgid "Request received via unlock email link to unblock all IPs via disabling firewall rules."
7170
  msgstr ""
7171
 
7172
- #: lib/wordfenceClass.php:1880
7173
  msgid "Invalid function specified. Please check the link we emailed you and make sure it was not cut-off by your email reader."
7174
  msgstr ""
7175
 
7176
- #: lib/wordfenceClass.php:1925
7177
  msgid "Unsubscribe Requested"
7178
  msgstr ""
7179
 
7180
- #: lib/wordfenceClass.php:1987
7181
  msgid "An error occurred while saving the license."
7182
  msgstr ""
7183
 
7184
  #. translators: Error message.
7185
- #: lib/wordfenceClass.php:1989
7186
- #: lib/wordfenceClass.php:2009
7187
  msgid "An error occurred while saving the license: %s"
7188
  msgstr ""
7189
 
7190
- #: lib/wordfenceClass.php:2025
7191
  msgid "Rescheduled missing daily cron"
7192
  msgstr ""
7193
 
7194
- #: lib/wordfenceClass.php:2030
7195
  msgid "Rescheduled missing hourly cron"
7196
  msgstr ""
7197
 
7198
- #: lib/wordfenceClass.php:2384
7199
- #: lib/wordfenceClass.php:2388
7200
  msgid "Accessed a banned URL"
7201
  msgstr ""
7202
 
7203
- #: lib/wordfenceClass.php:2395
7204
- #: lib/wordfenceClass.php:2399
7205
  msgid "POST received with blank user-agent and referer"
7206
  msgstr ""
7207
 
7208
- #: lib/wordfenceClass.php:2533
7209
  msgid "<strong>ERROR</strong>: You can't register using that username"
7210
  msgstr ""
7211
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7212
  #. translators: 1. WordPress admin panel URL. 2. Support URL.
7213
- #: lib/wordfenceClass.php:2741
7214
- #: lib/wordfenceClass.php:2877
7215
- msgid "<strong>WARNING: </strong>The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href=\"%1$s\">change your password</a>. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More</a>"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7216
  msgstr ""
7217
 
7218
  #. translators: 1. Reset password URL. 2. Support URL.
7219
- #: lib/wordfenceClass.php:3032
7220
- #: lib/wordfenceClass.php:3068
7221
- msgid "<strong>WARNING: </strong>Your login has been allowed because you have previously logged in from the same IP, but you will be blocked if your IP changes. The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href=\"%1$s\">change your password</a>. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More</a>"
7222
  msgstr ""
7223
 
7224
- #. translators: WordPress username.
7225
  #: lib/wordfenceClass.php:3057
 
 
 
 
 
 
 
 
 
 
7226
  msgid "A user with username \"%s\" who has administrator access tried to sign in to your WordPress site. Access was denied because all administrator accounts are required to have Cellphone Sign-in enabled but this account does not."
7227
  msgstr ""
7228
 
7229
- #: lib/wordfenceClass.php:3098
 
 
 
 
 
7230
  msgid "Blocked by Wordfence Security Network"
7231
  msgstr ""
7232
 
7233
- #: lib/wordfenceClass.php:3128
7234
  msgid "Blocked by login security setting"
7235
  msgstr ""
7236
 
7237
  #. translators: WordPress username.
7238
- #: lib/wordfenceClass.php:3138
7239
  msgid "Used an invalid username '%s' to try to sign in"
7240
  msgstr ""
7241
 
7242
  #. translators: 1. Login attempt limit. 2. WordPress username.
7243
- #: lib/wordfenceClass.php:3157
7244
  msgid "Exceeded the maximum number of login failures which is: %1$s. The last username they tried to sign in with was: '%2$s'"
7245
  msgstr ""
7246
 
7247
- #: lib/wordfenceClass.php:3514
7248
  msgid "An invalid type was specified to get file."
7249
  msgstr ""
7250
 
7251
- #: lib/wordfenceClass.php:3530
7252
  msgid "We could not fetch a core WordPress file from the Wordfence API."
7253
  msgstr ""
7254
 
7255
- #: lib/wordfenceClass.php:3589
7256
  msgid "Wordfence Test Email"
7257
  msgstr ""
7258
 
7259
  #. translators: 1. Site URL. 2. IP address.
7260
- #: lib/wordfenceClass.php:3589
7261
  msgid ""
7262
  "This is a test email from %1$s.\n"
7263
  "The IP address that requested this was: %2$s"
7264
  msgstr ""
7265
 
7266
- #: lib/wordfenceClass.php:3596
7267
- msgid "Cellphone Sign-in is only available to paid members. <a href=\"https://www.wordfence.com/gnl1twoFac3/wordfence-signup/\" target=\"_blank\" rel=\"noopener noreferrer\">Click here to upgrade now.</a>"
7268
  msgstr ""
7269
 
7270
- #: lib/wordfenceClass.php:3603
7271
  msgid "The username you specified does not exist."
7272
  msgstr ""
7273
 
7274
- #: lib/wordfenceClass.php:3612
7275
  msgid "The username you specified is already enabled."
7276
  msgstr ""
7277
 
7278
- #: lib/wordfenceClass.php:3617
7279
  msgid "Unknown authentication mode."
7280
  msgstr ""
7281
 
7282
- #: lib/wordfenceClass.php:3622
7283
  msgid "The phone number you entered must start with a '+', then country code and then area code and number. For example, a number in the United States with country code '1' would look like this: +1-123-555-1234"
7284
  msgstr ""
7285
 
7286
  #. translators: Error message.
7287
- #: lib/wordfenceClass.php:3629
7288
- #: lib/wordfenceClass.php:3661
7289
- #: lib/wordfenceClass.php:3724
7290
  msgid "Could not contact Wordfence servers to generate a verification code: %s"
7291
  msgstr ""
7292
 
7293
  #. translators: Error message.
7294
- #: lib/wordfenceClass.php:3641
7295
- #: lib/wordfenceClass.php:3685
7296
  msgid "Could not generate verification code: %s"
7297
  msgstr ""
7298
 
7299
  #. translators: Error message.
7300
- #: lib/wordfenceClass.php:3642
7301
- #: lib/wordfenceClass.php:3686
7302
  msgid "We could not generate a verification code."
7303
  msgstr ""
7304
 
7305
- #: lib/wordfenceClass.php:3702
7306
  msgid "Unknown two-factor authentication mode."
7307
  msgstr ""
7308
 
7309
- #: lib/wordfenceClass.php:3735
7310
  msgid "The code you entered is invalid. Cellphone sign-in will not be enabled for this user until you enter a valid code."
7311
  msgstr ""
7312
 
7313
- #: lib/wordfenceClass.php:3740
7314
  msgid "We could not find the user you are trying to activate. They may have been removed from the list of Cellphone Sign-in users. Please reload this page."
7315
  msgstr ""
7316
 
7317
- #: lib/wordfenceClass.php:3822
7318
  msgid "That user has already been removed from the list."
7319
  msgstr ""
7320
 
7321
- #: lib/wordfenceClass.php:3842
7322
  msgid "No scan is scheduled"
7323
  msgstr ""
7324
 
7325
- #: lib/wordfenceClass.php:3847
7326
  msgid "Next scan is starting now"
7327
  msgstr ""
7328
 
7329
  #. translators: 1. Time until. 2. Localized date.
7330
- #: lib/wordfenceClass.php:3850
7331
  msgid "Next scan in %1$s (%2$s)"
7332
  msgstr ""
7333
 
7334
  #. translators: Localized date.
7335
- #: lib/wordfenceClass.php:3867
7336
  msgid "Scheduled Wordfence scan starting at %s"
7337
  msgstr ""
7338
 
7339
- #: lib/wordfenceClass.php:3890
7340
  msgid "Sorry but this feature is only available for paid customers."
7341
  msgstr ""
7342
 
7343
  #. translators: Site URL.
7344
- #: lib/wordfenceClass.php:3904
7345
  msgid "SITE: %s"
7346
  msgstr ""
7347
 
7348
  #. translators: Plugin version.
7349
- #: lib/wordfenceClass.php:3905
7350
  msgid "PLUGIN VERSION: %s"
7351
  msgstr ""
7352
 
7353
  #. translators: WordPress version.
7354
- #: lib/wordfenceClass.php:3906
7355
  msgid "WORDPRESS VERSION: %s"
7356
  msgstr ""
7357
 
7358
  #. translators: Wordfence license key.
7359
- #: lib/wordfenceClass.php:3907
7360
  msgid "LICENSE KEY: %s"
7361
  msgstr ""
7362
 
7363
  #. translators: Email address.
7364
- #: lib/wordfenceClass.php:3908
7365
  msgid "ADMIN EMAIL: %s"
7366
  msgstr ""
7367
 
7368
  #. translators: Email address.
7369
- #: lib/wordfenceClass.php:3909
7370
  msgid "LOG:"
7371
  msgstr ""
7372
 
7373
- #: lib/wordfenceClass.php:3925
7374
  msgid "# Scan Issues"
7375
  msgstr ""
7376
 
7377
  #. translators: Number of scan results.
7378
- #: lib/wordfenceClass.php:3930
7379
  msgid "## New Issues (%d total)"
7380
  msgstr ""
7381
 
7382
  #. translators: Number of scan results.
7383
- #: lib/wordfenceClass.php:3957
7384
  msgid "## Ignored Issues (%d total)"
7385
  msgstr ""
7386
 
7387
- #: lib/wordfenceClass.php:3978
7388
  msgid "No Ignored Issues"
7389
  msgstr ""
7390
 
7391
- #: lib/wordfenceClass.php:4000
7392
  msgid "Wordfence Activity Log"
7393
  msgstr ""
7394
 
7395
  #. translators: Error message.
7396
- #: lib/wordfenceClass.php:4028
7397
  msgid "Could not fetch free license key from Wordfence: %s"
7398
  msgstr ""
7399
 
7400
- #: lib/wordfenceClass.php:4113
7401
  msgid "We could not find your .htaccess file to modify it."
7402
  msgstr ""
7403
 
7404
  #. translators: Error message.
7405
- #: lib/wordfenceClass.php:4118
7406
  msgid "We found your .htaccess file but could not open it for writing: %s"
7407
  msgstr ""
7408
 
7409
- #: lib/wordfenceClass.php:4201
7410
  msgid "All Countries"
7411
  msgstr ""
7412
 
7413
- #: lib/wordfenceClass.php:4204
7414
  msgid "1 Country"
7415
  msgstr ""
7416
 
7417
  #. translators: Number of countries.
7418
- #: lib/wordfenceClass.php:4207
7419
  msgid "%d Countries"
7420
  msgstr ""
7421
 
7422
- #: lib/wordfenceClass.php:4211
7423
  msgid "Entire Site"
7424
  msgstr ""
7425
 
7426
- #: lib/wordfenceClass.php:4214
7427
  msgid "Login Only"
7428
  msgstr ""
7429
 
7430
- #: lib/wordfenceClass.php:4217
7431
  msgid "Site Except Login"
7432
  msgstr ""
7433
 
7434
- #: lib/wordfenceClass.php:4225
7435
  msgid "IP Range"
7436
  msgstr ""
7437
 
7438
  #. translators: 2FA backup codes.
7439
- #: lib/wordfenceClass.php:4226
7440
- #: lib/wordfenceClass.php:6178
7441
  msgid "User Agent"
7442
  msgstr ""
7443
 
7444
- #: lib/wordfenceClass.php:4227
7445
  #: views/blocking/blocking-create.php:201
7446
  msgid "Referrer"
7447
  msgstr ""
7448
 
7449
- #: lib/wordfenceClass.php:4242
7450
  msgid "Permanent"
7451
  msgstr ""
7452
 
7453
- #: lib/wordfenceClass.php:4314
7454
  msgid "An error occurred while creating the block."
7455
  msgstr ""
7456
 
7457
- #: lib/wordfenceClass.php:4320
7458
  msgid "No block parameters were provided."
7459
  msgstr ""
7460
 
7461
- #: lib/wordfenceClass.php:4357
7462
- #: lib/wordfenceClass.php:4389
7463
  msgid "No blocks were provided."
7464
  msgstr ""
7465
 
7466
- #: lib/wordfenceClass.php:4421
7467
  msgid "The license provided is already in use on another site."
7468
  msgstr ""
7469
 
7470
- #: lib/wordfenceClass.php:4426
7471
  msgid "The Wordfence activation server returned an unexpected response. Please try again."
7472
  msgstr ""
7473
 
7474
- #: lib/wordfenceClass.php:4432
7475
  msgid "We received an error while trying to activate the license with the Wordfence servers: "
7476
  msgstr ""
7477
 
7478
- #: lib/wordfenceClass.php:4445
7479
  msgid "No license was provided to install."
7480
  msgstr ""
7481
 
7482
- #: lib/wordfenceClass.php:4496
7483
  msgid "An unknown configuration section was provided."
7484
  msgstr ""
7485
 
7486
- #: lib/wordfenceClass.php:4502
7487
  msgid "No configuration section was provided."
7488
  msgstr ""
7489
 
7490
- #: lib/wordfenceClass.php:4548
7491
- #: lib/wordfenceClass.php:4553
7492
  msgid "An error occurred while saving the configuration."
7493
  msgstr ""
7494
 
7495
- #: lib/wordfenceClass.php:4564
7496
  msgid "No configuration changes were provided to save."
7497
  msgstr ""
7498
 
7499
- #: lib/wordfenceClass.php:4595
7500
- #: lib/wordfenceClass.php:5220
7501
- #: lib/wordfenceClass.php:5251
7502
- #: lib/wordfenceClass.php:7230
7503
- #: lib/wordfenceClass.php:7265
7504
- #: lib/wordfenceClass.php:7297
7505
  msgid "We could not find that issue in our database."
7506
  msgstr ""
7507
 
7508
- #: lib/wordfenceClass.php:4605
7509
  msgid "An error occurred while trying to hide the file."
7510
  msgstr ""
7511
 
7512
- #: lib/wordfenceClass.php:4618
7513
  msgid "An invalid file was requested for hiding."
7514
  msgstr ""
7515
 
7516
- #: lib/wordfenceClass.php:4645
7517
- #: lib/wordfenceClass.php:5231
7518
  msgid "You don't have permission to repair .htaccess. You need to either fix the file manually using FTP or change the file permissions and ownership so that your web server has write access to repair the file."
7519
  msgstr ""
7520
 
7521
- #: lib/wordfenceClass.php:4669
7522
  msgid "Manual permanent block by admin"
7523
  msgstr ""
7524
 
7525
- #: lib/wordfenceClass.php:4705
7526
  msgid "Please enter a valid IP address to block."
7527
  msgstr ""
7528
 
7529
- #: lib/wordfenceClass.php:4708
7530
  msgid "You can't block your own IP address."
7531
  msgstr ""
7532
 
7533
  #. translators: IP address.
7534
- #: lib/wordfenceClass.php:4712
7535
  msgid "The IP address %s is allowlisted and can't be blocked. You can remove this IP from the allowlist on the Wordfence options page."
7536
  msgstr ""
7537
 
7538
  #. translators: IP address.
7539
- #: lib/wordfenceClass.php:4714
7540
  msgid "The IP address %s 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."
7541
  msgstr ""
7542
 
7543
- #: lib/wordfenceClass.php:4720
7544
  msgid "The IP address you're trying to block belongs to Google. Your options are currently set to not block these crawlers. Change this in Wordfence options if you want to manually block Google."
7545
  msgstr ""
7546
 
7547
- #: lib/wordfenceClass.php:4763
7548
  msgid "An invalid operation was called."
7549
  msgstr ""
7550
 
7551
- #: lib/wordfenceClass.php:4773
7552
  msgid "An invalid status was specified when trying to update that issue."
7553
  msgstr ""
7554
 
7555
- #: lib/wordfenceClass.php:4785
7556
  msgid "Scan stop request received."
7557
  msgstr ""
7558
 
7559
- #: lib/wordfenceClass.php:4786
7560
  msgid "A request was received to stop the previous scan."
7561
  msgstr ""
7562
 
7563
- #: lib/wordfenceClass.php:4835
7564
  msgid "Idle"
7565
  msgstr ""
7566
 
7567
  #. translators: Localized date.
7568
- #: lib/wordfenceClass.php:4844
7569
  msgid "Scan completed on %s"
7570
  msgstr ""
7571
 
7572
- #: lib/wordfenceClass.php:4851
7573
  msgid "Last scan failed"
7574
  msgstr ""
7575
 
7576
  #. translators: Time until.
7577
- #: lib/wordfenceClass.php:4914
7578
  msgid "more than %s"
7579
  msgstr ""
7580
 
7581
  #. translators: Localized date.
7582
- #: lib/wordfenceClass.php:4918
7583
  msgid "The current scan looks like it has failed. Its last status update was <span id=\"wf-scan-failed-time-ago\">%s</span> ago. You may continue to wait in case it resumes or stop and restart the scan. Some sites may need adjustments to run scans reliably."
7584
  msgstr ""
7585
 
7586
  #. translators: Localized date.
7587
- #: lib/wordfenceClass.php:4918
7588
- #: lib/wordfenceClass.php:4926
7589
- #: lib/wordfenceClass.php:4945
7590
- #: lib/wordfenceClass.php:4957
7591
- #: lib/wordfenceClass.php:4965
7592
  msgid "Click here for steps you can try."
7593
  msgstr ""
7594
 
7595
  #. translators: Localized date.
7596
- #: lib/wordfenceClass.php:4919
7597
  msgid "Cancel Scan"
7598
  msgstr ""
7599
 
7600
- #: lib/wordfenceClass.php:4926
7601
  msgid "The previous scan has failed. Some sites may need adjustments to run scans reliably."
7602
  msgstr ""
7603
 
7604
  #. translators: Time limit (number).
7605
- #: lib/wordfenceClass.php:4932
7606
  msgid "The previous scan has terminated because the time limit of %s was reached. This limit can be customized on the options page."
7607
  msgstr ""
7608
 
7609
- #: lib/wordfenceClass.php:4938
7610
  msgid "The previous scan has terminated because we detected an update occurring during the scan."
7611
  msgstr ""
7612
 
7613
- #: lib/wordfenceClass.php:4945
7614
  msgid "The scan has failed to start. This is often because the site either cannot make outbound requests or is blocked from connecting to itself."
7615
  msgstr ""
7616
 
7617
- #: lib/wordfenceClass.php:4951
7618
  msgid "Scans are not functional because SSL is unavailable."
7619
  msgstr ""
7620
 
7621
- #: lib/wordfenceClass.php:4957
7622
  msgid "The scan has failed because we were unable to contact the Wordfence servers. Some sites may need adjustments to run scans reliably."
7623
  msgstr ""
7624
 
7625
- #: lib/wordfenceClass.php:4965
7626
  msgid "The scan has failed because we received an unexpected response from the Wordfence servers. This may be a temporary error, though some sites may need adjustments to run scans reliably."
7627
  msgstr ""
7628
 
7629
- #: lib/wordfenceClass.php:4992
7630
  msgid "Invalid email address given."
7631
  msgstr ""
7632
 
7633
- #: lib/wordfenceClass.php:5017
7634
- #: lib/wordfenceClass.php:5142
7635
  msgid "Deleting an infected wp-config.php file must be done outside of Wordfence. The wp-config.php file contains your database credentials, which you will need to restore normal site operations. Your site will NOT function once the wp-config.php file has been deleted."
7636
  msgstr ""
7637
 
7638
  #. translators: 1. File path. 2. Error message.
7639
- #: lib/wordfenceClass.php:5026
7640
  msgid "Could not delete file %1$s. Error was: %2$s"
7641
  msgstr ""
7642
 
7643
  #. translators: File path.
7644
- #: lib/wordfenceClass.php:5050
7645
  msgid "We could not retrieve the original file of %s to do a repair."
7646
  msgstr ""
7647
 
7648
  #. translators: File path.
7649
- #: lib/wordfenceClass.php:5055
7650
  msgid "An invalid file %s was specified for repair."
7651
  msgstr ""
7652
 
7653
  #. translators: File path.
7654
- #: lib/wordfenceClass.php:5063
7655
  msgid "You don't have permission to repair %s. You need to either fix the file manually using FTP or change the file permissions and ownership so that your web server has write access to repair the file."
7656
  msgstr ""
7657
 
7658
  #. translators: 1. File path. 2. Error message.
7659
- #: lib/wordfenceClass.php:5066
7660
  msgid "We could not write to %1$s. The error was: %2$s"
7661
  msgstr ""
7662
 
7663
  #. translators: 1. File path. 2. Number of bytes.
7664
- #: lib/wordfenceClass.php:5077
7665
  msgid "We could not write to %1$s. (%2$d bytes written) You may not have permission to modify files on your WordPress server."
7666
  msgstr ""
7667
 
7668
- #: lib/wordfenceClass.php:5089
7669
  msgid "Deleted some files with errors"
7670
  msgstr ""
7671
 
7672
- #: lib/wordfenceClass.php:5089
7673
  msgid "Repaired some files with errors"
7674
  msgstr ""
7675
 
7676
  #. translators: 1. Number of files. 2. Error message.
7677
- #: lib/wordfenceClass.php:5092
7678
  msgid "Deleted %1$d files but we encountered the following errors with other files: %2$s"
7679
  msgstr ""
7680
 
7681
  #. translators: 1. Number of files. 2. Error message.
7682
- #: lib/wordfenceClass.php:5094
7683
  msgid "Repaired %1$d files but we encountered the following errors with other files: %2$s"
7684
  msgstr ""
7685
 
7686
  #. translators: Number of files.
7687
- #: lib/wordfenceClass.php:5098
7688
  msgid "Deleted %d files successfully"
7689
  msgstr ""
7690
 
7691
  #. translators: Number of files.
7692
- #: lib/wordfenceClass.php:5098
7693
  msgid "Repaired %d files successfully"
7694
  msgstr ""
7695
 
7696
  #. translators: Number of files.
7697
- #: lib/wordfenceClass.php:5099
7698
  msgid "Deleted %d files successfully. No errors were encountered."
7699
  msgstr ""
7700
 
7701
  #. translators: Number of files.
7702
- #: lib/wordfenceClass.php:5099
7703
  msgid "Repaired %d files successfully. No errors were encountered."
7704
  msgstr ""
7705
 
7706
- #: lib/wordfenceClass.php:5102
7707
  msgid "Could not delete files"
7708
  msgstr ""
7709
 
7710
- #: lib/wordfenceClass.php:5102
7711
  msgid "Could not repair files"
7712
  msgstr ""
7713
 
7714
  #. translators: Error message.
7715
- #: lib/wordfenceClass.php:5105
7716
  msgid "We could not delete any of the files you selected. We encountered the following errors: %s"
7717
  msgstr ""
7718
 
7719
  #. translators: Error message.
7720
- #: lib/wordfenceClass.php:5107
7721
  msgid "We could not repair any of the files you selected. We encountered the following errors: %s"
7722
  msgstr ""
7723
 
7724
- #: lib/wordfenceClass.php:5110
7725
  msgid "Nothing done"
7726
  msgstr ""
7727
 
7728
- #: lib/wordfenceClass.php:5111
7729
  msgid "We didn't delete anything and no errors were found."
7730
  msgstr ""
7731
 
7732
- #: lib/wordfenceClass.php:5111
7733
  msgid "We didn't repair anything and no errors were found."
7734
  msgstr ""
7735
 
7736
- #: lib/wordfenceClass.php:5119
7737
  msgid "Invalid bulk operation selected"
7738
  msgstr ""
7739
 
7740
- #: lib/wordfenceClass.php:5129
7741
  msgid "Could not delete file because we could not find that issue."
7742
  msgstr ""
7743
 
7744
- #: lib/wordfenceClass.php:5132
7745
  msgid "Could not delete file because that issue does not appear to be a file related issue."
7746
  msgstr ""
7747
 
7748
- #: lib/wordfenceClass.php:5138
7749
  msgid "An invalid file was requested for deletion."
7750
  msgstr ""
7751
 
7752
  #. translators: 1. File path. 2. Error message.
7753
- #: lib/wordfenceClass.php:5181
7754
  msgid "Could not delete file %1$s. The error was: %2$s"
7755
  msgstr ""
7756
 
7757
- #: lib/wordfenceClass.php:5194
7758
  msgid "Could not remove the option because we could not find that issue."
7759
  msgstr ""
7760
 
7761
- #: lib/wordfenceClass.php:5197
7762
  msgid "Could not remove the option because that issue does not appear to be a database related issue."
7763
  msgstr ""
7764
 
7765
  #. translators: 1. WordPress option. 2. Error message.
7766
- #: lib/wordfenceClass.php:5210
7767
  msgid "Could not remove the option %1$s. The error was: %2$s"
7768
  msgstr ""
7769
 
7770
- #: lib/wordfenceClass.php:5237
7771
  msgid "Modifying the .htaccess file did not resolve the issue, so the original .htaccess file was restored. You can fix this manually by setting <code>display_errors</code> to <code>Off</code> in your php.ini if your site is on a VPS or dedicated server that you control."
7772
  msgstr ""
7773
 
7774
- #: lib/wordfenceClass.php:5279
7775
  msgid "We could not get the original file to do a repair."
7776
  msgstr ""
7777
 
7778
- #: lib/wordfenceClass.php:5283
7779
  msgid "An invalid file was specified for repair."
7780
  msgstr ""
7781
 
7782
- #: lib/wordfenceClass.php:5298
7783
  msgid "We could not write to that file. You may not have permission to modify files on your WordPress server."
7784
  msgstr ""
7785
 
7786
- #: lib/wordfenceClass.php:5302
7787
  msgid "Ajax request received to start scan."
7788
  msgstr ""
7789
 
7790
  #. translators: Number of URLs.
7791
- #: lib/wordfenceClass.php:5357
7792
  msgid "Page contains %d malware URL: "
7793
  msgid_plural "Page contains %d malware URLs: "
7794
  msgstr[0] ""
7795
  msgstr[1] ""
7796
 
7797
- #: lib/wordfenceClass.php:5360
7798
  msgid "Run a Scan"
7799
  msgstr ""
7800
 
7801
- #: lib/wordfenceClass.php:5408
7802
  msgid "Unknown dashboard data set."
7803
  msgstr ""
7804
 
7805
- #: lib/wordfenceClass.php:5439
7806
  msgid "Bad security token. It may have been more than 12 hours since you reloaded the page you came from. Try reloading the page you came from. If that doesn't work, please sign out and sign-in again."
7807
  msgstr ""
7808
 
7809
- #: lib/wordfenceClass.php:5626
7810
  msgid "An invalid IP address was specified."
7811
  msgstr ""
7812
 
7813
- #: lib/wordfenceClass.php:5679
7814
- #: lib/wordfenceClass.php:5719
7815
- #: lib/wordfenceClass.php:5757
7816
  msgid "File access blocked. (WORDFENCE_DISABLE_FILE_VIEWER is true)"
7817
  msgstr ""
7818
 
7819
- #: lib/wordfenceClass.php:5684
7820
- #: lib/wordfenceClass.php:5762
7821
  msgid "Invalid file requested. (Relative paths not allowed)"
7822
  msgstr ""
7823
 
7824
- #: lib/wordfenceClass.php:5688
7825
- #: lib/wordfenceClass.php:5723
7826
- #: lib/wordfenceClass.php:5766
7827
  msgid "File contains illegal characters."
7828
  msgstr ""
7829
 
7830
  #. translators: Error message.
7831
- #: lib/wordfenceClass.php:5698
7832
  msgid "We could not open the requested file for reading. The error was: %s"
7833
  msgstr ""
7834
 
7835
- #: lib/wordfenceClass.php:5706
7836
  msgid "Greater than 2 Gigs"
7837
  msgstr ""
7838
 
7839
- #: lib/wordfenceClass.php:5711
7840
  msgid "Unknown file size."
7841
  msgstr ""
7842
 
7843
- #: lib/wordfenceClass.php:5732
7844
  msgid "We could not get the contents of the original file to do a comparison."
7845
  msgstr ""
7846
 
7847
- #: lib/wordfenceClass.php:5770
7848
  msgid "File does not exist."
7849
  msgstr ""
7850
 
7851
- #: lib/wordfenceClass.php:6020
7852
  #: views/dashboard/options-group-import.php:167
7853
  msgid "Reload"
7854
  msgstr ""
7855
 
7856
- #: lib/wordfenceClass.php:6037
7857
  msgid "${totalIPs} addresses in this network"
7858
  msgstr ""
7859
 
7860
  #. translators: 1. Description of firewall action. 2. Description of input parameters.
7861
- #: lib/wordfenceClass.php:6038
7862
  msgid "%s in POST body: %s"
7863
  msgstr ""
7864
 
7865
  #. translators: 1. Description of firewall action. 2. Description of input parameters.
7866
- #: lib/wordfenceClass.php:6039
7867
  msgid "%s in cookie: %s"
7868
  msgstr ""
7869
 
7870
  #. translators: 1. Description of firewall action. 2. Description of input parameters.
7871
- #: lib/wordfenceClass.php:6040
7872
  msgid "%s in file: %s"
7873
  msgstr ""
7874
 
7875
  #. translators: 1. Description of firewall action. 2. Description of input parameters.
7876
- #: lib/wordfenceClass.php:6041
7877
  msgid "%s in query string: %s"
7878
  msgstr ""
7879
 
7880
  #. translators: Domain name.
7881
- #: lib/wordfenceClass.php:6042
7882
  msgid "%s is not valid hostname"
7883
  msgstr ""
7884
 
7885
  #. translators: Domain name.
7886
- #: lib/wordfenceClass.php:6043
7887
  msgid ".htaccess Updated"
7888
  msgstr ""
7889
 
7890
- #: lib/wordfenceClass.php:6044
7891
  msgid ".htaccess change"
7892
  msgstr ""
7893
 
7894
- #: lib/wordfenceClass.php:6045
7895
  msgid "404 Not Found"
7896
  msgstr ""
7897
 
7898
- #: lib/wordfenceClass.php:6046
7899
  msgid "Activity Log Sent"
7900
  msgstr ""
7901
 
7902
- #: lib/wordfenceClass.php:6047
7903
  msgid "Add action to allowlist"
7904
  msgstr ""
7905
 
7906
- #: lib/wordfenceClass.php:6048
7907
  msgid "Add code to .htaccess"
7908
  msgstr ""
7909
 
7910
- #: lib/wordfenceClass.php:6049
7911
  msgid "All Hits"
7912
  msgstr ""
7913
 
7914
  #. translators: WordPress username.
7915
- #: lib/wordfenceClass.php:6050
7916
  msgid "All capabilties of admin user %s were successfully revoked."
7917
  msgstr ""
7918
 
7919
- #: lib/wordfenceClass.php:6052
7920
  msgid "An error occurred when adding the request to the allowlist."
7921
  msgstr ""
7922
 
7923
- #: lib/wordfenceClass.php:6053
7924
  msgid "Are you sure you want to allowlist this action?"
7925
  msgstr ""
7926
 
7927
- #: lib/wordfenceClass.php:6054
7928
  msgid "Authentication Code"
7929
  msgstr ""
7930
 
7931
- #: lib/wordfenceClass.php:6055
7932
  msgid "Background Request Blocked"
7933
  msgstr ""
7934
 
7935
- #: lib/wordfenceClass.php:6056
7936
  msgid "Block This Network"
7937
  msgstr ""
7938
 
7939
- #: lib/wordfenceClass.php:6058
7940
  msgid "Blocked By Firewall"
7941
  msgstr ""
7942
 
7943
- #: lib/wordfenceClass.php:6059
7944
  msgid "Blocked WAF"
7945
  msgstr ""
7946
 
7947
- #: lib/wordfenceClass.php:6060
7948
  msgid "Blocked by Wordfence"
7949
  msgstr ""
7950
 
7951
- #: lib/wordfenceClass.php:6061
7952
  msgid "Blocked by Wordfence plugin settings"
7953
  msgstr ""
7954
 
7955
- #: lib/wordfenceClass.php:6062
7956
  msgid "Blocked by the Wordfence Application Firewall and plugin settings"
7957
  msgstr ""
7958
 
7959
- #: lib/wordfenceClass.php:6063
7960
  msgid "Blocked by the Wordfence Security Network"
7961
  msgstr ""
7962
 
7963
- #: lib/wordfenceClass.php:6064
7964
  msgid "Blocked by the Wordfence Web Application Firewall"
7965
  msgstr ""
7966
 
7967
- #: lib/wordfenceClass.php:6067
7968
  msgid "Cellphone Sign-In Recovery Codes"
7969
  msgstr ""
7970
 
7971
- #: lib/wordfenceClass.php:6068
7972
  msgid "Cellphone Sign-in activated for user."
7973
  msgstr ""
7974
 
7975
- #: lib/wordfenceClass.php:6069
7976
  msgid "Click here to download a backup copy of this file now"
7977
  msgstr ""
7978
 
7979
- #: lib/wordfenceClass.php:6070
7980
  msgid "Click here to download a backup copy of your .htaccess file now"
7981
  msgstr ""
7982
 
7983
- #: lib/wordfenceClass.php:6071
7984
  msgid "Click to fix .htaccess"
7985
  msgstr ""
7986
 
7987
- #: lib/wordfenceClass.php:6073
7988
  msgid "Crawlers"
7989
  msgstr ""
7990
 
7991
- #: lib/wordfenceClass.php:6074
7992
  msgid "Diagnostic report has been sent successfully."
7993
  msgstr ""
7994
 
7995
- #: lib/wordfenceClass.php:6075
7996
  msgid "Directory Listing Disabled"
7997
  msgstr ""
7998
 
7999
- #: lib/wordfenceClass.php:6076
8000
  msgid "Directory listing has been disabled on your server."
8001
  msgstr ""
8002
 
8003
- #: lib/wordfenceClass.php:6079
8004
  msgid "Don't ask again"
8005
  msgstr ""
8006
 
8007
- #: lib/wordfenceClass.php:6081
8008
  msgid "Download Backup File"
8009
  msgstr ""
8010
 
8011
- #: lib/wordfenceClass.php:6082
8012
  msgid "Each line of 16 letters and numbers is a single recovery code, with optional spaces for readability. When typing your password, enter \"wf\" followed by the entire code like \"mypassword wf1234 5678 90AB CDEF\". If your site shows a separate prompt for entering a code after entering only your username and password, enter only the code like \"1234 5678 90AB CDEF\". Your recovery codes are:"
8013
  msgstr ""
8014
 
8015
- #: lib/wordfenceClass.php:6083
8016
  msgid "Email Diagnostic Report"
8017
  msgstr ""
8018
 
8019
- #: lib/wordfenceClass.php:6084
8020
  msgid "Email Wordfence Activity Log"
8021
  msgstr ""
8022
 
8023
- #: lib/wordfenceClass.php:6086
8024
  msgid "Enter the email address you would like to send the Wordfence activity log to. Note that the activity log may contain thousands of lines of data. This log is usually only sent to a member of the Wordfence support team. It also contains your PHP configuration from the phpinfo() function for diagnostic data."
8025
  msgstr ""
8026
 
8027
- #: lib/wordfenceClass.php:6087
8028
  msgid "Error"
8029
  msgstr ""
8030
 
8031
- #: lib/wordfenceClass.php:6088
8032
  msgid "Error Enabling All Options Page"
8033
  msgstr ""
8034
 
8035
- #: lib/wordfenceClass.php:6089
8036
  msgid "Error Restoring Defaults"
8037
  msgstr ""
8038
 
8039
- #: lib/wordfenceClass.php:6090
8040
  msgid "Error Saving Option"
8041
  msgstr ""
8042
 
8043
- #: lib/wordfenceClass.php:6091
8044
  msgid "Error Saving Options"
8045
  msgstr ""
8046
 
8047
- #: lib/wordfenceClass.php:6092
8048
  msgid "Failed Login"
8049
  msgstr ""
8050
 
8051
- #: lib/wordfenceClass.php:6093
8052
  msgid "Failed Login: Invalid Username"
8053
  msgstr ""
8054
 
8055
- #: lib/wordfenceClass.php:6094
8056
  msgid "Failed Login: Valid Username"
8057
  msgstr ""
8058
 
8059
- #: lib/wordfenceClass.php:6095
8060
  msgid "File hidden successfully"
8061
  msgstr ""
8062
 
8063
- #: lib/wordfenceClass.php:6096
8064
  msgid "File restored OK"
8065
  msgstr ""
8066
 
8067
- #: lib/wordfenceClass.php:6097
8068
  msgid "Filter Traffic"
8069
  msgstr ""
8070
 
8071
- #: lib/wordfenceClass.php:6098
8072
  msgid "Firewall Response"
8073
  msgstr ""
8074
 
8075
- #: lib/wordfenceClass.php:6099
8076
  #: views/scanner/issue-wpscan_fullPathDiscl.php:8
8077
  msgid "Full Path Disclosure"
8078
  msgstr ""
8079
 
8080
- #: lib/wordfenceClass.php:6100
8081
  msgid "Google Bot"
8082
  msgstr ""
8083
 
8084
- #: lib/wordfenceClass.php:6101
8085
  msgid "Google Crawlers"
8086
  msgstr ""
8087
 
8088
- #: lib/wordfenceClass.php:6102
8089
  msgid "HTTP Response Code"
8090
  msgstr ""
8091
 
8092
- #: lib/wordfenceClass.php:6104
8093
  msgid "Humans"
8094
  msgstr ""
8095
 
8096
- #: lib/wordfenceClass.php:6106
8097
  msgid "Key:"
8098
  msgstr ""
8099
 
8100
  #. translators: Localized date.
8101
- #: lib/wordfenceClass.php:6107
8102
  msgid "Last Updated: %s"
8103
  msgstr ""
8104
 
8105
  #. translators: Localized date.
8106
- #: lib/wordfenceClass.php:6108
8107
  msgid "Learn more about repairing modified files."
8108
  msgstr ""
8109
 
8110
- #: lib/wordfenceClass.php:6110
8111
  msgid "Locked Out"
8112
  msgstr ""
8113
 
8114
- #: lib/wordfenceClass.php:6111
8115
  msgid "Locked out from logging in"
8116
  msgstr ""
8117
 
8118
- #: lib/wordfenceClass.php:6112
8119
  msgid "Logged In"
8120
  msgstr ""
8121
 
8122
- #: lib/wordfenceClass.php:6113
8123
  msgid "Logins"
8124
  msgstr ""
8125
 
8126
- #: lib/wordfenceClass.php:6114
8127
  msgid "Logins and Logouts"
8128
  msgstr ""
8129
 
8130
  #. translators: Localized date.
8131
- #: lib/wordfenceClass.php:6117
8132
  msgid "Next Update Check: %s"
8133
  msgstr ""
8134
 
8135
  #. translators: Localized date.
8136
- #: lib/wordfenceClass.php:6118
8137
  msgid "No activity to report yet. Please complete your first scan."
8138
  msgstr ""
8139
 
8140
- #: lib/wordfenceClass.php:6119
8141
  msgid "No issues have been ignored."
8142
  msgstr ""
8143
 
8144
- #: lib/wordfenceClass.php:6120
8145
  msgid "No new issues have been found."
8146
  msgstr ""
8147
 
8148
- #: lib/wordfenceClass.php:6121
8149
  msgid "No rules were updated. Please verify you have permissions to write to the /wp-content/wflogs directory."
8150
  msgstr ""
8151
 
8152
- #: lib/wordfenceClass.php:6122
8153
  msgid "No rules were updated. Please verify your website can reach the Wordfence servers."
8154
  msgstr ""
8155
 
8156
- #: lib/wordfenceClass.php:6123
8157
  msgid "No rules were updated. Your website has reached the maximum number of rule update requests. Please try again later."
8158
  msgstr ""
8159
 
8160
- #: lib/wordfenceClass.php:6124
8161
  msgid "Note: Status will update when changes are saved"
8162
  msgstr ""
8163
 
8164
- #: lib/wordfenceClass.php:6125
8165
  msgid "OK"
8166
  msgstr ""
8167
 
8168
- #: lib/wordfenceClass.php:6126
8169
  msgid "Pages Not Found"
8170
  msgstr ""
8171
 
8172
- #: lib/wordfenceClass.php:6127
8173
  msgid "Paid Members Only"
8174
  msgstr ""
8175
 
8176
- #: lib/wordfenceClass.php:6129
8177
  msgid "Please enter a valid email address."
8178
  msgstr ""
8179
 
8180
- #: lib/wordfenceClass.php:6130
8181
  msgid "Please include your support ticket number or forum username."
8182
  msgstr ""
8183
 
8184
- #: lib/wordfenceClass.php:6131
8185
  msgid "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:"
8186
  msgstr ""
8187
 
8188
- #: lib/wordfenceClass.php:6132
8189
  msgid "Please specify a reason"
8190
  msgstr ""
8191
 
8192
- #: lib/wordfenceClass.php:6133
8193
  msgid "Please specify a valid IP address range in the form of \"1.2.3.4 - 1.2.3.5\" without quotes. Make sure the dash between the IP addresses in a normal dash (a minus sign on your keyboard) and not another character that looks like a dash."
8194
  msgstr ""
8195
 
8196
- #: lib/wordfenceClass.php:6134
8197
  msgid "Please specify either an IP address range, Hostname or a web browser pattern to match."
8198
  msgstr ""
8199
 
8200
- #: lib/wordfenceClass.php:6135
8201
  msgid "Recent Activity"
8202
  msgstr ""
8203
 
8204
- #: lib/wordfenceClass.php:6136
8205
  msgid "Recovery Codes"
8206
  msgstr ""
8207
 
8208
- #: lib/wordfenceClass.php:6137
8209
  msgid "Redirected"
8210
  msgstr ""
8211
 
8212
- #: lib/wordfenceClass.php:6138
8213
  msgid "Redirected by Country Blocking bypass URL"
8214
  msgstr ""
8215
 
8216
- #: lib/wordfenceClass.php:6139
8217
  msgid "Referer"
8218
  msgstr ""
8219
 
8220
- #: lib/wordfenceClass.php:6140
8221
  msgid "Registered Users"
8222
  msgstr ""
8223
 
8224
- #: lib/wordfenceClass.php:6142
8225
  msgid "Rule Update Failed"
8226
  msgstr ""
8227
 
8228
- #: lib/wordfenceClass.php:6143
8229
  msgid "Rules Updated"
8230
  msgstr ""
8231
 
8232
- #: lib/wordfenceClass.php:6145
8233
  msgid "Scan Complete."
8234
  msgstr ""
8235
 
8236
- #: lib/wordfenceClass.php:6146
8237
  msgid "Scan the code below with your authenticator app to add this account. Some authenticator apps also allow you to type in the text version instead."
8238
  msgstr ""
8239
 
8240
- #: lib/wordfenceClass.php:6147
8241
  msgid "Security Event"
8242
  msgstr ""
8243
 
8244
- #: lib/wordfenceClass.php:6148
8245
  msgid "Send"
8246
  msgstr ""
8247
 
8248
- #: lib/wordfenceClass.php:6149
8249
  msgid "Sorry, but no data for that IP or domain was found."
8250
  msgstr ""
8251
 
8252
- #: lib/wordfenceClass.php:6150
8253
  msgid "Specify a valid IP range"
8254
  msgstr ""
8255
 
8256
- #: lib/wordfenceClass.php:6151
8257
  msgid "Specify a valid hostname"
8258
  msgstr ""
8259
 
8260
- #: lib/wordfenceClass.php:6152
8261
  msgid "Specify an IP range, Hostname or Browser pattern"
8262
  msgstr ""
8263
 
8264
- #: lib/wordfenceClass.php:6153
8265
  msgid "Success deleting file"
8266
  msgstr ""
8267
 
8268
- #: lib/wordfenceClass.php:6154
8269
  msgid "Success removing option"
8270
  msgstr ""
8271
 
8272
- #: lib/wordfenceClass.php:6155
8273
  msgid "Success restoring file"
8274
  msgstr ""
8275
 
8276
- #: lib/wordfenceClass.php:6156
8277
  msgid "Success updating option"
8278
  msgstr ""
8279
 
8280
- #: lib/wordfenceClass.php:6157
8281
  msgid "Successfully deleted admin"
8282
  msgstr ""
8283
 
8284
- #: lib/wordfenceClass.php:6158
8285
  msgid "Successfully revoked admin"
8286
  msgstr ""
8287
 
8288
- #: lib/wordfenceClass.php:6159
8289
  msgid "Test Email Sent"
8290
  msgstr ""
8291
 
8292
- #: lib/wordfenceClass.php:6160
8293
  msgid "The 'How does Wordfence get IPs' option was successfully updated to the recommended value."
8294
  msgstr ""
8295
 
8296
- #: lib/wordfenceClass.php:6161
8297
  msgid "The Full Path disclosure issue has been fixed"
8298
  msgstr ""
8299
 
8300
  #. translators: WordPress username.
8301
- #: lib/wordfenceClass.php:6162
8302
  msgid "The admin user %s was successfully deleted."
8303
  msgstr ""
8304
 
8305
  #. translators: File path.
8306
- #: lib/wordfenceClass.php:6163
8307
  msgid "The file %s was successfully deleted."
8308
  msgstr ""
8309
 
8310
  #. translators: File path.
8311
- #: lib/wordfenceClass.php:6164
8312
  msgid "The file %s was successfully hidden from public view."
8313
  msgstr ""
8314
 
8315
  #. translators: File path.
8316
- #: lib/wordfenceClass.php:6165
8317
  msgid "The file %s was successfully restored."
8318
  msgstr ""
8319
 
8320
  #. translators: WordPress option.
8321
- #: lib/wordfenceClass.php:6166
8322
  msgid "The option %s was successfully removed."
8323
  msgstr ""
8324
 
8325
  #. translators: WordPress option.
8326
- #: lib/wordfenceClass.php:6167
8327
  msgid "The request has been allowlisted. Please try it again."
8328
  msgstr ""
8329
 
8330
- #: lib/wordfenceClass.php:6168
8331
  msgid "There was an error while sending the email."
8332
  msgstr ""
8333
 
8334
- #: lib/wordfenceClass.php:6169
8335
  msgid "This will be shown only once. Keep these codes somewhere safe."
8336
  msgstr ""
8337
 
8338
- #: lib/wordfenceClass.php:6170
8339
  msgid "Throttled"
8340
  msgstr ""
8341
 
8342
- #: lib/wordfenceClass.php:6171
8343
  msgid "Two Factor Status"
8344
  msgstr ""
8345
 
8346
  #. translators: HTTP client type.
8347
- #: lib/wordfenceClass.php:6173
8348
  msgid "Type: %s"
8349
  msgstr ""
8350
 
8351
  #. translators: HTTP client type.
8352
- #: lib/wordfenceClass.php:6174
8353
  #: views/scanner/issue-checkGSB.php:8
8354
  #: views/scanner/issue-commentBadURL.php:8
8355
  #: views/scanner/issue-configReadable.php:12
@@ -8369,567 +8784,577 @@ msgstr ""
8369
  msgid "URL"
8370
  msgstr ""
8371
 
8372
- #: lib/wordfenceClass.php:6175
8373
  msgid "Unable to automatically hide file"
8374
  msgstr ""
8375
 
8376
  #. translators: 2FA backup codes.
8377
- #: lib/wordfenceClass.php:6176
8378
  msgid "Use one of these %s codes to log in if you are unable to access your phone. Codes are 16 characters long, plus optional spaces. Each one may be used only once."
8379
  msgstr ""
8380
 
8381
  #. translators: 2FA backup codes.
8382
- #: lib/wordfenceClass.php:6177
8383
  msgid "Use one of these %s codes to log in if you lose access to your authenticator device. Codes are 16 characters long, plus optional spaces. Each one may be used only once."
8384
  msgstr ""
8385
 
8386
- #: lib/wordfenceClass.php:6179
8387
  msgid "User ID"
8388
  msgstr ""
8389
 
8390
- #: lib/wordfenceClass.php:6181
8391
  msgid "WHOIS LOOKUP"
8392
  msgstr ""
8393
 
8394
- #: lib/wordfenceClass.php:6182
8395
  msgid "We are about to change your <em>.htaccess</em> file. Please make a backup of this file before proceeding."
8396
  msgstr ""
8397
 
8398
  #. translators: Error message.
8399
- #: lib/wordfenceClass.php:6183
8400
  msgid "We can't modify your .htaccess file for you because: %s"
8401
  msgstr ""
8402
 
8403
  #. translators: Error message.
8404
- #: lib/wordfenceClass.php:6184
8405
  msgid "We encountered a problem"
8406
  msgstr ""
8407
 
8408
  #. translators: URL.
8409
- #: lib/wordfenceClass.php:6185
8410
  msgid "Wordfence Firewall blocked a background request to WordPress for the URL %s. If this occurred as a result of an intentional action, you may consider allowlisting the request to allow it in the future."
8411
  msgstr ""
8412
 
8413
  #. translators: URL.
8414
- #: lib/wordfenceClass.php:6186
8415
  msgid "Wordfence is working..."
8416
  msgstr ""
8417
 
8418
- #: lib/wordfenceClass.php:6187
8419
- msgid "You are using Nginx as your web server. You'll need to disable autoindexing in your nginx.conf. See the <a target='_blank' rel='noopener noreferrer' href='http://nginx.org/en/docs/http/ngx_http_autoindex_module.html'>Nginx docs for more info</a> on how to do this."
8420
  msgstr ""
8421
 
8422
- #: lib/wordfenceClass.php:6188
8423
  msgid "You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually delete or hide those files."
8424
  msgstr ""
8425
 
8426
- #: lib/wordfenceClass.php:6189
8427
  msgid "You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually modify your php.ini to disable <em>display_error</em>"
8428
  msgstr ""
8429
 
8430
- #: lib/wordfenceClass.php:6190
8431
  msgid "You forgot to include a reason you're blocking this IP range. We ask you to include this for your own record keeping."
8432
  msgstr ""
8433
 
8434
- #: lib/wordfenceClass.php:6191
8435
  msgid "You have unsaved changes to your options. If you leave this page, those changes will be lost."
8436
  msgstr ""
8437
 
8438
- #: lib/wordfenceClass.php:6192
8439
  msgid "Your .htaccess has been updated successfully. Please verify your site is functioning normally."
8440
  msgstr ""
8441
 
8442
  #. translators: Email address.
8443
- #: lib/wordfenceClass.php:6193
8444
  msgid "Your Wordfence activity log was sent to %s"
8445
  msgstr ""
8446
 
8447
  #. translators: Email address.
8448
- #: lib/wordfenceClass.php:6194
8449
  msgid "Your rules have been updated successfully."
8450
  msgstr ""
8451
 
8452
- #: lib/wordfenceClass.php:6195
8453
  msgid "Your rules have been updated successfully. You are currently using the free version of Wordfence. Upgrade to Wordfence premium to have your rules updated automatically as new threats emerge. <a href=\"https://www.wordfence.com/wafUpdateRules1/wordfence-signup/\">Click here to purchase a premium license</a>. <em>Note: Your rules will still update every 30 days as a free user.</em>"
8454
  msgstr ""
8455
 
8456
  #. translators: wp_mail() return value.
8457
- #: lib/wordfenceClass.php:6196
8458
  msgid "Your test email was sent to the requested email address. The result we received from the WordPress wp_mail() function was: %s<br /><br />A 'True' result means WordPress thinks the mail was sent without errors. A 'False' result means that WordPress encountered an error sending your mail. Note that it's possible to get a 'True' response with an error elsewhere in your mail system that may cause emails to not be delivered."
8459
  msgstr ""
8460
 
8461
  #. translators: wp_mail() return value.
8462
- #: lib/wordfenceClass.php:6197
8463
  msgid "blocked by firewall"
8464
  msgstr ""
8465
 
8466
  #. translators: Reason for firewall action.
8467
- #: lib/wordfenceClass.php:6198
8468
  msgid "blocked by firewall for %s"
8469
  msgstr ""
8470
 
8471
  #. translators: Reason for firewall action.
8472
- #: lib/wordfenceClass.php:6199
8473
  msgid "blocked by real-time IP blocklist"
8474
  msgstr ""
8475
 
8476
- #: lib/wordfenceClass.php:6200
8477
  msgid "blocked by the Wordfence Security Network"
8478
  msgstr ""
8479
 
8480
  #. translators: Reason for firewall action.
8481
- #: lib/wordfenceClass.php:6201
8482
  msgid "blocked for %s"
8483
  msgstr ""
8484
 
8485
  #. translators: Reason for firewall action.
8486
- #: lib/wordfenceClass.php:6202
8487
  msgid "locked out from logging in"
8488
  msgstr ""
8489
 
8490
- #: lib/wordfenceClass.php:6215
8491
  msgid "Wordfence generated an error on activation. The output we received during activation was:"
8492
  msgstr ""
8493
 
8494
- #: lib/wordfenceClass.php:6222
8495
  msgid "Wordfence could not register with the Wordfence scanning servers when it activated."
8496
  msgstr ""
8497
 
8498
- #: lib/wordfenceClass.php:6223
8499
  msgid "You can try to fix this by deactivating Wordfence and then activating it again, so Wordfence will retry registering for you. If you keep seeing this error, it usually means your WordPress server can't connect to our scanning servers, or your wfConfig database table cannot be created to save the key. You can try asking your host to allow your server to connect to noc1.wordfence.com or check the wfConfig database table and database privileges."
8500
  msgstr ""
8501
 
8502
- #: lib/wordfenceClass.php:6237
8503
  msgid "The Wordfence Web Application Firewall cannot run."
8504
  msgstr ""
8505
 
8506
  #. translators: 1. WordPress admin panel URL. 2. Support URL.
8507
- #: lib/wordfenceClass.php:6240
8508
- msgid "The configuration files are corrupt or inaccessible by the web server, which is preventing the WAF from functioning. Please verify the web server has permission to access the configuration files. You may also try to rebuild the configuration file by <a href=\"%1$s\">clicking here</a>. It will automatically resume normal operation when it is fixed. <a class=\"wfhelp\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"%2$s\"></a>"
8509
  msgstr ""
8510
 
8511
- #: lib/wordfenceClass.php:6246
8512
  msgid "The WAF storage engine is currently set to mysqli, but Wordfence is unable to use the database. The WAF will fall back to using local file system storage instead."
8513
  msgstr ""
8514
 
8515
- #: lib/wordfenceClass.php:6259
8516
- #: lib/wordfenceClass.php:6278
8517
  msgid "The Wordfence Web Application Firewall needs a configuration update."
8518
  msgstr ""
8519
 
8520
  #. translators: 1. WordPress admin panel URL. 2. Support URL.
8521
- #: lib/wordfenceClass.php:6262
8522
- msgid "It is currently configured to use an older version of PHP and may become deactivated if PHP is updated. You may perform the configuration update automatically by <a href=\"%1$s\">clicking here</a>. <a class=\"wfhelp\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"%2$s\"></a>"
8523
  msgstr ""
8524
 
8525
  #. translators: 1. WordPress admin panel URL. 2. Support URL.
8526
- #: lib/wordfenceClass.php:6281
8527
- msgid "It is not currently in extended protection mode but was configured to use an older version of PHP and may have become deactivated when PHP was updated. You may perform the configuration update automatically by <a href=\"%1$s\">clicking here</a> or use the \"Optimize the Wordfence Firewall\" button on the Firewall Options page. <a class=\"wfhelp\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"%2$s\"></a>"
8528
  msgstr ""
8529
 
8530
- #: lib/wordfenceClass.php:6287
8531
  msgid "The Wordfence Web Application Firewall is in read-only mode."
8532
  msgstr ""
8533
 
8534
- #: lib/wordfenceClass.php:6296
8535
  msgid "This site is currently using PHP's built in REMOTE_ADDR."
8536
  msgstr ""
8537
 
8538
- #: lib/wordfenceClass.php:6299
8539
  msgid "This site is currently using the X-Forwarded-For HTTP header, which should only be used when the site is behind a front-end proxy that outputs this header."
8540
  msgstr ""
8541
 
8542
- #: lib/wordfenceClass.php:6302
8543
  msgid "This site is currently using the X-Real-IP HTTP header, which should only be used when the site is behind a front-end proxy that outputs this header."
8544
  msgstr ""
8545
 
8546
- #: lib/wordfenceClass.php:6305
8547
  msgid "This site is currently using the Cloudflare \"CF-Connecting-IP\" HTTP header, which should only be used when the site is behind Cloudflare."
8548
  msgstr ""
8549
 
8550
- #: lib/wordfenceClass.php:6322
8551
  msgid "Your 'How does Wordfence get IPs' setting is misconfigured."
8552
  msgstr ""
8553
 
8554
- #: lib/wordfenceClass.php:6324
8555
  msgid "Click here to use the recommended setting"
8556
  msgstr ""
8557
 
8558
- #: lib/wordfenceClass.php:6326
8559
  #: views/onboarding/fresh-install.php:39
8560
  msgid "or"
8561
  msgstr ""
8562
 
8563
- #: lib/wordfenceClass.php:6328
8564
  msgid "visit the options page"
8565
  msgstr ""
8566
 
8567
- #: lib/wordfenceClass.php:6330
8568
  msgid "to manually update it."
8569
  msgstr ""
8570
 
8571
- #: lib/wordfenceClass.php:6338
8572
  msgid "Do you want Wordfence to stay up-to-date automatically?"
8573
  msgstr ""
8574
 
8575
- #: lib/wordfenceClass.php:6340
8576
  msgid "Yes, enable auto-update."
8577
  msgstr ""
8578
 
8579
- #: lib/wordfenceClass.php:6342
8580
  msgid "No thanks."
8581
  msgstr ""
8582
 
 
 
 
 
8583
  #. translators: Localized date.
8584
- #: lib/wordfenceClass.php:6431
8585
  msgid "The last rules update for the Wordfence Web Application Firewall was unsuccessful. The last successful update check was %s, so this site may be missing new rules added since then."
8586
  msgstr ""
8587
 
8588
  #. translators: 1. Localized date. 2. WordPress admin panel URL.
8589
- #: lib/wordfenceClass.php:6439
8590
  msgid "You may wait for the next automatic attempt at %1$s or try to <a href=\"%2$s\">Manually Update</a> by clicking the \"Manually Refresh Rules\" button below the Rules list."
8591
  msgstr ""
8592
 
8593
  #. translators: WordPress admin panel URL.
8594
- #: lib/wordfenceClass.php:6445
8595
  msgid "You may wait for the next automatic attempt or try to <a href=\"%s\">Manually Update</a> by clicking the \"Manually Refresh Rules\" button below the Rules list."
8596
  msgstr ""
8597
 
8598
  #. translators: WordPress admin panel URL.
8599
- #: lib/wordfenceClass.php:6450
8600
  msgid "You may wait for the next automatic attempt at %s or log into the parent site to manually update by clicking the \"Manually Refresh Rules\" button below the Rules list."
8601
  msgstr ""
8602
 
8603
- #: lib/wordfenceClass.php:6453
8604
  msgid "You may wait for the next automatic attempt or log into the parent site to manually update by clicking the \"Manually Refresh Rules\" button below the Rules list."
8605
  msgstr ""
8606
 
8607
- #: lib/wordfenceClass.php:6556
8608
  #: models/page/wfPage.php:101
8609
  msgid "Dashboard"
8610
  msgstr ""
8611
 
8612
  #. translators: Number of notifications.
8613
- #: lib/wordfenceClass.php:6636
8614
  msgid "You have %d new Wordfence notification."
8615
  msgid_plural "You have %d new Wordfence notifications."
8616
  msgstr[0] ""
8617
  msgstr[1] ""
8618
 
8619
- #: lib/wordfenceClass.php:6660
8620
  msgid "JavaScript Errors"
8621
  msgstr ""
8622
 
8623
- #: lib/wordfenceClass.php:6666
8624
  msgid "Malware URLs"
8625
  msgstr ""
8626
 
8627
  #. translators: WordPress admin panel URL.
8628
- #: lib/wordfenceClass.php:6784
8629
- #: lib/wordfenceClass.php:6847
8630
  msgid "<a href=\"%s\">Click here</a> to rebuild the configuration file."
8631
  msgstr ""
8632
 
8633
  #. translators: File path.
8634
- #: lib/wordfenceClass.php:6795
8635
- #: lib/wordfenceClass.php:6858
8636
  msgid "We were unable to write to %s which the WAF uses for storage. Please update permissions on the parent directory so the web server can write to it."
8637
  msgstr ""
8638
 
8639
- #: lib/wordfenceClass.php:6805
8640
- #: lib/wordfenceClass.php:6868
8641
  msgid "An error occured when fetching the WAF configuration from the database."
8642
  msgstr ""
8643
 
8644
  #. translators: Plugin name.
8645
- #: lib/wordfenceClass.php:6890
8646
  msgid "The Wordfence Live Traffic feature has been disabled because you have %s active which is not compatible with Wordfence Live Traffic."
8647
  msgstr ""
8648
 
8649
  #. translators: 1. Plugin name.
8650
- #: lib/wordfenceClass.php:6892
8651
  msgid "If you want to reenable Wordfence Live Traffic, you need to deactivate %1$s and then go to the Wordfence options page and reenable Live Traffic there. Wordfence does work with %1$s, however Live Traffic will be disabled and the Wordfence firewall will also count less hits per visitor because of the %1$s caching function. All other functions should work correctly."
8652
  msgstr ""
8653
 
8654
  #. translators: File path.
8655
- #: lib/wordfenceClass.php:6953
8656
  msgid "The file <code>%s</code> was restored successfully."
8657
  msgstr ""
8658
 
8659
- #: lib/wordfenceClass.php:6958
8660
  msgid "There was an error restoring the file."
8661
  msgstr ""
8662
 
8663
- #: lib/wordfenceClass.php:6968
8664
- #: lib/wordfenceClass.php:6991
8665
  msgid "Return to scan results"
8666
  msgstr ""
8667
 
8668
  #. translators: File path.
8669
- #: lib/wordfenceClass.php:6977
8670
  msgid "The file <code>%s</code> was deleted successfully."
8671
  msgstr ""
8672
 
8673
- #: lib/wordfenceClass.php:6981
8674
  msgid "There was an error deleting the file."
8675
  msgstr ""
8676
 
8677
  #. translators: IP address.
8678
- #: lib/wordfenceClass.php:7049
8679
  msgid ""
8680
  "User IP: %s\n"
8681
  ""
8682
  msgstr ""
8683
 
8684
  #. translators: Domain name.
8685
- #: lib/wordfenceClass.php:7052
8686
  msgid ""
8687
  "User hostname: %s\n"
8688
  ""
8689
  msgstr ""
8690
 
8691
- #: lib/wordfenceClass.php:7056
8692
  msgid "User location: "
8693
  msgstr ""
8694
 
8695
  #. translators: WordPress admin panel URL.
8696
- #: lib/wordfenceClass.php:7111
8697
  msgid "No longer an administrator for this site? Click here to stop receiving security alerts: %s"
8698
  msgstr ""
8699
 
8700
- #: lib/wordfenceClass.php:7151
8701
  msgid "The IP you provided must be in dotted quad notation or use ranges with square brackets. e.g. 10.11.12.13 or 10.11.12.[1-50]"
8702
  msgstr ""
8703
 
8704
- #: lib/wordfenceClass.php:7170
8705
  msgid "Invalid email address provided"
8706
  msgstr ""
8707
 
8708
- #: lib/wordfenceClass.php:7175
8709
  msgid "Test email sent successfully"
8710
  msgstr ""
8711
 
8712
- #: lib/wordfenceClass.php:7176
8713
  msgid "Test email failed to send"
8714
  msgstr ""
8715
 
8716
  #. translators: Localized date range.
8717
- #: lib/wordfenceClass.php:7194
8718
  msgid "Wordfence activity in the past %s"
8719
  msgstr ""
8720
 
8721
- #: lib/wordfenceClass.php:7234
8722
- #: lib/wordfenceClass.php:7238
8723
- #: lib/wordfenceClass.php:7269
8724
  msgid "We could not find that user in the database."
8725
  msgstr ""
8726
 
8727
- #: lib/wordfenceClass.php:7242
8728
  msgid "This user's email is the network admin email. It will need to be changed before deleting this user."
8729
  msgstr ""
8730
 
8731
- #: lib/wordfenceClass.php:7306
8732
  msgid "Wordfence could not find your .htaccess file."
8733
  msgstr ""
8734
 
8735
- #: lib/wordfenceClass.php:7322
8736
  msgid "Updating the .htaccess did not fix the issue. You may need to add <code>Options -Indexes</code> to your httpd.conf if using Apache, or find documentation on how to disable directory listing for your web server."
8737
  msgstr ""
8738
 
8739
- #: lib/wordfenceClass.php:7328
8740
  msgid "There was an error writing to your .htaccess file."
8741
  msgstr ""
8742
 
8743
- #: lib/wordfenceClass.php:7407
8744
  msgid "Required parameters not sent."
8745
  msgstr ""
8746
 
8747
- #: lib/wordfenceClass.php:7417
8748
  msgid "The WAF is currently in read-only mode and will not save any configuration changes."
8749
  msgstr ""
8750
 
8751
- #: lib/wordfenceClass.php:7455
8752
  #: views/waf/option-whitelist.php:60
8753
  msgid "Allowlisted via Firewall Options page"
8754
  msgstr ""
8755
 
8756
- #: lib/wordfenceClass.php:7742
8757
  msgid "Allowlisted via Live Traffic"
8758
  msgstr ""
8759
 
8760
- #: lib/wordfenceClass.php:7906
8761
- #: lib/wordfenceClass.php:8003
8762
  msgid "A valid server configuration was not provided."
8763
  msgstr ""
8764
 
8765
- #: lib/wordfenceClass.php:7917
8766
- #: lib/wordfenceClass.php:8024
8767
  msgid "Filesystem Credentials Required"
8768
  msgstr ""
8769
 
8770
  #. translators: Support URL.
8771
- #: lib/wordfenceClass.php:7919
8772
- #: lib/wordfenceClass.php:7943
8773
- #: lib/wordfenceClass.php:7987
8774
- msgid "If you cannot complete the setup process, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"%s\">click here for help</a>"
 
8775
  msgstr ""
8776
 
8777
  #. translators: Support URL.
8778
- #: lib/wordfenceClass.php:7920
8779
  msgid "Once you have entered credentials, click Continue to complete the setup."
8780
  msgstr ""
8781
 
8782
- #: lib/wordfenceClass.php:7941
8783
- #: lib/wordfenceClass.php:8049
8784
  msgid "Filesystem Permission Error"
8785
  msgstr ""
8786
 
8787
- #: lib/wordfenceClass.php:7967
8788
  msgid "Manual Installation Instructions"
8789
  msgstr ""
8790
 
8791
- #: lib/wordfenceClass.php:7974
8792
  msgid "Installation Successful"
8793
  msgstr ""
8794
 
8795
- #: lib/wordfenceClass.php:7985
8796
  msgid "Installation Failed"
8797
  msgstr ""
8798
 
8799
  #. translators: Support URL.
8800
- #: lib/wordfenceClass.php:8026
8801
- #: lib/wordfenceClass.php:8051
8802
- #: lib/wordfenceClass.php:8082
8803
- #: lib/wordfenceClass.php:8111
8804
- #: lib/wordfenceClass.php:8157
8805
- #: views/waf/waf-uninstall.php:13
8806
- msgid "If you cannot complete the uninstall process, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"%s\">click here for help</a>"
8807
  msgstr ""
8808
 
8809
  #. translators: Support URL.
8810
- #: lib/wordfenceClass.php:8027
8811
  msgid "Once you have entered credentials, click Continue to complete uninstallation."
8812
  msgstr ""
8813
 
8814
- #: lib/wordfenceClass.php:8071
8815
  msgid "The <code>auto_prepend_file</code> setting has been successfully removed from <code>.htaccess</code> and <code>.user.ini</code>. Once this change takes effect, Extended Protection Mode will be disabled."
8816
  msgstr ""
8817
 
8818
- #: lib/wordfenceClass.php:8073
8819
  msgid "Any previous value for <code>auto_prepend_file</code> will need to be re-enabled manually if still needed."
8820
  msgstr ""
8821
 
8822
  #. translators: Time until.
8823
- #: lib/wordfenceClass.php:8077
8824
  msgid "Waiting for it to take effect. This may take up to %s."
8825
  msgstr ""
8826
 
8827
- #: lib/wordfenceClass.php:8080
8828
  msgid "Waiting for Changes"
8829
  msgstr ""
8830
 
8831
- #: lib/wordfenceClass.php:8102
8832
  msgid "Extended Protection Mode has not been disabled. This may be because <code>auto_prepend_file</code> is configured somewhere else or the value is still cached by PHP."
8833
  msgstr ""
8834
 
8835
- #: lib/wordfenceClass.php:8104
8836
  msgid "Retrying Failed."
8837
  msgstr ""
8838
 
8839
- #: lib/wordfenceClass.php:8106
8840
  msgid "Try Again"
8841
  msgstr ""
8842
 
8843
- #: lib/wordfenceClass.php:8109
8844
  msgid "Unable to Uninstall"
8845
  msgstr ""
8846
 
8847
- #: lib/wordfenceClass.php:8145
8848
  msgid "Uninstallation Complete"
8849
  msgstr ""
8850
 
8851
- #: lib/wordfenceClass.php:8155
8852
  msgid "Uninstallation Failed"
8853
  msgstr ""
8854
 
8855
  #. translators: 1. Number of attacks/blocks. 2. Time since.
8856
- #: lib/wordfenceClass.php:8309
8857
  msgid "The Wordfence Web Application Firewall has blocked %1$d attacks over the last %2$s. Below is a sample of these recent attacks:"
8858
  msgstr ""
8859
 
8860
- #: lib/wordfenceClass.php:8873
8861
  msgid "To make your site as secure as possible, take a moment to optimize the Wordfence Web Application Firewall:"
8862
  msgstr ""
8863
 
8864
- #: lib/wordfenceClass.php:8873
8865
  msgid "Click here to configure"
8866
  msgstr ""
8867
 
8868
- #. translators: Support URL.
8869
- #: lib/wordfenceClass.php:8876
8870
- msgid "If you cannot complete the setup process, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"%s\">click here for help</a>."
8871
- msgstr ""
8872
-
8873
- #: lib/wordfenceClass.php:8882
8874
  #: views/waf/waf-install-success.php:14
8875
  msgid "Nice work! The firewall is now optimized."
8876
  msgstr ""
8877
 
8878
- #: lib/wordfenceClass.php:8884
8879
- #: lib/wordfenceClass.php:8896
8880
  #: views/waf/waf-install-success.php:16
8881
  #: views/waf/waf-uninstall-success.php:19
8882
  msgid "The changes have not yet taken effect. If you are using LiteSpeed or IIS as your web server or CGI/FastCGI interface, you may need to wait a few minutes for the changes to take effect since the configuration files are sometimes cached. You also may need to select a different server configuration in order to complete this step, but wait for a few minutes before trying. You can try refreshing this page."
8883
  msgstr ""
8884
 
8885
- #: lib/wordfenceClass.php:8890
8886
  #: views/waf/waf-uninstall-success.php:15
8887
  msgid "Uninstallation was successful!"
8888
  msgstr ""
8889
 
8890
- #: lib/wordfenceClass.php:8893
8891
  #: views/waf/waf-uninstall-success.php:17
8892
  msgid "Uninstallation from this site was successful! The Wordfence Firewall is still active because it is installed in another WordPress installation."
8893
  msgstr ""
8894
 
8895
- #: lib/wordfenceClass.php:8901
8896
  msgid "The update was successful!"
8897
  msgstr ""
8898
 
8899
- #: lib/wordfenceClass.php:9028
8900
  msgid "Auth grant is invalid."
8901
  msgstr ""
8902
 
8903
- #: lib/wordfenceClass.php:9091
8904
- #: lib/wordfenceClass.php:9228
 
 
 
 
 
 
 
 
 
 
 
8905
  msgid "Access token not found."
8906
  msgstr ""
8907
 
8908
- #: lib/wordfenceClass.php:9136
8909
- #: lib/wordfenceClass.php:9203
8910
  msgid "Invalid response from Wordfence Central."
8911
  msgstr ""
8912
 
8913
- #: lib/wordfenceClass.php:9179
8914
  msgid "Auth grant not found."
8915
  msgstr ""
8916
 
8917
- #: lib/wordfenceClass.php:9445
8918
  msgid "We were unable to create the <code>wordfence-waf.php</code> file in the root of the WordPress installation. It's possible WordPress cannot write to the <code>wordfence-waf.php</code> file because of file permissions. Please verify the permissions are correct and retry the installation."
8919
  msgstr ""
8920
 
8921
- #: lib/wordfenceClass.php:9537
8922
  #: lib/wordfenceClass.php:9608
 
8923
  msgid "We were unable to make changes to the .htaccess file. It's possible WordPress cannot write to the .htaccess file because of file permissions, which may have been set by another security plugin, or you may have set them manually. Please verify the permissions allow the web server to write to the file, and retry the installation."
8924
  msgstr ""
8925
 
8926
  #. translators: File path.
8927
- #: lib/wordfenceClass.php:9578
8928
- #: lib/wordfenceClass.php:9626
8929
  msgid "We were unable to make changes to the %1$s file. It's possible WordPress cannot write to the %1$s file because of file permissions. Please verify the permissions are correct and retry the installation."
8930
  msgstr ""
8931
 
8932
- #: lib/wordfenceClass.php:9642
8933
  msgid "We were unable to remove the <code>wordfence-waf.php</code> file in the root of the WordPress installation. It's possible WordPress cannot remove the <code>wordfence-waf.php</code> file because of file permissions. Please verify the permissions are correct and retry the removal."
8934
  msgstr ""
8935
 
@@ -9131,7 +9556,7 @@ msgstr ""
9131
 
9132
  #. translators: 1. Plugin name. 2. Plugin version. 3. Support URL.
9133
  #: lib/wordfenceHash.php:533
9134
- msgid "This file belongs to plugin \"%1$s\" version \"%2$s\" and has been modified from the file that is distributed by WordPress.org for this version. Please use the link to see how the file has changed. If you have modified this file yourself, you can safely ignore this warning. If you see a lot of changed files in a plugin that have been made by the author, then try uninstalling and reinstalling the plugin to force an upgrade. Doing this is a workaround for plugin authors who don't manage their code correctly. <a href=\"%3$s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More</a>"
9135
  msgstr ""
9136
 
9137
  #. translators: File path.
@@ -9141,7 +9566,7 @@ msgstr ""
9141
 
9142
  #. translators: 1. Plugin name. 2. Plugin version. 3. Support URL.
9143
  #: lib/wordfenceHash.php:579
9144
- msgid "This file belongs to theme \"%1$s\" version \"%2$s\" and has been modified from the original distribution. It is common for site owners to modify their theme files, so if you have modified this file yourself you can safely ignore this warning. <a href=\"%3$s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More</a>"
9145
  msgstr ""
9146
 
9147
  #. translators: File path.
@@ -9167,7 +9592,7 @@ msgstr ""
9167
 
9168
  #. translators: Support URL.
9169
  #: lib/wordfenceHash.php:650
9170
- msgid "This file is in a WordPress core location but is not distributed with this version of WordPress. This scan often includes files left over from a previous WordPress version, but it may also find files added by another plugin, files added by your host, or malicious files added by an attacker. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More</a>"
9171
  msgstr ""
9172
 
9173
  #. translators: 1. Number of files. 2. Data in bytes.
@@ -9192,7 +9617,7 @@ msgstr ""
9192
 
9193
  #. translators: Number of files.
9194
  #: lib/wordfenceHash.php:763
9195
- msgid "<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More</a>"
9196
  msgstr ""
9197
 
9198
  #: lib/wordfenceScanner.php:87
@@ -9204,7 +9629,7 @@ msgid "Wordfence received malformed attack signature patterns from the scanning
9204
  msgstr ""
9205
 
9206
  #: lib/wordfenceScanner.php:102
9207
- msgid "A regex Wordfence received from its servers is invalid. The pattern is: "
9208
  msgstr ""
9209
 
9210
  #. translators: PHP ini setting (number).
@@ -9303,7 +9728,7 @@ msgstr ""
9303
 
9304
  #. translators: 1. Malware signature matched text. 2. Malicious URL. 3. Malicious URL.
9305
  #: lib/wordfenceScanner.php:526
9306
- msgid "This file contains a suspected malware URL listed on Google's list of malware sites. Wordfence decodes %1$s when scanning files so the URL may not be visible if you view this file. The URL is: %2$s - More info available at <a href=\"http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%3$s&client=googlechrome&hl=en-US\" target=\"_blank\" rel=\"noopener noreferrer\">Google Safe Browsing diagnostic page</a>."
9307
  msgstr ""
9308
 
9309
  #: lib/wordfenceScanner.php:547
@@ -9327,34 +9752,29 @@ msgstr ""
9327
  msgid "Scanned contents of %1$d additional files at %2$.2f per second"
9328
  msgstr ""
9329
 
9330
- #. translators: URL
9331
- #: lib/wordfenceURLHoover.php:130
9332
- msgid "Found protocol-relative URL: %s"
9333
- msgstr ""
9334
-
9335
- #: lib/wordfenceURLHoover.php:188
9336
  msgid "Gathering host keys."
9337
  msgstr ""
9338
 
9339
- #: lib/wordfenceURLHoover.php:195
9340
  msgid "Using MySQLi directly."
9341
  msgstr ""
9342
 
9343
  #. translators: Number of domains.
9344
- #: lib/wordfenceURLHoover.php:233
9345
  msgid "Checking %d host keys against Wordfence scanning servers."
9346
  msgstr ""
9347
 
9348
- #: lib/wordfenceURLHoover.php:235
9349
  msgid "Done host key check."
9350
  msgstr ""
9351
 
9352
  #. translators: 1. Number of URLs. 2. Number of files.
9353
- #: lib/wordfenceURLHoover.php:319
9354
  msgid "Checking %1$d URLs from %2$d sources."
9355
  msgstr ""
9356
 
9357
- #: lib/wordfenceURLHoover.php:324
9358
  msgid "Done URL check."
9359
  msgstr ""
9360
 
@@ -9396,7 +9816,7 @@ msgstr ""
9396
 
9397
  #. translators: Support URL
9398
  #: models/block/wfBlock.php:180
9399
- 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>"
9400
  msgstr ""
9401
 
9402
  #: models/block/wfBlock.php:183
@@ -9463,6 +9883,12 @@ msgstr ""
9463
  msgid "Repair the Wordfence Firewall configuration."
9464
  msgstr ""
9465
 
 
 
 
 
 
 
9466
  #: models/firewall/wfFirewall.php:452
9467
  msgid "Enable Firewall."
9468
  msgstr ""
@@ -9542,6 +9968,12 @@ msgstr ""
9542
  msgid "Enable Premium Reputation Checks."
9543
  msgstr ""
9544
 
 
 
 
 
 
 
9545
  #: models/scanner/wfScanner.php:820
9546
  msgid "Enable scan option to check if this website is being \"Spamvertised\"."
9547
  msgstr ""
@@ -9639,6 +10071,14 @@ msgstr ""
9639
  msgid "Unblocking"
9640
  msgstr ""
9641
 
 
 
 
 
 
 
 
 
9642
  #: views/blocking/blocking-create.php:13
9643
  msgid "Block<span class=\"wf-hidden-xs\"> this IP Address</span>"
9644
  msgstr ""
@@ -9689,7 +10129,7 @@ msgstr ""
9689
 
9690
  #. translators: Support URL
9691
  #: views/blocking/blocking-create.php:149
9692
- msgid "If you use Google Ads, blocking countries from accessing the entire site is not recommended. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More</a>"
9693
  msgstr ""
9694
 
9695
  #: views/blocking/blocking-create.php:153
@@ -9754,6 +10194,18 @@ msgstr ""
9754
  msgid "Block<span class=\"wf-hidden-xs\"> Visitors Matching this</span> Pattern"
9755
  msgstr ""
9756
 
 
 
 
 
 
 
 
 
 
 
 
 
9757
  #: views/blocking/blocking-status.php:15
9758
  msgid "Manage global blocking options."
9759
  msgstr ""
@@ -9885,6 +10337,10 @@ msgstr ""
9885
  msgid "Go to"
9886
  msgstr ""
9887
 
 
 
 
 
9888
  #: views/common/status-tooltip.php:19
9889
  #: views/common/status-tooltip.php:30
9890
  msgid "How does Wordfence determine this?"
@@ -9959,6 +10415,10 @@ msgstr ""
9959
  msgid "Detected IP(s):"
9960
  msgstr ""
9961
 
 
 
 
 
9962
  #: views/dashboard/option-howgetips.php:34
9963
  msgid "Edit trusted proxies"
9964
  msgstr ""
@@ -10215,11 +10675,11 @@ msgid "Review"
10215
  msgstr ""
10216
 
10217
  #: views/gdpr/banner.php:50
10218
- msgid "We have updated our Terms of Use and Privacy Policy. To continue using Wordfence, you will need to review and accept the updated <a href=\"https://www.wordfence.com/terms-of-use/\" target=\"_blank\" rel=\"noopener noreferrer\">Terms of Use</a> and <a href=\"https://www.wordfence.com/privacy-policy/\" target=\"_blank\" rel=\"noopener noreferrer\">Privacy Policy</a>."
10219
  msgstr ""
10220
 
10221
  #: views/gdpr/banner.php:51
10222
- msgid "You can log in to <a href=\"https://www.wordfence.com/\" target=\"_blank\" rel=\"noopener noreferrer\">wordfence.com</a> to accept the updated terms and privacy policy for all of your premium license keys at once."
10223
  msgstr ""
10224
 
10225
  #: views/gdpr/banner.php:56
@@ -10276,14 +10736,14 @@ msgstr ""
10276
  #: views/onboarding/fresh-install.php:27
10277
  #: views/onboarding/modal-final-attempt.php:56
10278
  #: views/onboarding/plugin-header.php:58
10279
- msgid "By checking this box, I agree to the Wordfence <a href=\"https://www.wordfence.com/terms-of-use/\" target=\"_blank\" rel=\"noopener noreferrer\">terms</a> and <a href=\"https://www.wordfence.com/privacy-policy/\" target=\"_blank\" rel=\"noopener noreferrer\">privacy policy</a>"
10280
  msgstr ""
10281
 
10282
  #. translators: Support URL.
10283
  #: views/onboarding/fresh-install.php:28
10284
  #: views/onboarding/modal-final-attempt.php:57
10285
  #: views/onboarding/plugin-header.php:59
10286
- msgid "If you qualify as a data controller under the GDPR and need a data processing agreement, <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">click here</a>."
10287
  msgstr ""
10288
 
10289
  #: views/onboarding/fresh-install.php:36
@@ -11570,12 +12030,12 @@ msgstr ""
11570
 
11571
  #. translators: Support URL.
11572
  #: views/tools/options-group-2fa.php:51
11573
- msgid "<strong>Require Cellphone Sign-in for all Administrators<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wfhelp wf-inline-help\"></a></strong><br><em>Note:</em> This setting requires at least one administrator to have Cellphone Sign-in enabled. On multisite, this option applies only to super admins."
11574
  msgstr ""
11575
 
11576
  #. translators: Support URL.
11577
  #: views/tools/options-group-2fa.php:63
11578
- msgid "<strong>Enable Separate Prompt for Two-Factor Code<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wfhelp wf-inline-help\"></a></strong><br><em>Note:</em> This setting changes the behavior for obtaining the two-factor authentication code from using the password field to showing a separate prompt. If your theme overrides the default login page, you may not be able to use this option."
11579
  msgstr ""
11580
 
11581
  #. translators: Support URL.
@@ -11771,7 +12231,7 @@ msgid "You are currently running the WAF from another WordPress installation. Th
11771
  msgstr ""
11772
 
11773
  #: views/waf/options-group-advanced-firewall.php:54
11774
- 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 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."
11775
  msgstr ""
11776
 
11777
  #: views/waf/options-group-advanced-firewall.php:101
@@ -11791,7 +12251,7 @@ msgid "No rules currently set."
11791
  msgstr ""
11792
 
11793
  #: views/waf/options-group-advanced-firewall.php:153
11794
- msgid "<a href=\"#\" onclick=\"WFAD.wafUpdateRules();return false;\">Click here</a> to pull down the latest from the Wordfence servers."
11795
  msgstr ""
11796
 
11797
  #: views/waf/options-group-advanced-firewall.php:161
@@ -11823,7 +12283,7 @@ msgstr ""
11823
 
11824
  #. translators: Support URL.
11825
  #: views/waf/options-group-basic-firewall.php:41
11826
- msgid "When you first install the Wordfence Web Application Firewall, it will be in learning mode. This allows Wordfence to learn about your site so that we can understand how to protect it and how to allow normal visitors through the firewall. We recommend you let Wordfence learn for a week before you enable the firewall. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More</a>"
11827
  msgstr ""
11828
 
11829
  #. translators: Support URL.
@@ -11858,7 +12318,7 @@ msgstr ""
11858
 
11859
  #. translators: Support URL.
11860
  #: views/waf/options-group-basic-firewall.php:168
11861
- msgid "If you're moving to a new host or a new installation location, you may need to temporarily disable extended protection to avoid any file not found errors. Use this action to remove the configuration changes that enable extended protection mode or you can <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">remove them manually</a>."
11862
  msgstr ""
11863
 
11864
  #. translators: Support URL.
@@ -12026,7 +12486,7 @@ msgstr ""
12026
 
12027
  #. translators: Support URL.
12028
  #: views/waf/status-tooltip-learning-mode.php:6
12029
- msgid "The Web Application Firewall is currently in Learning Mode. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More</a>"
12030
  msgstr ""
12031
 
12032
  #: views/waf/waf-install-manual.php:10
@@ -12035,7 +12495,7 @@ msgstr ""
12035
 
12036
  #. translators: Support URL.
12037
  #: views/waf/waf-install-manual.php:12
12038
- msgid "You can find more details on alternative setup steps, including installation on SiteGround or for multiple sites sharing a single php.ini, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"%s\">in our documentation</a>."
12039
  msgstr ""
12040
 
12041
  #: views/waf/waf-install.php:9
@@ -12059,7 +12519,7 @@ msgid "To make your site as secure as possible, the Wordfence Web Application Fi
12059
  msgstr ""
12060
 
12061
  #: views/waf/waf-install.php:26
12062
- msgid "If you don't recognize this file, please <a href=\"https://wordpress.org/support/plugin/wordfence\" target=\"_blank\" rel=\"noopener noreferrer\">contact us on the WordPress support forums</a> before proceeding."
12063
  msgstr ""
12064
 
12065
  #: views/waf/waf-install.php:27
@@ -12127,7 +12587,7 @@ msgstr ""
12127
 
12128
  #. translators: 1. PHP ini setting. 2. Support URL.
12129
  #: views/waf/waf-install.php:63
12130
- msgid "Part of the Firewall configuration procedure for NGINX depends on creating a <code>%1$s</code> file in the root of your WordPress installation. This file can contain sensitive information and public access to it should be restricted. We have <a href=\"%2$s\" target=\"_blank\" rel=\"noreferrer noopener\">instructions on our documentation site</a> on what directives to put in your nginx.conf to fix this."
12131
  msgstr ""
12132
 
12133
  #: views/waf/waf-install.php:65
@@ -12153,13 +12613,17 @@ msgstr ""
12153
  msgid "Uninstall Wordfence Firewall"
12154
  msgstr ""
12155
 
 
 
 
 
12156
  #: views/waf/waf-uninstall.php:26
12157
  msgid "Extended Protection Mode of the Wordfence Web Application Firewall uses the PHP ini setting called <code>auto_prepend_file</code> in order to ensure it runs before any potentially vulnerable code runs. This PHP setting currently refers to the Wordfence file at:"
12158
  msgstr ""
12159
 
12160
  #. translators: Support URL.
12161
  #: views/waf/waf-uninstall.php:34
12162
- msgid "Automatic uninstallation cannot be completed, but you may still be able to <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">manually uninstall extended protection</a>."
12163
  msgstr ""
12164
 
12165
  #: views/waf/waf-uninstall.php:36
2
  # This file is distributed under the same license as the Wordfence Security plugin.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Wordfence Security 7.5.5\n"
6
+ "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/src\n"
7
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
  "Language-Team: LANGUAGE <LL@li.org>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "POT-Creation-Date: 2021-08-16T09:45:58-04:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.4.0\n"
15
  "X-Domain: wordfence\n"
57
  #: lib/dashboard/widget_content_logins.php:7
58
  #: lib/dashboard/widget_ips.php:115
59
  #: lib/dashboard/widget_logins.php:96
60
+ #: lib/wordfenceClass.php:6122
61
  #: views/reports/activity-report-email-inline.php:146
62
  #: views/reports/activity-report.php:16
63
  #: views/waf/option-whitelist.php:110
68
 
69
  #: lib/dashboard/widget_content_logins.php:6
70
  #: lib/dashboard/widget_logins.php:95
71
+ #: lib/wordfenceClass.php:6197
72
  #: views/reports/activity-report-email-inline.php:256
73
  #: views/reports/activity-report.php:106
74
  msgid "Username"
91
 
92
  #: lib/dashboard/widget_countries.php:25
93
  #: lib/dashboard/widget_networkattacks.php:8
94
+ #: lib/wfDiagnostic.php:825
95
  msgid "Wordfence Network"
96
  msgstr ""
97
 
118
  msgstr ""
119
 
120
  #: lib/dashboard/widget_ips.php:30
121
+ #: lib/dashboard/widget_networkattacks.php:23
122
  msgid "30 Days"
123
  msgstr ""
124
 
133
  #. translators: WordPress username.
134
  #: lib/dashboard/widget_ips.php:96
135
  #: lib/dashboard/widget_logins.php:77
136
+ #: lib/wordfenceClass.php:6068
137
  msgid "An error occurred"
138
  msgstr ""
139
 
184
  msgid "How are these categorized?"
185
  msgstr ""
186
 
187
+ #. translators: URL to WordPress admin panel.
188
+ #. translators: Support URL.
189
+ #. translators: 1. Time duration. 2. Support URL.
190
+ #. translators: 1. URL. 2. URL.
191
+ #. translators: 1. URL to publicly accessible file. 2. Support URL.
192
+ #. translators: URL to publicly accessible file.
193
+ #. translators: 1. WordPress Post type. 2. URL. 3. URL.
194
+ #. translators: 1. WordPress post type. 2. URL. 3. URL.
195
+ #. translators: 1. WordPress version. 2. WordPress version.
196
+ #. translators: 1. WordPress admin panel URL. 2. Support URL.
197
+ #. translators: 1. Reset password URL. 2. Support URL.
198
+ #. translators: Localized date.
199
+ #. translators: Time limit (number).
200
+ #. translators: 1. Plugin name. 2. Plugin version. 3. Support URL.
201
+ #. translators: Number of files.
202
+ #: lib/dashboard/widget_localattacks.php:70
203
+ #: lib/dashboard/widget_notifications.php:19
204
+ #: lib/dashboard/widget_notifications.php:69
205
+ #: lib/email_unsubscribeRequest.php:14
206
+ #: lib/IPTrafList.php:24
207
+ #: lib/IPTrafList.php:41
208
+ #: lib/IPTrafList.php:51
209
+ #: lib/menu_dashboard.php:118
210
+ #: lib/menu_dashboard_options.php:162
211
+ #: lib/menu_firewall_blocking.php:34
212
+ #: lib/menu_support.php:33
213
+ #: lib/menu_support.php:39
214
+ #: lib/menu_support.php:43
215
+ #: lib/menu_support.php:70
216
+ #: lib/menu_support.php:80
217
+ #: lib/menu_support.php:120
218
+ #: lib/menu_support.php:138
219
+ #: lib/menu_support.php:143
220
+ #: lib/menu_support.php:164
221
+ #: lib/menu_tools_diagnostic.php:771
222
+ #: lib/menu_tools_diagnostic.php:838
223
+ #: lib/menu_tools_diagnostic.php:839
224
+ #: lib/menu_tools_diagnostic.php:844
225
+ #: lib/menu_tools_diagnostic.php:845
226
+ #: lib/menu_tools_diagnostic.php:850
227
+ #: lib/menu_tools_diagnostic.php:857
228
+ #: lib/menu_tools_diagnostic.php:864
229
+ #: lib/menu_tools_livetraffic.php:209
230
+ #: lib/menu_tools_livetraffic.php:346
231
+ #: lib/menu_tools_livetraffic.php:353
232
+ #: lib/menu_tools_livetraffic.php:428
233
+ #: lib/menu_tools_livetraffic.php:481
234
+ #: lib/menu_tools_twoFactor.php:51
235
+ #: lib/menu_wordfence_central.php:59
236
+ #: lib/wf503.php:390
237
+ #: lib/wfScanEngine.php:278
238
+ #: lib/wfScanEngine.php:611
239
+ #: lib/wfScanEngine.php:624
240
+ #: lib/wfScanEngine.php:696
241
+ #: lib/wfScanEngine.php:719
242
+ #: lib/wfScanEngine.php:794
243
+ #: lib/wfScanEngine.php:995
244
+ #: lib/wfScanEngine.php:996
245
+ #: lib/wfScanEngine.php:1137
246
+ #: lib/wfScanEngine.php:1274
247
+ #: lib/wfScanEngine.php:1417
248
+ #: lib/wfScanEngine.php:1781
249
+ #: lib/wfScanEngine.php:2027
250
+ #: lib/wfScanEngine.php:2066
251
+ #: lib/wfScanEngine.php:2254
252
+ #: lib/wfScanEngine.php:2296
253
+ #: lib/wfVersionCheckController.php:68
254
+ #: lib/wfVersionCheckController.php:91
255
+ #: lib/wfVersionCheckController.php:167
256
+ #: lib/wfVersionCheckController.php:186
257
+ #: lib/wordfenceClass.php:1371
258
+ #: lib/wordfenceClass.php:2749
259
+ #: lib/wordfenceClass.php:2885
260
+ #: lib/wordfenceClass.php:3040
261
+ #: lib/wordfenceClass.php:3076
262
+ #: lib/wordfenceClass.php:3604
263
+ #: lib/wordfenceClass.php:4932
264
+ #: lib/wordfenceClass.php:4940
265
+ #: lib/wordfenceClass.php:4946
266
+ #: lib/wordfenceClass.php:4959
267
+ #: lib/wordfenceClass.php:4971
268
+ #: lib/wordfenceClass.php:4979
269
+ #: lib/wordfenceClass.php:6257
270
+ #: lib/wordfenceClass.php:6279
271
+ #: lib/wordfenceClass.php:6298
272
+ #: lib/wordfenceClass.php:6304
273
+ #: lib/wordfenceClass.php:6351
274
+ #: lib/wordfenceClass.php:7968
275
+ #: lib/wordfenceClass.php:7992
276
+ #: lib/wordfenceClass.php:8036
277
+ #: lib/wordfenceClass.php:8075
278
+ #: lib/wordfenceClass.php:8100
279
+ #: lib/wordfenceClass.php:8131
280
+ #: lib/wordfenceClass.php:8160
281
+ #: lib/wordfenceClass.php:8206
282
+ #: lib/wordfenceClass.php:8928
283
+ #: lib/wordfenceHash.php:533
284
+ #: lib/wordfenceHash.php:579
285
+ #: lib/wordfenceHash.php:650
286
+ #: lib/wordfenceHash.php:763
287
+ #: views/blocking/block-list.php:35
288
+ #: views/blocking/blocking-create.php:179
289
+ #: views/blocking/blocking-status.php:27
290
+ #: views/blocking/option-bypass-cookie.php:8
291
+ #: views/blocking/option-bypass-redirect.php:8
292
+ #: views/blocking/options-group-advanced-country.php:85
293
+ #: views/common/page-help.php:2
294
+ #: views/common/page-title.php:29
295
+ #: views/common/section-subtitle.php:27
296
+ #: views/common/section-title.php:27
297
+ #: views/common/status-critical.php:17
298
+ #: views/common/status-detail.php:37
299
+ #: views/common/status-tooltip.php:19
300
+ #: views/common/status-tooltip.php:30
301
+ #: views/common/status-warning.php:17
302
+ #: views/dashboard/option-howgetips.php:21
303
+ #: views/dashboard/options-group-dashboard.php:107
304
+ #: views/dashboard/options-group-general.php:36
305
+ #: views/dashboard/options-group-import.php:31
306
+ #: views/dashboard/options-group-import.php:44
307
+ #: views/dashboard/options-group-license.php:35
308
+ #: views/dashboard/options-group-license.php:62
309
+ #: views/dashboard/options-group-license.php:64
310
+ #: views/dashboard/options-group-license.php:66
311
+ #: views/dashboard/options-group-license.php:68
312
+ #: views/dashboard/options-group-license.php:70
313
+ #: views/dashboard/status-payment-expiring.php:31
314
+ #: views/dashboard/status-renewing.php:17
315
+ #: views/gdpr/banner.php:55
316
+ #: views/onboarding/fresh-install.php:43
317
+ #: views/onboarding/fresh-install.php:44
318
+ #: views/onboarding/modal-final-attempt.php:41
319
+ #: views/onboarding/modal-final-attempt.php:42
320
+ #: views/onboarding/plugin-header.php:65
321
+ #: views/onboarding/plugin-header.php:66
322
+ #: views/options/option-label.php:28
323
+ #: views/options/option-select.php:22
324
+ #: views/options/option-switch.php:34
325
+ #: views/options/option-text.php:30
326
+ #: views/options/option-textarea.php:37
327
+ #: views/options/option-toggled-boolean-switch.php:32
328
+ #: views/options/option-toggled-multiple.php:29
329
+ #: views/options/option-toggled-segmented.php:21
330
+ #: views/options/option-toggled-select.php:27
331
+ #: views/options/option-toggled-sub.php:44
332
+ #: views/options/option-toggled-sub.php:52
333
+ #: views/options/option-toggled-textarea.php:24
334
+ #: views/options/option-toggled.php:36
335
+ #: views/options/option-token.php:25
336
+ #: views/scanner/issue-configReadable.php:12
337
+ #: views/scanner/issue-configReadable.php:17
338
+ #: views/scanner/issue-coreUnknown.php:13
339
+ #: views/scanner/issue-database.php:18
340
+ #: views/scanner/issue-file.php:19
341
+ #: views/scanner/issue-file.php:20
342
+ #: views/scanner/issue-knownfile.php:19
343
+ #: views/scanner/issue-knownfile.php:20
344
+ #: views/scanner/issue-publiclyAccessible.php:12
345
+ #: views/scanner/issue-publiclyAccessible.php:17
346
+ #: views/scanner/issue-wfPluginAbandoned.php:18
347
+ #: views/scanner/issue-wfPluginAbandoned.php:19
348
+ #: views/scanner/issue-wfPluginAbandoned.php:20
349
+ #: views/scanner/issue-wfPluginRemoved.php:17
350
+ #: views/scanner/issue-wfPluginRemoved.php:18
351
+ #: views/scanner/issue-wfPluginUpgrade.php:18
352
+ #: views/scanner/issue-wfPluginUpgrade.php:19
353
+ #: views/scanner/issue-wfPluginUpgrade.php:20
354
+ #: views/scanner/issue-wfPluginVulnerable.php:17
355
+ #: views/scanner/issue-wfPluginVulnerable.php:18
356
+ #: views/scanner/issue-wfPluginVulnerable.php:19
357
+ #: views/scanner/issue-wfThemeUpgrade.php:18
358
+ #: views/scanner/issue-wfThemeUpgrade.php:19
359
+ #: views/scanner/issue-wfUpgrade.php:17
360
+ #: views/scanner/issue-wpscan_directoryList.php:12
361
+ #: views/scanner/issue-wpscan_directoryList.php:17
362
+ #: views/scanner/issue-wpscan_fullPathDiscl.php:12
363
+ #: views/scanner/issue-wpscan_fullPathDiscl.php:17
364
+ #: views/scanner/option-scan-signatures.php:22
365
+ #: views/scanner/scan-progress-detailed.php:16
366
+ #: views/scanner/scan-progress-element.php:59
367
+ #: views/scanner/scan-scheduling.php:38
368
+ #: views/scanner/scanner-status.php:26
369
+ #: views/scanner/scanner-status.php:55
370
+ #: views/scanner/site-cleaning-beta-sigs.php:16
371
+ #: views/scanner/site-cleaning-bottom.php:15
372
+ #: views/scanner/site-cleaning-bottom.php:17
373
+ #: views/scanner/site-cleaning-high-sense.php:16
374
+ #: views/scanner/site-cleaning.php:16
375
+ #: views/tools/options-group-2fa.php:40
376
+ #: views/tours/login-security.php:30
377
+ #: views/tours/login-security.php:62
378
+ #: views/waf/firewall-status.php:26
379
+ #: views/waf/firewall-status.php:58
380
+ #: views/waf/firewall-status.php:68
381
+ #: views/waf/option-rate-limit.php:27
382
+ #: views/waf/option-rules.php:5
383
+ #: views/waf/option-whitelist.php:5
384
+ #: views/waf/options-group-basic-firewall.php:467
385
+ #: views/waf/waf-install.php:13
386
+ msgid "opens in new tab"
387
+ msgstr ""
388
+
389
  #: lib/dashboard/widget_logins.php:9
390
  #: views/reports/activity-report-email-inline.php:257
391
  #: views/reports/activity-report.php:107
416
  msgid "Blocked attack counts not available yet."
417
  msgstr ""
418
 
419
+ #: lib/dashboard/widget_networkattacks.php:32
420
  msgid "Total Attacks"
421
  msgstr ""
422
 
423
  #. translators: Time since. Example: 1 minute, 2 seconds
424
+ #: lib/dashboard/widget_networkattacks.php:208
425
  msgid "Last Updated: %s ago"
426
  msgstr ""
427
 
428
  #: lib/dashboard/widget_notifications.php:8
429
+ #: lib/wordfenceClass.php:6703
430
  msgid "Notifications"
431
  msgstr ""
432
 
498
  #: lib/dashboard/widget_notifications.php:134
499
  #: lib/menu_scanner.php:217
500
  #: lib/menu_scanner.php:228
501
+ #: lib/menu_tools_diagnostic.php:982
502
  #: lib/menu_tools_twoFactor.php:235
503
  #: lib/menu_tools_twoFactor.php:273
504
+ #: lib/wordfenceClass.php:7993
505
+ #: lib/wordfenceClass.php:8037
506
+ #: lib/wordfenceClass.php:8101
507
+ #: lib/wordfenceClass.php:8161
508
+ #: lib/wordfenceClass.php:8207
509
  #: views/blocking/block-list.php:501
510
  #: views/blocking/blocking-create.php:212
511
+ #: views/blocking/blocking-create.php:529
512
  #: views/dashboard/options-group-license.php:150
513
  #: views/options/block-all-options-controls.php:164
514
  #: views/options/block-controls.php:79
723
  #: lib/wfVersionCheckController.php:91
724
  #: lib/wfVersionCheckController.php:167
725
  #: lib/wfVersionCheckController.php:186
726
+ #: lib/wordfenceClass.php:6384
727
+ #: views/blocking/blocking-create.php:528
728
  #: views/blocking/blocking-status.php:27
729
  #: views/dashboard/options-group-dashboard.php:107
730
  #: views/gdpr/banner.php:55
863
 
864
  #. translators: URL to WordPress admin panel.
865
  #: lib/email_unsubscribeRequest.php:14
866
+ msgid "<a href=\"%s\" target=\"_blank\">Click here<span class=\"screen-reader-text\"> ("
867
  msgstr ""
868
 
869
  #. translators: IP address.
879
  msgstr ""
880
 
881
  #: lib/IPTrafList.php:13
882
+ #: lib/wfLockedOut.php:377
883
  msgid "Time:"
884
  msgstr ""
885
 
921
  msgid "Wordfence Live Activity:"
922
  msgstr ""
923
 
924
+ #: lib/live_activity.php:9
925
+ msgid "Live Updates Paused &mdash; Click inside window to resume"
926
+ msgstr ""
927
+
928
  #: lib/menu_dashboard.php:24
929
+ #: lib/wordfenceClass.php:6605
930
  msgid "Wordfence Dashboard"
931
  msgstr ""
932
 
938
  #: lib/menu_dashboard_options.php:98
939
  #: lib/menu_firewall.php:20
940
  #: lib/menu_firewall.php:30
941
+ #: lib/wordfenceClass.php:6609
942
  #: models/page/wfPage.php:105
943
  msgid "Firewall"
944
  msgstr ""
975
  #: lib/menu_dashboard_options.php:115
976
  #: lib/menu_scanner.php:31
977
  #: lib/menu_scanner.php:305
978
+ #: lib/wordfenceClass.php:6616
979
  #: models/page/wfPage.php:113
980
  msgid "Scan"
981
  msgstr ""
1040
 
1041
  #: lib/menu_dashboard.php:109
1042
  #: lib/menu_dashboard_options.php:153
1043
+ msgid "The license you were using has been removed from your account. Please reach out to <a href=\"mailto:billing@wordfence.com\">billing@wordfence.com</a> or create a Premium support case at <a href=\"https://support.wordfence.com/support/tickets\" target=\"_blank\">https://support.wordfence.com/support/tickets<span class=\"screen-reader-text\"> (opens in new tab)</span></a> for more information. Our staff is happy to help."
1044
  msgstr ""
1045
 
1046
  #: lib/menu_dashboard.php:117
1139
  msgstr ""
1140
 
1141
  #: lib/menu_dashboard.php:220
1142
+ #: lib/wordfenceClass.php:6620
1143
  msgid "Tools"
1144
  msgstr ""
1145
 
1151
  #: lib/menu_firewall_waf.php:157
1152
  #: lib/menu_scanner.php:139
1153
  #: lib/menu_support.php:19
1154
+ #: lib/wordfenceClass.php:6633
1155
  msgid "Help"
1156
  msgstr ""
1157
 
1256
  msgstr ""
1257
 
1258
  #: lib/menu_dashboard.php:373
1259
+ msgid "We welcome your feedback and comments at <a href=\"mailto:feedback@wordfence.com\">feedback@wordfence.com</a>. For a deeper dive on all of the changes, <a href=\"https://www.wordfence.com/blog/2018/01/introducing-wordfence-7/\" target=\"_blank\" rel=\"noopener noreferrer\">click here<span class=\"screen-reader-text\"> (opens in new tab)</span></a>."
1260
  msgstr ""
1261
 
1262
  #: lib/menu_dashboard.php:388
1348
  #: lib/menu_dashboard_options.php:288
1349
  #: lib/menu_options.php:405
1350
  #: lib/menu_options.php:415
1351
+ #: lib/menu_tools.php:26
1352
  #: lib/menu_tools_importExport.php:7
1353
  #: lib/menu_tools_importExport.php:13
1354
  #: models/page/wfPage.php:121
1370
  #: lib/menu_firewall.php:41
1371
  #: lib/menu_firewall_blocking.php:119
1372
  #: lib/menu_firewall_waf.php:142
1373
+ #: lib/wordfenceClass.php:6611
1374
  #: models/page/wfPage.php:109
1375
  msgid "Blocking"
1376
  msgstr ""
1536
 
1537
  #: lib/menu_firewall_waf.php:69
1538
  #: lib/menu_firewall_waf_options.php:175
1539
+ #: lib/menu_tools_diagnostic.php:296
 
1540
  #: lib/menu_tools_diagnostic.php:301
1541
+ #: lib/menu_tools_diagnostic.php:302
1542
+ #: lib/menu_tools_diagnostic.php:305
1543
+ #: lib/wfDiagnostic.php:798
1544
  #: models/firewall/wfFirewall.php:35
1545
  #: views/diagnostics/text.php:154
1546
  #: views/diagnostics/text.php:159
1555
 
1556
  #: lib/menu_firewall_waf.php:69
1557
  #: lib/menu_firewall_waf_options.php:175
1558
+ #: lib/menu_tools_diagnostic.php:296
 
1559
  #: lib/menu_tools_diagnostic.php:301
1560
+ #: lib/menu_tools_diagnostic.php:302
1561
+ #: lib/menu_tools_diagnostic.php:305
1562
+ #: lib/wordfenceClass.php:6094
1563
  #: models/firewall/wfFirewall.php:41
1564
  #: views/diagnostics/text.php:154
1565
  #: views/diagnostics/text.php:159
1680
 
1681
  #: lib/menu_options.php:24
1682
  #: lib/menu_options.php:262
1683
+ #: lib/wordfenceClass.php:6628
1684
  msgid "All Options"
1685
  msgstr ""
1686
 
1717
  msgstr ""
1718
 
1719
  #: lib/menu_options.php:75
1720
+ #: lib/menu_tools_diagnostic.php:236
1721
  #: views/dashboard/option-howgetips.php:50
1722
  #: views/diagnostics/text.php:108
1723
  msgid "Trusted Proxies"
2319
  msgstr ""
2320
 
2321
  #: lib/menu_scanner.php:80
2322
+ #: lib/wordfenceClass.php:6644
2323
  msgid "Protect More Sites"
2324
  msgstr ""
2325
 
2376
 
2377
  #. translators: Support URL.
2378
  #: lib/menu_scanner.php:216
2379
+ msgid "Do not delete files on your system unless you're ABSOLUTELY sure you know what you're doing. If you delete the wrong file it could cause your WordPress website to stop functioning and you will probably have to restore from backups. If you're unsure, Cancel and work with your hosting provider to clean your system of infected files. If you'd like to learn more, <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">click here for our help article<span class=\"screen-reader-text\"> (opens in new tab)</span></a>."
2380
  msgstr ""
2381
 
2382
  #: lib/menu_scanner.php:218
2402
  #: lib/menu_tools_twoFactor.php:255
2403
  #: lib/menu_tools_twoFactor.php:264
2404
  #: lib/menu_tools_twoFactor.php:284
2405
+ #: lib/wordfenceClass.php:4941
2406
+ #: lib/wordfenceClass.php:4947
2407
+ #: lib/wordfenceClass.php:4953
2408
+ #: lib/wordfenceClass.php:4960
2409
+ #: lib/wordfenceClass.php:4966
2410
+ #: lib/wordfenceClass.php:4973
2411
+ #: lib/wordfenceClass.php:4981
2412
+ #: lib/wordfenceClass.php:6036
2413
+ #: lib/wordfenceClass.php:6038
2414
+ #: lib/wordfenceClass.php:6089
2415
+ #: lib/wordfenceClass.php:8018
2416
+ #: lib/wordfenceClass.php:8025
2417
+ #: lib/wordfenceClass.php:8132
2418
+ #: lib/wordfenceClass.php:8196
2419
  #: views/dashboard/options-group-import.php:147
2420
  #: views/dashboard/options-group-import.php:157
2421
  #: views/dashboard/options-group-import.php:177
2538
 
2539
  #. translators: URL to support page.
2540
  #: lib/menu_support.php:83
2541
+ msgid "If you qualify as a data controller under the GDPR and need a data processing agreement, it can be <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">found here<span class=\"screen-reader-text\"> (opens in new tab)</span></a>."
2542
  msgstr ""
2543
 
2544
  #: lib/menu_support.php:92
2582
  msgstr ""
2583
 
2584
  #: lib/menu_support.php:269
2585
+ #: views/blocking/blocking-create.php:530
2586
  #: views/onboarding/fresh-install.php:30
2587
  #: views/onboarding/modal-final-attempt.php:59
2588
  #: views/onboarding/plugin-header.php:61
2592
  msgid "Continue"
2593
  msgstr ""
2594
 
2595
+ #: lib/menu_tools.php:22
2596
+ #: lib/menu_tools_twoFactor.php:14
2597
+ #: lib/menu_tools_twoFactor.php:23
2598
+ #: models/page/wfPage.php:117
2599
+ msgid "Two-Factor Authentication"
2600
+ msgstr ""
2601
+
2602
+ #: lib/menu_tools.php:24
2603
+ #: lib/menu_tools_livetraffic.php:8
2604
+ #: lib/menu_tools_livetraffic.php:41
2605
+ #: lib/menu_tools_livetraffic.php:571
2606
+ #: lib/menu_tools_livetraffic.php:602
2607
+ #: lib/wordfenceClass.php:6622
2608
+ #: models/page/wfPage.php:119
2609
+ msgid "Live Traffic"
2610
+ msgstr ""
2611
+
2612
+ #: lib/menu_tools.php:25
2613
+ #: lib/menu_tools_whois.php:7
2614
+ #: lib/menu_tools_whois.php:16
2615
+ #: lib/menu_tools_whois.php:75
2616
+ #: models/page/wfPage.php:123
2617
+ msgid "Whois Lookup"
2618
+ msgstr ""
2619
+
2620
+ #: lib/menu_tools.php:27
2621
  #: lib/menu_tools_diagnostic.php:24
2622
  #: models/page/wfPage.php:125
2623
  msgid "Diagnostics"
2643
  msgid "Ticket Number/Forum Username:"
2644
  msgstr ""
2645
 
2646
+ #: lib/menu_tools_diagnostic.php:123
2647
  msgid "Additional Detail"
2648
  msgstr ""
2649
 
2650
+ #: lib/menu_tools_diagnostic.php:166
2651
  msgid "View Additional Detail"
2652
  msgstr ""
2653
 
2654
+ #: lib/menu_tools_diagnostic.php:187
2655
  #: views/diagnostics/text.php:60
2656
  #: views/scanner/issue-checkHowGetIPs.php:8
2657
  msgid "IP Detection"
2658
  msgstr ""
2659
 
2660
+ #: lib/menu_tools_diagnostic.php:188
2661
  #: views/diagnostics/text.php:60
2662
  msgid "Methods of detecting a visitor's IP address."
2663
  msgstr ""
2664
 
2665
+ #: lib/menu_tools_diagnostic.php:200
2666
  #: views/diagnostics/text.php:69
2667
  msgid "IPs"
2668
  msgstr ""
2669
 
2670
+ #: lib/menu_tools_diagnostic.php:201
2671
  #: views/diagnostics/text.php:70
2672
  #: views/diagnostics/text.php:189
2673
  msgid "Value"
2674
  msgstr ""
2675
 
2676
+ #: lib/menu_tools_diagnostic.php:202
2677
  #: views/diagnostics/text.php:71
2678
  msgid "Used"
2679
  msgstr ""
2682
  #. translators: WordPress theme stylesheet directory.
2683
  #. translators: WordPress custom user table.
2684
  #. translators: WordPress custom user meta table.
2685
+ #: lib/menu_tools_diagnostic.php:218
 
2686
  #: lib/menu_tools_diagnostic.php:269
2687
+ #: lib/menu_tools_diagnostic.php:270
2688
  #: lib/menu_tools_diagnostic.php:283
2689
+ #: lib/menu_tools_diagnostic.php:284
2690
  #: lib/menu_tools_diagnostic.php:297
2691
  #: lib/menu_tools_diagnostic.php:298
2692
  #: lib/menu_tools_diagnostic.php:299
2693
+ #: lib/menu_tools_diagnostic.php:300
2694
  #: lib/menu_tools_diagnostic.php:314
2695
  #: lib/menu_tools_diagnostic.php:315
2696
+ #: lib/menu_tools_diagnostic.php:316
2697
  #: lib/menu_tools_diagnostic.php:318
2698
  #: lib/menu_tools_diagnostic.php:319
2699
+ #: lib/menu_tools_diagnostic.php:320
2700
+ #: lib/menu_tools_diagnostic.php:330
2701
+ #: lib/wfDiagnostic.php:379
2702
  #: views/diagnostics/text.php:86
2703
  #: views/diagnostics/text.php:127
2704
  #: views/diagnostics/text.php:128
2718
  msgid "(not set)"
2719
  msgstr ""
2720
 
2721
+ #: lib/menu_tools_diagnostic.php:227
2722
  #: views/diagnostics/text.php:96
2723
  msgid "In use"
2724
  msgstr ""
2725
 
2726
+ #: lib/menu_tools_diagnostic.php:229
2727
  #: views/diagnostics/text.php:98
2728
  msgid "Configured but not valid"
2729
  msgstr ""
2730
 
2731
+ #: lib/menu_tools_diagnostic.php:250
2732
  #: views/diagnostics/text.php:117
2733
  msgid "WordPress Settings"
2734
  msgstr ""
2735
 
2736
+ #: lib/menu_tools_diagnostic.php:251
2737
  #: views/diagnostics/text.php:117
2738
  msgid "WordPress version and internal settings/constants."
2739
  msgstr ""
2740
 
2741
+ #: lib/menu_tools_diagnostic.php:266
2742
  #: views/diagnostics/text.php:124
2743
  msgid "Return value of is_multisite()"
2744
  msgstr ""
2745
 
2746
  #. translators: WordPress plugins directory.
2747
+ #: lib/menu_tools_diagnostic.php:266
2748
+ #: lib/menu_tools_diagnostic.php:277
 
2749
  #: lib/menu_tools_diagnostic.php:279
2750
+ #: lib/menu_tools_diagnostic.php:280
2751
+ #: lib/menu_tools_diagnostic.php:293
2752
  #: lib/menu_tools_diagnostic.php:306
2753
  #: lib/menu_tools_diagnostic.php:307
2754
  #: lib/menu_tools_diagnostic.php:308
2755
  #: lib/menu_tools_diagnostic.php:309
2756
  #: lib/menu_tools_diagnostic.php:310
2757
+ #: lib/menu_tools_diagnostic.php:311
2758
  #: lib/menu_tools_diagnostic.php:316
2759
  #: lib/menu_tools_diagnostic.php:317
2760
  #: lib/menu_tools_diagnostic.php:318
2761
  #: lib/menu_tools_diagnostic.php:319
2762
+ #: lib/menu_tools_diagnostic.php:320
2763
+ #: lib/menu_tools_diagnostic.php:324
2764
  #: lib/menu_tools_livetraffic.php:152
2765
+ #: lib/wfDiagnostic.php:359
2766
+ #: lib/wfDiagnostic.php:391
2767
  #: views/diagnostics/text.php:124
2768
  #: views/diagnostics/text.php:135
2769
  #: views/diagnostics/text.php:137
2789
  msgid "Yes"
2790
  msgstr ""
2791
 
2792
+ #: lib/menu_tools_diagnostic.php:266
2793
+ #: lib/menu_tools_diagnostic.php:293
 
2794
  #: lib/menu_tools_diagnostic.php:306
2795
  #: lib/menu_tools_diagnostic.php:307
2796
  #: lib/menu_tools_diagnostic.php:308
2797
  #: lib/menu_tools_diagnostic.php:309
2798
  #: lib/menu_tools_diagnostic.php:310
2799
+ #: lib/menu_tools_diagnostic.php:311
2800
  #: lib/menu_tools_diagnostic.php:316
2801
+ #: lib/menu_tools_diagnostic.php:317
2802
  #: lib/menu_tools_diagnostic.php:319
2803
+ #: lib/menu_tools_diagnostic.php:320
2804
+ #: lib/menu_tools_diagnostic.php:324
2805
  #: lib/menu_tools_livetraffic.php:153
2806
+ #: lib/wfDiagnostic.php:359
2807
+ #: lib/wfDiagnostic.php:391
2808
  #: views/diagnostics/text.php:124
2809
  #: views/diagnostics/text.php:151
2810
  #: views/diagnostics/text.php:164
2826
  msgid "No"
2827
  msgstr ""
2828
 
2829
+ #: lib/menu_tools_diagnostic.php:267
2830
  #: views/diagnostics/text.php:125
2831
  msgid "WordPress base path"
2832
  msgstr ""
2833
 
2834
+ #: lib/menu_tools_diagnostic.php:268
2835
  #: views/diagnostics/text.php:126
2836
  msgid "WordPress debug mode"
2837
  msgstr ""
2838
 
2839
+ #: lib/menu_tools_diagnostic.php:268
 
2840
  #: lib/menu_tools_diagnostic.php:271
2841
+ #: lib/menu_tools_diagnostic.php:272
2842
+ #: lib/wfDiagnostic.php:592
2843
  #: views/diagnostics/text.php:126
2844
  #: views/diagnostics/text.php:129
2845
  #: views/diagnostics/text.php:130
2848
  msgid "On"
2849
  msgstr ""
2850
 
2851
+ #: lib/menu_tools_diagnostic.php:268
 
2852
  #: lib/menu_tools_diagnostic.php:271
2853
+ #: lib/menu_tools_diagnostic.php:272
2854
+ #: lib/wfDiagnostic.php:592
2855
  #: views/diagnostics/text.php:126
2856
  #: views/diagnostics/text.php:129
2857
  #: views/diagnostics/text.php:130
2860
  msgid "Off"
2861
  msgstr ""
2862
 
2863
+ #: lib/menu_tools_diagnostic.php:269
2864
  #: views/diagnostics/text.php:127
2865
  msgid "WordPress error logging override"
2866
  msgstr ""
2867
 
2868
+ #: lib/menu_tools_diagnostic.php:270
2869
  #: views/diagnostics/text.php:128
2870
  msgid "WordPress error display override"
2871
  msgstr ""
2872
 
2873
+ #: lib/menu_tools_diagnostic.php:271
2874
  #: views/diagnostics/text.php:129
2875
  msgid "WordPress script debug mode"
2876
  msgstr ""
2877
 
2878
+ #: lib/menu_tools_diagnostic.php:272
2879
  #: views/diagnostics/text.php:130
2880
  msgid "WordPress query debug mode"
2881
  msgstr ""
2882
 
2883
+ #: lib/menu_tools_diagnostic.php:273
2884
  #: views/diagnostics/text.php:131
2885
  msgid "Database character set"
2886
  msgstr ""
2887
 
2888
+ #: lib/menu_tools_diagnostic.php:274
2889
  #: views/diagnostics/text.php:132
2890
  msgid "Database collation"
2891
  msgstr ""
2892
 
2893
+ #: lib/menu_tools_diagnostic.php:275
2894
  #: views/diagnostics/text.php:133
2895
  msgid "Explicitly set site URL"
2896
  msgstr ""
2897
 
2898
+ #: lib/menu_tools_diagnostic.php:276
2899
  #: views/diagnostics/text.php:134
2900
  msgid "Explicitly set blog URL"
2901
  msgstr ""
2902
 
2903
+ #: lib/menu_tools_diagnostic.php:277
2904
  #: views/diagnostics/text.php:135
2905
  msgid "\"wp-content\" folder is in default location"
2906
  msgstr ""
2908
  #. translators: WordPress content directory.
2909
  #. translators: WordPress plugins directory.
2910
  #. translators: WordPress languages directory.
2911
+ #: lib/menu_tools_diagnostic.php:277
 
2912
  #: lib/menu_tools_diagnostic.php:279
2913
+ #: lib/menu_tools_diagnostic.php:280
2914
  #: views/diagnostics/text.php:135
2915
  #: views/diagnostics/text.php:137
2916
  #: views/diagnostics/text.php:138
2918
  msgstr ""
2919
 
2920
  #. translators: WordPress content directory.
2921
+ #: lib/menu_tools_diagnostic.php:278
2922
  #: views/diagnostics/text.php:136
2923
  msgid "URL to the \"wp-content\" folder"
2924
  msgstr ""
2925
 
2926
+ #: lib/menu_tools_diagnostic.php:279
2927
  #: views/diagnostics/text.php:137
2928
  msgid "\"plugins\" folder is in default location"
2929
  msgstr ""
2930
 
2931
  #. translators: WordPress plugins directory.
2932
+ #: lib/menu_tools_diagnostic.php:280
2933
  #: views/diagnostics/text.php:138
2934
  msgid "\"languages\" folder is in default location"
2935
  msgstr ""
2936
 
2937
  #. translators: WordPress languages directory.
2938
+ #: lib/menu_tools_diagnostic.php:281
2939
  #: views/diagnostics/text.php:139
2940
  msgid "Language choice"
2941
  msgstr ""
2942
 
2943
+ #: lib/menu_tools_diagnostic.php:282
2944
  #: views/diagnostics/text.php:140
2945
  msgid "Custom upload folder location"
2946
  msgstr ""
2947
 
2948
+ #: lib/menu_tools_diagnostic.php:283
2949
  #: views/diagnostics/text.php:141
2950
  msgid "Theme template folder override"
2951
  msgstr ""
2952
 
2953
  #. translators: WordPress theme template directory.
2954
  #. translators: WordPress theme stylesheet directory.
 
2955
  #: lib/menu_tools_diagnostic.php:283
2956
+ #: lib/menu_tools_diagnostic.php:284
2957
  #: views/diagnostics/text.php:141
2958
  #: views/diagnostics/text.php:142
2959
  msgid "Overridden: %s"
2960
  msgstr ""
2961
 
2962
  #. translators: WordPress theme template directory.
2963
+ #: lib/menu_tools_diagnostic.php:284
2964
  #: views/diagnostics/text.php:142
2965
  msgid "Theme stylesheet folder override"
2966
  msgstr ""
2967
 
2968
  #. translators: WordPress theme stylesheet directory.
2969
+ #: lib/menu_tools_diagnostic.php:285
2970
  #: views/diagnostics/text.php:143
2971
  msgid "Post editing automatic saving interval"
2972
  msgstr ""
2973
 
2974
+ #: lib/menu_tools_diagnostic.php:286
2975
  #: views/diagnostics/text.php:144
2976
  msgid "Post revisions saved by WordPress"
2977
  msgstr ""
2978
 
2979
+ #: lib/menu_tools_diagnostic.php:286
2980
  #: views/diagnostics/text.php:144
2981
  #: views/waf/options-group-rate-limiting.php:67
2982
  msgid "Unlimited"
2983
  msgstr ""
2984
 
2985
+ #: lib/menu_tools_diagnostic.php:286
2986
+ #: lib/menu_tools_diagnostic.php:313
2987
+ #: lib/wfDiagnostic.php:204
2988
+ #: lib/wfDiagnostic.php:366
2989
+ #: lib/wfDiagnostic.php:427
2990
  #: views/diagnostics/text.php:144
2991
  #: views/diagnostics/text.php:171
2992
  #: views/scanner/issue-base.php:116
2993
  msgid "None"
2994
  msgstr ""
2995
 
2996
+ #: lib/menu_tools_diagnostic.php:287
2997
  #: views/diagnostics/text.php:145
2998
  msgid "WordPress cookie domain"
2999
  msgstr ""
3000
 
3001
+ #: lib/menu_tools_diagnostic.php:288
3002
  #: views/diagnostics/text.php:146
3003
  msgid "WordPress cookie path"
3004
  msgstr ""
3005
 
3006
+ #: lib/menu_tools_diagnostic.php:289
3007
  #: views/diagnostics/text.php:147
3008
  msgid "WordPress site cookie path"
3009
  msgstr ""
3010
 
3011
+ #: lib/menu_tools_diagnostic.php:290
3012
  #: views/diagnostics/text.php:148
3013
  msgid "WordPress admin cookie path"
3014
  msgstr ""
3015
 
3016
+ #: lib/menu_tools_diagnostic.php:291
3017
  #: views/diagnostics/text.php:149
3018
  msgid "WordPress plugins cookie path"
3019
  msgstr ""
3020
 
3021
+ #: lib/menu_tools_diagnostic.php:292
3022
  #: views/diagnostics/text.php:150
3023
  msgid "URL redirected to if the visitor tries to access a nonexistent blog"
3024
  msgstr ""
3025
 
3026
+ #: lib/menu_tools_diagnostic.php:293
3027
  #: views/diagnostics/text.php:151
3028
  msgid "Concatenate JavaScript files"
3029
  msgstr ""
3030
 
3031
+ #: lib/menu_tools_diagnostic.php:294
3032
  #: views/diagnostics/text.php:152
3033
  msgid "WordPress memory limit"
3034
  msgstr ""
3035
 
3036
+ #: lib/menu_tools_diagnostic.php:295
3037
  #: views/diagnostics/text.php:153
3038
  msgid "Administrative memory limit"
3039
  msgstr ""
3040
 
3041
+ #: lib/menu_tools_diagnostic.php:296
3042
  #: views/diagnostics/text.php:154
3043
  msgid "Built-in caching"
3044
  msgstr ""
3045
 
3046
+ #: lib/menu_tools_diagnostic.php:297
3047
  #: views/diagnostics/text.php:155
3048
  msgid "Custom \"users\" table"
3049
  msgstr ""
3050
 
3051
  #. translators: WordPress custom user table.
3052
  #. translators: WordPress custom user meta table.
 
3053
  #: lib/menu_tools_diagnostic.php:297
3054
+ #: lib/menu_tools_diagnostic.php:298
3055
  #: views/diagnostics/text.php:155
3056
  #: views/diagnostics/text.php:156
3057
  msgid "Set: %s"
3058
  msgstr ""
3059
 
3060
  #. translators: WordPress custom user table.
3061
+ #: lib/menu_tools_diagnostic.php:298
3062
  #: views/diagnostics/text.php:156
3063
  msgid "Custom \"usermeta\" table"
3064
  msgstr ""
3065
 
3066
  #. translators: WordPress custom user meta table.
3067
+ #: lib/menu_tools_diagnostic.php:299
3068
  #: views/diagnostics/text.php:157
3069
  msgid "Overridden permissions for a new folder"
3070
  msgstr ""
3071
 
3072
+ #: lib/menu_tools_diagnostic.php:300
3073
  #: views/diagnostics/text.php:158
3074
  msgid "Overridden permissions for a new file"
3075
  msgstr ""
3076
 
3077
+ #: lib/menu_tools_diagnostic.php:301
3078
  #: views/diagnostics/text.php:159
3079
  msgid "Alternate WP cron"
3080
  msgstr ""
3081
 
3082
+ #: lib/menu_tools_diagnostic.php:302
3083
  #: views/diagnostics/text.php:160
3084
  msgid "WP cron status"
3085
  msgstr ""
3086
 
3087
+ #: lib/menu_tools_diagnostic.php:303
3088
  #: views/diagnostics/text.php:161
3089
  msgid "Cron running frequency lock"
3090
  msgstr ""
3091
 
3092
+ #: lib/menu_tools_diagnostic.php:304
3093
  #: views/diagnostics/text.php:162
3094
  msgid "Interval the trash is automatically emptied at in days"
3095
  msgstr ""
3096
 
3097
+ #: lib/menu_tools_diagnostic.php:304
3098
+ #: lib/wordfenceClass.php:4260
3099
  #: views/diagnostics/text.php:162
3100
  msgid "Never"
3101
  msgstr ""
3102
 
3103
+ #: lib/menu_tools_diagnostic.php:305
3104
  #: views/diagnostics/text.php:163
3105
  msgid "Automatic database repair"
3106
  msgstr ""
3107
 
3108
+ #: lib/menu_tools_diagnostic.php:306
3109
  #: views/diagnostics/text.php:164
3110
  msgid "Do not upgrade global tables"
3111
  msgstr ""
3112
 
3113
+ #: lib/menu_tools_diagnostic.php:307
3114
  #: views/diagnostics/text.php:165
3115
  msgid "Disallow plugin/theme editing"
3116
  msgstr ""
3117
 
3118
+ #: lib/menu_tools_diagnostic.php:308
3119
  #: views/diagnostics/text.php:166
3120
  msgid "Disallow plugin/theme update and installation"
3121
  msgstr ""
3122
 
3123
+ #: lib/menu_tools_diagnostic.php:309
3124
  #: views/diagnostics/text.php:167
3125
  msgid "Overwrite image edits when restoring the original"
3126
  msgstr ""
3127
 
3128
+ #: lib/menu_tools_diagnostic.php:310
3129
  #: views/diagnostics/text.php:168
3130
  msgid "Force SSL for administrative logins"
3131
  msgstr ""
3132
 
3133
+ #: lib/menu_tools_diagnostic.php:311
3134
  #: views/diagnostics/text.php:169
3135
  msgid "Block external URL requests"
3136
  msgstr ""
3137
 
3138
+ #: lib/menu_tools_diagnostic.php:312
3139
  #: views/diagnostics/text.php:170
3140
  msgid "Allowlisted hosts"
3141
  msgstr ""
3142
 
3143
+ #: lib/menu_tools_diagnostic.php:313
3144
  #: views/diagnostics/text.php:171
3145
  msgid "Automatic WP Core updates"
3146
  msgstr ""
3147
 
3148
+ #: lib/menu_tools_diagnostic.php:313
3149
  #: views/diagnostics/text.php:171
3150
  msgid "Everything"
3151
  msgstr ""
3152
 
3153
+ #: lib/menu_tools_diagnostic.php:313
3154
  #: views/diagnostics/text.php:171
3155
  msgid "Default"
3156
  msgstr ""
3157
 
3158
+ #: lib/menu_tools_diagnostic.php:314
3159
  #: views/diagnostics/text.php:172
3160
  msgid "Hostname for a proxy server"
3161
  msgstr ""
3162
 
3163
+ #: lib/menu_tools_diagnostic.php:315
3164
  #: views/diagnostics/text.php:173
3165
  msgid "Port for a proxy server"
3166
  msgstr ""
3167
 
3168
+ #: lib/menu_tools_diagnostic.php:316
3169
  #: views/diagnostics/text.php:174
3170
  msgid "Multisite enabled"
3171
  msgstr ""
3172
 
3173
+ #: lib/menu_tools_diagnostic.php:317
3174
  #: views/diagnostics/text.php:175
3175
  msgid "Multisite/network ability enabled"
3176
  msgstr ""
3177
 
3178
+ #: lib/menu_tools_diagnostic.php:318
3179
  #: views/diagnostics/text.php:176
3180
  msgid "Multisite enabled, WordPress will load the /wp-content/sunrise.php file"
3181
  msgstr ""
3182
 
3183
+ #: lib/menu_tools_diagnostic.php:319
3184
  #: views/diagnostics/text.php:177
3185
  msgid "Multisite enabled, subdomain installation constant"
3186
  msgstr ""
3187
 
3188
+ #: lib/menu_tools_diagnostic.php:320
3189
  #: views/diagnostics/text.php:178
3190
  msgid "Multisite enabled, Older subdomain installation constant"
3191
  msgstr ""
3192
 
3193
+ #: lib/menu_tools_diagnostic.php:321
3194
  #: views/diagnostics/text.php:179
3195
  msgid "Defines the multisite domain for the current site"
3196
  msgstr ""
3197
 
3198
+ #: lib/menu_tools_diagnostic.php:322
3199
  #: views/diagnostics/text.php:180
3200
  msgid "Defines the multisite path for the current site"
3201
  msgstr ""
3202
 
3203
+ #: lib/menu_tools_diagnostic.php:323
3204
  #: views/diagnostics/text.php:181
3205
  msgid "Defines the multisite database ID for the current site"
3206
  msgstr ""
3207
 
3208
+ #: lib/menu_tools_diagnostic.php:324
3209
  #: views/diagnostics/text.php:182
3210
  msgid "Disable the fatal error handler"
3211
  msgstr ""
3212
 
3213
+ #: lib/menu_tools_diagnostic.php:358
3214
  #: views/diagnostics/text.php:220
3215
  msgid "WordPress Plugins"
3216
  msgstr ""
3217
 
3218
+ #: lib/menu_tools_diagnostic.php:359
3219
  #: views/diagnostics/text.php:220
3220
  msgid "Status of installed plugins."
3221
  msgstr ""
3222
 
3223
  #. translators: Plugin version.
3224
  #. translators: Theme version.
3225
+ #: lib/menu_tools_diagnostic.php:383
3226
+ #: lib/menu_tools_diagnostic.php:429
3227
+ #: lib/menu_tools_diagnostic.php:528
3228
  #: views/diagnostics/text.php:238
3229
  #: views/diagnostics/text.php:277
3230
  #: views/diagnostics/text.php:351
3231
  msgid "Version %s"
3232
  msgstr ""
3233
 
3234
+ #: lib/menu_tools_diagnostic.php:387
3235
  #: views/diagnostics/text.php:242
3236
  msgid "Network Activated"
3237
  msgstr ""
3238
 
3239
+ #: lib/menu_tools_diagnostic.php:389
3240
+ #: lib/menu_tools_diagnostic.php:432
3241
+ #: lib/menu_tools_diagnostic.php:488
3242
+ #: lib/menu_tools_diagnostic.php:531
3243
  #: views/diagnostics/text.php:244
3244
  #: views/diagnostics/text.php:282
3245
  #: views/diagnostics/text.php:324
3247
  msgid "Active"
3248
  msgstr ""
3249
 
3250
+ #: lib/menu_tools_diagnostic.php:391
3251
+ #: lib/menu_tools_diagnostic.php:490
3252
+ #: lib/menu_tools_diagnostic.php:533
3253
  #: views/diagnostics/text.php:246
3254
  #: views/diagnostics/text.php:324
3255
  #: views/diagnostics/text.php:357
3256
  msgid "Inactive"
3257
  msgstr ""
3258
 
3259
+ #: lib/menu_tools_diagnostic.php:403
3260
  #: views/diagnostics/text.php:258
3261
  msgid "Must-Use WordPress Plugins"
3262
  msgstr ""
3263
 
3264
+ #: lib/menu_tools_diagnostic.php:404
3265
  #: views/diagnostics/text.php:258
3266
  msgid "WordPress \"mu-plugins\" that are always active, including those provided by hosts."
3267
  msgstr ""
3268
 
3269
+ #: lib/menu_tools_diagnostic.php:439
3270
  #: views/diagnostics/text.php:287
3271
  msgid "No MU-Plugins"
3272
  msgstr ""
3273
 
3274
+ #: lib/menu_tools_diagnostic.php:451
3275
  #: views/diagnostics/text.php:296
3276
  msgid "Drop-In WordPress Plugins"
3277
  msgstr ""
3278
 
3279
+ #: lib/menu_tools_diagnostic.php:452
3280
  #: views/diagnostics/text.php:296
3281
  msgid "WordPress \"drop-in\" plugins that are active."
3282
  msgstr ""
3283
 
3284
+ #: lib/menu_tools_diagnostic.php:465
3285
+ #: views/diagnostics/text.php:302
3286
+ msgid "Advanced caching plugin"
3287
+ msgstr ""
3288
+
3289
+ #: lib/menu_tools_diagnostic.php:466
3290
+ #: views/diagnostics/text.php:303
3291
+ msgid "Custom database class"
3292
+ msgstr ""
3293
+
3294
+ #: lib/menu_tools_diagnostic.php:467
3295
+ #: views/diagnostics/text.php:304
3296
+ msgid "Custom database error message"
3297
+ msgstr ""
3298
+
3299
+ #: lib/menu_tools_diagnostic.php:468
3300
+ #: views/diagnostics/text.php:305
3301
+ msgid "Custom installation script"
3302
+ msgstr ""
3303
+
3304
+ #: lib/menu_tools_diagnostic.php:469
3305
+ #: views/diagnostics/text.php:306
3306
+ msgid "Custom maintenance message"
3307
+ msgstr ""
3308
+
3309
+ #: lib/menu_tools_diagnostic.php:470
3310
+ #: views/diagnostics/text.php:307
3311
+ msgid "External object cache"
3312
+ msgstr ""
3313
+
3314
+ #: lib/menu_tools_diagnostic.php:471
3315
+ #: views/diagnostics/text.php:308
3316
+ msgid "Custom PHP error message"
3317
+ msgstr ""
3318
+
3319
+ #: lib/menu_tools_diagnostic.php:472
3320
+ #: views/diagnostics/text.php:309
3321
+ msgid "Custom PHP fatal error handler"
3322
+ msgstr ""
3323
+
3324
+ #: lib/menu_tools_diagnostic.php:474
3325
+ #: views/diagnostics/text.php:311
3326
+ msgid "Executed before Multisite is loaded"
3327
+ msgstr ""
3328
+
3329
+ #: lib/menu_tools_diagnostic.php:475
3330
+ #: views/diagnostics/text.php:312
3331
+ msgid "Custom site deleted message"
3332
+ msgstr ""
3333
+
3334
+ #: lib/menu_tools_diagnostic.php:476
3335
+ #: views/diagnostics/text.php:313
3336
+ msgid "Custom site inactive message"
3337
+ msgstr ""
3338
+
3339
+ #: lib/menu_tools_diagnostic.php:477
3340
+ #: views/diagnostics/text.php:314
3341
+ msgid "Custom site suspended message"
3342
+ msgstr ""
3343
+
3344
+ #: lib/menu_tools_diagnostic.php:502
3345
  #: views/diagnostics/text.php:332
3346
  #: views/reports/activity-report-email-inline.php:392
3347
  #: views/reports/activity-report.php:191
3348
  msgid "Themes"
3349
  msgstr ""
3350
 
3351
+ #: lib/menu_tools_diagnostic.php:503
3352
  #: views/diagnostics/text.php:332
3353
  msgid "Status of installed themes."
3354
  msgstr ""
3355
 
3356
+ #: lib/menu_tools_diagnostic.php:541
3357
  #: views/diagnostics/text.php:366
3358
  msgid "No Themes"
3359
  msgstr ""
3360
 
3361
+ #: lib/menu_tools_diagnostic.php:553
3362
  #: views/diagnostics/text.php:375
3363
  msgid "Cron Jobs"
3364
  msgstr ""
3365
 
3366
+ #: lib/menu_tools_diagnostic.php:554
3367
  #: views/diagnostics/text.php:375
3368
  msgid "List of WordPress cron jobs scheduled by WordPress, plugins, or themes."
3369
  msgstr ""
3370
 
3371
+ #: lib/menu_tools_diagnostic.php:574
3372
  #: views/diagnostics/text.php:390
3373
  msgid "Overdue"
3374
  msgstr ""
3375
 
3376
+ #: lib/menu_tools_diagnostic.php:606
3377
  #: views/diagnostics/text.php:402
3378
  msgid "Database Tables"
3379
  msgstr ""
3380
 
3381
+ #: lib/menu_tools_diagnostic.php:607
3382
  #: views/diagnostics/text.php:402
3383
  msgid "Database table names, sizes, timestamps, and other metadata."
3384
  msgstr ""
3385
 
3386
+ #: lib/menu_tools_diagnostic.php:617
3387
  msgid "Wordfence Table Check"
3388
  msgstr ""
3389
 
3390
+ #: lib/menu_tools_diagnostic.php:620
3391
  #: views/diagnostics/text.php:420
3392
  msgid "Unable to verify - table count too high"
3393
  msgstr ""
3394
 
3395
+ #: lib/menu_tools_diagnostic.php:649
3396
  #: views/diagnostics/text.php:453
3397
  msgid "All Tables Exist"
3398
  msgstr ""
3399
 
3400
  #. translators: 1. WordPress table prefix. 2. Wordfence table case. 3. List of database tables.
3401
+ #: lib/menu_tools_diagnostic.php:653
3402
  msgid "Tables missing (prefix %1$s, %2$s): %3$s"
3403
  msgstr ""
3404
 
3405
  #. translators: 1. WordPress table prefix. 2. Wordfence table case. 3. List of database tables.
3406
  #. translators: 1. WordPress table prefix. 2. Wordfence tables.
3407
+ #: lib/menu_tools_diagnostic.php:653
3408
  #: views/diagnostics/text.php:455
3409
  msgid "lowercase"
3410
  msgstr ""
3411
 
3412
  #. translators: 1. WordPress table prefix. 2. Wordfence table case. 3. List of database tables.
3413
  #. translators: 1. WordPress table prefix. 2. Wordfence tables.
3414
+ #: lib/menu_tools_diagnostic.php:653
3415
  #: views/diagnostics/text.php:455
3416
  msgid "regular case"
3417
  msgstr ""
3418
 
3419
  #. translators: Row/record count.
3420
+ #: lib/menu_tools_diagnostic.php:699
3421
  #: views/diagnostics/text.php:489
3422
  msgid "and %d more"
3423
  msgstr ""
3424
 
3425
+ #: lib/menu_tools_diagnostic.php:718
3426
  #: views/diagnostics/text.php:500
3427
  msgid "Log Files"
3428
  msgstr ""
3429
 
3430
+ #: lib/menu_tools_diagnostic.php:719
3431
  #: views/diagnostics/text.php:500
3432
  msgid "PHP error logs generated by your site, if enabled by your host."
3433
  msgstr ""
3434
 
3435
+ #: lib/menu_tools_diagnostic.php:731
3436
  #: views/diagnostics/text.php:506
3437
  #: views/reports/activity-report-email-inline.php:341
3438
  #: views/scanner/issue-file.php:8
3440
  msgid "File"
3441
  msgstr ""
3442
 
3443
+ #: lib/menu_tools_diagnostic.php:732
3444
+ #: lib/menu_tools_diagnostic.php:771
3445
+ #: lib/wordfenceClass.php:6097
3446
  msgid "Download"
3447
  msgstr ""
3448
 
3449
+ #: lib/menu_tools_diagnostic.php:740
3450
  #: views/diagnostics/text.php:513
3451
  msgid "No log files found."
3452
  msgstr ""
3453
 
3454
+ #: lib/menu_tools_diagnostic.php:760
3455
  #: views/diagnostics/text.php:532
3456
  msgid "UTC"
3457
  msgstr ""
3458
 
3459
+ #: lib/menu_tools_diagnostic.php:771
3460
  msgid "Requires downloading from the server directly"
3461
  msgstr ""
3462
 
3463
+ #: lib/menu_tools_diagnostic.php:785
3464
  #: views/diagnostics/text.php:553
3465
  msgid "Scan Issues"
3466
  msgstr ""
3467
 
3468
  #. translators: Number of scan issues.
3469
+ #: lib/menu_tools_diagnostic.php:790
3470
  #: views/diagnostics/text.php:561
3471
  msgid "New Issues (%d total)"
3472
  msgstr ""
3473
 
3474
+ #: lib/menu_tools_diagnostic.php:811
3475
+ #: lib/wordfenceClass.php:3959
3476
  #: views/diagnostics/text.php:584
3477
  msgid "No New Issues"
3478
  msgstr ""
3479
 
3480
+ #: lib/menu_tools_diagnostic.php:826
3481
  msgid "Other Tests"
3482
  msgstr ""
3483
 
3484
+ #: lib/menu_tools_diagnostic.php:827
3485
  msgid "System configuration, memory test, send test email from this server."
3486
  msgstr ""
3487
 
3488
+ #: lib/menu_tools_diagnostic.php:838
3489
  msgid "Click to view your system's configuration in a new window"
3490
  msgstr ""
3491
 
3492
+ #: lib/menu_tools_diagnostic.php:844
3493
  msgid "Test your WordPress host's available memory"
3494
  msgstr ""
3495
 
3496
+ #: lib/menu_tools_diagnostic.php:850
3497
  msgid "Send a test email from this WordPress server to an email address:"
3498
  msgstr ""
3499
 
3500
+ #: lib/menu_tools_diagnostic.php:852
3501
  msgid "Send Test Email"
3502
  msgstr ""
3503
 
3504
+ #: lib/menu_tools_diagnostic.php:857
3505
  msgid "Send a test activity report email:"
3506
  msgstr ""
3507
 
3508
+ #: lib/menu_tools_diagnostic.php:859
3509
  msgid "Send Test Activity Report"
3510
  msgstr ""
3511
 
3512
+ #: lib/menu_tools_diagnostic.php:864
3513
  msgid "Clear all Wordfence Central connection data"
3514
  msgstr ""
3515
 
3516
+ #: lib/menu_tools_diagnostic.php:865
3517
  msgid "Clear Connection Data"
3518
  msgstr ""
3519
 
3520
+ #: lib/menu_tools_diagnostic.php:877
3521
  msgid "Debugging Options"
3522
  msgstr ""
3523
 
3524
+ #: lib/menu_tools_diagnostic.php:894
3525
  msgid "Enable debugging mode (increases database load)"
3526
  msgstr ""
3527
 
3528
+ #: lib/menu_tools_diagnostic.php:906
3529
  msgid "Start all scans remotely (Try this if your scans aren't starting and your site is publicly accessible)"
3530
  msgstr ""
3531
 
3532
+ #: lib/menu_tools_diagnostic.php:918
3533
  msgid "Enable SSL Verification (Disable this if you are consistently unable to connect to the Wordfence servers.)"
3534
  msgstr ""
3535
 
3536
+ #: lib/menu_tools_diagnostic.php:930
3537
  msgid "Disable reading of php://input"
3538
  msgstr ""
3539
 
3540
+ #: lib/menu_tools_diagnostic.php:942
3541
  msgid "Enable beta threat defense feed"
3542
  msgstr ""
3543
 
3544
+ #: lib/menu_tools_diagnostic.php:961
3545
+ #: lib/wordfenceClass.php:6158
3546
  msgid "Restore Defaults"
3547
  msgstr ""
3548
 
3549
+ #: lib/menu_tools_diagnostic.php:962
3550
+ #: lib/wordfenceClass.php:6083
3551
  msgid "Cancel Changes"
3552
  msgstr ""
3553
 
3554
+ #: lib/menu_tools_diagnostic.php:963
3555
+ #: lib/wordfenceClass.php:6161
3556
  msgid "Save Changes"
3557
  msgstr ""
3558
 
3559
+ #: lib/menu_tools_diagnostic.php:980
3560
  #: views/options/block-all-options-controls.php:162
3561
  #: views/options/block-controls.php:77
3562
  msgid "Confirm Restore Defaults"
3563
  msgstr ""
3564
 
3565
+ #: lib/menu_tools_diagnostic.php:981
3566
  msgid "Are you sure you want to restore the default Diagnostics settings? This will undo any custom changes you have made to the options on this page."
3567
  msgstr ""
3568
 
3569
+ #: lib/menu_tools_diagnostic.php:983
3570
  #: views/options/block-all-options-controls.php:165
3571
  #: views/options/block-controls.php:80
3572
  msgid "Restore<span class=\"wf-hidden-xs\"> Defaults</span>"
3574
 
3575
  #. translators: URL to support page.
3576
  #: lib/menu_tools_importExport.php:16
3577
+ msgid "<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wf-help-link\">Learn more<span class=\"wf-hidden-xs\"> about importing and exporting options</span><span class=\"screen-reader-text\"> (opens in new tab)</span></a>"
 
 
 
 
3578
  msgstr ""
3579
 
3580
+ #: lib/menu_tools_importExport.php:20
3581
+ msgid "To clone one site's configuration to another, use the import/export tools below."
 
 
 
 
 
3582
  msgstr ""
3583
 
3584
  #. translators: URL to support page.
3585
  #: lib/menu_tools_livetraffic.php:44
3586
+ msgid "<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wf-help-link\">Learn more<span class=\"wf-hidden-xs\"> about Live Traffic</span><span class=\"screen-reader-text\"> (opens in new tab)</span></a>"
3587
  msgstr ""
3588
 
3589
  #: lib/menu_tools_livetraffic.php:51
3605
  #. translators: URL to support page.
3606
  #: lib/menu_tools_livetraffic.php:77
3607
  #: lib/menu_tools_livetraffic.php:86
3608
+ msgid " (host setting <a href=\"%s\" class=\"wfhelp\" target=\"_blank\" rel=\"noopener noreferrer\"><span class=\"screen-reader-text\"> (opens in new tab)</span></a>)"
3609
  msgstr ""
3610
 
3611
  #: lib/menu_tools_livetraffic.php:78
3623
  #: lib/menu_tools_livetraffic.php:100
3624
  #: lib/menu_tools_livetraffic.php:227
3625
  #: lib/menu_tools_livetraffic.php:458
3626
+ #: lib/wordfenceClass.php:6120
3627
  msgid "Human"
3628
  msgstr ""
3629
 
3630
  #: lib/menu_tools_livetraffic.php:101
3631
  #: lib/menu_tools_livetraffic.php:228
3632
  #: lib/menu_tools_livetraffic.php:458
3633
+ #: lib/wordfenceClass.php:6082
3634
  msgid "Bot"
3635
  msgstr ""
3636
 
3639
  msgstr ""
3640
 
3641
  #: lib/menu_tools_livetraffic.php:103
3642
+ #: lib/wfDiagnostic.php:762
3643
+ #: lib/wordfenceClass.php:6074
3644
  msgid "Blocked"
3645
  msgstr ""
3646
 
3733
  msgstr ""
3734
 
3735
  #: lib/menu_tools_livetraffic.php:286
3736
+ #: lib/wordfenceClass.php:6189
3737
  msgid "Type"
3738
  msgstr ""
3739
 
3746
  msgstr ""
3747
 
3748
  #: lib/menu_tools_livetraffic.php:289
3749
+ #: lib/wf503.php:368
3750
  #: views/reports/activity-report-email-inline.php:294
3751
  msgid "Time"
3752
  msgstr ""
3756
  msgstr ""
3757
 
3758
  #: lib/menu_tools_livetraffic.php:291
3759
+ #: lib/wordfenceClass.php:4242
3760
  #: views/blocking/blocking-create.php:193
3761
  msgid "Hostname"
3762
  msgstr ""
3898
  msgid "Live traffic now defaults to a summary view. Details are viewable by clicking anywhere within the summary record. To switch to the expanded view, click the <strong>Expand All Records</strong> switch. New installations will only log security-related traffic by default, though your previous setting has been preserved."
3899
  msgstr ""
3900
 
 
 
 
 
 
 
3901
  #: lib/menu_tools_twoFactor.php:16
3902
  msgid "Learn more<span class=\"wf-hidden-xs\"> about Two-Factor Authentication</span>"
3903
  msgstr ""
4096
  msgid "Your site is now using the legacy two-factor authentication system."
4097
  msgstr ""
4098
 
 
 
 
 
 
 
 
4099
  #. translators: URL to support page.
4100
  #: lib/menu_tools_whois.php:19
4101
+ msgid "<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wf-help-link\">Learn more<span class=\"wf-hidden-xs\"> about Whois Lookup</span><span class=\"screen-reader-text\"> (opens in new tab)</span></a>"
4102
  msgstr ""
4103
 
4104
  #: lib/menu_tools_whois.php:23
4109
  msgid "How to block a network"
4110
  msgstr ""
4111
 
4112
+ #. translators: Hostname or IP address.
4113
+ #: lib/menu_tools_whois.php:40
4114
+ msgid "You've chosen to block the network that <span style=\"color: #F00;\">%s</span> is part of. We've marked the networks we found that this IP address belongs to in red below. Make sure you read all the WHOIS information so that you see all networks this IP belongs to. We recommend blocking the network with the lowest number of addresses. You may find this is listed at the end as part of the 'rWHOIS' query which contacts the local WHOIS server that is run by the network administrator."
4115
+ msgstr ""
4116
+
4117
  #: lib/menu_tools_whois.php:95
4118
+ #: lib/wordfenceClass.php:6102
4119
  msgid "Enter a valid IP or domain"
4120
  msgstr ""
4121
 
4122
  #: lib/menu_tools_whois.php:95
4123
+ #: lib/wordfenceClass.php:6145
4124
  msgid "Please enter a valid IP address or domain name for your whois lookup."
4125
  msgstr ""
4126
 
4127
  #: lib/menu_tools_whois.php:99
4128
+ #: lib/wordfenceClass.php:6126
4129
  msgid "Loading..."
4130
  msgstr ""
4131
 
4132
  #: lib/menu_tools_whois.php:104
4133
+ #: lib/wordfenceClass.php:6132
4134
  msgid "Look up IP or Domain"
4135
  msgstr ""
4136
 
4160
 
4161
  #: lib/menu_wordfence_central.php:44
4162
  #: lib/menu_wordfence_central.php:57
4163
+ #: lib/wordfenceClass.php:6638
4164
  msgid "Wordfence Central"
4165
  msgstr ""
4166
 
4243
  #. translators: Error message.
4244
  #: lib/rest-api/wfRESTConfigController.php:215
4245
  #: lib/rest-api/wfRESTConfigController.php:258
4246
+ #: lib/wordfenceClass.php:4526
4247
  msgid "An error occurred while saving the configuration: %s"
4248
  msgstr ""
4249
 
4250
  #. translators: Error message.
4251
  #: lib/rest-api/wfRESTConfigController.php:226
4252
  #: lib/rest-api/wfRESTConfigController.php:269
4253
+ #: lib/wordfenceClass.php:4535
4254
  msgid "Errors occurred while saving the configuration: %s"
4255
  msgstr ""
4256
 
4257
  #: lib/rest-api/wfRESTConfigController.php:231
4258
  #: lib/rest-api/wfRESTConfigController.php:274
4259
+ #: lib/wordfenceClass.php:4540
4260
  msgid "Errors occurred while saving the configuration."
4261
  msgstr ""
4262
 
4307
  msgid "Your access to this site has been limited"
4308
  msgstr ""
4309
 
4310
+ #: lib/wf503.php:351
4311
  msgid "Your access to this site has been limited by the site owner"
4312
  msgstr ""
4313
 
4314
+ #: lib/wf503.php:352
4315
  msgid "Your access to this service has been limited. (HTTP response code 503)"
4316
  msgstr ""
4317
 
4318
+ #: lib/wf503.php:353
4319
+ #: lib/wfLockedOut.php:358
4320
  msgid "If you think you have been blocked in error, contact the owner of this site for assistance."
4321
  msgstr ""
4322
 
4323
+ #: lib/wf503.php:361
4324
+ #: lib/wfLockedOut.php:370
4325
  msgid "Block Technical Data"
4326
  msgstr ""
4327
 
4328
+ #: lib/wf503.php:364
4329
  msgid "Block Reason"
4330
  msgstr ""
4331
 
4332
+ #: lib/wf503.php:384
4333
+ #: lib/wfLockedOut.php:393
4334
  msgid "About Wordfence"
4335
  msgstr ""
4336
 
4337
+ #: lib/wf503.php:385
4338
+ #: lib/wfLockedOut.php:394
4339
+ msgid "Wordfence is a security plugin installed on over 4 million WordPress sites. The owner of this site is using Wordfence to manage access to their site."
4340
  msgstr ""
4341
 
4342
+ #: lib/wf503.php:386
4343
+ #: lib/wfLockedOut.php:395
4344
  msgid "You can also read the documentation to learn about Wordfence's blocking tools, or visit wordfence.com to learn more about Wordfence."
4345
  msgstr ""
4346
 
4347
  #. translators: Support URL.
4348
+ #: lib/wf503.php:390
4349
+ msgid "Click here to learn more: <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Documentation<span class=\"screen-reader-text\"> ("
 
4350
  msgstr ""
4351
 
4352
  #. translators: Localized date.
4353
+ #: lib/wf503.php:391
4354
+ #: lib/wfLockedOut.php:400
4355
  msgid "Generated by Wordfence at %s"
4356
  msgstr ""
4357
 
4358
  #. translators: Localized date.
4359
+ #: lib/wf503.php:391
4360
+ #: lib/wfLockedOut.php:400
4361
  msgid "Your computer's time:"
4362
  msgstr ""
4363
 
4373
  msgstr ""
4374
 
4375
  #: lib/wfActivityReport.php:584
4376
+ #: lib/wordfenceClass.php:8371
4377
  msgid "Blocked because the IP is blocklisted"
4378
  msgstr ""
4379
 
4380
  #. translators: Reason for firewall action.
4381
  #: lib/wfActivityReport.php:587
4382
+ #: lib/wordfenceClass.php:8374
4383
  msgid "Blocked for %s"
4384
  msgstr ""
4385
 
4386
  #. translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value.
4387
  #: lib/wfActivityReport.php:599
4388
+ #: lib/wordfenceClass.php:8388
4389
  msgid "Blocked for %1$s in query string: %2$s = %3$s"
4390
  msgstr ""
4391
 
4392
  #. translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value.
4393
  #: lib/wfActivityReport.php:602
4394
+ #: lib/wordfenceClass.php:8393
4395
  msgid "Blocked for %1$s in POST body: %2$s = %3$s"
4396
  msgstr ""
4397
 
4398
  #. translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value.
4399
  #: lib/wfActivityReport.php:605
4400
+ #: lib/wordfenceClass.php:8398
4401
  msgid "Blocked for %1$s in cookie: %2$s = %3$s"
4402
  msgstr ""
4403
 
4404
  #. translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value.
4405
  #: lib/wfActivityReport.php:608
4406
+ #: lib/wordfenceClass.php:8403
4407
  msgid "Blocked for %1$s in file: %2$s = %3$s"
4408
  msgstr ""
4409
 
4410
  #: lib/wfActivityReport.php:752
4411
+ #: lib/wfDiagnostic.php:494
4412
  #: models/block/wfBlock.php:95
4413
  msgid "Unknown"
4414
  msgstr ""
4415
 
4416
+ #: lib/wfAdminNoticeQueue.php:193
4417
+ #: lib/wordfenceClass.php:6095
4418
+ #: lib/wordfenceClass.php:6350
4419
+ #: lib/wordfenceClass.php:6385
4420
+ #: lib/wordfenceClass.php:8926
4421
  msgid "Dismiss"
4422
  msgstr ""
4423
 
4555
  msgid "There was an unknown error connecting to the Wordfence scanning servers."
4556
  msgstr ""
4557
 
4558
+ #. translators: HTTP status code.
4559
+ #: lib/wfAPI.php:163
4560
+ msgid "The Wordfence scanning servers are currently unavailable. This may be for maintenance or a temporary outage. If this still occurs in an hour, please contact support. [%s]"
4561
+ msgstr ""
4562
+
4563
  #: lib/wfBulkCountries.php:5
4564
  msgid "Andorra"
4565
  msgstr ""
5649
  msgstr ""
5650
 
5651
  #: lib/wfConfig.php:1174
5652
+ #: lib/wordfenceClass.php:7481
5653
  msgid "The grace period end time must be in the future."
5654
  msgstr ""
5655
 
5687
  msgstr ""
5688
 
5689
  #: lib/wfConfig.php:1300
5690
+ #: lib/wordfenceClass.php:4411
5691
  msgid "The license key entered is not in a valid format. It must contain only numbers and the letters A-F."
5692
  msgstr ""
5693
 
5854
 
5855
  #. translators: Support URL.
5856
  #: lib/wfDiagnostic.php:111
5857
+ msgid "PHP version >= PHP 5.6.20<br><em> (<a href=\"https://wordpress.org/about/requirements/\" target=\"_blank\" rel=\"noopener noreferrer\">Minimum version required by WordPress</a>)</em> <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wfhelp\"><span class=\"screen-reader-text\"> (opens in new tab)</span></a>"
5858
  msgstr ""
5859
 
5860
  #. translators: Support URL.
5895
  msgstr ""
5896
 
5897
  #: lib/wfDiagnostic.php:121
5898
+ msgid "Checking <code>display_errors</code><br><em> (<a href=\"http://php.net/manual/en/errorfunc.configuration.php#ini.display-errors\" target=\"_blank\" rel=\"noopener noreferrer\">Should be disabled on production servers<span class=\"screen-reader-text\"> (opens in new tab)</span></a>)</em>"
5899
  msgstr ""
5900
 
5901
  #: lib/wfDiagnostic.php:125
5927
  msgstr ""
5928
 
5929
  #: lib/wfDiagnostic.php:137
5930
+ #: lib/wfDiagnostic.php:832
5931
  msgid "Server Time"
5932
  msgstr ""
5933
 
5940
  msgstr ""
5941
 
5942
  #: lib/wfDiagnostic.php:140
5943
+ msgid "NTP Status"
5944
  msgstr ""
5945
 
5946
  #: lib/wfDiagnostic.php:141
5947
+ msgid "TOTP Time Source"
5948
+ msgstr ""
5949
+
5950
+ #: lib/wfDiagnostic.php:142
5951
  msgid "WordPress Time Zone"
5952
  msgstr ""
5953
 
5954
  #. translators: Number of jobs.
5955
+ #: lib/wfDiagnostic.php:199
5956
  msgid "%d Job Overdue"
5957
  msgid_plural "%d Jobs Overdue"
5958
  msgstr[0] ""
5959
  msgstr[1] ""
5960
 
5961
  #. translators: Number of jobs.
5962
+ #: lib/wfDiagnostic.php:199
5963
  msgid "Normal"
5964
  msgstr ""
5965
 
5966
+ #: lib/wfDiagnostic.php:218
5967
+ #: lib/wfDiagnostic.php:221
5968
  msgid "No files readable"
5969
  msgstr ""
5970
 
5971
  #. translators: File name.
5972
+ #: lib/wfDiagnostic.php:233
5973
+ #: lib/wfDiagnostic.php:269
5974
  msgid "File \"%s\" does not exist"
5975
  msgstr ""
5976
 
5977
  #. translators: File path.
5978
+ #: lib/wfDiagnostic.php:236
5979
  msgid "File \"%s\" is unreadable"
5980
  msgstr ""
5981
 
5982
+ #: lib/wfDiagnostic.php:254
5983
+ #: lib/wfDiagnostic.php:257
5984
  msgid "No files writable"
5985
  msgstr ""
5986
 
5987
  #. translators: File name.
5988
+ #: lib/wfDiagnostic.php:272
5989
  msgid "File \"%s\" is unwritable"
5990
  msgstr ""
5991
 
5992
+ #: lib/wfDiagnostic.php:342
5993
  msgid "Basic config writing"
5994
  msgstr ""
5995
 
5996
+ #: lib/wfDiagnostic.php:354
5997
  msgid "Serialized config writing"
5998
  msgstr ""
5999
 
6000
+ #: lib/wfDiagnostic.php:362
6001
  msgid "(default)"
6002
  msgstr ""
6003
 
6004
+ #: lib/wfDiagnostic.php:372
6005
+ msgid "Unknown (mixed plugin version)"
6006
+ msgstr ""
6007
+
6008
  #. translators: Unix file permissions in octal (example 0777).
6009
+ #: lib/wfDiagnostic.php:404
6010
  msgid "%s - using constant"
6011
  msgstr ""
6012
 
6013
  #. translators: Unix file permissions in octal (example 0777).
6014
+ #: lib/wfDiagnostic.php:417
6015
  msgid "%s - using template"
6016
  msgstr ""
6017
 
6018
+ #: lib/wfDiagnostic.php:421
6019
  msgid "0660 - using default"
6020
  msgstr ""
6021
 
6022
+ #: lib/wfDiagnostic.php:455
6023
  msgid "Unavailable"
6024
  msgstr ""
6025
 
6026
+ #: lib/wfDiagnostic.php:623
6027
+ #: lib/wfDiagnostic.php:626
6028
  msgid "wp_remote_post() test to noc1.wordfence.com failed! Response was: "
6029
  msgstr ""
6030
 
6031
+ #: lib/wfDiagnostic.php:627
6032
  msgid "This likely means that your hosting provider is blocking requests to noc1.wordfence.com or has set up a proxy that is not behaving itself."
6033
  msgstr ""
6034
 
6035
+ #: lib/wfDiagnostic.php:660
6036
+ #: lib/wfDiagnostic.php:663
6037
  msgid "wp_remote_post() test back to this server failed! Response was: "
6038
  msgstr ""
6039
 
6040
+ #: lib/wfDiagnostic.php:664
6041
  msgid "This additional info may help you diagnose the issue. The response headers we received were:"
6042
  msgstr ""
6043
 
6044
  #. translators: PHP super global key.
6045
+ #: lib/wfDiagnostic.php:693
6046
  msgid "We cannot read $_SERVER[%s]"
6047
  msgstr ""
6048
 
6049
+ #: lib/wfDiagnostic.php:705
6050
  msgid "Should be: "
6051
  msgstr ""
6052
 
6053
+ #: lib/wfDiagnostic.php:786
6054
+ msgid "Disabled "
6055
+ msgstr ""
6056
+
6057
+ #: lib/wfDiagnostic.php:788
6058
+ msgid "(WORDFENCE_LS_DISABLE_NTP)"
6059
+ msgstr ""
6060
+
6061
+ #: lib/wfDiagnostic.php:791
6062
+ msgid "(failures exceeded limit)"
6063
+ msgstr ""
6064
+
6065
+ #: lib/wfDiagnostic.php:794
6066
+ msgid "(settings)"
6067
+ msgstr ""
6068
+
6069
+ #: lib/wfDiagnostic.php:801
6070
+ msgid " (%d of %d attempts remaining)"
6071
+ msgstr ""
6072
+
6073
+ #: lib/wfDiagnostic.php:818
6074
  msgid "NTP"
6075
  msgstr ""
6076
 
6102
  msgid "You are temporarily locked out"
6103
  msgstr ""
6104
 
6105
+ #: lib/wfLockedOut.php:356
6106
  msgid "Your access to this site has been temporarily limited by the site owner"
6107
  msgstr ""
6108
 
6109
+ #: lib/wfLockedOut.php:357
6110
  msgid "Your access to this service has been temporarily limited. Please try again in a few minutes. (HTTP response code 503)"
6111
  msgstr ""
6112
 
6113
+ #: lib/wfLockedOut.php:365
6114
  msgid "Return to the site home page"
6115
  msgstr ""
6116
 
6117
+ #: lib/wfLockedOut.php:366
6118
  msgid "Attempt to return to the admin login page (you may still be locked out)"
6119
  msgstr ""
6120
 
6121
+ #: lib/wfLockedOut.php:373
6122
  msgid "Block Reason:"
6123
  msgstr ""
6124
 
6125
+ #: lib/wfLockedOut.php:374
6126
  msgid "You have been temporarily locked out of this system. This means that you will not be able to log in for a while."
6127
  msgstr ""
6128
 
6129
+ #: lib/wfLockedOut.php:399
6130
+ msgid "Click here to learn more: <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Documentation<span class=\"screen-reader-text\"> (opens in new tab)</span></a>"
6131
+ msgstr ""
6132
+
6133
  #: lib/wfLog.php:217
6134
  msgid "Exceeded the maximum global requests per minute for crawlers or humans."
6135
  msgstr ""
6189
  msgstr ""
6190
 
6191
  #: lib/wfLog.php:615
6192
+ #: lib/wordfenceClass.php:6133
6193
  #: waf/wfWAFIPBlocksController.php:97
6194
  msgid "Manual block by administrator"
6195
  msgstr ""
6251
  msgid "Wordfence scan script accessed directly, or WF did not receive a cronkey."
6252
  msgstr ""
6253
 
6254
+ #. translators: 1. Unix timestamp. 2. WordPress nonce. 3. Unix timestamp.
6255
+ #: lib/wfScan.php:77
6256
+ msgid "The key used to start a scan expired. The value is: %1$s and split is: %2$s and time is: %3$d"
6257
+ msgstr ""
6258
+
6259
  #: lib/wfScan.php:81
6260
  msgid "Wordfence could not find a saved cron key to start the scan so assuming it started and exiting."
6261
  msgstr ""
6318
  msgid "Contacting Wordfence to initiate scan"
6319
  msgstr ""
6320
 
6321
+ #. translators: Time until.
6322
+ #: lib/wfScan.php:181
6323
+ msgid "Deferring scheduled scan by %s"
6324
+ msgstr ""
6325
+
6326
  #: lib/wfScan.php:202
6327
  msgid "Initiating quick scan"
6328
  msgstr ""
6335
  #: lib/wfScan.php:263
6336
  #: lib/wfScan.php:278
6337
  #: lib/wfScan.php:293
6338
+ #: lib/wfScanEngine.php:441
6339
  msgid "Wordfence used %1$s of memory for scan. Server peak memory usage was: %2$s"
6340
  msgstr ""
6341
 
6368
 
6369
  #. translators: 1. Time duration. 2. Support URL.
6370
  #: lib/wfScanEngine.php:278
6371
+ msgid "The scan time limit of %1$s has been exceeded and the scan will be terminated. This limit can be customized on the options page. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Get More Information<span class=\"screen-reader-text\"> ("
6372
  msgstr ""
6373
 
6374
  #: lib/wfScanEngine.php:282
6381
  msgstr ""
6382
 
6383
  #. translators: Number of scan results.
6384
+ #: lib/wfScanEngine.php:299
6385
  msgid "Scan interrupted. You have %d new issue to fix. See below."
6386
  msgid_plural "Scan interrupted. You have %d new issues to fix. See below."
6387
  msgstr[0] ""
6388
  msgstr[1] ""
6389
 
6390
+ #: lib/wfScanEngine.php:308
6391
  msgid "Scan interrupted. No problems found prior to stopping."
6392
  msgstr ""
6393
 
6394
  #. translators: 1. Software version. 2. Software version.
6395
+ #: lib/wfScanEngine.php:320
6396
  msgid "Aborting scan because WordPress updated from version %1$s to %2$s. The scan will be reattempted later."
6397
  msgstr ""
6398
 
6399
+ #: lib/wfScanEngine.php:350
6400
  msgid "Forking during hash scan to ensure continuity."
6401
  msgstr ""
6402
 
6403
+ #: lib/wfScanEngine.php:356
6404
  msgid "Entered fork()"
6405
  msgstr ""
6406
 
6407
+ #: lib/wfScanEngine.php:359
6408
  msgid "Calling startScan(true)"
6409
  msgstr ""
6410
 
6411
  #. translators: 1. Number of files. 2. Number of plugins. 3. Number of themes. 4. Number of posts. 5. Number of comments. 6. Number of URLs. 7. Time duration.
6412
+ #: lib/wfScanEngine.php:449
6413
  msgid "Scan Complete. Scanned %1$d files, %2$d plugins, %3$d themes, %4$d posts, %5$d comments and %6$d URLs in %7$s."
6414
  msgstr ""
6415
 
6416
  #. translators: 1. Time duration.
6417
+ #: lib/wfScanEngine.php:461
6418
  msgid "Quick Scan Complete. Scanned in %s."
6419
  msgstr ""
6420
 
6421
  #. translators: Number of scan results.
6422
+ #: lib/wfScanEngine.php:470
6423
  msgid "%d ignored issue was also detected."
6424
  msgid_plural "%d ignored issues were also detected."
6425
  msgstr[0] ""
6426
  msgstr[1] ""
6427
 
6428
  #. translators: Number of scan results.
6429
+ #: lib/wfScanEngine.php:481
6430
  msgid "Scan complete. You have %d new issue to fix."
6431
  msgid_plural "Scan complete. You have %d new issues to fix."
6432
  msgstr[0] ""
6433
  msgstr[1] ""
6434
 
6435
+ #: lib/wfScanEngine.php:489
6436
  msgid "See below."
6437
  msgstr ""
6438
 
6439
+ #: lib/wfScanEngine.php:492
6440
  msgid "Scan complete. Congratulations, no new problems found."
6441
  msgstr ""
6442
 
6443
+ #: lib/wfScanEngine.php:503
6444
  msgid "Checking if your site IP is generating spam"
6445
  msgstr ""
6446
 
6447
+ #: lib/wfScanEngine.php:522
6448
  msgid "Checking if your IP is generating spam is for paid members only"
6449
  msgstr ""
6450
 
6451
+ #: lib/wfScanEngine.php:529
6452
  msgid "Checking if your site is on a domain blocklist"
6453
  msgstr ""
6454
 
6455
+ #: lib/wfScanEngine.php:534
6456
  msgid "Checking if your site is on a domain blocklist is for paid members only"
6457
  msgstr ""
6458
 
6459
  #. translators: Error message.
6460
+ #: lib/wfScanEngine.php:570
6461
  msgid "Error checking domain blocklists: %s"
6462
  msgstr ""
6463
 
6464
  #. translators: WordPress site ID.
6465
+ #: lib/wfScanEngine.php:604
6466
  msgid "The multisite blog with ID %d is listed on Google's Safe Browsing malware list."
6467
  msgstr ""
6468
 
6469
+ #: lib/wfScanEngine.php:607
6470
  msgid "Your site is listed on Google's Safe Browsing malware list."
6471
  msgstr ""
6472
 
6473
  #. translators: 1. URL. 2. URL.
6474
+ #: lib/wfScanEngine.php:611
6475
+ msgid "The URL %1$s is on the malware list. More info available at <a href=\"http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%2$s&client=googlechrome&hl=en-US\" target=\"_blank\" rel=\"noopener noreferrer\">Google Safe Browsing diagnostic page<span class=\"screen-reader-text\"> ("
6476
  msgstr ""
6477
 
6478
  #. translators: WordPress site ID.
6479
+ #: lib/wfScanEngine.php:617
6480
  msgid "The multisite blog with ID %d is listed on Google's Safe Browsing phishing list."
6481
  msgstr ""
6482
 
6483
+ #: lib/wfScanEngine.php:620
6484
  msgid "Your site is listed on Google's Safe Browsing phishing list."
6485
  msgstr ""
6486
 
6487
  #. translators: 1. URL. 2. URL.
6488
+ #: lib/wfScanEngine.php:624
6489
+ msgid "The URL %1$s is on the phishing list. More info available at <a href=\"http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%2$s&client=googlechrome&hl=en-US\" target=\"_blank\" rel=\"noopener noreferrer\">Google Safe Browsing diagnostic page<span class=\"screen-reader-text\"> ("
6490
  msgstr ""
6491
 
6492
  #. translators: WordPress site ID.
6493
+ #: lib/wfScanEngine.php:630
6494
  msgid "The multisite blog with ID %d is listed on the Wordfence domain blocklist."
6495
  msgstr ""
6496
 
6497
+ #: lib/wfScanEngine.php:633
6498
  msgid "Your site is listed on the Wordfence domain blocklist."
6499
  msgstr ""
6500
 
6501
  #. translators: URL.
6502
+ #: lib/wfScanEngine.php:637
6503
  msgid "The URL %s is on the blocklist."
6504
  msgstr ""
6505
 
6506
  #. translators: WordPress site ID.
6507
+ #: lib/wfScanEngine.php:643
6508
  msgid "The multisite blog with ID %d is listed on a domain blocklist."
6509
  msgstr ""
6510
 
6511
+ #: lib/wfScanEngine.php:646
6512
  msgid "Your site is listed on a domain blocklist."
6513
  msgstr ""
6514
 
6515
  #. translators: URL.
6516
+ #: lib/wfScanEngine.php:648
6517
  msgid "The URL is: %s"
6518
  msgstr ""
6519
 
6520
+ #: lib/wfScanEngine.php:668
6521
  msgid "Checking for the most secure way to get IPs"
6522
  msgstr ""
6523
 
6524
+ #: lib/wfScanEngine.php:695
6525
  msgid "Unable to accurately detect IPs"
6526
  msgstr ""
6527
 
6528
  #. translators: Support URL.
6529
+ #: lib/wfScanEngine.php:696
6530
+ msgid "Wordfence was unable to validate a test request to your website. This can happen if your website is behind a proxy that does not use one of the standard ways to convey the IP of the request or it is unreachable publicly. IP blocking and live traffic information may not be accurate. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Get More Information<span class=\"screen-reader-text\"> ("
6531
  msgstr ""
6532
 
6533
+ #: lib/wfScanEngine.php:706
6534
+ #: lib/wordfenceClass.php:6327
6535
  msgid "For maximum security use PHP's built in REMOTE_ADDR."
6536
  msgstr ""
6537
 
6538
+ #: lib/wfScanEngine.php:708
6539
+ #: lib/wordfenceClass.php:6330
6540
  msgid "This site appears to be behind a front-end proxy, so using the X-Forwarded-For HTTP header will resolve to the correct IPs."
6541
  msgstr ""
6542
 
6543
+ #: lib/wfScanEngine.php:710
6544
+ #: lib/wordfenceClass.php:6333
6545
  msgid "This site appears to be behind a front-end proxy, so using the X-Real-IP HTTP header will resolve to the correct IPs."
6546
  msgstr ""
6547
 
6548
+ #: lib/wfScanEngine.php:712
6549
+ #: lib/wordfenceClass.php:6336
6550
  msgid "This site appears to be behind Cloudflare, so using the Cloudflare \"CF-Connecting-IP\" HTTP header will resolve to the correct IPs."
6551
  msgstr ""
6552
 
6553
+ #: lib/wfScanEngine.php:716
6554
  msgid "'How does Wordfence get IPs' is misconfigured"
6555
  msgstr ""
6556
 
6557
  #. translators: Support URL.
6558
+ #: lib/wfScanEngine.php:719
6559
+ msgid "A test request to this website was detected on a different value for this setting. IP blocking and live traffic information may not be accurate. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Get More Information<span class=\"screen-reader-text\"> ("
6560
  msgstr ""
6561
 
6562
+ #: lib/wfScanEngine.php:740
6563
  msgid "Check for publicly accessible configuration files, backup files and logs"
6564
  msgstr ""
6565
 
6566
  #. translators: File path.
6567
+ #: lib/wfScanEngine.php:791
6568
  msgid "Publicly accessible config, backup, or log file found: %s"
6569
  msgstr ""
6570
 
6571
  #. translators: 1. URL to publicly accessible file. 2. Support URL.
6572
+ #: lib/wfScanEngine.php:794
6573
+ msgid "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%1$s</a> is publicly accessible and may expose source code or sensitive information about your site. Files such as this one are commonly checked for by scanners and should be made inaccessible. Alternately, some can be removed if you are certain your site does not need them. Sites using the nginx web server may need manual configuration changes to protect such files. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn more<span class=\"screen-reader-text\"> ("
6574
  msgstr ""
6575
 
6576
+ #: lib/wfScanEngine.php:823
6577
  msgid "Checking if your server discloses the path to the document root"
6578
  msgstr ""
6579
 
6580
+ #: lib/wfScanEngine.php:833
6581
  msgid "Web server exposes the document root"
6582
  msgstr ""
6583
 
6584
+ #: lib/wfScanEngine.php:834
6585
  msgid "Full Path Disclosure (FPD) vulnerabilities enable the attacker to see the path to the webroot/file. e.g.: /home/user/htdocs/file/. Certain vulnerabilities, such as using the load_file() (within a SQL Injection) query to view the page source, require the attacker to have the full path to the file they wish to view."
6586
  msgstr ""
6587
 
6588
+ #: lib/wfScanEngine.php:860
6589
  msgid "Directory listing is enabled"
6590
  msgstr ""
6591
 
6592
+ #: lib/wfScanEngine.php:861
6593
  msgid "Directory listing provides an attacker with the complete index of all the resources located inside of the directory. The specific risks and consequences vary depending on which files are listed and accessible, but it is recommended that you disable it unless it is needed."
6594
  msgstr ""
6595
 
6596
+ #: lib/wfScanEngine.php:877
6597
  msgid "Checking if your site is being Spamvertised"
6598
  msgstr ""
6599
 
6600
+ #: lib/wfScanEngine.php:896
6601
  msgid "Check if your site is being Spamvertized is for paid members only"
6602
  msgstr ""
6603
 
6604
+ #: lib/wfScanEngine.php:917
6605
  msgid "Wordfence could not read the contents of your base WordPress directory. This usually indicates your permissions are so strict that your web server can't read your WordPress directory."
6606
  msgstr ""
6607
 
6608
+ #: lib/wfScanEngine.php:954
6609
  msgid "Checking for paths skipped due to scan settings"
6610
  msgstr ""
6611
 
6612
  #. translators: Number of paths skipped in scan.
6613
+ #: lib/wfScanEngine.php:967
6614
  msgid ", and %d more."
6615
  msgstr ""
6616
 
6617
  #. translators: Number of paths skipped in scan.
6618
+ #: lib/wfScanEngine.php:991
6619
  msgid "%d path was skipped for the malware scan due to scan settings"
6620
  msgid_plural "%d paths were skipped for the malware scan due to scan settings"
6621
  msgstr[0] ""
6622
  msgstr[1] ""
6623
 
6624
  #. translators: 1. Number of paths skipped in scan. 2. Support URL. 3. List of skipped paths.
6625
+ #: lib/wfScanEngine.php:994
6626
+ msgid "The option \"Scan files outside your WordPress installation\" is off by default, which means %1$d path and its file(s) will not be scanned for malware or unauthorized changes. To continue skipping this path, you may ignore this issue. Or to start scanning it, enable the option and subsequent scans will include it. Some paths may not be necessary to scan, so this is optional. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More<span class=\"screen-reader-text\"> ("
6627
+ msgid_plural "The option \"Scan files outside your WordPress installation\" is off by default, which means %1$d paths and their file(s) will not be scanned for malware or unauthorized changes. To continue skipping these paths, you may ignore this issue. Or to start scanning them, enable the option and subsequent scans will include them. Some paths may not be necessary to scan, so this is optional. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More<span class=\"screen-reader-text\"> ("
6628
  msgstr[0] ""
6629
  msgstr[1] ""
6630
 
6631
+ #: lib/wfScanEngine.php:1022
6632
  msgid "Including files that are outside the WordPress installation in the scan."
6633
  msgstr ""
6634
 
6635
+ #: lib/wfScanEngine.php:1025
6636
  msgid "Getting plugin list from WordPress"
6637
  msgstr ""
6638
 
6639
  #. translators: Number of plugins.
6640
+ #: lib/wfScanEngine.php:1027
6641
  msgid "Found %d plugin"
6642
  msgid_plural "Found %d plugins"
6643
  msgstr[0] ""
6644
  msgstr[1] ""
6645
 
6646
+ #: lib/wfScanEngine.php:1029
6647
  msgid "Getting theme list from WordPress"
6648
  msgstr ""
6649
 
6650
  #. translators: Number of themes.
6651
+ #: lib/wfScanEngine.php:1031
6652
  msgid "Found %d theme"
6653
  msgid_plural "Found %d themes"
6654
  msgstr[0] ""
6655
  msgstr[1] ""
6656
 
6657
+ #: lib/wfScanEngine.php:1048
6658
  msgid "Scanning file contents for infections and vulnerabilities"
6659
  msgstr ""
6660
 
6661
+ #: lib/wfScanEngine.php:1051
6662
  msgid "Skipping scan of file contents for infections and vulnerabilities"
6663
  msgstr ""
6664
 
6665
+ #: lib/wfScanEngine.php:1055
6666
  msgid "Scanning file contents for URLs on a domain blocklist"
6667
  msgstr ""
6668
 
6669
+ #: lib/wfScanEngine.php:1058
6670
  msgid "Skipping scan of file contents for URLs on a domain blocklist"
6671
  msgstr ""
6672
 
6673
+ #: lib/wfScanEngine.php:1063
6674
  msgid "Starting scan of file contents"
6675
  msgstr ""
6676
 
6677
+ #: lib/wfScanEngine.php:1079
6678
  msgid "Done file contents scan"
6679
  msgstr ""
6680
 
6681
  #. translators: Scan result description.
6682
+ #: lib/wfScanEngine.php:1087
6683
+ #: lib/wfScanEngine.php:2256
6684
+ #: lib/wfScanEngine.php:2298
6685
  msgid "Adding issue: %s"
6686
  msgstr ""
6687
 
6688
+ #: lib/wfScanEngine.php:1120
6689
  msgid "Scanning for publicly accessible quarantined files"
6690
  msgstr ""
6691
 
6692
  #. translators: File path.
6693
+ #: lib/wfScanEngine.php:1125
6694
  msgid "Testing accessibility of: %s"
6695
  msgstr ""
6696
 
6697
  #. translators: File path.
6698
+ #: lib/wfScanEngine.php:1134
6699
  msgid "Publicly accessible quarantined file found: %s"
6700
  msgstr ""
6701
 
6702
  #. translators: URL to publicly accessible file.
6703
+ #: lib/wfScanEngine.php:1137
6704
+ msgid "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%1$s<span class=\"screen-reader-text\"> ("
6705
  msgstr ""
6706
 
6707
+ #: lib/wfScanEngine.php:1161
6708
  msgid "Scanning posts for URLs on a domain blocklist"
6709
  msgstr ""
6710
 
6711
  #. translators: Number of posts left to scan.
6712
+ #: lib/wfScanEngine.php:1184
6713
  msgid "Scanning posts with %d left to scan."
6714
  msgstr ""
6715
 
6716
+ #: lib/wfScanEngine.php:1206
6717
  msgid "Post title contains suspicious code"
6718
  msgstr ""
6719
 
6720
+ #: lib/wfScanEngine.php:1207
6721
  msgid "This post contains code that is suspicious. Please check the title of the post and confirm that the code in the title is not malicious."
6722
  msgstr ""
6723
 
6724
+ #: lib/wfScanEngine.php:1230
6725
  msgid "Examining URLs found in posts we scanned for dangerous websites"
6726
  msgstr ""
6727
 
6728
+ #: lib/wfScanEngine.php:1232
6729
+ #: lib/wfScanEngine.php:2219
6730
  msgid "Done examining URLs"
6731
  msgstr ""
6732
 
6733
  #. translators: 1. WordPress Post type. 2. URL.
6734
+ #: lib/wfScanEngine.php:1268
6735
+ #: lib/wfScanEngine.php:1288
6736
  msgid "%1$s contains a suspected malware URL: %2$s"
6737
  msgstr ""
6738
 
6739
  #. translators: 1. WordPress Post type. 2. URL. 3. URL.
6740
+ #. translators: 1. WordPress post type. 2. URL. 3. URL.
6741
+ #: lib/wfScanEngine.php:1274
6742
+ #: lib/wfScanEngine.php:1417
6743
+ msgid "This %1$s contains a suspected malware URL listed on Google's list of malware sites. The URL is: %2$s - More info available at <a href=\"http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%3$s&client=googlechrome&hl=en-US\" target=\"_blank\" rel=\"noopener noreferrer\">Google Safe Browsing diagnostic page<span class=\"screen-reader-text\"> ("
6744
  msgstr ""
6745
 
6746
  #. translators: 1. WordPress Post type. 2. URL.
6747
+ #: lib/wfScanEngine.php:1280
6748
  msgid "%1$s contains a suspected phishing site URL: %2$s"
6749
  msgstr ""
6750
 
6751
  #. translators: 1. WordPress Post type. 2. URL.
6752
  #. translators: 1. WordPress post type. 2. URL.
6753
+ #: lib/wfScanEngine.php:1283
6754
+ #: lib/wfScanEngine.php:1426
6755
  msgid "This %1$s contains a URL that is a suspected phishing site that is currently listed on Google's list of known phishing sites. The URL is: %2$s"
6756
  msgstr ""
6757
 
6758
  #. translators: 1. WordPress Post type. 2. URL.
6759
  #. translators: 1. WordPress post type. 2. URL.
6760
+ #: lib/wfScanEngine.php:1291
6761
+ #: lib/wfScanEngine.php:1434
6762
  msgid "This %1$s contains a URL that is currently listed on Wordfence's domain blocklist. The URL is: %2$s"
6763
  msgstr ""
6764
 
6765
  #. translators: Scan result description.
6766
+ #: lib/wfScanEngine.php:1300
6767
  msgid "Adding issue: %1$s"
6768
  msgstr ""
6769
 
6770
+ #: lib/wfScanEngine.php:1336
6771
  msgid "Scanning comments for URLs on a domain blocklist"
6772
  msgstr ""
6773
 
6774
  #. translators: Number of comments left to scan.
6775
+ #: lib/wfScanEngine.php:1360
6776
  msgid "Scanning comments with %d left to scan."
6777
  msgstr ""
6778
 
6779
  #. translators: 1. WordPress post type. 2. WordPress author username.
6780
+ #: lib/wfScanEngine.php:1414
6781
  msgid "%1$s with author %2$s contains a suspected malware URL."
6782
  msgstr ""
6783
 
 
 
 
 
 
6784
  #. translators: WordPress post type.
6785
+ #: lib/wfScanEngine.php:1423
6786
  msgid "%s contains a suspected phishing site URL."
6787
  msgstr ""
6788
 
6789
  #. translators: URL.
6790
+ #: lib/wfScanEngine.php:1431
6791
  msgid "%s contains a suspected malware URL."
6792
  msgstr ""
6793
 
6794
  #. translators: WordPress username.
6795
+ #: lib/wfScanEngine.php:1479
6796
  msgid "Author: %s"
6797
  msgstr ""
6798
 
6799
  #. translators: Email address.
6800
+ #: lib/wfScanEngine.php:1482
6801
  msgid "Email: %s"
6802
  msgstr ""
6803
 
6804
  #. translators: IP address.
6805
+ #: lib/wfScanEngine.php:1484
6806
  msgid "Source IP: %s"
6807
  msgstr ""
6808
 
6809
  #. translators: Comment description.
6810
+ #: lib/wfScanEngine.php:1485
6811
  msgid "Scanning comment with %s"
6812
  msgstr ""
6813
 
6814
  #. translators: Comment description.
6815
+ #: lib/wfScanEngine.php:1498
6816
+ #: lib/wfScanEngine.php:1504
6817
  msgid "Marking comment as spam for containing a malware URL. Comment has %s"
6818
  msgstr ""
6819
 
6820
  #. translators: Comment description.
6821
+ #: lib/wfScanEngine.php:1501
6822
  msgid "Marking comment as spam for containing a phishing URL. Comment has %s"
6823
  msgstr ""
6824
 
6825
  #. translators: Comment description.
6826
+ #: lib/wfScanEngine.php:1511
6827
  msgid "Scanned comment with %s"
6828
  msgstr ""
6829
 
6830
+ #: lib/wfScanEngine.php:1562
6831
  msgid "Scanning for weak passwords"
6832
  msgstr ""
6833
 
6834
+ #: lib/wfScanEngine.php:1573
6835
  msgid "We were unable to generate the user list for your password check."
6836
  msgstr ""
6837
 
6838
  #. translators: Number of users.
6839
+ #: lib/wfScanEngine.php:1589
6840
  msgid "Starting password strength check on %d user."
6841
  msgid_plural "Starting password strength check on %d users."
6842
  msgstr[0] ""
6843
  msgstr[1] ""
6844
 
6845
  #. translators: Number of users.
6846
+ #: lib/wfScanEngine.php:1598
6847
  msgid "Total of %d users left to process in password strength check."
6848
  msgid_plural "Total of %d users left to process in password strength check."
6849
  msgstr[0] ""
6850
  msgstr[1] ""
6851
 
6852
  #. translators: WordPress user ID.
6853
+ #: lib/wfScanEngine.php:1633
6854
  msgid "Could not get username for user with ID %d when checking password strength."
6855
  msgstr ""
6856
 
6857
  #. translators: 1. WordPress username. 2. WordPress user ID.
6858
+ #: lib/wfScanEngine.php:1639
6859
  msgid "Checking password strength of user '%1$s' with ID %2$d"
6860
  msgstr ""
6861
 
6862
  #. translators: 1. WordPress username. 2. WordPress capability.
6863
+ #: lib/wfScanEngine.php:1647
6864
  msgid "User \"%1$s\" with \"%2$s\" access has an easy password."
6865
  msgstr ""
6866
 
6867
  #. translators: WordPress capability.
6868
+ #: lib/wfScanEngine.php:1653
6869
  msgid "A user with the a role of '%s' has a password that is easy to guess. Please change this password yourself or ask the user to change it."
6870
  msgstr ""
6871
 
6872
  #. translators: WordPress username.
6873
+ #: lib/wfScanEngine.php:1661
6874
  msgid "User \"%s\" with 'subscriber' access has a very easy password."
6875
  msgstr ""
6876
 
6877
+ #: lib/wfScanEngine.php:1662
6878
  msgid "A user with 'subscriber' access has a password that is very easy to guess. Please either change it or ask the user to change their password."
6879
  msgstr ""
6880
 
6881
  #. translators: Scan result description.
6882
+ #: lib/wfScanEngine.php:1669
6883
  msgid "Adding issue %s"
6884
  msgstr ""
6885
 
6886
  #. translators: WordPress username.
6887
+ #: lib/wfScanEngine.php:1686
6888
  msgid "Completed checking password strength of user '%s'"
6889
  msgstr ""
6890
 
6891
+ #: lib/wfScanEngine.php:1719
6892
  msgid "Scanning to check available disk space"
6893
  msgstr ""
6894
 
6895
+ #: lib/wfScanEngine.php:1726
6896
  msgid "Unable to access available disk space information"
6897
  msgstr ""
6898
 
6899
  #. translators: 1. Number of bytes. 2. Number of bytes.
6900
+ #: lib/wfScanEngine.php:1735
6901
  msgid "Total disk space: %1$s -- Free disk space: %2$s"
6902
  msgstr ""
6903
 
6904
  #. translators: Number of bytes.
6905
+ #: lib/wfScanEngine.php:1740
6906
  msgid "The disk has %s MB available"
6907
  msgstr ""
6908
 
6909
  #. translators: Number of bytes.
6910
+ #: lib/wfScanEngine.php:1755
6911
  msgid "You have %s disk space remaining"
6912
  msgstr ""
6913
 
6914
  #. translators: Number of bytes.
6915
+ #: lib/wfScanEngine.php:1756
6916
  msgid "You only have %s of your disk space remaining. Please free up disk space or your website may stop serving requests."
6917
  msgstr ""
6918
 
6919
+ #: lib/wfScanEngine.php:1769
6920
  msgid "Checking Web Application Firewall status"
6921
  msgstr ""
6922
 
6923
+ #: lib/wfScanEngine.php:1780
6924
  msgid "Web Application Firewall is disabled"
6925
  msgstr ""
6926
 
6927
  #. translators: Support URL.
6928
+ #: lib/wfScanEngine.php:1781
6929
+ msgid "Wordfence's Web Application Firewall has been unexpectedly disabled. If you see a notice at the top of the Wordfence admin pages that says \"The Wordfence Web Application Firewall cannot run,\" click the link in that message to rebuild the configuration. If this does not work, you may need to fix file permissions. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">More Details<span class=\"screen-reader-text\"> ("
6930
  msgstr ""
6931
 
6932
+ #: lib/wfScanEngine.php:1796
6933
  msgid "Scanning for old themes, plugins and core files"
6934
  msgstr ""
6935
 
6936
+ #: lib/wfScanEngine.php:1882
6937
  msgid "Your WordPress version is out of date"
6938
  msgstr ""
6939
 
6940
  #. translators: Software version.
6941
+ #: lib/wfScanEngine.php:1883
6942
  msgid "WordPress version %s is now available. Please upgrade immediately to get the latest security updates from WordPress."
6943
  msgstr ""
6944
 
6945
  #. translators: 1. Plugin name. 2. Software version. 3. Software version.
6946
+ #: lib/wfScanEngine.php:1910
6947
  msgid "The Plugin \"%1$s\" needs an upgrade (%2$s -> %3$s)."
6948
  msgstr ""
6949
 
6950
  #. translators: Theme name.
6951
+ #: lib/wfScanEngine.php:1917
6952
+ #: lib/wfScanEngine.php:1951
6953
  msgid "You need to upgrade \"%s\" to the newest version to ensure you have any security fixes the developer has released."
6954
  msgstr ""
6955
 
6956
  #. translators: 1. Theme name. 2. Software version. 3. Software version.
6957
+ #: lib/wfScanEngine.php:1944
6958
  msgid "The Theme \"%1$s\" needs an upgrade (%2$s -> %3$s)."
6959
  msgstr ""
6960
 
6961
  #. translators: 1. Plugin name. 2. Software version. 3. Software version.
6962
+ #: lib/wfScanEngine.php:1995
6963
  msgid "The Plugin \"%1$s\" appears to be abandoned (updated %2$s, tested to WP %3$s)."
6964
  msgstr ""
6965
 
6966
  #. translators: 1. Plugin name. 2. Software version.
6967
+ #: lib/wfScanEngine.php:2002
6968
  msgid "It was last updated %1$s ago and tested up to WordPress %2$s."
6969
  msgstr ""
6970
 
6971
  #. translators: 1. Plugin name. 2. Software version.
6972
+ #: lib/wfScanEngine.php:2009
6973
  msgid "The Plugin \"%1$s\" appears to be abandoned (updated %2$s)."
6974
  msgstr ""
6975
 
6976
  #. translators: Time duration.
6977
+ #: lib/wfScanEngine.php:2015
6978
  msgid "It was last updated %s ago."
6979
  msgstr ""
6980
 
6981
+ #: lib/wfScanEngine.php:2021
6982
+ #: lib/wfScanEngine.php:2060
6983
  msgid "It has unpatched security issues and may have compatibility problems with the current version of WordPress."
6984
  msgstr ""
6985
 
6986
+ #: lib/wfScanEngine.php:2023
6987
+ #: lib/wfScanEngine.php:2062
6988
  msgid "Plugins can be removed from wordpress.org for various reasons. This can include benign issues like a plugin author discontinuing development or moving the plugin distribution to their own site, but some might also be due to security issues. In any case, future updates may or may not be available, so it is worth investigating the cause and deciding whether to temporarily or permanently replace or remove the plugin."
6989
  msgstr ""
6990
 
6991
  #. translators: Support URL.
6992
+ #: lib/wfScanEngine.php:2027
6993
+ #: lib/wfScanEngine.php:2066
6994
+ #: lib/wfScanEngine.php:2254
6995
+ #: lib/wfScanEngine.php:2296
6996
+ msgid "<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Get more information.<span class=\"screen-reader-text\"> ("
6997
  msgstr ""
6998
 
6999
  #. translators: Plugin name.
7000
+ #: lib/wfScanEngine.php:2058
7001
  msgid "The Plugin \"%s\" has been removed from wordpress.org."
7002
  msgstr ""
7003
 
7004
+ #: lib/wfScanEngine.php:2111
7005
  msgid "Scanning for admin users not created through WordPress"
7006
  msgstr ""
7007
 
7008
  #. translators: WordPress username.
7009
+ #: lib/wfScanEngine.php:2133
7010
  msgid "An admin user with the username %s was created outside of WordPress."
7011
  msgstr ""
7012
 
7013
  #. translators: WordPress username.
7014
+ #: lib/wfScanEngine.php:2134
7015
  msgid "An admin user with the username %s was created outside of WordPress. It's possible a plugin could have created the account, but if you do not recognize the user, we suggest you remove it."
7016
  msgstr ""
7017
 
7018
  #. translators: WordPress username.
7019
+ #: lib/wfScanEngine.php:2160
7020
  msgid "An admin user with a suspicious username %s was found."
7021
  msgstr ""
7022
 
7023
  #. translators: WordPress username.
7024
+ #: lib/wfScanEngine.php:2161
7025
  msgid "An admin user with a suspicious username %s was found. Administrators accounts with usernames similar to this are commonly seen created by hackers. It's possible a plugin could have created the account, but if you do not recognize the user, we suggest you remove it."
7026
  msgstr ""
7027
 
7028
+ #: lib/wfScanEngine.php:2182
7029
  msgid "Scanning for suspicious site options"
7030
  msgstr ""
7031
 
7032
+ #: lib/wfScanEngine.php:2217
7033
  msgid "Examining URLs found in the options we scanned for dangerous websites"
7034
  msgstr ""
7035
 
7036
  #. translators: URL.
7037
+ #: lib/wfScanEngine.php:2241
7038
+ #: lib/wfScanEngine.php:2247
7039
  msgid "Option contains a suspected malware URL: %s"
7040
  msgstr ""
7041
 
7042
  #. translators: URL.
7043
+ #: lib/wfScanEngine.php:2242
7044
  msgid "This option contains a suspected malware URL listed on Google's list of malware sites. It may indicate your site is infected with malware. The URL is: %s"
7045
  msgstr ""
7046
 
7047
  #. translators: URL.
7048
+ #: lib/wfScanEngine.php:2244
7049
  msgid "Option contains a suspected phishing site URL: %s"
7050
  msgstr ""
7051
 
7052
  #. translators: URL.
7053
+ #: lib/wfScanEngine.php:2245
7054
  msgid "This option contains a URL that is a suspected phishing site that is currently listed on Google's list of known phishing sites. It may indicate your site is infected with malware. The URL is: %s"
7055
  msgstr ""
7056
 
7057
  #. translators: URL.
7058
+ #: lib/wfScanEngine.php:2248
7059
  msgid "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: %s"
7060
  msgstr ""
7061
 
7062
+ #: lib/wfScanEngine.php:2288
7063
  msgid "Checking for future GeoIP support"
7064
  msgstr ""
7065
 
7066
+ #: lib/wfScanEngine.php:2293
7067
  msgid "PHP Update Needed for Country Blocking"
7068
  msgstr ""
7069
 
7070
  #. translators: Software version.
7071
+ #: lib/wfScanEngine.php:2294
7072
  msgid "The GeoIP database that is required for country blocking has been updated to a new format. This new format requires sites to run PHP 5.4 or newer, and this site is on PHP %s. To ensure country blocking continues functioning, please update PHP."
7073
  msgstr ""
7074
 
7075
+ #: lib/wfScanEngine.php:2343
7076
  msgid "Previous scan was stopped successfully."
7077
  msgstr ""
7078
 
7079
+ #: lib/wfScanEngine.php:2344
7080
  msgid "Scan was stopped on administrator request."
7081
  msgstr ""
7082
 
7083
+ #: lib/wfScanEngine.php:2360
7084
  msgid "Entering start scan routine"
7085
  msgstr ""
7086
 
7087
+ #: lib/wfScanEngine.php:2363
7088
  msgid "A scan is already running. Use the stop scan button if you would like to terminate the current scan."
7089
  msgstr ""
7090
 
7091
  #. translators: Support URL.
7092
+ #: lib/wfScanEngine.php:2381
7093
  msgid "Test result of scan start URL fetch: %s"
7094
  msgstr ""
7095
 
7096
  #. translators: WordPress admin panel URL.
7097
+ #: lib/wfScanEngine.php:2390
7098
  msgid "Starting cron with normal ajax at URL %s"
7099
  msgstr ""
7100
 
7101
  #. translators: Error message.
7102
  #. translators: WordPress admin panel URL.
7103
+ #: lib/wfScanEngine.php:2412
7104
+ #: lib/wfScanEngine.php:2447
7105
  msgid "There was an error starting the scan: %s."
7106
  msgstr ""
7107
 
7108
+ #: lib/wfScanEngine.php:2414
7109
+ #: lib/wfScanEngine.php:2449
7110
  msgid "There was an unknown error starting the scan."
7111
  msgstr ""
7112
 
7113
+ #: lib/wfScanEngine.php:2421
7114
+ #: lib/wfScanEngine.php:2455
7115
  msgid "Scan process ended after forking."
7116
  msgstr ""
7117
 
7118
  #. translators: WordPress admin panel URL.
7119
+ #: lib/wfScanEngine.php:2425
7120
  msgid "Starting cron via proxy at URL %s"
7121
  msgstr ""
7122
 
7123
  #. translators: Time in seconds.
7124
+ #: lib/wfScanEngine.php:2501
7125
  msgid "Got value from wf config maxExecutionTime: %s"
7126
  msgstr ""
7127
 
7128
  #. translators: Time in seconds.
7129
+ #: lib/wfScanEngine.php:2505
7130
  msgid "getMaxExecutionTime() returning config value: %s"
7131
  msgstr ""
7132
 
7133
  #. translators: PHP ini value.
7134
+ #: lib/wfScanEngine.php:2512
7135
  msgid "Got max_execution_time value from ini: %s"
7136
  msgstr ""
7137
 
7138
  #. translators: 1. PHP ini setting. 2. Time in seconds.
7139
+ #: lib/wfScanEngine.php:2519
7140
  msgid "ini value of %1$d is higher than value for WORDFENCE_SCAN_MAX_INI_EXECUTION_TIME (%2$d), reducing"
7141
  msgstr ""
7142
 
7143
  #. translators: PHP ini setting.
7144
+ #: lib/wfScanEngine.php:2529
7145
  msgid "getMaxExecutionTime() returning half ini value: %d"
7146
  msgstr ""
7147
 
7148
+ #: lib/wfScanEngine.php:2535
7149
  msgid "getMaxExecutionTime() returning default of: 15"
7150
  msgstr ""
7151
 
7152
  #. translators: 1. HTTP status code.
7153
+ #: lib/wfScanEngine.php:2737
7154
  msgid "Got error response from Wordfence servers: %s"
7155
  msgstr ""
7156
 
7157
+ #: lib/wfScanEngine.php:2741
7158
  msgid "Invalid response from Wordfence servers."
7159
  msgstr ""
7160
 
7317
  msgid "File last modified:"
7318
  msgstr ""
7319
 
7320
+ #: lib/wordfenceClass.php:181
7321
  msgid ""
7322
  "To ensure uninterrupted Premium Wordfence protection on your site,\n"
7323
  "please renew your license by visiting http://www.wordfence.com/ Sign in, go to your dashboard,\n"
7324
  "select the license about to expire and click the button to renew that license."
7325
  msgstr ""
7326
 
7327
+ #: lib/wordfenceClass.php:211
7328
  msgid "Your Premium Wordfence License is set to auto-renew in 10 days."
7329
  msgstr ""
7330
 
7331
+ #: lib/wordfenceClass.php:212
7332
  msgid "To update your license settings please visit http://www.wordfence.com/zz9/dashboard"
7333
  msgstr ""
7334
 
7335
+ #: lib/wordfenceClass.php:224
7336
  msgid "Your Premium Wordfence License expires in less than 2 weeks."
7337
  msgstr ""
7338
 
7339
+ #: lib/wordfenceClass.php:227
7340
  msgid "Your Premium Wordfence License expires in less than a week."
7341
  msgstr ""
7342
 
7343
+ #: lib/wordfenceClass.php:230
7344
  msgid "Your Premium Wordfence License expires in 2 days."
7345
  msgstr ""
7346
 
7347
+ #: lib/wordfenceClass.php:233
7348
  msgid "Your Premium Wordfence License expires in 1 day."
7349
  msgstr ""
7350
 
7351
+ #: lib/wordfenceClass.php:237
7352
  msgid "Your Wordfence Premium License has Expired!"
7353
  msgstr ""
7354
 
7355
+ #: lib/wordfenceClass.php:268
7356
  msgid "The Wordfence Premium License in use on this site has been removed from your account."
7357
  msgstr ""
7358
 
7359
+ #: lib/wordfenceClass.php:268
7360
  msgid "The license you were using has been removed from your account. Please reach out to billing@wordfence.com or create a Premium support case at https://support.wordfence.com/support/tickets for more information. Our staff is happy to help."
7361
  msgstr ""
7362
 
7363
  #. translators: Wordfence license key.
7364
+ #: lib/wordfenceClass.php:274
7365
  msgid "Could not verify Wordfence License: %s"
7366
  msgstr ""
7367
 
7368
  #. translators: WordPress version.
7369
+ #: lib/wordfenceClass.php:356
7370
  msgid "WordPress (v%s)"
7371
  msgstr ""
7372
 
7373
  #. translators: Number of plugins.
7374
+ #: lib/wordfenceClass.php:360
7375
  msgid "%d plugin"
7376
  msgid_plural "%d plugins"
7377
  msgstr[0] ""
7378
  msgstr[1] ""
7379
 
7380
  #. translators: Number of themes.
7381
+ #: lib/wordfenceClass.php:365
7382
  msgid "%d theme"
7383
  msgid_plural "%d themes"
7384
  msgstr[0] ""
7385
  msgstr[1] ""
7386
 
7387
+ #: lib/wordfenceClass.php:369
7388
  msgid "An update is available for "
7389
  msgid_plural "Updates are available for "
7390
  msgstr[0] ""
7391
  msgstr[1] ""
7392
 
7393
+ #: lib/wordfenceClass.php:374
7394
  msgid "and "
7395
  msgstr ""
7396
 
7397
  #. translators: Wordfence version.
7398
+ #: lib/wordfenceClass.php:413
7399
  msgid "`runInstall` called with previous version = %s"
7400
  msgstr ""
7401
 
7402
+ #: lib/wordfenceClass.php:465
7403
+ #: lib/wordfenceClass.php:4033
7404
  msgid "Could not understand the response we received from the Wordfence servers when applying for a free license key."
7405
  msgstr ""
7406
 
7407
+ #: lib/wordfenceClass.php:829
7408
  msgid "Automatically generated from previous country blocking settings"
7409
  msgstr ""
7410
 
7411
+ #: lib/wordfenceClass.php:1260
7412
  msgid "Application passwords have been disabled by Wordfence."
7413
  msgstr ""
7414
 
7415
+ #: lib/wordfenceClass.php:1371
7416
+ #: lib/wordfenceClass.php:6647
7417
  msgid "Upgrade To Premium"
7418
  msgstr ""
7419
 
7420
+ #: lib/wordfenceClass.php:1390
7421
  msgid "wp_mail from address is incomplete, attempting to fix"
7422
  msgstr ""
7423
 
7424
  #. translators: Email address.
7425
+ #: lib/wordfenceClass.php:1400
7426
  msgid "Fixing wp_mail from address: %s"
7427
  msgstr ""
7428
 
7429
+ #: lib/wordfenceClass.php:1493
7430
  msgid "You appear to have logged out or you are not an admin. Please sign-out and sign-in again."
7431
  msgstr ""
7432
 
7433
+ #: lib/wordfenceClass.php:1498
7434
  msgid "Your browser sent an invalid security token to Wordfence. Please try reloading this page or signing out and in again."
7435
  msgstr ""
7436
 
7437
+ #: lib/wordfenceClass.php:1504
7438
  msgid "Wordfence encountered an internal error executing that request."
7439
  msgstr ""
7440
 
7441
  #. translators: Error message.
7442
+ #: lib/wordfenceClass.php:1610
7443
  msgid "2FA Migration Error: %s"
7444
  msgstr ""
7445
 
7446
+ #: lib/wordfenceClass.php:1650
7447
  msgid "Please choose a stronger password. Try including numbers, symbols, and a mix of upper and lowercase letters and remove common words."
7448
  msgstr ""
7449
 
7450
+ #: lib/wordfenceClass.php:1656
7451
  msgid "Passwords containing a space followed by \"wf\" without quotes are not allowed."
7452
  msgstr ""
7453
 
7454
  #. translators: Support URL.
7455
+ #: lib/wordfenceClass.php:1671
7456
  msgid "Please choose a different password. The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. <a href=\"%s\">Learn More</a>"
7457
  msgstr ""
7458
 
7459
+ #. translators: 1. Password reset limit (number). 2. WordPress username.
7460
+ #: lib/wordfenceClass.php:1758
7461
+ msgid "Exceeded the maximum number of tries to recover their password which is set at: %1$s. The last username or email they entered before getting locked out was: '%2$s'"
7462
+ msgstr ""
7463
+
7464
+ #: lib/wordfenceClass.php:1806
7465
+ #: lib/wordfenceClass.php:1989
7466
  msgid "Sorry but your browser sent an invalid security token when trying to use this form."
7467
  msgstr ""
7468
 
7469
+ #: lib/wordfenceClass.php:1811
7470
  msgid "Please wait 3 minutes and try again"
7471
  msgstr ""
7472
 
7473
+ #: lib/wordfenceClass.php:1812
7474
  msgid "You have used this form too much. Please wait 3 minutes and try again."
7475
  msgstr ""
7476
 
7477
+ #: lib/wordfenceClass.php:1851
7478
  msgid "Unlock email requested"
7479
  msgstr ""
7480
 
7481
+ #: lib/wordfenceClass.php:1853
7482
  msgid "Your request was received"
7483
  msgstr ""
7484
 
7485
  #. translators: Email address.
7486
+ #: lib/wordfenceClass.php:1854
7487
  msgid "We received a request to email \"%s\" instructions to unlock their access. If that is the email address of a site administrator or someone on the Wordfence alert list, they have been emailed instructions on how to regain access to this system. The instructions we sent will expire 30 minutes from now."
7488
  msgstr ""
7489
 
7490
+ #: lib/wordfenceClass.php:1860
7491
  msgid "Invalid key provided for authentication."
7492
  msgstr ""
7493
 
7494
+ #: lib/wordfenceClass.php:1871
7495
  msgid "Request received via unlock email link to unblock all IPs."
7496
  msgstr ""
7497
 
7498
+ #: lib/wordfenceClass.php:1880
7499
  msgid "Request received via unlock email link to unblock all IPs via disabling firewall rules."
7500
  msgstr ""
7501
 
7502
+ #: lib/wordfenceClass.php:1888
7503
  msgid "Invalid function specified. Please check the link we emailed you and make sure it was not cut-off by your email reader."
7504
  msgstr ""
7505
 
7506
+ #: lib/wordfenceClass.php:1933
7507
  msgid "Unsubscribe Requested"
7508
  msgstr ""
7509
 
7510
+ #: lib/wordfenceClass.php:1995
7511
  msgid "An error occurred while saving the license."
7512
  msgstr ""
7513
 
7514
  #. translators: Error message.
7515
+ #: lib/wordfenceClass.php:1997
7516
+ #: lib/wordfenceClass.php:2017
7517
  msgid "An error occurred while saving the license: %s"
7518
  msgstr ""
7519
 
7520
+ #: lib/wordfenceClass.php:2033
7521
  msgid "Rescheduled missing daily cron"
7522
  msgstr ""
7523
 
7524
+ #: lib/wordfenceClass.php:2038
7525
  msgid "Rescheduled missing hourly cron"
7526
  msgstr ""
7527
 
7528
+ #: lib/wordfenceClass.php:2392
7529
+ #: lib/wordfenceClass.php:2396
7530
  msgid "Accessed a banned URL"
7531
  msgstr ""
7532
 
7533
+ #: lib/wordfenceClass.php:2403
7534
+ #: lib/wordfenceClass.php:2407
7535
  msgid "POST received with blank user-agent and referer"
7536
  msgstr ""
7537
 
7538
+ #: lib/wordfenceClass.php:2541
7539
  msgid "<strong>ERROR</strong>: You can't register using that username"
7540
  msgstr ""
7541
 
7542
+ #: lib/wordfenceClass.php:2581
7543
+ msgid "Sorry, you are not allowed to list users."
7544
+ msgstr ""
7545
+
7546
+ #: lib/wordfenceClass.php:2588
7547
+ msgid "Invalid user ID."
7548
+ msgstr ""
7549
+
7550
+ #: lib/wordfenceClass.php:2732
7551
+ msgid "<strong>VERIFICATION FAILED</strong>: Two-factor authentication verification failed. Please try again."
7552
+ msgstr ""
7553
+
7554
+ #. translators: 1. WordPress username. 2. Password reset URL.
7555
+ #. translators: 1. WordPress username. 2. Reset password URL.
7556
+ #: lib/wordfenceClass.php:2739
7557
+ #: lib/wordfenceClass.php:3189
7558
+ msgid "<strong>ERROR</strong>: The username or password you entered is incorrect. <a href=\"%2$s\" title=\"Password Lost and Found\">Lost your password</a>?"
7559
+ msgstr ""
7560
+
7561
  #. translators: 1. WordPress admin panel URL. 2. Support URL.
7562
+ #: lib/wordfenceClass.php:2749
7563
+ #: lib/wordfenceClass.php:2885
7564
+ msgid "<strong>WARNING: </strong>The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href=\"%1$s\">change your password</a>. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More<span class=\"screen-reader-text\"> ("
7565
+ msgstr ""
7566
+
7567
+ #: lib/wordfenceClass.php:2773
7568
+ msgid "<strong>INVALID CODE</strong>: Please sign in again and add a space, the letters <code>wf</code>, and the code from your authenticator app to the end of your password (e.g., <code>wf123456</code>)."
7569
+ msgstr ""
7570
+
7571
+ #: lib/wordfenceClass.php:2777
7572
+ msgid "<strong>INVALID CODE</strong>: Please sign in again and add a space, the letters <code>wf</code>, and the code sent to your phone to the end of your password (e.g., <code>wf123456</code>)."
7573
+ msgstr ""
7574
+
7575
+ #: lib/wordfenceClass.php:2784
7576
+ #: lib/wordfenceClass.php:2835
7577
+ #: lib/wordfenceClass.php:2858
7578
+ msgid "<strong>AUTHENTICATION FAILURE</strong>: A temporary failure was encountered while trying to log in. Please try again."
7579
+ msgstr ""
7580
+
7581
+ #: lib/wordfenceClass.php:2794
7582
+ msgid "<strong>INVALID CODE</strong>: You need to enter the code generated by your authenticator app. The code should be a six digit number (e.g., 123456)."
7583
+ msgstr ""
7584
+
7585
+ #: lib/wordfenceClass.php:2798
7586
+ msgid "<strong>INVALID CODE</strong>: You need to enter the code generated sent to your phone. The code should be a six digit number (e.g., 123456)."
7587
+ msgstr ""
7588
+
7589
+ #: lib/wordfenceClass.php:2844
7590
+ msgid "<strong>CODE EXPIRED. CHECK YOUR PHONE:</strong> The code you entered has expired. Codes are only valid for 30 minutes for security reasons. We have sent you a new code. Please sign in using your username, password, and the new code we sent you."
7591
+ msgstr ""
7592
+
7593
+ #: lib/wordfenceClass.php:2867
7594
+ msgid "<strong>INVALID CODE</strong>: You need to enter your password and the code we sent to your phone. The code should start with 'wf' and should be four characters (e.g., wfAB12)."
7595
+ msgstr ""
7596
+
7597
+ #: lib/wordfenceClass.php:2918
7598
+ msgid "<strong>CODE REQUIRED</strong>: Please check your authenticator app for the current code. Enter it below to sign in."
7599
+ msgstr ""
7600
+
7601
+ #: lib/wordfenceClass.php:2923
7602
+ msgid "<strong>CODE REQUIRED</strong>: Please check your authenticator app for the current code. Please sign in again and add a space, the letters <code>wf</code>, and the code to the end of your password (e.g., <code>wf123456</code>)."
7603
+ msgstr ""
7604
+
7605
+ #: lib/wordfenceClass.php:2957
7606
+ #: lib/wordfenceClass.php:3014
7607
+ msgid "<strong>CHECK YOUR PHONE</strong>: A code has been sent to your phone and will arrive within 30 seconds. Enter it below to sign in."
7608
+ msgstr ""
7609
+
7610
+ #: lib/wordfenceClass.php:2962
7611
+ msgid "<strong>CHECK YOUR PHONE</strong>: A code has been sent to your phone and will arrive within 30 seconds. Please sign in again and add a space, the letters <code>wf</code>, and the code to the end of your password (e.g., <code>wf123456</code>)."
7612
+ msgstr ""
7613
+
7614
+ #: lib/wordfenceClass.php:3019
7615
+ msgid "<strong>CHECK YOUR PHONE</strong>: A code has been sent to your phone and will arrive within 30 seconds. Please sign in again and add a space and the code to the end of your password (e.g., <code>wfABCD</code>)."
7616
  msgstr ""
7617
 
7618
  #. translators: 1. Reset password URL. 2. Support URL.
7619
+ #: lib/wordfenceClass.php:3040
7620
+ #: lib/wordfenceClass.php:3076
7621
+ msgid "<strong>WARNING: </strong>Your login has been allowed because you have previously logged in from the same IP, but you will be blocked if your IP changes. The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href=\"%1$s\">change your password</a>. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More<span class=\"screen-reader-text\"> ("
7622
  msgstr ""
7623
 
7624
+ #. translators: 1. Reset password URL. 2. Support URL.
7625
  #: lib/wordfenceClass.php:3057
7626
+ #: lib/wordfenceClass.php:3093
7627
+ msgid "<strong>INSECURE PASSWORD:</strong> Your login attempt has been blocked because the password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href=\"%1$s\">reset your password</a> to reactivate your account. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More<span style=\"font-size:0;\"> (opens in new tab)</span></a>"
7628
+ msgstr ""
7629
+
7630
+ #: lib/wordfenceClass.php:3065
7631
+ msgid "Admin Login Blocked"
7632
+ msgstr ""
7633
+
7634
+ #. translators: WordPress username.
7635
+ #: lib/wordfenceClass.php:3065
7636
  msgid "A user with username \"%s\" who has administrator access tried to sign in to your WordPress site. Access was denied because all administrator accounts are required to have Cellphone Sign-in enabled but this account does not."
7637
  msgstr ""
7638
 
7639
+ #. translators: WordPress username.
7640
+ #: lib/wordfenceClass.php:3066
7641
+ msgid "<strong>Cellphone Sign-in Required</strong>: Cellphone Sign-in is required for all administrator accounts. Please contact the site administrator to enable it for your account."
7642
+ msgstr ""
7643
+
7644
+ #: lib/wordfenceClass.php:3106
7645
  msgid "Blocked by Wordfence Security Network"
7646
  msgstr ""
7647
 
7648
+ #: lib/wordfenceClass.php:3136
7649
  msgid "Blocked by login security setting"
7650
  msgstr ""
7651
 
7652
  #. translators: WordPress username.
7653
+ #: lib/wordfenceClass.php:3146
7654
  msgid "Used an invalid username '%s' to try to sign in"
7655
  msgstr ""
7656
 
7657
  #. translators: 1. Login attempt limit. 2. WordPress username.
7658
+ #: lib/wordfenceClass.php:3165
7659
  msgid "Exceeded the maximum number of login failures which is: %1$s. The last username they tried to sign in with was: '%2$s'"
7660
  msgstr ""
7661
 
7662
+ #: lib/wordfenceClass.php:3522
7663
  msgid "An invalid type was specified to get file."
7664
  msgstr ""
7665
 
7666
+ #: lib/wordfenceClass.php:3538
7667
  msgid "We could not fetch a core WordPress file from the Wordfence API."
7668
  msgstr ""
7669
 
7670
+ #: lib/wordfenceClass.php:3597
7671
  msgid "Wordfence Test Email"
7672
  msgstr ""
7673
 
7674
  #. translators: 1. Site URL. 2. IP address.
7675
+ #: lib/wordfenceClass.php:3597
7676
  msgid ""
7677
  "This is a test email from %1$s.\n"
7678
  "The IP address that requested this was: %2$s"
7679
  msgstr ""
7680
 
7681
+ #: lib/wordfenceClass.php:3604
7682
+ msgid "Cellphone Sign-in is only available to paid members. <a href=\"https://www.wordfence.com/gnl1twoFac3/wordfence-signup/\" target=\"_blank\" rel=\"noopener noreferrer\">Click here to upgrade now.<span class=\"screen-reader-text\"> ("
7683
  msgstr ""
7684
 
7685
+ #: lib/wordfenceClass.php:3611
7686
  msgid "The username you specified does not exist."
7687
  msgstr ""
7688
 
7689
+ #: lib/wordfenceClass.php:3620
7690
  msgid "The username you specified is already enabled."
7691
  msgstr ""
7692
 
7693
+ #: lib/wordfenceClass.php:3625
7694
  msgid "Unknown authentication mode."
7695
  msgstr ""
7696
 
7697
+ #: lib/wordfenceClass.php:3630
7698
  msgid "The phone number you entered must start with a '+', then country code and then area code and number. For example, a number in the United States with country code '1' would look like this: +1-123-555-1234"
7699
  msgstr ""
7700
 
7701
  #. translators: Error message.
7702
+ #: lib/wordfenceClass.php:3637
7703
+ #: lib/wordfenceClass.php:3669
7704
+ #: lib/wordfenceClass.php:3732
7705
  msgid "Could not contact Wordfence servers to generate a verification code: %s"
7706
  msgstr ""
7707
 
7708
  #. translators: Error message.
7709
+ #: lib/wordfenceClass.php:3649
7710
+ #: lib/wordfenceClass.php:3693
7711
  msgid "Could not generate verification code: %s"
7712
  msgstr ""
7713
 
7714
  #. translators: Error message.
7715
+ #: lib/wordfenceClass.php:3650
7716
+ #: lib/wordfenceClass.php:3694
7717
  msgid "We could not generate a verification code."
7718
  msgstr ""
7719
 
7720
+ #: lib/wordfenceClass.php:3710
7721
  msgid "Unknown two-factor authentication mode."
7722
  msgstr ""
7723
 
7724
+ #: lib/wordfenceClass.php:3743
7725
  msgid "The code you entered is invalid. Cellphone sign-in will not be enabled for this user until you enter a valid code."
7726
  msgstr ""
7727
 
7728
+ #: lib/wordfenceClass.php:3748
7729
  msgid "We could not find the user you are trying to activate. They may have been removed from the list of Cellphone Sign-in users. Please reload this page."
7730
  msgstr ""
7731
 
7732
+ #: lib/wordfenceClass.php:3830
7733
  msgid "That user has already been removed from the list."
7734
  msgstr ""
7735
 
7736
+ #: lib/wordfenceClass.php:3850
7737
  msgid "No scan is scheduled"
7738
  msgstr ""
7739
 
7740
+ #: lib/wordfenceClass.php:3855
7741
  msgid "Next scan is starting now"
7742
  msgstr ""
7743
 
7744
  #. translators: 1. Time until. 2. Localized date.
7745
+ #: lib/wordfenceClass.php:3858
7746
  msgid "Next scan in %1$s (%2$s)"
7747
  msgstr ""
7748
 
7749
  #. translators: Localized date.
7750
+ #: lib/wordfenceClass.php:3875
7751
  msgid "Scheduled Wordfence scan starting at %s"
7752
  msgstr ""
7753
 
7754
+ #: lib/wordfenceClass.php:3898
7755
  msgid "Sorry but this feature is only available for paid customers."
7756
  msgstr ""
7757
 
7758
  #. translators: Site URL.
7759
+ #: lib/wordfenceClass.php:3912
7760
  msgid "SITE: %s"
7761
  msgstr ""
7762
 
7763
  #. translators: Plugin version.
7764
+ #: lib/wordfenceClass.php:3913
7765
  msgid "PLUGIN VERSION: %s"
7766
  msgstr ""
7767
 
7768
  #. translators: WordPress version.
7769
+ #: lib/wordfenceClass.php:3914
7770
  msgid "WORDPRESS VERSION: %s"
7771
  msgstr ""
7772
 
7773
  #. translators: Wordfence license key.
7774
+ #: lib/wordfenceClass.php:3915
7775
  msgid "LICENSE KEY: %s"
7776
  msgstr ""
7777
 
7778
  #. translators: Email address.
7779
+ #: lib/wordfenceClass.php:3916
7780
  msgid "ADMIN EMAIL: %s"
7781
  msgstr ""
7782
 
7783
  #. translators: Email address.
7784
+ #: lib/wordfenceClass.php:3917
7785
  msgid "LOG:"
7786
  msgstr ""
7787
 
7788
+ #: lib/wordfenceClass.php:3933
7789
  msgid "# Scan Issues"
7790
  msgstr ""
7791
 
7792
  #. translators: Number of scan results.
7793
+ #: lib/wordfenceClass.php:3938
7794
  msgid "## New Issues (%d total)"
7795
  msgstr ""
7796
 
7797
  #. translators: Number of scan results.
7798
+ #: lib/wordfenceClass.php:3965
7799
  msgid "## Ignored Issues (%d total)"
7800
  msgstr ""
7801
 
7802
+ #: lib/wordfenceClass.php:3986
7803
  msgid "No Ignored Issues"
7804
  msgstr ""
7805
 
7806
+ #: lib/wordfenceClass.php:4008
7807
  msgid "Wordfence Activity Log"
7808
  msgstr ""
7809
 
7810
  #. translators: Error message.
7811
+ #: lib/wordfenceClass.php:4036
7812
  msgid "Could not fetch free license key from Wordfence: %s"
7813
  msgstr ""
7814
 
7815
+ #: lib/wordfenceClass.php:4127
7816
  msgid "We could not find your .htaccess file to modify it."
7817
  msgstr ""
7818
 
7819
  #. translators: Error message.
7820
+ #: lib/wordfenceClass.php:4132
7821
  msgid "We found your .htaccess file but could not open it for writing: %s"
7822
  msgstr ""
7823
 
7824
+ #: lib/wordfenceClass.php:4215
7825
  msgid "All Countries"
7826
  msgstr ""
7827
 
7828
+ #: lib/wordfenceClass.php:4218
7829
  msgid "1 Country"
7830
  msgstr ""
7831
 
7832
  #. translators: Number of countries.
7833
+ #: lib/wordfenceClass.php:4221
7834
  msgid "%d Countries"
7835
  msgstr ""
7836
 
7837
+ #: lib/wordfenceClass.php:4225
7838
  msgid "Entire Site"
7839
  msgstr ""
7840
 
7841
+ #: lib/wordfenceClass.php:4228
7842
  msgid "Login Only"
7843
  msgstr ""
7844
 
7845
+ #: lib/wordfenceClass.php:4231
7846
  msgid "Site Except Login"
7847
  msgstr ""
7848
 
7849
+ #: lib/wordfenceClass.php:4239
7850
  msgid "IP Range"
7851
  msgstr ""
7852
 
7853
  #. translators: 2FA backup codes.
7854
+ #: lib/wordfenceClass.php:4240
7855
+ #: lib/wordfenceClass.php:6195
7856
  msgid "User Agent"
7857
  msgstr ""
7858
 
7859
+ #: lib/wordfenceClass.php:4241
7860
  #: views/blocking/blocking-create.php:201
7861
  msgid "Referrer"
7862
  msgstr ""
7863
 
7864
+ #: lib/wordfenceClass.php:4256
7865
  msgid "Permanent"
7866
  msgstr ""
7867
 
7868
+ #: lib/wordfenceClass.php:4328
7869
  msgid "An error occurred while creating the block."
7870
  msgstr ""
7871
 
7872
+ #: lib/wordfenceClass.php:4334
7873
  msgid "No block parameters were provided."
7874
  msgstr ""
7875
 
7876
+ #: lib/wordfenceClass.php:4371
7877
+ #: lib/wordfenceClass.php:4403
7878
  msgid "No blocks were provided."
7879
  msgstr ""
7880
 
7881
+ #: lib/wordfenceClass.php:4435
7882
  msgid "The license provided is already in use on another site."
7883
  msgstr ""
7884
 
7885
+ #: lib/wordfenceClass.php:4440
7886
  msgid "The Wordfence activation server returned an unexpected response. Please try again."
7887
  msgstr ""
7888
 
7889
+ #: lib/wordfenceClass.php:4446
7890
  msgid "We received an error while trying to activate the license with the Wordfence servers: "
7891
  msgstr ""
7892
 
7893
+ #: lib/wordfenceClass.php:4459
7894
  msgid "No license was provided to install."
7895
  msgstr ""
7896
 
7897
+ #: lib/wordfenceClass.php:4510
7898
  msgid "An unknown configuration section was provided."
7899
  msgstr ""
7900
 
7901
+ #: lib/wordfenceClass.php:4516
7902
  msgid "No configuration section was provided."
7903
  msgstr ""
7904
 
7905
+ #: lib/wordfenceClass.php:4562
7906
+ #: lib/wordfenceClass.php:4567
7907
  msgid "An error occurred while saving the configuration."
7908
  msgstr ""
7909
 
7910
+ #: lib/wordfenceClass.php:4578
7911
  msgid "No configuration changes were provided to save."
7912
  msgstr ""
7913
 
7914
+ #: lib/wordfenceClass.php:4609
7915
+ #: lib/wordfenceClass.php:5234
7916
+ #: lib/wordfenceClass.php:5265
7917
+ #: lib/wordfenceClass.php:7279
7918
+ #: lib/wordfenceClass.php:7314
7919
+ #: lib/wordfenceClass.php:7346
7920
  msgid "We could not find that issue in our database."
7921
  msgstr ""
7922
 
7923
+ #: lib/wordfenceClass.php:4619
7924
  msgid "An error occurred while trying to hide the file."
7925
  msgstr ""
7926
 
7927
+ #: lib/wordfenceClass.php:4632
7928
  msgid "An invalid file was requested for hiding."
7929
  msgstr ""
7930
 
7931
+ #: lib/wordfenceClass.php:4659
7932
+ #: lib/wordfenceClass.php:5245
7933
  msgid "You don't have permission to repair .htaccess. You need to either fix the file manually using FTP or change the file permissions and ownership so that your web server has write access to repair the file."
7934
  msgstr ""
7935
 
7936
+ #: lib/wordfenceClass.php:4683
7937
  msgid "Manual permanent block by admin"
7938
  msgstr ""
7939
 
7940
+ #: lib/wordfenceClass.php:4719
7941
  msgid "Please enter a valid IP address to block."
7942
  msgstr ""
7943
 
7944
+ #: lib/wordfenceClass.php:4722
7945
  msgid "You can't block your own IP address."
7946
  msgstr ""
7947
 
7948
  #. translators: IP address.
7949
+ #: lib/wordfenceClass.php:4726
7950
  msgid "The IP address %s is allowlisted and can't be blocked. You can remove this IP from the allowlist on the Wordfence options page."
7951
  msgstr ""
7952
 
7953
  #. translators: IP address.
7954
+ #: lib/wordfenceClass.php:4728
7955
  msgid "The IP address %s 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."
7956
  msgstr ""
7957
 
7958
+ #: lib/wordfenceClass.php:4734
7959
  msgid "The IP address you're trying to block belongs to Google. Your options are currently set to not block these crawlers. Change this in Wordfence options if you want to manually block Google."
7960
  msgstr ""
7961
 
7962
+ #: lib/wordfenceClass.php:4777
7963
  msgid "An invalid operation was called."
7964
  msgstr ""
7965
 
7966
+ #: lib/wordfenceClass.php:4787
7967
  msgid "An invalid status was specified when trying to update that issue."
7968
  msgstr ""
7969
 
7970
+ #: lib/wordfenceClass.php:4799
7971
  msgid "Scan stop request received."
7972
  msgstr ""
7973
 
7974
+ #: lib/wordfenceClass.php:4800
7975
  msgid "A request was received to stop the previous scan."
7976
  msgstr ""
7977
 
7978
+ #: lib/wordfenceClass.php:4849
7979
  msgid "Idle"
7980
  msgstr ""
7981
 
7982
  #. translators: Localized date.
7983
+ #: lib/wordfenceClass.php:4858
7984
  msgid "Scan completed on %s"
7985
  msgstr ""
7986
 
7987
+ #: lib/wordfenceClass.php:4865
7988
  msgid "Last scan failed"
7989
  msgstr ""
7990
 
7991
  #. translators: Time until.
7992
+ #: lib/wordfenceClass.php:4928
7993
  msgid "more than %s"
7994
  msgstr ""
7995
 
7996
  #. translators: Localized date.
7997
+ #: lib/wordfenceClass.php:4932
7998
  msgid "The current scan looks like it has failed. Its last status update was <span id=\"wf-scan-failed-time-ago\">%s</span> ago. You may continue to wait in case it resumes or stop and restart the scan. Some sites may need adjustments to run scans reliably."
7999
  msgstr ""
8000
 
8001
  #. translators: Localized date.
8002
+ #: lib/wordfenceClass.php:4932
8003
+ #: lib/wordfenceClass.php:4940
8004
+ #: lib/wordfenceClass.php:4959
8005
+ #: lib/wordfenceClass.php:4971
8006
+ #: lib/wordfenceClass.php:4979
8007
  msgid "Click here for steps you can try."
8008
  msgstr ""
8009
 
8010
  #. translators: Localized date.
8011
+ #: lib/wordfenceClass.php:4933
8012
  msgid "Cancel Scan"
8013
  msgstr ""
8014
 
8015
+ #: lib/wordfenceClass.php:4940
8016
  msgid "The previous scan has failed. Some sites may need adjustments to run scans reliably."
8017
  msgstr ""
8018
 
8019
  #. translators: Time limit (number).
8020
+ #: lib/wordfenceClass.php:4946
8021
  msgid "The previous scan has terminated because the time limit of %s was reached. This limit can be customized on the options page."
8022
  msgstr ""
8023
 
8024
+ #: lib/wordfenceClass.php:4952
8025
  msgid "The previous scan has terminated because we detected an update occurring during the scan."
8026
  msgstr ""
8027
 
8028
+ #: lib/wordfenceClass.php:4959
8029
  msgid "The scan has failed to start. This is often because the site either cannot make outbound requests or is blocked from connecting to itself."
8030
  msgstr ""
8031
 
8032
+ #: lib/wordfenceClass.php:4965
8033
  msgid "Scans are not functional because SSL is unavailable."
8034
  msgstr ""
8035
 
8036
+ #: lib/wordfenceClass.php:4971
8037
  msgid "The scan has failed because we were unable to contact the Wordfence servers. Some sites may need adjustments to run scans reliably."
8038
  msgstr ""
8039
 
8040
+ #: lib/wordfenceClass.php:4979
8041
  msgid "The scan has failed because we received an unexpected response from the Wordfence servers. This may be a temporary error, though some sites may need adjustments to run scans reliably."
8042
  msgstr ""
8043
 
8044
+ #: lib/wordfenceClass.php:5006
8045
  msgid "Invalid email address given."
8046
  msgstr ""
8047
 
8048
+ #: lib/wordfenceClass.php:5031
8049
+ #: lib/wordfenceClass.php:5156
8050
  msgid "Deleting an infected wp-config.php file must be done outside of Wordfence. The wp-config.php file contains your database credentials, which you will need to restore normal site operations. Your site will NOT function once the wp-config.php file has been deleted."
8051
  msgstr ""
8052
 
8053
  #. translators: 1. File path. 2. Error message.
8054
+ #: lib/wordfenceClass.php:5040
8055
  msgid "Could not delete file %1$s. Error was: %2$s"
8056
  msgstr ""
8057
 
8058
  #. translators: File path.
8059
+ #: lib/wordfenceClass.php:5064
8060
  msgid "We could not retrieve the original file of %s to do a repair."
8061
  msgstr ""
8062
 
8063
  #. translators: File path.
8064
+ #: lib/wordfenceClass.php:5069
8065
  msgid "An invalid file %s was specified for repair."
8066
  msgstr ""
8067
 
8068
  #. translators: File path.
8069
+ #: lib/wordfenceClass.php:5077
8070
  msgid "You don't have permission to repair %s. You need to either fix the file manually using FTP or change the file permissions and ownership so that your web server has write access to repair the file."
8071
  msgstr ""
8072
 
8073
  #. translators: 1. File path. 2. Error message.
8074
+ #: lib/wordfenceClass.php:5080
8075
  msgid "We could not write to %1$s. The error was: %2$s"
8076
  msgstr ""
8077
 
8078
  #. translators: 1. File path. 2. Number of bytes.
8079
+ #: lib/wordfenceClass.php:5091
8080
  msgid "We could not write to %1$s. (%2$d bytes written) You may not have permission to modify files on your WordPress server."
8081
  msgstr ""
8082
 
8083
+ #: lib/wordfenceClass.php:5103
8084
  msgid "Deleted some files with errors"
8085
  msgstr ""
8086
 
8087
+ #: lib/wordfenceClass.php:5103
8088
  msgid "Repaired some files with errors"
8089
  msgstr ""
8090
 
8091
  #. translators: 1. Number of files. 2. Error message.
8092
+ #: lib/wordfenceClass.php:5106
8093
  msgid "Deleted %1$d files but we encountered the following errors with other files: %2$s"
8094
  msgstr ""
8095
 
8096
  #. translators: 1. Number of files. 2. Error message.
8097
+ #: lib/wordfenceClass.php:5108
8098
  msgid "Repaired %1$d files but we encountered the following errors with other files: %2$s"
8099
  msgstr ""
8100
 
8101
  #. translators: Number of files.
8102
+ #: lib/wordfenceClass.php:5112
8103
  msgid "Deleted %d files successfully"
8104
  msgstr ""
8105
 
8106
  #. translators: Number of files.
8107
+ #: lib/wordfenceClass.php:5112
8108
  msgid "Repaired %d files successfully"
8109
  msgstr ""
8110
 
8111
  #. translators: Number of files.
8112
+ #: lib/wordfenceClass.php:5113
8113
  msgid "Deleted %d files successfully. No errors were encountered."
8114
  msgstr ""
8115
 
8116
  #. translators: Number of files.
8117
+ #: lib/wordfenceClass.php:5113
8118
  msgid "Repaired %d files successfully. No errors were encountered."
8119
  msgstr ""
8120
 
8121
+ #: lib/wordfenceClass.php:5116
8122
  msgid "Could not delete files"
8123
  msgstr ""
8124
 
8125
+ #: lib/wordfenceClass.php:5116
8126
  msgid "Could not repair files"
8127
  msgstr ""
8128
 
8129
  #. translators: Error message.
8130
+ #: lib/wordfenceClass.php:5119
8131
  msgid "We could not delete any of the files you selected. We encountered the following errors: %s"
8132
  msgstr ""
8133
 
8134
  #. translators: Error message.
8135
+ #: lib/wordfenceClass.php:5121
8136
  msgid "We could not repair any of the files you selected. We encountered the following errors: %s"
8137
  msgstr ""
8138
 
8139
+ #: lib/wordfenceClass.php:5124
8140
  msgid "Nothing done"
8141
  msgstr ""
8142
 
8143
+ #: lib/wordfenceClass.php:5125
8144
  msgid "We didn't delete anything and no errors were found."
8145
  msgstr ""
8146
 
8147
+ #: lib/wordfenceClass.php:5125
8148
  msgid "We didn't repair anything and no errors were found."
8149
  msgstr ""
8150
 
8151
+ #: lib/wordfenceClass.php:5133
8152
  msgid "Invalid bulk operation selected"
8153
  msgstr ""
8154
 
8155
+ #: lib/wordfenceClass.php:5143
8156
  msgid "Could not delete file because we could not find that issue."
8157
  msgstr ""
8158
 
8159
+ #: lib/wordfenceClass.php:5146
8160
  msgid "Could not delete file because that issue does not appear to be a file related issue."
8161
  msgstr ""
8162
 
8163
+ #: lib/wordfenceClass.php:5152
8164
  msgid "An invalid file was requested for deletion."
8165
  msgstr ""
8166
 
8167
  #. translators: 1. File path. 2. Error message.
8168
+ #: lib/wordfenceClass.php:5195
8169
  msgid "Could not delete file %1$s. The error was: %2$s"
8170
  msgstr ""
8171
 
8172
+ #: lib/wordfenceClass.php:5208
8173
  msgid "Could not remove the option because we could not find that issue."
8174
  msgstr ""
8175
 
8176
+ #: lib/wordfenceClass.php:5211
8177
  msgid "Could not remove the option because that issue does not appear to be a database related issue."
8178
  msgstr ""
8179
 
8180
  #. translators: 1. WordPress option. 2. Error message.
8181
+ #: lib/wordfenceClass.php:5224
8182
  msgid "Could not remove the option %1$s. The error was: %2$s"
8183
  msgstr ""
8184
 
8185
+ #: lib/wordfenceClass.php:5251
8186
  msgid "Modifying the .htaccess file did not resolve the issue, so the original .htaccess file was restored. You can fix this manually by setting <code>display_errors</code> to <code>Off</code> in your php.ini if your site is on a VPS or dedicated server that you control."
8187
  msgstr ""
8188
 
8189
+ #: lib/wordfenceClass.php:5293
8190
  msgid "We could not get the original file to do a repair."
8191
  msgstr ""
8192
 
8193
+ #: lib/wordfenceClass.php:5297
8194
  msgid "An invalid file was specified for repair."
8195
  msgstr ""
8196
 
8197
+ #: lib/wordfenceClass.php:5312
8198
  msgid "We could not write to that file. You may not have permission to modify files on your WordPress server."
8199
  msgstr ""
8200
 
8201
+ #: lib/wordfenceClass.php:5316
8202
  msgid "Ajax request received to start scan."
8203
  msgstr ""
8204
 
8205
  #. translators: Number of URLs.
8206
+ #: lib/wordfenceClass.php:5371
8207
  msgid "Page contains %d malware URL: "
8208
  msgid_plural "Page contains %d malware URLs: "
8209
  msgstr[0] ""
8210
  msgstr[1] ""
8211
 
8212
+ #: lib/wordfenceClass.php:5374
8213
  msgid "Run a Scan"
8214
  msgstr ""
8215
 
8216
+ #: lib/wordfenceClass.php:5422
8217
  msgid "Unknown dashboard data set."
8218
  msgstr ""
8219
 
8220
+ #: lib/wordfenceClass.php:5453
8221
  msgid "Bad security token. It may have been more than 12 hours since you reloaded the page you came from. Try reloading the page you came from. If that doesn't work, please sign out and sign-in again."
8222
  msgstr ""
8223
 
8224
+ #: lib/wordfenceClass.php:5640
8225
  msgid "An invalid IP address was specified."
8226
  msgstr ""
8227
 
8228
+ #: lib/wordfenceClass.php:5693
8229
+ #: lib/wordfenceClass.php:5733
8230
+ #: lib/wordfenceClass.php:5771
8231
  msgid "File access blocked. (WORDFENCE_DISABLE_FILE_VIEWER is true)"
8232
  msgstr ""
8233
 
8234
+ #: lib/wordfenceClass.php:5698
8235
+ #: lib/wordfenceClass.php:5776
8236
  msgid "Invalid file requested. (Relative paths not allowed)"
8237
  msgstr ""
8238
 
8239
+ #: lib/wordfenceClass.php:5702
8240
+ #: lib/wordfenceClass.php:5737
8241
+ #: lib/wordfenceClass.php:5780
8242
  msgid "File contains illegal characters."
8243
  msgstr ""
8244
 
8245
  #. translators: Error message.
8246
+ #: lib/wordfenceClass.php:5712
8247
  msgid "We could not open the requested file for reading. The error was: %s"
8248
  msgstr ""
8249
 
8250
+ #: lib/wordfenceClass.php:5720
8251
  msgid "Greater than 2 Gigs"
8252
  msgstr ""
8253
 
8254
+ #: lib/wordfenceClass.php:5725
8255
  msgid "Unknown file size."
8256
  msgstr ""
8257
 
8258
+ #: lib/wordfenceClass.php:5746
8259
  msgid "We could not get the contents of the original file to do a comparison."
8260
  msgstr ""
8261
 
8262
+ #: lib/wordfenceClass.php:5784
8263
  msgid "File does not exist."
8264
  msgstr ""
8265
 
8266
+ #: lib/wordfenceClass.php:6037
8267
  #: views/dashboard/options-group-import.php:167
8268
  msgid "Reload"
8269
  msgstr ""
8270
 
8271
+ #: lib/wordfenceClass.php:6054
8272
  msgid "${totalIPs} addresses in this network"
8273
  msgstr ""
8274
 
8275
  #. translators: 1. Description of firewall action. 2. Description of input parameters.
8276
+ #: lib/wordfenceClass.php:6055
8277
  msgid "%s in POST body: %s"
8278
  msgstr ""
8279
 
8280
  #. translators: 1. Description of firewall action. 2. Description of input parameters.
8281
+ #: lib/wordfenceClass.php:6056
8282
  msgid "%s in cookie: %s"
8283
  msgstr ""
8284
 
8285
  #. translators: 1. Description of firewall action. 2. Description of input parameters.
8286
+ #: lib/wordfenceClass.php:6057
8287
  msgid "%s in file: %s"
8288
  msgstr ""
8289
 
8290
  #. translators: 1. Description of firewall action. 2. Description of input parameters.
8291
+ #: lib/wordfenceClass.php:6058
8292
  msgid "%s in query string: %s"
8293
  msgstr ""
8294
 
8295
  #. translators: Domain name.
8296
+ #: lib/wordfenceClass.php:6059
8297
  msgid "%s is not valid hostname"
8298
  msgstr ""
8299
 
8300
  #. translators: Domain name.
8301
+ #: lib/wordfenceClass.php:6060
8302
  msgid ".htaccess Updated"
8303
  msgstr ""
8304
 
8305
+ #: lib/wordfenceClass.php:6061
8306
  msgid ".htaccess change"
8307
  msgstr ""
8308
 
8309
+ #: lib/wordfenceClass.php:6062
8310
  msgid "404 Not Found"
8311
  msgstr ""
8312
 
8313
+ #: lib/wordfenceClass.php:6063
8314
  msgid "Activity Log Sent"
8315
  msgstr ""
8316
 
8317
+ #: lib/wordfenceClass.php:6064
8318
  msgid "Add action to allowlist"
8319
  msgstr ""
8320
 
8321
+ #: lib/wordfenceClass.php:6065
8322
  msgid "Add code to .htaccess"
8323
  msgstr ""
8324
 
8325
+ #: lib/wordfenceClass.php:6066
8326
  msgid "All Hits"
8327
  msgstr ""
8328
 
8329
  #. translators: WordPress username.
8330
+ #: lib/wordfenceClass.php:6067
8331
  msgid "All capabilties of admin user %s were successfully revoked."
8332
  msgstr ""
8333
 
8334
+ #: lib/wordfenceClass.php:6069
8335
  msgid "An error occurred when adding the request to the allowlist."
8336
  msgstr ""
8337
 
8338
+ #: lib/wordfenceClass.php:6070
8339
  msgid "Are you sure you want to allowlist this action?"
8340
  msgstr ""
8341
 
8342
+ #: lib/wordfenceClass.php:6071
8343
  msgid "Authentication Code"
8344
  msgstr ""
8345
 
8346
+ #: lib/wordfenceClass.php:6072
8347
  msgid "Background Request Blocked"
8348
  msgstr ""
8349
 
8350
+ #: lib/wordfenceClass.php:6073
8351
  msgid "Block This Network"
8352
  msgstr ""
8353
 
8354
+ #: lib/wordfenceClass.php:6075
8355
  msgid "Blocked By Firewall"
8356
  msgstr ""
8357
 
8358
+ #: lib/wordfenceClass.php:6076
8359
  msgid "Blocked WAF"
8360
  msgstr ""
8361
 
8362
+ #: lib/wordfenceClass.php:6077
8363
  msgid "Blocked by Wordfence"
8364
  msgstr ""
8365
 
8366
+ #: lib/wordfenceClass.php:6078
8367
  msgid "Blocked by Wordfence plugin settings"
8368
  msgstr ""
8369
 
8370
+ #: lib/wordfenceClass.php:6079
8371
  msgid "Blocked by the Wordfence Application Firewall and plugin settings"
8372
  msgstr ""
8373
 
8374
+ #: lib/wordfenceClass.php:6080
8375
  msgid "Blocked by the Wordfence Security Network"
8376
  msgstr ""
8377
 
8378
+ #: lib/wordfenceClass.php:6081
8379
  msgid "Blocked by the Wordfence Web Application Firewall"
8380
  msgstr ""
8381
 
8382
+ #: lib/wordfenceClass.php:6084
8383
  msgid "Cellphone Sign-In Recovery Codes"
8384
  msgstr ""
8385
 
8386
+ #: lib/wordfenceClass.php:6085
8387
  msgid "Cellphone Sign-in activated for user."
8388
  msgstr ""
8389
 
8390
+ #: lib/wordfenceClass.php:6086
8391
  msgid "Click here to download a backup copy of this file now"
8392
  msgstr ""
8393
 
8394
+ #: lib/wordfenceClass.php:6087
8395
  msgid "Click here to download a backup copy of your .htaccess file now"
8396
  msgstr ""
8397
 
8398
+ #: lib/wordfenceClass.php:6088
8399
  msgid "Click to fix .htaccess"
8400
  msgstr ""
8401
 
8402
+ #: lib/wordfenceClass.php:6090
8403
  msgid "Crawlers"
8404
  msgstr ""
8405
 
8406
+ #: lib/wordfenceClass.php:6091
8407
  msgid "Diagnostic report has been sent successfully."
8408
  msgstr ""
8409
 
8410
+ #: lib/wordfenceClass.php:6092
8411
  msgid "Directory Listing Disabled"
8412
  msgstr ""
8413
 
8414
+ #: lib/wordfenceClass.php:6093
8415
  msgid "Directory listing has been disabled on your server."
8416
  msgstr ""
8417
 
8418
+ #: lib/wordfenceClass.php:6096
8419
  msgid "Don't ask again"
8420
  msgstr ""
8421
 
8422
+ #: lib/wordfenceClass.php:6098
8423
  msgid "Download Backup File"
8424
  msgstr ""
8425
 
8426
+ #: lib/wordfenceClass.php:6099
8427
  msgid "Each line of 16 letters and numbers is a single recovery code, with optional spaces for readability. When typing your password, enter \"wf\" followed by the entire code like \"mypassword wf1234 5678 90AB CDEF\". If your site shows a separate prompt for entering a code after entering only your username and password, enter only the code like \"1234 5678 90AB CDEF\". Your recovery codes are:"
8428
  msgstr ""
8429
 
8430
+ #: lib/wordfenceClass.php:6100
8431
  msgid "Email Diagnostic Report"
8432
  msgstr ""
8433
 
8434
+ #: lib/wordfenceClass.php:6101
8435
  msgid "Email Wordfence Activity Log"
8436
  msgstr ""
8437
 
8438
+ #: lib/wordfenceClass.php:6103
8439
  msgid "Enter the email address you would like to send the Wordfence activity log to. Note that the activity log may contain thousands of lines of data. This log is usually only sent to a member of the Wordfence support team. It also contains your PHP configuration from the phpinfo() function for diagnostic data."
8440
  msgstr ""
8441
 
8442
+ #: lib/wordfenceClass.php:6104
8443
  msgid "Error"
8444
  msgstr ""
8445
 
8446
+ #: lib/wordfenceClass.php:6105
8447
  msgid "Error Enabling All Options Page"
8448
  msgstr ""
8449
 
8450
+ #: lib/wordfenceClass.php:6106
8451
  msgid "Error Restoring Defaults"
8452
  msgstr ""
8453
 
8454
+ #: lib/wordfenceClass.php:6107
8455
  msgid "Error Saving Option"
8456
  msgstr ""
8457
 
8458
+ #: lib/wordfenceClass.php:6108
8459
  msgid "Error Saving Options"
8460
  msgstr ""
8461
 
8462
+ #: lib/wordfenceClass.php:6109
8463
  msgid "Failed Login"
8464
  msgstr ""
8465
 
8466
+ #: lib/wordfenceClass.php:6110
8467
  msgid "Failed Login: Invalid Username"
8468
  msgstr ""
8469
 
8470
+ #: lib/wordfenceClass.php:6111
8471
  msgid "Failed Login: Valid Username"
8472
  msgstr ""
8473
 
8474
+ #: lib/wordfenceClass.php:6112
8475
  msgid "File hidden successfully"
8476
  msgstr ""
8477
 
8478
+ #: lib/wordfenceClass.php:6113
8479
  msgid "File restored OK"
8480
  msgstr ""
8481
 
8482
+ #: lib/wordfenceClass.php:6114
8483
  msgid "Filter Traffic"
8484
  msgstr ""
8485
 
8486
+ #: lib/wordfenceClass.php:6115
8487
  msgid "Firewall Response"
8488
  msgstr ""
8489
 
8490
+ #: lib/wordfenceClass.php:6116
8491
  #: views/scanner/issue-wpscan_fullPathDiscl.php:8
8492
  msgid "Full Path Disclosure"
8493
  msgstr ""
8494
 
8495
+ #: lib/wordfenceClass.php:6117
8496
  msgid "Google Bot"
8497
  msgstr ""
8498
 
8499
+ #: lib/wordfenceClass.php:6118
8500
  msgid "Google Crawlers"
8501
  msgstr ""
8502
 
8503
+ #: lib/wordfenceClass.php:6119
8504
  msgid "HTTP Response Code"
8505
  msgstr ""
8506
 
8507
+ #: lib/wordfenceClass.php:6121
8508
  msgid "Humans"
8509
  msgstr ""
8510
 
8511
+ #: lib/wordfenceClass.php:6123
8512
  msgid "Key:"
8513
  msgstr ""
8514
 
8515
  #. translators: Localized date.
8516
+ #: lib/wordfenceClass.php:6124
8517
  msgid "Last Updated: %s"
8518
  msgstr ""
8519
 
8520
  #. translators: Localized date.
8521
+ #: lib/wordfenceClass.php:6125
8522
  msgid "Learn more about repairing modified files."
8523
  msgstr ""
8524
 
8525
+ #: lib/wordfenceClass.php:6127
8526
  msgid "Locked Out"
8527
  msgstr ""
8528
 
8529
+ #: lib/wordfenceClass.php:6128
8530
  msgid "Locked out from logging in"
8531
  msgstr ""
8532
 
8533
+ #: lib/wordfenceClass.php:6129
8534
  msgid "Logged In"
8535
  msgstr ""
8536
 
8537
+ #: lib/wordfenceClass.php:6130
8538
  msgid "Logins"
8539
  msgstr ""
8540
 
8541
+ #: lib/wordfenceClass.php:6131
8542
  msgid "Logins and Logouts"
8543
  msgstr ""
8544
 
8545
  #. translators: Localized date.
8546
+ #: lib/wordfenceClass.php:6134
8547
  msgid "Next Update Check: %s"
8548
  msgstr ""
8549
 
8550
  #. translators: Localized date.
8551
+ #: lib/wordfenceClass.php:6135
8552
  msgid "No activity to report yet. Please complete your first scan."
8553
  msgstr ""
8554
 
8555
+ #: lib/wordfenceClass.php:6136
8556
  msgid "No issues have been ignored."
8557
  msgstr ""
8558
 
8559
+ #: lib/wordfenceClass.php:6137
8560
  msgid "No new issues have been found."
8561
  msgstr ""
8562
 
8563
+ #: lib/wordfenceClass.php:6138
8564
  msgid "No rules were updated. Please verify you have permissions to write to the /wp-content/wflogs directory."
8565
  msgstr ""
8566
 
8567
+ #: lib/wordfenceClass.php:6139
8568
  msgid "No rules were updated. Please verify your website can reach the Wordfence servers."
8569
  msgstr ""
8570
 
8571
+ #: lib/wordfenceClass.php:6140
8572
  msgid "No rules were updated. Your website has reached the maximum number of rule update requests. Please try again later."
8573
  msgstr ""
8574
 
8575
+ #: lib/wordfenceClass.php:6141
8576
  msgid "Note: Status will update when changes are saved"
8577
  msgstr ""
8578
 
8579
+ #: lib/wordfenceClass.php:6142
8580
  msgid "OK"
8581
  msgstr ""
8582
 
8583
+ #: lib/wordfenceClass.php:6143
8584
  msgid "Pages Not Found"
8585
  msgstr ""
8586
 
8587
+ #: lib/wordfenceClass.php:6144
8588
  msgid "Paid Members Only"
8589
  msgstr ""
8590
 
8591
+ #: lib/wordfenceClass.php:6146
8592
  msgid "Please enter a valid email address."
8593
  msgstr ""
8594
 
8595
+ #: lib/wordfenceClass.php:6147
8596
  msgid "Please include your support ticket number or forum username."
8597
  msgstr ""
8598
 
8599
+ #: lib/wordfenceClass.php:6148
8600
  msgid "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:"
8601
  msgstr ""
8602
 
8603
+ #: lib/wordfenceClass.php:6149
8604
  msgid "Please specify a reason"
8605
  msgstr ""
8606
 
8607
+ #: lib/wordfenceClass.php:6150
8608
  msgid "Please specify a valid IP address range in the form of \"1.2.3.4 - 1.2.3.5\" without quotes. Make sure the dash between the IP addresses in a normal dash (a minus sign on your keyboard) and not another character that looks like a dash."
8609
  msgstr ""
8610
 
8611
+ #: lib/wordfenceClass.php:6151
8612
  msgid "Please specify either an IP address range, Hostname or a web browser pattern to match."
8613
  msgstr ""
8614
 
8615
+ #: lib/wordfenceClass.php:6152
8616
  msgid "Recent Activity"
8617
  msgstr ""
8618
 
8619
+ #: lib/wordfenceClass.php:6153
8620
  msgid "Recovery Codes"
8621
  msgstr ""
8622
 
8623
+ #: lib/wordfenceClass.php:6154
8624
  msgid "Redirected"
8625
  msgstr ""
8626
 
8627
+ #: lib/wordfenceClass.php:6155
8628
  msgid "Redirected by Country Blocking bypass URL"
8629
  msgstr ""
8630
 
8631
+ #: lib/wordfenceClass.php:6156
8632
  msgid "Referer"
8633
  msgstr ""
8634
 
8635
+ #: lib/wordfenceClass.php:6157
8636
  msgid "Registered Users"
8637
  msgstr ""
8638
 
8639
+ #: lib/wordfenceClass.php:6159
8640
  msgid "Rule Update Failed"
8641
  msgstr ""
8642
 
8643
+ #: lib/wordfenceClass.php:6160
8644
  msgid "Rules Updated"
8645
  msgstr ""
8646
 
8647
+ #: lib/wordfenceClass.php:6162
8648
  msgid "Scan Complete."
8649
  msgstr ""
8650
 
8651
+ #: lib/wordfenceClass.php:6163
8652
  msgid "Scan the code below with your authenticator app to add this account. Some authenticator apps also allow you to type in the text version instead."
8653
  msgstr ""
8654
 
8655
+ #: lib/wordfenceClass.php:6164
8656
  msgid "Security Event"
8657
  msgstr ""
8658
 
8659
+ #: lib/wordfenceClass.php:6165
8660
  msgid "Send"
8661
  msgstr ""
8662
 
8663
+ #: lib/wordfenceClass.php:6166
8664
  msgid "Sorry, but no data for that IP or domain was found."
8665
  msgstr ""
8666
 
8667
+ #: lib/wordfenceClass.php:6167
8668
  msgid "Specify a valid IP range"
8669
  msgstr ""
8670
 
8671
+ #: lib/wordfenceClass.php:6168
8672
  msgid "Specify a valid hostname"
8673
  msgstr ""
8674
 
8675
+ #: lib/wordfenceClass.php:6169
8676
  msgid "Specify an IP range, Hostname or Browser pattern"
8677
  msgstr ""
8678
 
8679
+ #: lib/wordfenceClass.php:6170
8680
  msgid "Success deleting file"
8681
  msgstr ""
8682
 
8683
+ #: lib/wordfenceClass.php:6171
8684
  msgid "Success removing option"
8685
  msgstr ""
8686
 
8687
+ #: lib/wordfenceClass.php:6172
8688
  msgid "Success restoring file"
8689
  msgstr ""
8690
 
8691
+ #: lib/wordfenceClass.php:6173
8692
  msgid "Success updating option"
8693
  msgstr ""
8694
 
8695
+ #: lib/wordfenceClass.php:6174
8696
  msgid "Successfully deleted admin"
8697
  msgstr ""
8698
 
8699
+ #: lib/wordfenceClass.php:6175
8700
  msgid "Successfully revoked admin"
8701
  msgstr ""
8702
 
8703
+ #: lib/wordfenceClass.php:6176
8704
  msgid "Test Email Sent"
8705
  msgstr ""
8706
 
8707
+ #: lib/wordfenceClass.php:6177
8708
  msgid "The 'How does Wordfence get IPs' option was successfully updated to the recommended value."
8709
  msgstr ""
8710
 
8711
+ #: lib/wordfenceClass.php:6178
8712
  msgid "The Full Path disclosure issue has been fixed"
8713
  msgstr ""
8714
 
8715
  #. translators: WordPress username.
8716
+ #: lib/wordfenceClass.php:6179
8717
  msgid "The admin user %s was successfully deleted."
8718
  msgstr ""
8719
 
8720
  #. translators: File path.
8721
+ #: lib/wordfenceClass.php:6180
8722
  msgid "The file %s was successfully deleted."
8723
  msgstr ""
8724
 
8725
  #. translators: File path.
8726
+ #: lib/wordfenceClass.php:6181
8727
  msgid "The file %s was successfully hidden from public view."
8728
  msgstr ""
8729
 
8730
  #. translators: File path.
8731
+ #: lib/wordfenceClass.php:6182
8732
  msgid "The file %s was successfully restored."
8733
  msgstr ""
8734
 
8735
  #. translators: WordPress option.
8736
+ #: lib/wordfenceClass.php:6183
8737
  msgid "The option %s was successfully removed."
8738
  msgstr ""
8739
 
8740
  #. translators: WordPress option.
8741
+ #: lib/wordfenceClass.php:6184
8742
  msgid "The request has been allowlisted. Please try it again."
8743
  msgstr ""
8744
 
8745
+ #: lib/wordfenceClass.php:6185
8746
  msgid "There was an error while sending the email."
8747
  msgstr ""
8748
 
8749
+ #: lib/wordfenceClass.php:6186
8750
  msgid "This will be shown only once. Keep these codes somewhere safe."
8751
  msgstr ""
8752
 
8753
+ #: lib/wordfenceClass.php:6187
8754
  msgid "Throttled"
8755
  msgstr ""
8756
 
8757
+ #: lib/wordfenceClass.php:6188
8758
  msgid "Two Factor Status"
8759
  msgstr ""
8760
 
8761
  #. translators: HTTP client type.
8762
+ #: lib/wordfenceClass.php:6190
8763
  msgid "Type: %s"
8764
  msgstr ""
8765
 
8766
  #. translators: HTTP client type.
8767
+ #: lib/wordfenceClass.php:6191
8768
  #: views/scanner/issue-checkGSB.php:8
8769
  #: views/scanner/issue-commentBadURL.php:8
8770
  #: views/scanner/issue-configReadable.php:12
8784
  msgid "URL"
8785
  msgstr ""
8786
 
8787
+ #: lib/wordfenceClass.php:6192
8788
  msgid "Unable to automatically hide file"
8789
  msgstr ""
8790
 
8791
  #. translators: 2FA backup codes.
8792
+ #: lib/wordfenceClass.php:6193
8793
  msgid "Use one of these %s codes to log in if you are unable to access your phone. Codes are 16 characters long, plus optional spaces. Each one may be used only once."
8794
  msgstr ""
8795
 
8796
  #. translators: 2FA backup codes.
8797
+ #: lib/wordfenceClass.php:6194
8798
  msgid "Use one of these %s codes to log in if you lose access to your authenticator device. Codes are 16 characters long, plus optional spaces. Each one may be used only once."
8799
  msgstr ""
8800
 
8801
+ #: lib/wordfenceClass.php:6196
8802
  msgid "User ID"
8803
  msgstr ""
8804
 
8805
+ #: lib/wordfenceClass.php:6198
8806
  msgid "WHOIS LOOKUP"
8807
  msgstr ""
8808
 
8809
+ #: lib/wordfenceClass.php:6199
8810
  msgid "We are about to change your <em>.htaccess</em> file. Please make a backup of this file before proceeding."
8811
  msgstr ""
8812
 
8813
  #. translators: Error message.
8814
+ #: lib/wordfenceClass.php:6200
8815
  msgid "We can't modify your .htaccess file for you because: %s"
8816
  msgstr ""
8817
 
8818
  #. translators: Error message.
8819
+ #: lib/wordfenceClass.php:6201
8820
  msgid "We encountered a problem"
8821
  msgstr ""
8822
 
8823
  #. translators: URL.
8824
+ #: lib/wordfenceClass.php:6202
8825
  msgid "Wordfence Firewall blocked a background request to WordPress for the URL %s. If this occurred as a result of an intentional action, you may consider allowlisting the request to allow it in the future."
8826
  msgstr ""
8827
 
8828
  #. translators: URL.
8829
+ #: lib/wordfenceClass.php:6203
8830
  msgid "Wordfence is working..."
8831
  msgstr ""
8832
 
8833
+ #: lib/wordfenceClass.php:6204
8834
+ msgid "You are using Nginx as your web server. You'll need to disable autoindexing in your nginx.conf. See the <a target='_blank' rel='noopener noreferrer' href='https://nginx.org/en/docs/http/ngx_http_autoindex_module.html'>Nginx docs for more info</a> on how to do this."
8835
  msgstr ""
8836
 
8837
+ #: lib/wordfenceClass.php:6205
8838
  msgid "You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually delete or hide those files."
8839
  msgstr ""
8840
 
8841
+ #: lib/wordfenceClass.php:6206
8842
  msgid "You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually modify your php.ini to disable <em>display_error</em>"
8843
  msgstr ""
8844
 
8845
+ #: lib/wordfenceClass.php:6207
8846
  msgid "You forgot to include a reason you're blocking this IP range. We ask you to include this for your own record keeping."
8847
  msgstr ""
8848
 
8849
+ #: lib/wordfenceClass.php:6208
8850
  msgid "You have unsaved changes to your options. If you leave this page, those changes will be lost."
8851
  msgstr ""
8852
 
8853
+ #: lib/wordfenceClass.php:6209
8854
  msgid "Your .htaccess has been updated successfully. Please verify your site is functioning normally."
8855
  msgstr ""
8856
 
8857
  #. translators: Email address.
8858
+ #: lib/wordfenceClass.php:6210
8859
  msgid "Your Wordfence activity log was sent to %s"
8860
  msgstr ""
8861
 
8862
  #. translators: Email address.
8863
+ #: lib/wordfenceClass.php:6211
8864
  msgid "Your rules have been updated successfully."
8865
  msgstr ""
8866
 
8867
+ #: lib/wordfenceClass.php:6212
8868
  msgid "Your rules have been updated successfully. You are currently using the free version of Wordfence. Upgrade to Wordfence premium to have your rules updated automatically as new threats emerge. <a href=\"https://www.wordfence.com/wafUpdateRules1/wordfence-signup/\">Click here to purchase a premium license</a>. <em>Note: Your rules will still update every 30 days as a free user.</em>"
8869
  msgstr ""
8870
 
8871
  #. translators: wp_mail() return value.
8872
+ #: lib/wordfenceClass.php:6213
8873
  msgid "Your test email was sent to the requested email address. The result we received from the WordPress wp_mail() function was: %s<br /><br />A 'True' result means WordPress thinks the mail was sent without errors. A 'False' result means that WordPress encountered an error sending your mail. Note that it's possible to get a 'True' response with an error elsewhere in your mail system that may cause emails to not be delivered."
8874
  msgstr ""
8875
 
8876
  #. translators: wp_mail() return value.
8877
+ #: lib/wordfenceClass.php:6214
8878
  msgid "blocked by firewall"
8879
  msgstr ""
8880
 
8881
  #. translators: Reason for firewall action.
8882
+ #: lib/wordfenceClass.php:6215
8883
  msgid "blocked by firewall for %s"
8884
  msgstr ""
8885
 
8886
  #. translators: Reason for firewall action.
8887
+ #: lib/wordfenceClass.php:6216
8888
  msgid "blocked by real-time IP blocklist"
8889
  msgstr ""
8890
 
8891
+ #: lib/wordfenceClass.php:6217
8892
  msgid "blocked by the Wordfence Security Network"
8893
  msgstr ""
8894
 
8895
  #. translators: Reason for firewall action.
8896
+ #: lib/wordfenceClass.php:6218
8897
  msgid "blocked for %s"
8898
  msgstr ""
8899
 
8900
  #. translators: Reason for firewall action.
8901
+ #: lib/wordfenceClass.php:6219
8902
  msgid "locked out from logging in"
8903
  msgstr ""
8904
 
8905
+ #: lib/wordfenceClass.php:6232
8906
  msgid "Wordfence generated an error on activation. The output we received during activation was:"
8907
  msgstr ""
8908
 
8909
+ #: lib/wordfenceClass.php:6239
8910
  msgid "Wordfence could not register with the Wordfence scanning servers when it activated."
8911
  msgstr ""
8912
 
8913
+ #: lib/wordfenceClass.php:6240
8914
  msgid "You can try to fix this by deactivating Wordfence and then activating it again, so Wordfence will retry registering for you. If you keep seeing this error, it usually means your WordPress server can't connect to our scanning servers, or your wfConfig database table cannot be created to save the key. You can try asking your host to allow your server to connect to noc1.wordfence.com or check the wfConfig database table and database privileges."
8915
  msgstr ""
8916
 
8917
+ #: lib/wordfenceClass.php:6254
8918
  msgid "The Wordfence Web Application Firewall cannot run."
8919
  msgstr ""
8920
 
8921
  #. translators: 1. WordPress admin panel URL. 2. Support URL.
8922
+ #: lib/wordfenceClass.php:6257
8923
+ msgid "The configuration files are corrupt or inaccessible by the web server, which is preventing the WAF from functioning. Please verify the web server has permission to access the configuration files. You may also try to rebuild the configuration file by <a href=\"%1$s\">clicking here</a>. It will automatically resume normal operation when it is fixed. <a class=\"wfhelp\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"%2$s\"><span class=\"screen-reader-text\"> ("
8924
  msgstr ""
8925
 
8926
+ #: lib/wordfenceClass.php:6263
8927
  msgid "The WAF storage engine is currently set to mysqli, but Wordfence is unable to use the database. The WAF will fall back to using local file system storage instead."
8928
  msgstr ""
8929
 
8930
+ #: lib/wordfenceClass.php:6276
8931
+ #: lib/wordfenceClass.php:6295
8932
  msgid "The Wordfence Web Application Firewall needs a configuration update."
8933
  msgstr ""
8934
 
8935
  #. translators: 1. WordPress admin panel URL. 2. Support URL.
8936
+ #: lib/wordfenceClass.php:6279
8937
+ msgid "It is currently configured to use an older version of PHP and may become deactivated if PHP is updated. You may perform the configuration update automatically by <a href=\"%1$s\">clicking here</a>. <a class=\"wfhelp\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"%2$s\"><span class=\"screen-reader-text\"> ("
8938
  msgstr ""
8939
 
8940
  #. translators: 1. WordPress admin panel URL. 2. Support URL.
8941
+ #: lib/wordfenceClass.php:6298
8942
+ msgid "It is not currently in extended protection mode but was configured to use an older version of PHP and may have become deactivated when PHP was updated. You may perform the configuration update automatically by <a href=\"%1$s\">clicking here</a> or use the \"Optimize the Wordfence Firewall\" button on the Firewall Options page. <a class=\"wfhelp\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"%2$s\"><span class=\"screen-reader-text\"> ("
8943
  msgstr ""
8944
 
8945
+ #: lib/wordfenceClass.php:6304
8946
  msgid "The Wordfence Web Application Firewall is in read-only mode."
8947
  msgstr ""
8948
 
8949
+ #: lib/wordfenceClass.php:6313
8950
  msgid "This site is currently using PHP's built in REMOTE_ADDR."
8951
  msgstr ""
8952
 
8953
+ #: lib/wordfenceClass.php:6316
8954
  msgid "This site is currently using the X-Forwarded-For HTTP header, which should only be used when the site is behind a front-end proxy that outputs this header."
8955
  msgstr ""
8956
 
8957
+ #: lib/wordfenceClass.php:6319
8958
  msgid "This site is currently using the X-Real-IP HTTP header, which should only be used when the site is behind a front-end proxy that outputs this header."
8959
  msgstr ""
8960
 
8961
+ #: lib/wordfenceClass.php:6322
8962
  msgid "This site is currently using the Cloudflare \"CF-Connecting-IP\" HTTP header, which should only be used when the site is behind Cloudflare."
8963
  msgstr ""
8964
 
8965
+ #: lib/wordfenceClass.php:6339
8966
  msgid "Your 'How does Wordfence get IPs' setting is misconfigured."
8967
  msgstr ""
8968
 
8969
+ #: lib/wordfenceClass.php:6341
8970
  msgid "Click here to use the recommended setting"
8971
  msgstr ""
8972
 
8973
+ #: lib/wordfenceClass.php:6343
8974
  #: views/onboarding/fresh-install.php:39
8975
  msgid "or"
8976
  msgstr ""
8977
 
8978
+ #: lib/wordfenceClass.php:6345
8979
  msgid "visit the options page"
8980
  msgstr ""
8981
 
8982
+ #: lib/wordfenceClass.php:6347
8983
  msgid "to manually update it."
8984
  msgstr ""
8985
 
8986
+ #: lib/wordfenceClass.php:6355
8987
  msgid "Do you want Wordfence to stay up-to-date automatically?"
8988
  msgstr ""
8989
 
8990
+ #: lib/wordfenceClass.php:6357
8991
  msgid "Yes, enable auto-update."
8992
  msgstr ""
8993
 
8994
+ #: lib/wordfenceClass.php:6359
8995
  msgid "No thanks."
8996
  msgstr ""
8997
 
8998
+ #: lib/wordfenceClass.php:6383
8999
+ msgid "Wordfence country blocking is currently set to block the United States. We recommend allowing access from the United States for Google and other benign crawlers, unless you choose to only block the login page."
9000
+ msgstr ""
9001
+
9002
  #. translators: Localized date.
9003
+ #: lib/wordfenceClass.php:6476
9004
  msgid "The last rules update for the Wordfence Web Application Firewall was unsuccessful. The last successful update check was %s, so this site may be missing new rules added since then."
9005
  msgstr ""
9006
 
9007
  #. translators: 1. Localized date. 2. WordPress admin panel URL.
9008
+ #: lib/wordfenceClass.php:6484
9009
  msgid "You may wait for the next automatic attempt at %1$s or try to <a href=\"%2$s\">Manually Update</a> by clicking the \"Manually Refresh Rules\" button below the Rules list."
9010
  msgstr ""
9011
 
9012
  #. translators: WordPress admin panel URL.
9013
+ #: lib/wordfenceClass.php:6490
9014
  msgid "You may wait for the next automatic attempt or try to <a href=\"%s\">Manually Update</a> by clicking the \"Manually Refresh Rules\" button below the Rules list."
9015
  msgstr ""
9016
 
9017
  #. translators: WordPress admin panel URL.
9018
+ #: lib/wordfenceClass.php:6495
9019
  msgid "You may wait for the next automatic attempt at %s or log into the parent site to manually update by clicking the \"Manually Refresh Rules\" button below the Rules list."
9020
  msgstr ""
9021
 
9022
+ #: lib/wordfenceClass.php:6498
9023
  msgid "You may wait for the next automatic attempt or log into the parent site to manually update by clicking the \"Manually Refresh Rules\" button below the Rules list."
9024
  msgstr ""
9025
 
9026
+ #: lib/wordfenceClass.php:6605
9027
  #: models/page/wfPage.php:101
9028
  msgid "Dashboard"
9029
  msgstr ""
9030
 
9031
  #. translators: Number of notifications.
9032
+ #: lib/wordfenceClass.php:6685
9033
  msgid "You have %d new Wordfence notification."
9034
  msgid_plural "You have %d new Wordfence notifications."
9035
  msgstr[0] ""
9036
  msgstr[1] ""
9037
 
9038
+ #: lib/wordfenceClass.php:6709
9039
  msgid "JavaScript Errors"
9040
  msgstr ""
9041
 
9042
+ #: lib/wordfenceClass.php:6715
9043
  msgid "Malware URLs"
9044
  msgstr ""
9045
 
9046
  #. translators: WordPress admin panel URL.
9047
+ #: lib/wordfenceClass.php:6833
9048
+ #: lib/wordfenceClass.php:6896
9049
  msgid "<a href=\"%s\">Click here</a> to rebuild the configuration file."
9050
  msgstr ""
9051
 
9052
  #. translators: File path.
9053
+ #: lib/wordfenceClass.php:6844
9054
+ #: lib/wordfenceClass.php:6907
9055
  msgid "We were unable to write to %s which the WAF uses for storage. Please update permissions on the parent directory so the web server can write to it."
9056
  msgstr ""
9057
 
9058
+ #: lib/wordfenceClass.php:6854
9059
+ #: lib/wordfenceClass.php:6917
9060
  msgid "An error occured when fetching the WAF configuration from the database."
9061
  msgstr ""
9062
 
9063
  #. translators: Plugin name.
9064
+ #: lib/wordfenceClass.php:6939
9065
  msgid "The Wordfence Live Traffic feature has been disabled because you have %s active which is not compatible with Wordfence Live Traffic."
9066
  msgstr ""
9067
 
9068
  #. translators: 1. Plugin name.
9069
+ #: lib/wordfenceClass.php:6941
9070
  msgid "If you want to reenable Wordfence Live Traffic, you need to deactivate %1$s and then go to the Wordfence options page and reenable Live Traffic there. Wordfence does work with %1$s, however Live Traffic will be disabled and the Wordfence firewall will also count less hits per visitor because of the %1$s caching function. All other functions should work correctly."
9071
  msgstr ""
9072
 
9073
  #. translators: File path.
9074
+ #: lib/wordfenceClass.php:7002
9075
  msgid "The file <code>%s</code> was restored successfully."
9076
  msgstr ""
9077
 
9078
+ #: lib/wordfenceClass.php:7007
9079
  msgid "There was an error restoring the file."
9080
  msgstr ""
9081
 
9082
+ #: lib/wordfenceClass.php:7017
9083
+ #: lib/wordfenceClass.php:7040
9084
  msgid "Return to scan results"
9085
  msgstr ""
9086
 
9087
  #. translators: File path.
9088
+ #: lib/wordfenceClass.php:7026
9089
  msgid "The file <code>%s</code> was deleted successfully."
9090
  msgstr ""
9091
 
9092
+ #: lib/wordfenceClass.php:7030
9093
  msgid "There was an error deleting the file."
9094
  msgstr ""
9095
 
9096
  #. translators: IP address.
9097
+ #: lib/wordfenceClass.php:7098
9098
  msgid ""
9099
  "User IP: %s\n"
9100
  ""
9101
  msgstr ""
9102
 
9103
  #. translators: Domain name.
9104
+ #: lib/wordfenceClass.php:7101
9105
  msgid ""
9106
  "User hostname: %s\n"
9107
  ""
9108
  msgstr ""
9109
 
9110
+ #: lib/wordfenceClass.php:7105
9111
  msgid "User location: "
9112
  msgstr ""
9113
 
9114
  #. translators: WordPress admin panel URL.
9115
+ #: lib/wordfenceClass.php:7160
9116
  msgid "No longer an administrator for this site? Click here to stop receiving security alerts: %s"
9117
  msgstr ""
9118
 
9119
+ #: lib/wordfenceClass.php:7200
9120
  msgid "The IP you provided must be in dotted quad notation or use ranges with square brackets. e.g. 10.11.12.13 or 10.11.12.[1-50]"
9121
  msgstr ""
9122
 
9123
+ #: lib/wordfenceClass.php:7219
9124
  msgid "Invalid email address provided"
9125
  msgstr ""
9126
 
9127
+ #: lib/wordfenceClass.php:7224
9128
  msgid "Test email sent successfully"
9129
  msgstr ""
9130
 
9131
+ #: lib/wordfenceClass.php:7225
9132
  msgid "Test email failed to send"
9133
  msgstr ""
9134
 
9135
  #. translators: Localized date range.
9136
+ #: lib/wordfenceClass.php:7243
9137
  msgid "Wordfence activity in the past %s"
9138
  msgstr ""
9139
 
9140
+ #: lib/wordfenceClass.php:7283
9141
+ #: lib/wordfenceClass.php:7287
9142
+ #: lib/wordfenceClass.php:7318
9143
  msgid "We could not find that user in the database."
9144
  msgstr ""
9145
 
9146
+ #: lib/wordfenceClass.php:7291
9147
  msgid "This user's email is the network admin email. It will need to be changed before deleting this user."
9148
  msgstr ""
9149
 
9150
+ #: lib/wordfenceClass.php:7355
9151
  msgid "Wordfence could not find your .htaccess file."
9152
  msgstr ""
9153
 
9154
+ #: lib/wordfenceClass.php:7371
9155
  msgid "Updating the .htaccess did not fix the issue. You may need to add <code>Options -Indexes</code> to your httpd.conf if using Apache, or find documentation on how to disable directory listing for your web server."
9156
  msgstr ""
9157
 
9158
+ #: lib/wordfenceClass.php:7377
9159
  msgid "There was an error writing to your .htaccess file."
9160
  msgstr ""
9161
 
9162
+ #: lib/wordfenceClass.php:7456
9163
  msgid "Required parameters not sent."
9164
  msgstr ""
9165
 
9166
+ #: lib/wordfenceClass.php:7466
9167
  msgid "The WAF is currently in read-only mode and will not save any configuration changes."
9168
  msgstr ""
9169
 
9170
+ #: lib/wordfenceClass.php:7504
9171
  #: views/waf/option-whitelist.php:60
9172
  msgid "Allowlisted via Firewall Options page"
9173
  msgstr ""
9174
 
9175
+ #: lib/wordfenceClass.php:7791
9176
  msgid "Allowlisted via Live Traffic"
9177
  msgstr ""
9178
 
9179
+ #: lib/wordfenceClass.php:7955
9180
+ #: lib/wordfenceClass.php:8052
9181
  msgid "A valid server configuration was not provided."
9182
  msgstr ""
9183
 
9184
+ #: lib/wordfenceClass.php:7966
9185
+ #: lib/wordfenceClass.php:8073
9186
  msgid "Filesystem Credentials Required"
9187
  msgstr ""
9188
 
9189
  #. translators: Support URL.
9190
+ #: lib/wordfenceClass.php:7968
9191
+ #: lib/wordfenceClass.php:7992
9192
+ #: lib/wordfenceClass.php:8036
9193
+ #: lib/wordfenceClass.php:8928
9194
+ msgid "If you cannot complete the setup process, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"%s\">click here for help<span class=\"screen-reader-text\"> ("
9195
  msgstr ""
9196
 
9197
  #. translators: Support URL.
9198
+ #: lib/wordfenceClass.php:7969
9199
  msgid "Once you have entered credentials, click Continue to complete the setup."
9200
  msgstr ""
9201
 
9202
+ #: lib/wordfenceClass.php:7990
9203
+ #: lib/wordfenceClass.php:8098
9204
  msgid "Filesystem Permission Error"
9205
  msgstr ""
9206
 
9207
+ #: lib/wordfenceClass.php:8016
9208
  msgid "Manual Installation Instructions"
9209
  msgstr ""
9210
 
9211
+ #: lib/wordfenceClass.php:8023
9212
  msgid "Installation Successful"
9213
  msgstr ""
9214
 
9215
+ #: lib/wordfenceClass.php:8034
9216
  msgid "Installation Failed"
9217
  msgstr ""
9218
 
9219
  #. translators: Support URL.
9220
+ #: lib/wordfenceClass.php:8075
9221
+ #: lib/wordfenceClass.php:8100
9222
+ #: lib/wordfenceClass.php:8131
9223
+ #: lib/wordfenceClass.php:8160
9224
+ #: lib/wordfenceClass.php:8206
9225
+ msgid "If you cannot complete the uninstall process, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"%s\">click here for help<span class=\"screen-reader-text\"> ("
 
9226
  msgstr ""
9227
 
9228
  #. translators: Support URL.
9229
+ #: lib/wordfenceClass.php:8076
9230
  msgid "Once you have entered credentials, click Continue to complete uninstallation."
9231
  msgstr ""
9232
 
9233
+ #: lib/wordfenceClass.php:8120
9234
  msgid "The <code>auto_prepend_file</code> setting has been successfully removed from <code>.htaccess</code> and <code>.user.ini</code>. Once this change takes effect, Extended Protection Mode will be disabled."
9235
  msgstr ""
9236
 
9237
+ #: lib/wordfenceClass.php:8122
9238
  msgid "Any previous value for <code>auto_prepend_file</code> will need to be re-enabled manually if still needed."
9239
  msgstr ""
9240
 
9241
  #. translators: Time until.
9242
+ #: lib/wordfenceClass.php:8126
9243
  msgid "Waiting for it to take effect. This may take up to %s."
9244
  msgstr ""
9245
 
9246
+ #: lib/wordfenceClass.php:8129
9247
  msgid "Waiting for Changes"
9248
  msgstr ""
9249
 
9250
+ #: lib/wordfenceClass.php:8151
9251
  msgid "Extended Protection Mode has not been disabled. This may be because <code>auto_prepend_file</code> is configured somewhere else or the value is still cached by PHP."
9252
  msgstr ""
9253
 
9254
+ #: lib/wordfenceClass.php:8153
9255
  msgid "Retrying Failed."
9256
  msgstr ""
9257
 
9258
+ #: lib/wordfenceClass.php:8155
9259
  msgid "Try Again"
9260
  msgstr ""
9261
 
9262
+ #: lib/wordfenceClass.php:8158
9263
  msgid "Unable to Uninstall"
9264
  msgstr ""
9265
 
9266
+ #: lib/wordfenceClass.php:8194
9267
  msgid "Uninstallation Complete"
9268
  msgstr ""
9269
 
9270
+ #: lib/wordfenceClass.php:8204
9271
  msgid "Uninstallation Failed"
9272
  msgstr ""
9273
 
9274
  #. translators: 1. Number of attacks/blocks. 2. Time since.
9275
+ #: lib/wordfenceClass.php:8358
9276
  msgid "The Wordfence Web Application Firewall has blocked %1$d attacks over the last %2$s. Below is a sample of these recent attacks:"
9277
  msgstr ""
9278
 
9279
+ #: lib/wordfenceClass.php:8925
9280
  msgid "To make your site as secure as possible, take a moment to optimize the Wordfence Web Application Firewall:"
9281
  msgstr ""
9282
 
9283
+ #: lib/wordfenceClass.php:8925
9284
  msgid "Click here to configure"
9285
  msgstr ""
9286
 
9287
+ #: lib/wordfenceClass.php:8934
 
 
 
 
 
9288
  #: views/waf/waf-install-success.php:14
9289
  msgid "Nice work! The firewall is now optimized."
9290
  msgstr ""
9291
 
9292
+ #: lib/wordfenceClass.php:8936
9293
+ #: lib/wordfenceClass.php:8948
9294
  #: views/waf/waf-install-success.php:16
9295
  #: views/waf/waf-uninstall-success.php:19
9296
  msgid "The changes have not yet taken effect. If you are using LiteSpeed or IIS as your web server or CGI/FastCGI interface, you may need to wait a few minutes for the changes to take effect since the configuration files are sometimes cached. You also may need to select a different server configuration in order to complete this step, but wait for a few minutes before trying. You can try refreshing this page."
9297
  msgstr ""
9298
 
9299
+ #: lib/wordfenceClass.php:8942
9300
  #: views/waf/waf-uninstall-success.php:15
9301
  msgid "Uninstallation was successful!"
9302
  msgstr ""
9303
 
9304
+ #: lib/wordfenceClass.php:8945
9305
  #: views/waf/waf-uninstall-success.php:17
9306
  msgid "Uninstallation from this site was successful! The Wordfence Firewall is still active because it is installed in another WordPress installation."
9307
  msgstr ""
9308
 
9309
+ #: lib/wordfenceClass.php:8953
9310
  msgid "The update was successful!"
9311
  msgstr ""
9312
 
9313
+ #: lib/wordfenceClass.php:9099
9314
  msgid "Auth grant is invalid."
9315
  msgstr ""
9316
 
9317
+ #. translators: Error message.
9318
+ #: lib/wordfenceClass.php:9114
9319
+ msgid "Invalid response from Wordfence Central: %s"
9320
+ msgstr ""
9321
+
9322
+ #. translators: JSON property.
9323
+ #: lib/wordfenceClass.php:9120
9324
+ #: lib/wordfenceClass.php:9133
9325
+ msgid "Invalid response from Wordfence Central. Parameter %s not found in response."
9326
+ msgstr ""
9327
+
9328
+ #: lib/wordfenceClass.php:9162
9329
+ #: lib/wordfenceClass.php:9299
9330
  msgid "Access token not found."
9331
  msgstr ""
9332
 
9333
+ #: lib/wordfenceClass.php:9207
9334
+ #: lib/wordfenceClass.php:9274
9335
  msgid "Invalid response from Wordfence Central."
9336
  msgstr ""
9337
 
9338
+ #: lib/wordfenceClass.php:9250
9339
  msgid "Auth grant not found."
9340
  msgstr ""
9341
 
9342
+ #: lib/wordfenceClass.php:9516
9343
  msgid "We were unable to create the <code>wordfence-waf.php</code> file in the root of the WordPress installation. It's possible WordPress cannot write to the <code>wordfence-waf.php</code> file because of file permissions. Please verify the permissions are correct and retry the installation."
9344
  msgstr ""
9345
 
 
9346
  #: lib/wordfenceClass.php:9608
9347
+ #: lib/wordfenceClass.php:9679
9348
  msgid "We were unable to make changes to the .htaccess file. It's possible WordPress cannot write to the .htaccess file because of file permissions, which may have been set by another security plugin, or you may have set them manually. Please verify the permissions allow the web server to write to the file, and retry the installation."
9349
  msgstr ""
9350
 
9351
  #. translators: File path.
9352
+ #: lib/wordfenceClass.php:9649
9353
+ #: lib/wordfenceClass.php:9697
9354
  msgid "We were unable to make changes to the %1$s file. It's possible WordPress cannot write to the %1$s file because of file permissions. Please verify the permissions are correct and retry the installation."
9355
  msgstr ""
9356
 
9357
+ #: lib/wordfenceClass.php:9713
9358
  msgid "We were unable to remove the <code>wordfence-waf.php</code> file in the root of the WordPress installation. It's possible WordPress cannot remove the <code>wordfence-waf.php</code> file because of file permissions. Please verify the permissions are correct and retry the removal."
9359
  msgstr ""
9360
 
9556
 
9557
  #. translators: 1. Plugin name. 2. Plugin version. 3. Support URL.
9558
  #: lib/wordfenceHash.php:533
9559
+ msgid "This file belongs to plugin \"%1$s\" version \"%2$s\" and has been modified from the file that is distributed by WordPress.org for this version. Please use the link to see how the file has changed. If you have modified this file yourself, you can safely ignore this warning. If you see a lot of changed files in a plugin that have been made by the author, then try uninstalling and reinstalling the plugin to force an upgrade. Doing this is a workaround for plugin authors who don't manage their code correctly. <a href=\"%3$s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More<span class=\"screen-reader-text\"> ("
9560
  msgstr ""
9561
 
9562
  #. translators: File path.
9566
 
9567
  #. translators: 1. Plugin name. 2. Plugin version. 3. Support URL.
9568
  #: lib/wordfenceHash.php:579
9569
+ msgid "This file belongs to theme \"%1$s\" version \"%2$s\" and has been modified from the original distribution. It is common for site owners to modify their theme files, so if you have modified this file yourself you can safely ignore this warning. <a href=\"%3$s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More<span class=\"screen-reader-text\"> ("
9570
  msgstr ""
9571
 
9572
  #. translators: File path.
9592
 
9593
  #. translators: Support URL.
9594
  #: lib/wordfenceHash.php:650
9595
+ msgid "This file is in a WordPress core location but is not distributed with this version of WordPress. This scan often includes files left over from a previous WordPress version, but it may also find files added by another plugin, files added by your host, or malicious files added by an attacker. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More<span class=\"screen-reader-text\"> ("
9596
  msgstr ""
9597
 
9598
  #. translators: 1. Number of files. 2. Data in bytes.
9617
 
9618
  #. translators: Number of files.
9619
  #: lib/wordfenceHash.php:763
9620
+ msgid "<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More<span class=\"screen-reader-text\"> ("
9621
  msgstr ""
9622
 
9623
  #: lib/wordfenceScanner.php:87
9629
  msgstr ""
9630
 
9631
  #: lib/wordfenceScanner.php:102
9632
+ msgid "Regex compilation failed for signature %d"
9633
  msgstr ""
9634
 
9635
  #. translators: PHP ini setting (number).
9728
 
9729
  #. translators: 1. Malware signature matched text. 2. Malicious URL. 3. Malicious URL.
9730
  #: lib/wordfenceScanner.php:526
9731
+ msgid "This file contains a suspected malware URL listed on Google's list of malware sites. Wordfence decodes %1$s when scanning files so the URL may not be visible if you view this file. The URL is: %2$s - More info available at <a href=\"http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%3$s&client=googlechrome&hl=en-US\" target=\"_blank\" rel=\"noopener noreferrer\">Google Safe Browsing diagnostic page<span class=\"screen-reader-text\"> (opens in new tab)</span></a>."
9732
  msgstr ""
9733
 
9734
  #: lib/wordfenceScanner.php:547
9752
  msgid "Scanned contents of %1$d additional files at %2$.2f per second"
9753
  msgstr ""
9754
 
9755
+ #: lib/wordfenceURLHoover.php:179
 
 
 
 
 
9756
  msgid "Gathering host keys."
9757
  msgstr ""
9758
 
9759
+ #: lib/wordfenceURLHoover.php:186
9760
  msgid "Using MySQLi directly."
9761
  msgstr ""
9762
 
9763
  #. translators: Number of domains.
9764
+ #: lib/wordfenceURLHoover.php:224
9765
  msgid "Checking %d host keys against Wordfence scanning servers."
9766
  msgstr ""
9767
 
9768
+ #: lib/wordfenceURLHoover.php:226
9769
  msgid "Done host key check."
9770
  msgstr ""
9771
 
9772
  #. translators: 1. Number of URLs. 2. Number of files.
9773
+ #: lib/wordfenceURLHoover.php:310
9774
  msgid "Checking %1$d URLs from %2$d sources."
9775
  msgstr ""
9776
 
9777
+ #: lib/wordfenceURLHoover.php:315
9778
  msgid "Done URL check."
9779
  msgstr ""
9780
 
9816
 
9817
  #. translators: Support URL
9818
  #: models/block/wfBlock.php:180
9819
+ 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<span class=\"screen-reader-text\"> (opens in new tab)</span></a>"
9820
  msgstr ""
9821
 
9822
  #: models/block/wfBlock.php:183
9883
  msgid "Repair the Wordfence Firewall configuration."
9884
  msgstr ""
9885
 
9886
+ #: models/firewall/wfFirewall.php:395
9887
+ msgid "Re-enable %d firewall rule."
9888
+ msgid_plural "Re-enable %d firewall rules."
9889
+ msgstr[0] ""
9890
+ msgstr[1] ""
9891
+
9892
  #: models/firewall/wfFirewall.php:452
9893
  msgid "Enable Firewall."
9894
  msgstr ""
9968
  msgid "Enable Premium Reputation Checks."
9969
  msgstr ""
9970
 
9971
+ #: models/scanner/wfScanner.php:778
9972
+ msgid "Enable %d scan option."
9973
+ msgid_plural "Enable %d scan options."
9974
+ msgstr[0] ""
9975
+ msgstr[1] ""
9976
+
9977
  #: models/scanner/wfScanner.php:820
9978
  msgid "Enable scan option to check if this website is being \"Spamvertised\"."
9979
  msgstr ""
10071
  msgid "Unblocking"
10072
  msgstr ""
10073
 
10074
+ #: views/blocking/block-list.php:500
10075
+ msgid "Are you sure you want to stop blocking the selected IP, range, or country?"
10076
+ msgstr ""
10077
+
10078
+ #: views/blocking/block-list.php:500
10079
+ msgid "Are you sure you want to stop blocking the ${count} selected IPs, ranges, and countries?"
10080
+ msgstr ""
10081
+
10082
  #: views/blocking/blocking-create.php:13
10083
  msgid "Block<span class=\"wf-hidden-xs\"> this IP Address</span>"
10084
  msgstr ""
10129
 
10130
  #. translators: Support URL
10131
  #: views/blocking/blocking-create.php:149
10132
+ msgid "If you use Google Ads, blocking countries from accessing the entire site is not recommended. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More<span class=\"screen-reader-text\"> (opens in new tab)</span></a>"
10133
  msgstr ""
10134
 
10135
  #: views/blocking/blocking-create.php:153
10194
  msgid "Block<span class=\"wf-hidden-xs\"> Visitors Matching this</span> Pattern"
10195
  msgstr ""
10196
 
10197
+ #: views/blocking/blocking-create.php:512
10198
+ msgid "Error Saving Block"
10199
+ msgstr ""
10200
+
10201
+ #: views/blocking/blocking-create.php:527
10202
+ msgid "U.S. Blocked"
10203
+ msgstr ""
10204
+
10205
+ #: views/blocking/blocking-create.php:528
10206
+ msgid "For most sites, we recommend allowing access from the United States, where Google and other benign crawlers are located. Some well-known crawlers also have locations in Europe, so be careful when blocking other countries, especially if you have not seen significant attacks from them."
10207
+ msgstr ""
10208
+
10209
  #: views/blocking/blocking-status.php:15
10210
  msgid "Manage global blocking options."
10211
  msgstr ""
10337
  msgid "Go to"
10338
  msgstr ""
10339
 
10340
+ #: views/common/status-tooltip.php:18
10341
+ msgid "<strong>Congratulations!</strong> You've optimized configurations for this feature! If you want to learn more about how this score is determined, click the link below."
10342
+ msgstr ""
10343
+
10344
  #: views/common/status-tooltip.php:19
10345
  #: views/common/status-tooltip.php:30
10346
  msgid "How does Wordfence determine this?"
10415
  msgid "Detected IP(s):"
10416
  msgstr ""
10417
 
10418
+ #: views/dashboard/option-howgetips.php:33
10419
+ msgid "Your IP with this setting:"
10420
+ msgstr ""
10421
+
10422
  #: views/dashboard/option-howgetips.php:34
10423
  msgid "Edit trusted proxies"
10424
  msgstr ""
10675
  msgstr ""
10676
 
10677
  #: views/gdpr/banner.php:50
10678
+ msgid "We have updated our Terms of Use and Privacy Policy. To continue using Wordfence, you will need to review and accept the updated <a href=\"https://www.wordfence.com/terms-of-use/\" target=\"_blank\" rel=\"noopener noreferrer\">Terms of Use</a> and <a href=\"https://www.wordfence.com/privacy-policy/\" target=\"_blank\" rel=\"noopener noreferrer\">Privacy Policy<span class=\"screen-reader-text\"> (opens in new tab)</span></a>."
10679
  msgstr ""
10680
 
10681
  #: views/gdpr/banner.php:51
10682
+ msgid "You can log in to <a href=\"https://www.wordfence.com/\" target=\"_blank\" rel=\"noopener noreferrer\">wordfence.com<span class=\"screen-reader-text\"> (opens in new tab)</span></a> to accept the updated terms and privacy policy for all of your premium license keys at once."
10683
  msgstr ""
10684
 
10685
  #: views/gdpr/banner.php:56
10736
  #: views/onboarding/fresh-install.php:27
10737
  #: views/onboarding/modal-final-attempt.php:56
10738
  #: views/onboarding/plugin-header.php:58
10739
+ msgid "By checking this box, I agree to the Wordfence <a href=\"https://www.wordfence.com/terms-of-use/\" target=\"_blank\" rel=\"noopener noreferrer\">terms</a> and <a href=\"https://www.wordfence.com/privacy-policy/\" target=\"_blank\" rel=\"noopener noreferrer\">privacy policy<span class=\"screen-reader-text\"> (opens in new tab)</span></a>"
10740
  msgstr ""
10741
 
10742
  #. translators: Support URL.
10743
  #: views/onboarding/fresh-install.php:28
10744
  #: views/onboarding/modal-final-attempt.php:57
10745
  #: views/onboarding/plugin-header.php:59
10746
+ msgid "If you qualify as a data controller under the GDPR and need a data processing agreement, <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">click here<span class=\"screen-reader-text\"> (opens in new tab)</span></a>."
10747
  msgstr ""
10748
 
10749
  #: views/onboarding/fresh-install.php:36
12030
 
12031
  #. translators: Support URL.
12032
  #: views/tools/options-group-2fa.php:51
12033
+ msgid "<strong>Require Cellphone Sign-in for all Administrators<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wfhelp wf-inline-help\"><span class=\"screen-reader-text\"> (opens in new tab)</span></a></strong><br><em>Note:</em> This setting requires at least one administrator to have Cellphone Sign-in enabled. On multisite, this option applies only to super admins."
12034
  msgstr ""
12035
 
12036
  #. translators: Support URL.
12037
  #: views/tools/options-group-2fa.php:63
12038
+ msgid "<strong>Enable Separate Prompt for Two-Factor Code<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wfhelp wf-inline-help\"><span class=\"screen-reader-text\"> (opens in new tab)</span></a></strong><br><em>Note:</em> This setting changes the behavior for obtaining the two-factor authentication code from using the password field to showing a separate prompt. If your theme overrides the default login page, you may not be able to use this option."
12039
  msgstr ""
12040
 
12041
  #. translators: Support URL.
12231
  msgstr ""
12232
 
12233
  #: views/waf/options-group-advanced-firewall.php:54
12234
+ 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 allowlists <a href=\"http://en.wikipedia.org/wiki/Private_network\" target=\"_blank\" rel=\"noopener noreferrer\">private networks<span class=\"screen-reader-text\"> (opens in new tab)</span></a> because these are not routable on the public Internet."
12235
  msgstr ""
12236
 
12237
  #: views/waf/options-group-advanced-firewall.php:101
12251
  msgstr ""
12252
 
12253
  #: views/waf/options-group-advanced-firewall.php:153
12254
+ msgid "<a href=\"#\" onclick=\"WFAD.wafUpdateRules();return false;\" role=\"button\">Click here</a> to pull down the latest from the Wordfence servers."
12255
  msgstr ""
12256
 
12257
  #: views/waf/options-group-advanced-firewall.php:161
12283
 
12284
  #. translators: Support URL.
12285
  #: views/waf/options-group-basic-firewall.php:41
12286
+ msgid "When you first install the Wordfence Web Application Firewall, it will be in learning mode. This allows Wordfence to learn about your site so that we can understand how to protect it and how to allow normal visitors through the firewall. We recommend you let Wordfence learn for a week before you enable the firewall. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More<span class=\"screen-reader-text\"> (opens in new tab)</span></a>"
12287
  msgstr ""
12288
 
12289
  #. translators: Support URL.
12318
 
12319
  #. translators: Support URL.
12320
  #: views/waf/options-group-basic-firewall.php:168
12321
+ msgid "If you're moving to a new host or a new installation location, you may need to temporarily disable extended protection to avoid any file not found errors. Use this action to remove the configuration changes that enable extended protection mode or you can <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">remove them manually<span class=\"screen-reader-text\"> (opens in new tab)</span></a>."
12322
  msgstr ""
12323
 
12324
  #. translators: Support URL.
12486
 
12487
  #. translators: Support URL.
12488
  #: views/waf/status-tooltip-learning-mode.php:6
12489
+ msgid "The Web Application Firewall is currently in Learning Mode. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More<span class=\"screen-reader-text\"> (opens in new tab)</span></a>"
12490
  msgstr ""
12491
 
12492
  #: views/waf/waf-install-manual.php:10
12495
 
12496
  #. translators: Support URL.
12497
  #: views/waf/waf-install-manual.php:12
12498
+ msgid "You can find more details on alternative setup steps, including installation on SiteGround or for multiple sites sharing a single php.ini, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"%s\">in our documentation<span class=\"screen-reader-text\"> (opens in new tab)</span></a>."
12499
  msgstr ""
12500
 
12501
  #: views/waf/waf-install.php:9
12519
  msgstr ""
12520
 
12521
  #: views/waf/waf-install.php:26
12522
+ msgid "If you don't recognize this file, please <a href=\"https://wordpress.org/support/plugin/wordfence\" target=\"_blank\" rel=\"noopener noreferrer\">contact us on the WordPress support forums<span class=\"screen-reader-text\"> (opens in new tab)</span></a> before proceeding."
12523
  msgstr ""
12524
 
12525
  #: views/waf/waf-install.php:27
12587
 
12588
  #. translators: 1. PHP ini setting. 2. Support URL.
12589
  #: views/waf/waf-install.php:63
12590
+ msgid "Part of the Firewall configuration procedure for NGINX depends on creating a <code>%1$s</code> file in the root of your WordPress installation. This file can contain sensitive information and public access to it should be restricted. We have <a href=\"%2$s\" target=\"_blank\" rel=\"noreferrer noopener\">instructions on our documentation site<span class=\"screen-reader-text\"> (opens in new tab)</span></a> on what directives to put in your nginx.conf to fix this."
12591
  msgstr ""
12592
 
12593
  #: views/waf/waf-install.php:65
12613
  msgid "Uninstall Wordfence Firewall"
12614
  msgstr ""
12615
 
12616
+ #: views/waf/waf-uninstall.php:13
12617
+ msgid "If you cannot complete the uninstall process, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"%s\">click here for help<span class=\"screen-reader-text\"> (opens in new tab)</span></a>"
12618
+ msgstr ""
12619
+
12620
  #: views/waf/waf-uninstall.php:26
12621
  msgid "Extended Protection Mode of the Wordfence Web Application Firewall uses the PHP ini setting called <code>auto_prepend_file</code> in order to ensure it runs before any potentially vulnerable code runs. This PHP setting currently refers to the Wordfence file at:"
12622
  msgstr ""
12623
 
12624
  #. translators: Support URL.
12625
  #: views/waf/waf-uninstall.php:34
12626
+ msgid "Automatic uninstallation cannot be completed, but you may still be able to <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">manually uninstall extended protection<span class=\"screen-reader-text\"> (opens in new tab)</span></a>."
12627
  msgstr ""
12628
 
12629
  #: views/waf/waf-uninstall.php:36
lib/GeoLite2-Country.mmdb CHANGED
Binary file
lib/IPTrafList.php CHANGED
@@ -21,7 +21,7 @@ if (!wfUtils::isAdmin()) {
21
  <tr>
22
  <th><?php esc_html_e('URL:', 'wordfence') ?></th>
23
  <td>
24
- <a href="<?php echo esc_url($v['URL']) ?>" target="_blank" rel="noopener noreferrer"><?php echo esc_html($v['URL']); ?></a>
25
  </td>
26
  </tr>
27
  <tr>
@@ -38,7 +38,7 @@ if (!wfUtils::isAdmin()) {
38
  <tr>
39
  <th><?php esc_html_e('Referrer:', 'wordfence') ?></th>
40
  <td>
41
- <a href="<?php echo esc_url($v['referer']); ?>" target="_blank" rel="noopener noreferrer"><?php echo esc_html($v['referer']); ?></a>
42
  </td></tr><?php } ?>
43
  <tr>
44
  <th><?php esc_html_e('Full Browser ID:', 'wordfence') ?></th>
@@ -48,7 +48,7 @@ if (!wfUtils::isAdmin()) {
48
  <tr>
49
  <th><?php esc_html_e('User:', 'wordfence') ?></th>
50
  <td>
51
- <a href="<?php echo esc_url($v['user']['editLink']); ?>" target="_blank" rel="noopener noreferrer"><span data-userid="<?php echo esc_attr($v['user']['ID']); ?>" class="wfAvatar"></span><?php echo esc_html($v['user']['display_name']); ?></a>
52
  </td>
53
  </tr>
54
  <?php } ?>
21
  <tr>
22
  <th><?php esc_html_e('URL:', 'wordfence') ?></th>
23
  <td>
24
+ <a href="<?php echo esc_url($v['URL']) ?>" target="_blank" rel="noopener noreferrer"><?php echo esc_html($v['URL']); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>
25
  </td>
26
  </tr>
27
  <tr>
38
  <tr>
39
  <th><?php esc_html_e('Referrer:', 'wordfence') ?></th>
40
  <td>
41
+ <a href="<?php echo esc_url($v['referer']); ?>" target="_blank" rel="noopener noreferrer"><?php echo esc_html($v['referer']); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>
42
  </td></tr><?php } ?>
43
  <tr>
44
  <th><?php esc_html_e('Full Browser ID:', 'wordfence') ?></th>
48
  <tr>
49
  <th><?php esc_html_e('User:', 'wordfence') ?></th>
50
  <td>
51
+ <a href="<?php echo esc_url($v['user']['editLink']); ?>" target="_blank" rel="noopener noreferrer"><span data-userid="<?php echo esc_attr($v['user']['ID']); ?>" class="wfAvatar"></span><?php echo esc_html($v['user']['display_name']); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>
52
  </td>
53
  </tr>
54
  <?php } ?>
lib/dashboard/widget_countries.php CHANGED
@@ -21,8 +21,8 @@
21
  <?php if (isset($d->countriesNetwork) && count($d->countriesNetwork) > 0): ?>
22
  <div class="wf-dashboard-toggle-btns">
23
  <ul class="wf-pagination wf-pagination-sm">
24
- <li class="wf-active"><a href="#" class="wf-dashboard-countries" data-grouping="local">Local Site</a></li>
25
- <li><a href="#" class="wf-dashboard-countries" data-grouping="network"><?php esc_html_e('Wordfence Network', 'wordfence') ?></a></li>
26
  </ul>
27
  </div>
28
  <?php endif; ?>
21
  <?php if (isset($d->countriesNetwork) && count($d->countriesNetwork) > 0): ?>
22
  <div class="wf-dashboard-toggle-btns">
23
  <ul class="wf-pagination wf-pagination-sm">
24
+ <li class="wf-active"><a href="#" class="wf-dashboard-countries" data-grouping="local" role="button">Local Site</a></li>
25
+ <li><a href="#" class="wf-dashboard-countries" data-grouping="network" role="button"><?php esc_html_e('Wordfence Network', 'wordfence') ?></a></li>
26
  </ul>
27
  </div>
28
  <?php endif; ?>
lib/dashboard/widget_ips.php CHANGED
@@ -25,9 +25,9 @@ if (!isset($limit)) { $limit = 10; $initial = true; }
25
  <div>
26
  <div class="wf-dashboard-toggle-btns">
27
  <ul class="wf-pagination wf-pagination-sm">
28
- <li class="wf-active"><a href="#" class="wf-dashboard-ips" data-grouping="24h"><?php esc_html_e('24 Hours', 'wordfence') ?></a></li>
29
- <li><a href="#" class="wf-dashboard-ips" data-grouping="7d"><?php esc_html_e('7 Days', 'wordfence') ?></a></li>
30
- <li><a href="#" class="wf-dashboard-ips" data-grouping="30d"><?php esc_html_e('30 Days', 'wordfence') ?></a></li>
31
  </ul>
32
  </div>
33
  <div class="wf-ips wf-ips-24h">
@@ -36,7 +36,7 @@ if (!isset($limit)) { $limit = 10; $initial = true; }
36
  <?php else: ?>
37
  <?php $data = array_slice($d->ips24h, 0, min($limit, count($d->ips24h)), true); include(dirname(__FILE__) . '/widget_content_ips.php'); ?>
38
  <?php if (count($d->ips24h) > $limit && $initial): ?>
39
- <div class="wf-dashboard-item-list-text"><div class="wf-dashboard-show-more" data-grouping="ips" data-period="24h"><a href="#"><?php esc_html_e('Show more', 'wordfence') ?></a></div></div>
40
  <?php endif; ?>
41
  <?php endif; ?>
42
  </div>
@@ -46,7 +46,7 @@ if (!isset($limit)) { $limit = 10; $initial = true; }
46
  <?php else: ?>
47
  <?php $data = array_slice($d->ips7d, 0, min($limit, count($d->ips7d)), true); include(dirname(__FILE__) . '/widget_content_ips.php'); ?>
48
  <?php if (count($d->ips7d) > $limit && $initial): ?>
49
- <div class="wf-dashboard-item-list-text"><div class="wf-dashboard-show-more" data-grouping="ips" data-period="7d"><a href="#"><?php esc_html_e('Show more', 'wordfence') ?></a></div></div>
50
  <?php endif; ?>
51
  <?php endif; ?>
52
  </div>
@@ -56,7 +56,7 @@ if (!isset($limit)) { $limit = 10; $initial = true; }
56
  <?php else: ?>
57
  <?php $data = array_slice($d->ips30d, 0, min($limit, count($d->ips30d)), true); include(dirname(__FILE__) . '/widget_content_ips.php'); ?>
58
  <?php if (count($d->ips30d) > $limit && $initial): ?>
59
- <div class="wf-dashboard-item-list-text"><div class="wf-dashboard-show-more" data-grouping="ips" data-period="30d"><a href="#"><?php esc_html_e('Show more', 'wordfence') ?></a></div></div>
60
  <?php endif; ?>
61
  <?php endif; ?>
62
  </div>
25
  <div>
26
  <div class="wf-dashboard-toggle-btns">
27
  <ul class="wf-pagination wf-pagination-sm">
28
+ <li class="wf-active"><a href="#" class="wf-dashboard-ips" data-grouping="24h" role="button"><?php esc_html_e('24 Hours', 'wordfence') ?></a></li>
29
+ <li><a href="#" class="wf-dashboard-ips" data-grouping="7d" role="button"><?php esc_html_e('7 Days', 'wordfence') ?></a></li>
30
+ <li><a href="#" class="wf-dashboard-ips" data-grouping="30d" role="button"><?php esc_html_e('30 Days', 'wordfence') ?></a></li>
31
  </ul>
32
  </div>
33
  <div class="wf-ips wf-ips-24h">
36
  <?php else: ?>
37
  <?php $data = array_slice($d->ips24h, 0, min($limit, count($d->ips24h)), true); include(dirname(__FILE__) . '/widget_content_ips.php'); ?>
38
  <?php if (count($d->ips24h) > $limit && $initial): ?>
39
+ <div class="wf-dashboard-item-list-text"><div class="wf-dashboard-show-more" data-grouping="ips" data-period="24h"><a href="#" role="button"><?php esc_html_e('Show more', 'wordfence') ?></a></div></div>
40
  <?php endif; ?>
41
  <?php endif; ?>
42
  </div>
46
  <?php else: ?>
47
  <?php $data = array_slice($d->ips7d, 0, min($limit, count($d->ips7d)), true); include(dirname(__FILE__) . '/widget_content_ips.php'); ?>
48
  <?php if (count($d->ips7d) > $limit && $initial): ?>
49
+ <div class="wf-dashboard-item-list-text"><div class="wf-dashboard-show-more" data-grouping="ips" data-period="7d"><a href="#" role="button"><?php esc_html_e('Show more', 'wordfence') ?></a></div></div>
50
  <?php endif; ?>
51
  <?php endif; ?>
52
  </div>
56
  <?php else: ?>
57
  <?php $data = array_slice($d->ips30d, 0, min($limit, count($d->ips30d)), true); include(dirname(__FILE__) . '/widget_content_ips.php'); ?>
58
  <?php if (count($d->ips30d) > $limit && $initial): ?>
59
+ <div class="wf-dashboard-item-list-text"><div class="wf-dashboard-show-more" data-grouping="ips" data-period="30d"><a href="#" role="button"><?php esc_html_e('Show more', 'wordfence') ?></a></div></div>
60
  <?php endif; ?>
61
  <?php endif; ?>
62
  </div>
lib/dashboard/widget_localattacks.php CHANGED
@@ -67,7 +67,7 @@
67
  </tr>
68
  </tfoot>
69
  </table>
70
- <p class="wf-right wf-no-top"><a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_WIDGET_LOCAL_ATTACKS); ?>" target="_blank" rel="noopener noreferrer"><i class="wf-fa wf-fa-question-circle-o" aria-hidden="true"></i> <?php esc_html_e('How are these categorized?', 'wordfence'); ?></a></p>
71
  <?php endif; ?>
72
  </li>
73
  </ul>
67
  </tr>
68
  </tfoot>
69
  </table>
70
+ <p class="wf-right wf-no-top"><a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_WIDGET_LOCAL_ATTACKS); ?>" target="_blank" rel="noopener noreferrer"><i class="wf-fa wf-fa-question-circle-o" aria-hidden="true"></i> <?php esc_html_e('How are these categorized?', 'wordfence'); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></p>
71
  <?php endif; ?>
72
  </li>
73
  </ul>
lib/dashboard/widget_logins.php CHANGED
@@ -17,8 +17,8 @@
17
  <div>
18
  <div class="wf-dashboard-toggle-btns">
19
  <ul class="wf-pagination wf-pagination-sm">
20
- <li class="wf-active"><a href="#" class="wf-dashboard-login-attempts" data-grouping="success"><?php esc_html_e('Successful', 'wordfence') ?></a></li>
21
- <li><a href="#" class="wf-dashboard-login-attempts" data-grouping="fail"><?php esc_html_e('Failed', 'wordfence') ?></a></li>
22
  </ul>
23
  </div>
24
  <div class="wf-recent-logins wf-recent-logins-success">
@@ -27,7 +27,7 @@
27
  <?php else: ?>
28
  <?php $data = array_slice($d->loginsSuccess, 0, min(10, count($d->loginsSuccess)), true); include(dirname(__FILE__) . '/widget_content_logins.php'); ?>
29
  <?php if (count($d->loginsSuccess) > 10): ?>
30
- <div class="wf-dashboard-item-list-text"><div class="wf-dashboard-show-more" data-grouping="logins" data-period="success"><a href="#"><?php esc_html_e('Show more', 'wordfence') ?></a></div></div>
31
  <?php endif; ?>
32
  <?php endif; ?>
33
  </div>
@@ -37,7 +37,7 @@
37
  <?php else: ?>
38
  <?php $data = array_slice($d->loginsFail, 0, min(10, count($d->loginsFail)), true); include(dirname(__FILE__) . '/widget_content_logins.php'); ?>
39
  <?php if (count($d->loginsFail) > 10): ?>
40
- <div class="wf-dashboard-item-list-text"><div class="wf-dashboard-show-more" data-grouping="logins" data-period="fail"><a href="#"><?php esc_html_e('Show more', 'wordfence') ?></a></div></div>
41
  <?php endif; ?>
42
  <?php endif; ?>
43
  </div>
17
  <div>
18
  <div class="wf-dashboard-toggle-btns">
19
  <ul class="wf-pagination wf-pagination-sm">
20
+ <li class="wf-active"><a href="#" class="wf-dashboard-login-attempts" data-grouping="success" role="button"><?php esc_html_e('Successful', 'wordfence') ?></a></li>
21
+ <li><a href="#" class="wf-dashboard-login-attempts" data-grouping="fail" role="button"><?php esc_html_e('Failed', 'wordfence') ?></a></li>
22
  </ul>
23
  </div>
24
  <div class="wf-recent-logins wf-recent-logins-success">
27
  <?php else: ?>
28
  <?php $data = array_slice($d->loginsSuccess, 0, min(10, count($d->loginsSuccess)), true); include(dirname(__FILE__) . '/widget_content_logins.php'); ?>
29
  <?php if (count($d->loginsSuccess) > 10): ?>
30
+ <div class="wf-dashboard-item-list-text"><div class="wf-dashboard-show-more" data-grouping="logins" data-period="success"><a href="#" role="button"><?php esc_html_e('Show more', 'wordfence') ?></a></div></div>
31
  <?php endif; ?>
32
  <?php endif; ?>
33
  </div>
37
  <?php else: ?>
38
  <?php $data = array_slice($d->loginsFail, 0, min(10, count($d->loginsFail)), true); include(dirname(__FILE__) . '/widget_content_logins.php'); ?>
39
  <?php if (count($d->loginsFail) > 10): ?>
40
+ <div class="wf-dashboard-item-list-text"><div class="wf-dashboard-show-more" data-grouping="logins" data-period="fail"><a href="#" role="button"><?php esc_html_e('Show more', 'wordfence') ?></a></div></div>
41
  <?php endif; ?>
42
  <?php endif; ?>
43
  </div>
lib/dashboard/widget_networkattacks.php CHANGED
@@ -19,9 +19,8 @@
19
  <div class="wf-dashboard-graph-wrapper">
20
  <div class="wf-dashboard-toggle-btns">
21
  <ul class="wf-pagination wf-pagination-sm">
22
- <li class="wf-active"><a href="#" class="wf-dashboard-graph-attacks" data-grouping="24h"><?php esc_html_e('24 Hours', 'wordfence'); ?></a></li>
23
- <!-- <li><a href="#" class="wf-dashboard-graph-attacks" data-grouping="7d">7 Days</a></li> -->
24
- <li><a href="#" class="wf-dashboard-graph-attacks" data-grouping="30d"><?php esc_html_e('30 Days', 'wordfence'); ?></a></li>
25
  </ul>
26
  </div>
27
  <div class="wf-dashboard-network-blocks"><canvas id="wf-dashboard-network-blocks-24h"></canvas></div>
19
  <div class="wf-dashboard-graph-wrapper">
20
  <div class="wf-dashboard-toggle-btns">
21
  <ul class="wf-pagination wf-pagination-sm">
22
+ <li class="wf-active"><a href="#" class="wf-dashboard-graph-attacks" data-grouping="24h" role="button"><?php esc_html_e('24 Hours', 'wordfence'); ?></a></li>
23
+ <li><a href="#" class="wf-dashboard-graph-attacks" data-grouping="30d" role="button"><?php esc_html_e('30 Days', 'wordfence'); ?></a></li>
 
24
  </ul>
25
  </div>
26
  <div class="wf-dashboard-network-blocks"><canvas id="wf-dashboard-network-blocks-24h"></canvas></div>
lib/dashboard/widget_notifications.php CHANGED
@@ -16,9 +16,9 @@
16
  <li class="wf-notification<?php if ($n->priority % 10 == 1) { echo ' wf-notification-critical'; } else if ($n->priority % 10 == 2) { echo ' wf-notification-warning'; } ?>" data-notification="<?php echo esc_html($n->id); ?>">
17
  <div class="wf-dashboard-item-list-title"><?php echo $n->html; ?></div>
18
  <?php foreach ($n->links as $l): ?>
19
- <div class="wf-dashboard-item-list-action"><a href="<?php echo esc_html($l['link']); ?>"<?php if (preg_match('/^https?:\/\//i', $l['link'])) { echo ' target="_blank" rel="noopener noreferrer"'; } ?>><?php echo esc_html($l['label']); ?></a></div>
20
  <?php endforeach; ?>
21
- <div class="wf-dashboard-item-list-dismiss"><a href="#" class="wf-dismiss-notification"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
22
  </li>
23
  <?php endforeach; ?>
24
  <?php if (count($d->notifications) == 0): ?>
@@ -56,17 +56,17 @@
56
  <a href="<?php echo WORDFENCE_CENTRAL_URL_SEC ?>/sites/connection-issues?complete-setup=<?php echo esc_attr(wfConfig::get('wordfenceCentralSiteID')) ?>"
57
  class="wf-central-resume wf-btn wf-btn-sm wf-btn-primary"
58
  ><?php esc_html_e('Resume Installation', 'wordfence') ?></a>
59
- <a href="#" class="wf-central-disconnect wf-btn wf-btn-sm wf-btn-default"><strong><?php esc_html_e('Disconnect This Site', 'wordfence') ?></strong></a>
60
  </p>
61
  <?php else: ?>
62
  <p class="wf-flex-row-1">
63
  <?php if ($d->wordfenceCentralConnected): ?>
64
- <a href="#" class="wf-central-disconnect"><strong><?php esc_html_e('Disconnect This Site', 'wordfence') ?></strong></a>
65
  <?php else: ?>
66
  <a href="<?php echo WORDFENCE_CENTRAL_URL_SEC ?>?newsite=<?php echo esc_attr(home_url()) ?>"><strong><?php $d->wordfenceCentralDisconnected ? esc_html_e('Reconnect This Site', 'wordfence') : esc_html_e('Connect This Site', 'wordfence') ?></strong></a>
67
  <?php endif; ?>
68
  </p>
69
- <p class="wf-flex-row-1 wf-right wf-nowrap"><a href="<?php echo esc_url(WORDFENCE_CENTRAL_URL_SEC) ?>" target="_blank" rel="noopener noreferrer"><strong><?php esc_html_e('Visit Wordfence Central', 'wordfence') ?></strong></a></p>
70
  <?php endif ?>
71
 
72
  </div>
16
  <li class="wf-notification<?php if ($n->priority % 10 == 1) { echo ' wf-notification-critical'; } else if ($n->priority % 10 == 2) { echo ' wf-notification-warning'; } ?>" data-notification="<?php echo esc_html($n->id); ?>">
17
  <div class="wf-dashboard-item-list-title"><?php echo $n->html; ?></div>
18
  <?php foreach ($n->links as $l): ?>
19
+ <div class="wf-dashboard-item-list-action"><a href="<?php echo esc_html($l['link']); ?>"<?php if (preg_match('/^https?:\/\//i', $l['link'])) { echo ' target="_blank" rel="noopener noreferrer"'; } ?>><?php echo esc_html($l['label']); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></div>
20
  <?php endforeach; ?>
21
+ <div class="wf-dashboard-item-list-dismiss"><a href="#" class="wf-dismiss-notification" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
22
  </li>
23
  <?php endforeach; ?>
24
  <?php if (count($d->notifications) == 0): ?>
56
  <a href="<?php echo WORDFENCE_CENTRAL_URL_SEC ?>/sites/connection-issues?complete-setup=<?php echo esc_attr(wfConfig::get('wordfenceCentralSiteID')) ?>"
57
  class="wf-central-resume wf-btn wf-btn-sm wf-btn-primary"
58
  ><?php esc_html_e('Resume Installation', 'wordfence') ?></a>
59
+ <a href="#" class="wf-central-disconnect wf-btn wf-btn-sm wf-btn-default" role="button"><strong><?php esc_html_e('Disconnect This Site', 'wordfence') ?></strong></a>
60
  </p>
61
  <?php else: ?>
62
  <p class="wf-flex-row-1">
63
  <?php if ($d->wordfenceCentralConnected): ?>
64
+ <a href="#" class="wf-central-disconnect" role="button"><strong><?php esc_html_e('Disconnect This Site', 'wordfence') ?></strong></a>
65
  <?php else: ?>
66
  <a href="<?php echo WORDFENCE_CENTRAL_URL_SEC ?>?newsite=<?php echo esc_attr(home_url()) ?>"><strong><?php $d->wordfenceCentralDisconnected ? esc_html_e('Reconnect This Site', 'wordfence') : esc_html_e('Connect This Site', 'wordfence') ?></strong></a>
67
  <?php endif; ?>
68
  </p>
69
+ <p class="wf-flex-row-1 wf-right wf-nowrap"><a href="<?php echo esc_url(WORDFENCE_CENTRAL_URL_SEC) ?>" target="_blank" rel="noopener noreferrer"><strong><?php esc_html_e('Visit Wordfence Central', 'wordfence') ?></strong><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></p>
70
  <?php endif ?>
71
 
72
  </div>
lib/email_unsubscribeRequest.php CHANGED
@@ -11,4 +11,4 @@
11
  <br><br>
12
  <?php echo wp_kses(sprintf(
13
  /* translators: URL to WordPress admin panel. */
14
- __('<a href="%s" target="_blank">Click here</a> to stop receiving security alerts.', 'wordfence'), wfUtils::getSiteBaseURL() . '?_wfsf=removeAlertEmail&jwt=' . $jwt), array('a'=>array('href'=>array(), 'target'=>array()))); ?>
11
  <br><br>
12
  <?php echo wp_kses(sprintf(
13
  /* translators: URL to WordPress admin panel. */
14
+ __('<a href="%s" target="_blank">Click here<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a> to stop receiving security alerts.', 'wordfence'), wfUtils::getSiteBaseURL() . '?_wfsf=removeAlertEmail&jwt=' . $jwt), array('a'=>array('href'=>array(), 'target'=>array()))); ?>
lib/live_activity.php CHANGED
@@ -6,7 +6,7 @@
6
  <div class="wf-live-activity-message"></div>
7
  </div>
8
  <?php if (wfConfig::get('liveActivityPauseEnabled')): ?>
9
- <div class="wf-live-activity-state"><p><?php esc_html_e('Live Updates Paused &mdash; Click inside window to resume') ?></p></div>
10
  <?php endif; ?>
11
  </div>
12
  </div>
6
  <div class="wf-live-activity-message"></div>
7
  </div>
8
  <?php if (wfConfig::get('liveActivityPauseEnabled')): ?>
9
+ <div class="wf-live-activity-state"><p><?php esc_html_e('Live Updates Paused &mdash; Click inside window to resume', 'wordfence') ?></p></div>
10
  <?php endif; ?>
11
  </div>
12
  </div>
lib/menu_dashboard.php CHANGED
@@ -106,7 +106,7 @@ else if (wfConfig::get('touppPromptNeeded')) {
106
  echo wfView::create('common/status-critical', array(
107
  'id' => 'wf-premium-alert',
108
  'title' => __('Premium Protection Disabled', 'wordfence'),
109
- 'subtitleHtml' => wp_kses(__('The license you were using has been removed from your account. Please reach out to <a href="mailto:billing@wordfence.com">billing@wordfence.com</a> or create a Premium support case at <a href="https://support.wordfence.com/support/tickets" target="_blank">https://support.wordfence.com/support/tickets</a> for more information. Our staff is happy to help.', 'wordfence'), array('a'=>array('href'=>array(), 'target'=>array()))),
110
  'link' => null,
111
  'linkLabel' => null
112
  ))->render();
@@ -115,7 +115,7 @@ else if (wfConfig::get('touppPromptNeeded')) {
115
  <div>
116
  <p><h3><?php esc_html_e('Premium Protection Disabled', 'wordfence'); ?></h3></p>
117
  <p><?php esc_html_e('As a free Wordfence user, you are currently using the Community version of the Threat Defense Feed. Premium users are protected by additional firewall rules and malware signatures. Upgrade to Premium today to improve your protection.', 'wordfence'); ?></p>
118
- <p><a class="wf-btn wf-btn-primary wf-btn-callout-subtle" href="https://www.wordfence.com/gnl1dashboardUpgrade/wordfence-signup/#premium-order-form" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Upgrade to Premium', 'wordfence'); ?></a>&nbsp;&nbsp;<a class="wf-btn wf-btn-callout-subtle wf-btn-default" href="https://www.wordfence.com/gnl1dashboardLearn/wordfence-signup/" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Learn More', 'wordfence'); ?></a></p>
119
  </div>
120
  <?php elseif (wfConfig::get('keyExpDays') < 30 && (wfConfig::get('premiumAutoRenew', null) === '0' || wfConfig::get('premiumAutoRenew', null) === 0)): ?>
121
  <?php
@@ -299,9 +299,9 @@ else if (wfConfig::get('touppPromptNeeded')) {
299
  <li>&bullet;</li>
300
  <li>&bullet;</li>
301
  </ul>
302
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
303
  </div>
304
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
305
  </div>
306
  </script>
307
  <script type="text/x-jquery-template" id="wfNewTour2">
@@ -314,10 +314,10 @@ else if (wfConfig::get('touppPromptNeeded')) {
314
  <li class="wf-active">&bullet;</li>
315
  <li>&bullet;</li>
316
  </ul>
317
- <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
318
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
319
  </div>
320
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
321
  </div>
322
  </script>
323
  <script type="text/x-jquery-template" id="wfNewTour3">
@@ -331,10 +331,10 @@ else if (wfConfig::get('touppPromptNeeded')) {
331
  <li>&bullet;</li>
332
  <li class="wf-active">&bullet;</li>
333
  </ul>
334
- <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
335
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
336
  </div>
337
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
338
  </div>
339
  </script>
340
  <?php endif; ?>
@@ -370,7 +370,7 @@ else if (wfConfig::get('touppPromptNeeded')) {
370
  /* translators: Wordfence version. */
371
  esc_html__('You have successfully updated to Wordfence %s', 'wordfence'), WORDFENCE_VERSION); ?></h3>
372
  <p><?php esc_html_e('This update includes a number of significant interface changes. We\'d like to walk you through some of them, but you can bypass the tour for a section at any time by closing the dialogs.', 'wordfence'); ?></p>
373
- <p><?php echo wp_kses(__('We welcome your feedback and comments at <a href="mailto:feedback@wordfence.com">feedback@wordfence.com</a>. For a deeper dive on all of the changes, <a href="https://www.wordfence.com/blog/2018/01/introducing-wordfence-7/" target="_blank" rel="noopener noreferrer">click here</a>.', 'wordfence'), array('a'=>array('href'=>array(), 'target'=>array()))); ?></p>
374
  <div class="wf-pointer-footer">
375
  <ul class="wf-tour-pagination">
376
  <li class="wf-active">&bullet;</li>
@@ -378,9 +378,9 @@ else if (wfConfig::get('touppPromptNeeded')) {
378
  <li>&bullet;</li>
379
  <li>&bullet;</li>
380
  </ul>
381
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
382
  </div>
383
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
384
  </div>
385
  </script>
386
  <script type="text/x-jquery-template" id="wfUpgradeTour2">
@@ -394,10 +394,10 @@ else if (wfConfig::get('touppPromptNeeded')) {
394
  <li>&bullet;</li>
395
  <li>&bullet;</li>
396
  </ul>
397
- <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
398
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
399
  </div>
400
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
401
  </div>
402
  </script>
403
  <script type="text/x-jquery-template" id="wfUpgradeTour3">
@@ -412,10 +412,10 @@ else if (wfConfig::get('touppPromptNeeded')) {
412
  <li class="wf-active">&bullet;</li>
413
  <li>&bullet;</li>
414
  </ul>
415
- <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
416
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
417
  </div>
418
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
419
  </div>
420
  </script>
421
  <script type="text/x-jquery-template" id="wfUpgradeTour4">
@@ -429,10 +429,10 @@ else if (wfConfig::get('touppPromptNeeded')) {
429
  <li>&bullet;</li>
430
  <li class="wf-active">&bullet;</li>
431
  </ul>
432
- <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
433
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
434
  </div>
435
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
436
  </div>
437
  </script>
438
  <?php endif; ?>
106
  echo wfView::create('common/status-critical', array(
107
  'id' => 'wf-premium-alert',
108
  'title' => __('Premium Protection Disabled', 'wordfence'),
109
+ 'subtitleHtml' => wp_kses(__('The license you were using has been removed from your account. Please reach out to <a href="mailto:billing@wordfence.com">billing@wordfence.com</a> or create a Premium support case at <a href="https://support.wordfence.com/support/tickets" target="_blank">https://support.wordfence.com/support/tickets<span class="screen-reader-text"> (opens in new tab)</span></a> for more information. Our staff is happy to help.', 'wordfence'), array('a'=>array('href'=>array(), 'target'=>array()), 'span'=>array('class'=>array()))),
110
  'link' => null,
111
  'linkLabel' => null
112
  ))->render();
115
  <div>
116
  <p><h3><?php esc_html_e('Premium Protection Disabled', 'wordfence'); ?></h3></p>
117
  <p><?php esc_html_e('As a free Wordfence user, you are currently using the Community version of the Threat Defense Feed. Premium users are protected by additional firewall rules and malware signatures. Upgrade to Premium today to improve your protection.', 'wordfence'); ?></p>
118
+ <p><a class="wf-btn wf-btn-primary wf-btn-callout-subtle" href="https://www.wordfence.com/gnl1dashboardUpgrade/wordfence-signup/#premium-order-form" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Upgrade to Premium', 'wordfence'); ?></a>&nbsp;&nbsp;<a class="wf-btn wf-btn-callout-subtle wf-btn-default" href="https://www.wordfence.com/gnl1dashboardLearn/wordfence-signup/" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Learn More', 'wordfence'); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></p>
119
  </div>
120
  <?php elseif (wfConfig::get('keyExpDays') < 30 && (wfConfig::get('premiumAutoRenew', null) === '0' || wfConfig::get('premiumAutoRenew', null) === 0)): ?>
121
  <?php
299
  <li>&bullet;</li>
300
  <li>&bullet;</li>
301
  </ul>
302
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
303
  </div>
304
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
305
  </div>
306
  </script>
307
  <script type="text/x-jquery-template" id="wfNewTour2">
314
  <li class="wf-active">&bullet;</li>
315
  <li>&bullet;</li>
316
  </ul>
317
+ <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default" role="button"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
318
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
319
  </div>
320
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
321
  </div>
322
  </script>
323
  <script type="text/x-jquery-template" id="wfNewTour3">
331
  <li>&bullet;</li>
332
  <li class="wf-active">&bullet;</li>
333
  </ul>
334
+ <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default" role="button"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
335
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
336
  </div>
337
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
338
  </div>
339
  </script>
340
  <?php endif; ?>
370
  /* translators: Wordfence version. */
371
  esc_html__('You have successfully updated to Wordfence %s', 'wordfence'), WORDFENCE_VERSION); ?></h3>
372
  <p><?php esc_html_e('This update includes a number of significant interface changes. We\'d like to walk you through some of them, but you can bypass the tour for a section at any time by closing the dialogs.', 'wordfence'); ?></p>
373
+ <p><?php echo wp_kses(__('We welcome your feedback and comments at <a href="mailto:feedback@wordfence.com">feedback@wordfence.com</a>. For a deeper dive on all of the changes, <a href="https://www.wordfence.com/blog/2018/01/introducing-wordfence-7/" target="_blank" rel="noopener noreferrer">click here<span class="screen-reader-text"> (opens in new tab)</span></a>.', 'wordfence'), array('a'=>array('href'=>array(), 'target'=>array()), 'span'=>array('class'=>array()))); ?></p>
374
  <div class="wf-pointer-footer">
375
  <ul class="wf-tour-pagination">
376
  <li class="wf-active">&bullet;</li>
378
  <li>&bullet;</li>
379
  <li>&bullet;</li>
380
  </ul>
381
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
382
  </div>
383
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
384
  </div>
385
  </script>
386
  <script type="text/x-jquery-template" id="wfUpgradeTour2">
394
  <li>&bullet;</li>
395
  <li>&bullet;</li>
396
  </ul>
397
+ <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default" role="button"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
398
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
399
  </div>
400
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
401
  </div>
402
  </script>
403
  <script type="text/x-jquery-template" id="wfUpgradeTour3">
412
  <li class="wf-active">&bullet;</li>
413
  <li>&bullet;</li>
414
  </ul>
415
+ <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default" role="button"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
416
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
417
  </div>
418
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
419
  </div>
420
  </script>
421
  <script type="text/x-jquery-template" id="wfUpgradeTour4">
429
  <li>&bullet;</li>
430
  <li class="wf-active">&bullet;</li>
431
  </ul>
432
+ <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default" role="button"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
433
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
434
  </div>
435
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
436
  </div>
437
  </script>
438
  <?php endif; ?>
lib/menu_dashboard_options.php CHANGED
@@ -150,7 +150,7 @@ else if (wfConfig::get('touppPromptNeeded')) {
150
  echo wfView::create('common/status-critical', array(
151
  'id' => 'wf-premium-alert',
152
  'title' => __('Premium Protection Disabled', 'wordfence'),
153
- 'subtitleHtml' => __('The license you were using has been removed from your account. Please reach out to <a href="mailto:billing@wordfence.com">billing@wordfence.com</a> or create a Premium support case at <a href="https://support.wordfence.com/support/tickets" target="_blank">https://support.wordfence.com/support/tickets</a> for more information. Our staff is happy to help.', 'wordfence'),
154
  'link' => null,
155
  'linkLabel' => null
156
  ))->render();
@@ -159,7 +159,7 @@ else if (wfConfig::get('touppPromptNeeded')) {
159
  <div>
160
  <p><h3><?php esc_html_e('Premium Protection Disabled', 'wordfence'); ?></h3></p>
161
  <p><?php esc_html_e('As a free Wordfence user, you are currently using the Community version of the Threat Defense Feed. Premium users are protected by additional firewall rules and malware signatures. Upgrade to Premium today to improve your protection.', 'wordfence'); ?></p>
162
- <p><a class="wf-btn wf-btn-primary wf-btn-callout-subtle" href="https://www.wordfence.com/gnl1dashboardUpgrade/wordfence-signup/#premium-order-form" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Upgrade to Premium', 'wordfence'); ?></a>&nbsp;&nbsp;<a class="wf-btn wf-btn-callout-subtle wf-btn-default" href="https://www.wordfence.com/gnl1dashboardLearn/wordfence-signup/" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Learn More', 'wordfence'); ?></a></p>
163
  </div>
164
  <?php elseif (wfConfig::get('keyExpDays') < 30 && (wfConfig::get('premiumAutoRenew', null) === '0' || wfConfig::get('premiumAutoRenew', null) === 0)): ?>
165
  <?php
150
  echo wfView::create('common/status-critical', array(
151
  'id' => 'wf-premium-alert',
152
  'title' => __('Premium Protection Disabled', 'wordfence'),
153
+ 'subtitleHtml' => wp_kses(__('The license you were using has been removed from your account. Please reach out to <a href="mailto:billing@wordfence.com">billing@wordfence.com</a> or create a Premium support case at <a href="https://support.wordfence.com/support/tickets" target="_blank">https://support.wordfence.com/support/tickets<span class="screen-reader-text"> (opens in new tab)</span></a> for more information. Our staff is happy to help.', 'wordfence'), array('a'=>array('href'=>array(), 'target'=>array()), 'span'=>array('class'=>array()))),
154
  'link' => null,
155
  'linkLabel' => null
156
  ))->render();
159
  <div>
160
  <p><h3><?php esc_html_e('Premium Protection Disabled', 'wordfence'); ?></h3></p>
161
  <p><?php esc_html_e('As a free Wordfence user, you are currently using the Community version of the Threat Defense Feed. Premium users are protected by additional firewall rules and malware signatures. Upgrade to Premium today to improve your protection.', 'wordfence'); ?></p>
162
+ <p><a class="wf-btn wf-btn-primary wf-btn-callout-subtle" href="https://www.wordfence.com/gnl1dashboardUpgrade/wordfence-signup/#premium-order-form" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Upgrade to Premium', 'wordfence'); ?></a>&nbsp;&nbsp;<a class="wf-btn wf-btn-callout-subtle wf-btn-default" href="https://www.wordfence.com/gnl1dashboardLearn/wordfence-signup/" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Learn More', 'wordfence'); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></p>
163
  </div>
164
  <?php elseif (wfConfig::get('keyExpDays') < 30 && (wfConfig::get('premiumAutoRenew', null) === '0' || wfConfig::get('premiumAutoRenew', null) === 0)): ?>
165
  <?php
lib/menu_firewall_blocking.php CHANGED
@@ -23,7 +23,7 @@ if (!defined('WORDFENCE_VERSION')) { exit; }
23
  <?php if (!wfConfig::get('firewallEnabled')): ?>
24
  <ul class="wf-block-banner">
25
  <li><?php echo wp_kses(__('<strong>Note:</strong> Blocking is disabled when the option "Enable Rate Limiting and Advanced Blocking" is off.', 'wordfence'), array('strong'=>array())); ?></li>
26
- <li><a href="#" class="wf-btn wf-btn-default" id="wf-blocking-enable"><?php esc_html_e('Turn On', 'wordfence'); ?></a></li>
27
  </ul>
28
  <?php endif; ?>
29
  <?php if (version_compare(phpversion(), '5.4') < 0 && wfConfig::get('isPaid') && wfBlock::hasCountryBlock()): ?>
@@ -31,7 +31,7 @@ if (!defined('WORDFENCE_VERSION')) { exit; }
31
  <li><?php echo esc_html(sprintf(
32
  /* translators: PHP version. */
33
  __('<strong>Note:</strong> The GeoIP database that is required for country blocking has been updated to a new format. This new format requires sites to run PHP 5.4 or newer, and this site is on PHP %s. To ensure country blocking continues functioning, please update PHP.', 'wordfence'), wfUtils::cleanPHPVersion())); ?></li>
34
- <li><a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_GEOIP_UPDATE); ?>" class="wf-btn wf-btn-default" target="_blank" rel="noopener noreferrer"><?php esc_html_e('More Information', 'wordfence'); ?></a></li>
35
  </ul>
36
  <?php endif; ?>
37
  <div class="wf-block-header">
@@ -124,9 +124,9 @@ echo wfView::create('blocking/block-list', array(
124
  <li>&bullet;</li>
125
  <li>&bullet;</li>
126
  </ul>
127
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
128
  </div>
129
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
130
  </div>
131
  </script>
132
  <script type="text/x-jquery-template" id="wfBlockingNewTour2">
@@ -139,10 +139,10 @@ echo wfView::create('blocking/block-list', array(
139
  <li class="wf-active">&bullet;</li>
140
  <li>&bullet;</li>
141
  </ul>
142
- <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
143
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
144
  </div>
145
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
146
  </div>
147
  </script>
148
  <script type="text/x-jquery-template" id="wfBlockingNewTour3">
@@ -155,10 +155,10 @@ echo wfView::create('blocking/block-list', array(
155
  <li>&bullet;</li>
156
  <li class="wf-active">&bullet;</li>
157
  </ul>
158
- <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
159
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
160
  </div>
161
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
162
  </div>
163
  </script>
164
  <?php endif; ?>
@@ -208,9 +208,9 @@ echo wfView::create('blocking/block-list', array(
208
  <li class="wf-active">&bullet;</li>
209
  <li>&bullet;</li>
210
  </ul>
211
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
212
  </div>
213
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
214
  </div>
215
  </script>
216
  <script type="text/x-jquery-template" id="wfBlockingUpgradeTour2">
@@ -222,10 +222,10 @@ echo wfView::create('blocking/block-list', array(
222
  <li>&bullet;</li>
223
  <li class="wf-active">&bullet;</li>
224
  </ul>
225
- <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
226
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
227
  </div>
228
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
229
  </div>
230
  </script>
231
  <?php endif; ?>
23
  <?php if (!wfConfig::get('firewallEnabled')): ?>
24
  <ul class="wf-block-banner">
25
  <li><?php echo wp_kses(__('<strong>Note:</strong> Blocking is disabled when the option "Enable Rate Limiting and Advanced Blocking" is off.', 'wordfence'), array('strong'=>array())); ?></li>
26
+ <li><a href="#" class="wf-btn wf-btn-default" id="wf-blocking-enable" role="button"><?php esc_html_e('Turn On', 'wordfence'); ?></a></li>
27
  </ul>
28
  <?php endif; ?>
29
  <?php if (version_compare(phpversion(), '5.4') < 0 && wfConfig::get('isPaid') && wfBlock::hasCountryBlock()): ?>
31
  <li><?php echo esc_html(sprintf(
32
  /* translators: PHP version. */
33
  __('<strong>Note:</strong> The GeoIP database that is required for country blocking has been updated to a new format. This new format requires sites to run PHP 5.4 or newer, and this site is on PHP %s. To ensure country blocking continues functioning, please update PHP.', 'wordfence'), wfUtils::cleanPHPVersion())); ?></li>
34
+ <li><a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_GEOIP_UPDATE); ?>" class="wf-btn wf-btn-default" target="_blank" rel="noopener noreferrer"><?php esc_html_e('More Information', 'wordfence'); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></li>
35
  </ul>
36
  <?php endif; ?>
37
  <div class="wf-block-header">
124
  <li>&bullet;</li>
125
  <li>&bullet;</li>
126
  </ul>
127
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
128
  </div>
129
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
130
  </div>
131
  </script>
132
  <script type="text/x-jquery-template" id="wfBlockingNewTour2">
139
  <li class="wf-active">&bullet;</li>
140
  <li>&bullet;</li>
141
  </ul>
142
+ <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default" role="button"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
143
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
144
  </div>
145
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
146
  </div>
147
  </script>
148
  <script type="text/x-jquery-template" id="wfBlockingNewTour3">
155
  <li>&bullet;</li>
156
  <li class="wf-active">&bullet;</li>
157
  </ul>
158
+ <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default" role="button"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
159
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
160
  </div>
161
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
162
  </div>
163
  </script>
164
  <?php endif; ?>
208
  <li class="wf-active">&bullet;</li>
209
  <li>&bullet;</li>
210
  </ul>
211
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
212
  </div>
213
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
214
  </div>
215
  </script>
216
  <script type="text/x-jquery-template" id="wfBlockingUpgradeTour2">
222
  <li>&bullet;</li>
223
  <li class="wf-active">&bullet;</li>
224
  </ul>
225
+ <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default" role="button"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
226
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
227
  </div>
228
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
229
  </div>
230
  </script>
231
  <?php endif; ?>
lib/menu_firewall_waf.php CHANGED
@@ -252,9 +252,9 @@ $wafRemoveURL = network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_optio
252
  <li>&bullet;</li>
253
  <li>&bullet;</li>
254
  </ul>
255
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
256
  </div>
257
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
258
  </div>
259
  </script>
260
  <script type="text/x-jquery-template" id="wfWAFNewTour2">
@@ -268,10 +268,10 @@ $wafRemoveURL = network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_optio
268
  <li>&bullet;</li>
269
  <li>&bullet;</li>
270
  </ul>
271
- <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
272
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
273
  </div>
274
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
275
  </div>
276
  </script>
277
  <script type="text/x-jquery-template" id="wfWAFNewTour3">
@@ -285,10 +285,10 @@ $wafRemoveURL = network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_optio
285
  <li class="wf-active">&bullet;</li>
286
  <li>&bullet;</li>
287
  </ul>
288
- <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
289
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
290
  </div>
291
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
292
  </div>
293
  </script>
294
  <script type="text/x-jquery-template" id="wfWAFNewTour4">
@@ -303,10 +303,10 @@ $wafRemoveURL = network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_optio
303
  <li>&bullet;</li>
304
  <li class="wf-active">&bullet;</li>
305
  </ul>
306
- <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
307
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
308
  </div>
309
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
310
  </div>
311
  </script>
312
  <?php endif; ?>
@@ -351,9 +351,9 @@ $wafRemoveURL = network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_optio
351
  <ul class="wf-tour-pagination">
352
  <li class="wf-active">&bullet;</li>
353
  </ul>
354
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
355
  </div>
356
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
357
  </div>
358
  </script>
359
- <?php endif; ?>
252
  <li>&bullet;</li>
253
  <li>&bullet;</li>
254
  </ul>
255
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
256
  </div>
257
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
258
  </div>
259
  </script>
260
  <script type="text/x-jquery-template" id="wfWAFNewTour2">
268
  <li>&bullet;</li>
269
  <li>&bullet;</li>
270
  </ul>
271
+ <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default" role="button"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
272
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
273
  </div>
274
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
275
  </div>
276
  </script>
277
  <script type="text/x-jquery-template" id="wfWAFNewTour3">
285
  <li class="wf-active">&bullet;</li>
286
  <li>&bullet;</li>
287
  </ul>
288
+ <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default" role="button"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
289
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
290
  </div>
291
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
292
  </div>
293
  </script>
294
  <script type="text/x-jquery-template" id="wfWAFNewTour4">
303
  <li>&bullet;</li>
304
  <li class="wf-active">&bullet;</li>
305
  </ul>
306
+ <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default" role="button"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
307
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
308
  </div>
309
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
310
  </div>
311
  </script>
312
  <?php endif; ?>
351
  <ul class="wf-tour-pagination">
352
  <li class="wf-active">&bullet;</li>
353
  </ul>
354
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
355
  </div>
356
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
357
  </div>
358
  </script>
359
+ <?php endif; ?>
lib/menu_scanner.php CHANGED
@@ -117,7 +117,7 @@ else if (wfConfig::get('touppPromptNeeded')) {
117
  <?php if (wfConfig::get('betaThreatDefenseFeed')): ?>
118
  <ul class="wf-block-banner">
119
  <li><?php esc_html_e('Beta scan signatures are currently enabled. These signatures have not been fully tested yet and may cause false positives or scan stability issues on some sites.', 'wordfence'); ?></li>
120
- <li><a href="#" class="wf-btn wf-btn-default" id="wf-beta-disable"><?php esc_html_e('Turn Off Beta Signatures', 'wordfence'); ?></a></li>
121
  </ul>
122
  <?php endif; ?>
123
  <div class="wf-block-content">
@@ -213,7 +213,7 @@ else if (wfConfig::get('touppPromptNeeded')) {
213
  'messageHTML' => '<p class="wf-callout-warning"><i class="wf-fa wf-fa-exclamation-triangle" aria-hidden="true"></i> ' . wp_kses(__('<strong>WARNING:</strong> If you delete the wrong file, it could cause your WordPress website to stop functioning, and you will probably have to restore from a backup.', 'wordfence'), array('strong'=>array())) . '</p>' .
214
  '<p>' . wp_kses(sprintf(
215
  /* translators: Support URL. */
216
- __('Do not delete files on your system unless you\'re ABSOLUTELY sure you know what you\'re doing. If you delete the wrong file it could cause your WordPress website to stop functioning and you will probably have to restore from backups. If you\'re unsure, Cancel and work with your hosting provider to clean your system of infected files. If you\'d like to learn more, <a href="%s" target="_blank" rel="noopener noreferrer">click here for our help article</a>.', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_BULK_DELETE_WARNING)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))) . '</p>',
217
  'primaryButton' => array('id' => 'wf-scanner-prompt-cancel', 'label' => __('Cancel', 'wordfence'), 'link' => '#', 'type' => 'wf-btn-default'),
218
  'secondaryButtons' => array(array('id' => 'wf-scanner-prompt-confirm', 'label' => __('Delete Files', 'wordfence'), 'link' => '#', 'type' => 'wf-btn-danger')),
219
  ))->render();
@@ -310,9 +310,9 @@ if (wfOnboardingController::willShowNewTour(wfOnboardingController::TOUR_SCAN)):
310
  <li>&bullet;</li>
311
  <li>&bullet;</li>
312
  </ul>
313
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
314
  </div>
315
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
316
  </div>
317
  </script>
318
  <script type="text/x-jquery-template" id="wfNewTour2">
@@ -326,10 +326,10 @@ if (wfOnboardingController::willShowNewTour(wfOnboardingController::TOUR_SCAN)):
326
  <li class="wf-active">&bullet;</li>
327
  <li>&bullet;</li>
328
  </ul>
329
- <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
330
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
331
  </div>
332
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
333
  </div>
334
  </script>
335
  <script type="text/x-jquery-template" id="wfNewTour3">
@@ -342,10 +342,10 @@ if (wfOnboardingController::willShowNewTour(wfOnboardingController::TOUR_SCAN)):
342
  <li>&bullet;</li>
343
  <li class="wf-active">&bullet;</li>
344
  </ul>
345
- <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
346
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
347
  </div>
348
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
349
  </div>
350
  </script>
351
  <?php endif; ?>
@@ -379,9 +379,9 @@ if (wfOnboardingController::willShowNewTour(wfOnboardingController::TOUR_SCAN)):
379
  <li class="wf-active">&bullet;</li>
380
  <li>&bullet;</li>
381
  </ul>
382
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
383
  </div>
384
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
385
  </div>
386
  </script>
387
  <script type="text/x-jquery-template" id="wfUpgradeTour2">
@@ -393,10 +393,10 @@ if (wfOnboardingController::willShowNewTour(wfOnboardingController::TOUR_SCAN)):
393
  <li>&bullet;</li>
394
  <li class="wf-active">&bullet;</li>
395
  </ul>
396
- <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
397
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
398
  </div>
399
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
400
  </div>
401
  </script>
402
  <?php endif; ?>
117
  <?php if (wfConfig::get('betaThreatDefenseFeed')): ?>
118
  <ul class="wf-block-banner">
119
  <li><?php esc_html_e('Beta scan signatures are currently enabled. These signatures have not been fully tested yet and may cause false positives or scan stability issues on some sites.', 'wordfence'); ?></li>
120
+ <li><a href="#" class="wf-btn wf-btn-default" id="wf-beta-disable" role="button"><?php esc_html_e('Turn Off Beta Signatures', 'wordfence'); ?></a></li>
121
  </ul>
122
  <?php endif; ?>
123
  <div class="wf-block-content">
213
  'messageHTML' => '<p class="wf-callout-warning"><i class="wf-fa wf-fa-exclamation-triangle" aria-hidden="true"></i> ' . wp_kses(__('<strong>WARNING:</strong> If you delete the wrong file, it could cause your WordPress website to stop functioning, and you will probably have to restore from a backup.', 'wordfence'), array('strong'=>array())) . '</p>' .
214
  '<p>' . wp_kses(sprintf(
215
  /* translators: Support URL. */
216
+ __('Do not delete files on your system unless you\'re ABSOLUTELY sure you know what you\'re doing. If you delete the wrong file it could cause your WordPress website to stop functioning and you will probably have to restore from backups. If you\'re unsure, Cancel and work with your hosting provider to clean your system of infected files. If you\'d like to learn more, <a href="%s" target="_blank" rel="noopener noreferrer">click here for our help article<span class="screen-reader-text"> (opens in new tab)</span></a>.', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_BULK_DELETE_WARNING)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()), 'span'=>array('class'=>array()))) . '</p>',
217
  'primaryButton' => array('id' => 'wf-scanner-prompt-cancel', 'label' => __('Cancel', 'wordfence'), 'link' => '#', 'type' => 'wf-btn-default'),
218
  'secondaryButtons' => array(array('id' => 'wf-scanner-prompt-confirm', 'label' => __('Delete Files', 'wordfence'), 'link' => '#', 'type' => 'wf-btn-danger')),
219
  ))->render();
310
  <li>&bullet;</li>
311
  <li>&bullet;</li>
312
  </ul>
313
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
314
  </div>
315
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
316
  </div>
317
  </script>
318
  <script type="text/x-jquery-template" id="wfNewTour2">
326
  <li class="wf-active">&bullet;</li>
327
  <li>&bullet;</li>
328
  </ul>
329
+ <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default" role="button"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
330
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
331
  </div>
332
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
333
  </div>
334
  </script>
335
  <script type="text/x-jquery-template" id="wfNewTour3">
342
  <li>&bullet;</li>
343
  <li class="wf-active">&bullet;</li>
344
  </ul>
345
+ <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default" role="button"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
346
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
347
  </div>
348
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
349
  </div>
350
  </script>
351
  <?php endif; ?>
379
  <li class="wf-active">&bullet;</li>
380
  <li>&bullet;</li>
381
  </ul>
382
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Next', 'wordfence'); ?></a></div>
383
  </div>
384
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
385
  </div>
386
  </script>
387
  <script type="text/x-jquery-template" id="wfUpgradeTour2">
393
  <li>&bullet;</li>
394
  <li class="wf-active">&bullet;</li>
395
  </ul>
396
+ <div id="wf-tour-previous"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-default" role="button"><?php esc_html_e('Previous', 'wordfence'); ?></a></div>
397
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
398
  </div>
399
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
400
  </div>
401
  </script>
402
  <?php endif; ?>
lib/menu_support.php CHANGED
@@ -30,17 +30,17 @@ $support = @json_decode(wfConfig::get('supportContent'), true);
30
  <li class="wf-flex-vertical">
31
  <h3><?php esc_html_e('Free Support', 'wordfence'); ?></h3>
32
  <p class="wf-center"><?php echo wp_kses(__('Support for free customers is available via our forums page on wordpress.org. The majority of requests <strong>receive an answer within a few days.</strong>', 'wordfence'), array('strong'=>array())); ?></p>
33
- <p><a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_FREE); ?>" target="_blank" rel="noopener noreferrer" class="wf-btn wf-btn-default wf-btn-callout-subtle"><?php esc_html_e('Go to Support Forums', 'wordfence'); ?></a></p>
34
  </li>
35
  <li class="wf-flex-vertical">
36
  <?php if (wfConfig::get('isPaid')): ?>
37
  <h3><?php esc_html_e('Premium Support', 'wordfence'); ?></h3>
38
  <p class="wf-center"><?php echo wp_kses(__('Our senior support engineers <strong>respond to Premium tickets within a few hours</strong> on average and have a direct line to our QA and development teams.', 'wordfence'), array('strong'=>array())); ?></p>
39
- <p><a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_PREMIUM); ?>" target="_blank" rel="noopener noreferrer" class="wf-btn wf-btn-primary wf-btn-callout-subtle"><?php esc_html_e('Go to Premium Support', 'wordfence'); ?></a></p>
40
  <?php else: ?>
41
  <h3><?php esc_html_e('Upgrade Now to Access Premium Support', 'wordfence'); ?></h3>
42
  <p class="wf-center"><?php echo wp_kses(__('Our senior support engineers <strong>respond to Premium tickets within a few hours</strong> on average and have a direct line to our QA and development teams.', 'wordfence'), array('strong'=>array())); ?></p>
43
- <p><a href="https://www.wordfence.com/gnl1supportUpgrade/wordfence-signup/" target="_blank" rel="noopener noreferrer" class="wf-btn wf-btn-primary wf-btn-callout-subtle"><?php esc_html_e('Upgrade to Premium', 'wordfence'); ?></a></p>
44
  <?php endif; ?>
45
  </li>
46
  </ul>
@@ -67,7 +67,7 @@ $support = @json_decode(wfConfig::get('supportContent'), true);
67
  <ul class="wf-option wf-option-static">
68
  <li class="wf-option-title">
69
  <ul class="wf-flex-vertical wf-flex-align-left">
70
- <li><?php esc_html_e('General Data Protection Regulation', 'wordfence'); ?> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_GDPR); ?>" target="_blank" rel="noopener noreferrer" class="wf-inline-help"><i class="wf-fa wf-fa-question-circle-o" aria-hidden="true"></i></a></li>
71
  <li class="wf-option-subtitle"><?php esc_html_e('The GDPR is a set of rules that provides more control over EU personal data. Defiant has updated its terms of use, privacy policies, and software, as well as made available a data processing agreement to meet GDPR compliance.', 'wordfence'); ?></li>
72
  </ul>
73
  </li>
@@ -77,10 +77,10 @@ $support = @json_decode(wfConfig::get('supportContent'), true);
77
  <ul class="wf-option wf-option-static">
78
  <li class="wf-option-title">
79
  <ul class="wf-flex-vertical wf-flex-align-left">
80
- <li><?php esc_html_e('Data Processing Agreement', 'wordfence'); ?> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_GDPR_DPA); ?>" target="_blank" rel="noopener noreferrer" class="wf-inline-help"><i class="wf-fa wf-fa-question-circle-o" aria-hidden="true"></i></a></li>
81
  <li class="wf-option-subtitle"><?php echo wp_kses(sprintf(
82
  /* translators: URL to support page. */
83
- __('If you qualify as a data controller under the GDPR and need a data processing agreement, it can be <a href="%s" target="_blank" rel="noopener noreferrer">found here</a>.', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_GDPR_DPA)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))); ?></li>
84
  </ul>
85
  </li>
86
  </ul>
@@ -117,7 +117,7 @@ $support = @json_decode(wfConfig::get('supportContent'), true);
117
  if (isset($support['top'])):
118
  foreach ($support['top'] as $entry):
119
  ?>
120
- <li><a href="<?php echo esc_url($entry['permalink']); ?>" target="_blank" rel="noopener noreferrer"><?php echo esc_html($entry['title']); ?></a></li>
121
  <?php
122
  endforeach;
123
  endif;
@@ -135,12 +135,12 @@ $support = @json_decode(wfConfig::get('supportContent'), true);
135
  <div class="wf-block wf-active wf-add-bottom">
136
  <div class="wf-block-content">
137
  <div class="wf-support-block">
138
- <h4><a href="<?php echo esc_url($entry['permalink']); ?>" target="_blank" rel="noopener noreferrer"><?php echo esc_html($entry['title']); ?></a></h4>
139
  <p><?php echo esc_html($entry['excerpt']); ?></p>
140
  <?php if (isset($entry['children'])): ?>
141
  <ul>
142
  <?php foreach ($entry['children'] as $child): ?>
143
- <li><a href="<?php echo esc_url($child['permalink']); ?>" target="_blank" rel="noopener noreferrer"><?php echo esc_html($child['title']); ?></a></li>
144
  <?php endforeach; ?>
145
  </ul>
146
  <?php endif; ?>
@@ -161,7 +161,7 @@ $support = @json_decode(wfConfig::get('supportContent'), true);
161
  <div class="wf-support-missing-block">
162
  <h4><?php esc_html_e('Documentation', 'wordfence'); ?></h4>
163
  <p><?php echo wp_kses(__('Documentation about Wordfence may be found on our website by clicking the button below or by clicking the <i class="wf-fa wf-fa-question-circle-o" aria-hidden="true"></i> links on any of the plugin\'s pages.', 'wordfence'), array('i'=>array('class'=>array(), 'aria-hidden'=>array()))); ?></p>
164
- <p class="wf-no-bottom"><a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_INDEX); ?>" target="_blank" rel="noopener noreferrer" class="wf-btn wf-btn-default wf-btn-callout-subtle"><?php esc_html_e('View Documentation', 'wordfence'); ?></a></p>
165
  </div>
166
  </div>
167
  </div>
@@ -275,7 +275,7 @@ $support = @json_decode(wfConfig::get('supportContent'), true);
275
  className: 'wf-modal'
276
  });
277
  <?php
278
- //Congratulations! Wordfence Premium is now active on your website. Please note that some Premium features are not enabled by default. Read this brief article to learn more about <a href="#todo" target="_blank" rel="noopener noreferrer">getting the most out of Wordfence Premium</a>.
279
  ?>
280
  }
281
  else { //Unlikely to happen but possible
30
  <li class="wf-flex-vertical">
31
  <h3><?php esc_html_e('Free Support', 'wordfence'); ?></h3>
32
  <p class="wf-center"><?php echo wp_kses(__('Support for free customers is available via our forums page on wordpress.org. The majority of requests <strong>receive an answer within a few days.</strong>', 'wordfence'), array('strong'=>array())); ?></p>
33
+ <p><a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_FREE); ?>" target="_blank" rel="noopener noreferrer" class="wf-btn wf-btn-default wf-btn-callout-subtle"><?php esc_html_e('Go to Support Forums', 'wordfence'); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></p>
34
  </li>
35
  <li class="wf-flex-vertical">
36
  <?php if (wfConfig::get('isPaid')): ?>
37
  <h3><?php esc_html_e('Premium Support', 'wordfence'); ?></h3>
38
  <p class="wf-center"><?php echo wp_kses(__('Our senior support engineers <strong>respond to Premium tickets within a few hours</strong> on average and have a direct line to our QA and development teams.', 'wordfence'), array('strong'=>array())); ?></p>
39
+ <p><a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_PREMIUM); ?>" target="_blank" rel="noopener noreferrer" class="wf-btn wf-btn-primary wf-btn-callout-subtle"><?php esc_html_e('Go to Premium Support', 'wordfence'); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></p>
40
  <?php else: ?>
41
  <h3><?php esc_html_e('Upgrade Now to Access Premium Support', 'wordfence'); ?></h3>
42
  <p class="wf-center"><?php echo wp_kses(__('Our senior support engineers <strong>respond to Premium tickets within a few hours</strong> on average and have a direct line to our QA and development teams.', 'wordfence'), array('strong'=>array())); ?></p>
43
+ <p><a href="https://www.wordfence.com/gnl1supportUpgrade/wordfence-signup/" target="_blank" rel="noopener noreferrer" class="wf-btn wf-btn-primary wf-btn-callout-subtle"><?php esc_html_e('Upgrade to Premium', 'wordfence'); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></p>
44
  <?php endif; ?>
45
  </li>
46
  </ul>
67
  <ul class="wf-option wf-option-static">
68
  <li class="wf-option-title">
69
  <ul class="wf-flex-vertical wf-flex-align-left">
70
+ <li><?php esc_html_e('General Data Protection Regulation', 'wordfence'); ?> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_GDPR); ?>" target="_blank" rel="noopener noreferrer" class="wf-inline-help"><i class="wf-fa wf-fa-question-circle-o" aria-hidden="true"></i><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></li>
71
  <li class="wf-option-subtitle"><?php esc_html_e('The GDPR is a set of rules that provides more control over EU personal data. Defiant has updated its terms of use, privacy policies, and software, as well as made available a data processing agreement to meet GDPR compliance.', 'wordfence'); ?></li>
72
  </ul>
73
  </li>
77
  <ul class="wf-option wf-option-static">
78
  <li class="wf-option-title">
79
  <ul class="wf-flex-vertical wf-flex-align-left">
80
+ <li><?php esc_html_e('Data Processing Agreement', 'wordfence'); ?> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_GDPR_DPA); ?>" target="_blank" rel="noopener noreferrer" class="wf-inline-help"><i class="wf-fa wf-fa-question-circle-o" aria-hidden="true"></i><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></li>
81
  <li class="wf-option-subtitle"><?php echo wp_kses(sprintf(
82
  /* translators: URL to support page. */
83
+ __('If you qualify as a data controller under the GDPR and need a data processing agreement, it can be <a href="%s" target="_blank" rel="noopener noreferrer">found here<span class="screen-reader-text"> (opens in new tab)</span></a>.', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_GDPR_DPA)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()), 'span'=>array('class'=>array()))); ?></li>
84
  </ul>
85
  </li>
86
  </ul>
117
  if (isset($support['top'])):
118
  foreach ($support['top'] as $entry):
119
  ?>
120
+ <li><a href="<?php echo esc_url($entry['permalink']); ?>" target="_blank" rel="noopener noreferrer"><?php echo esc_html($entry['title']); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></li>
121
  <?php
122
  endforeach;
123
  endif;
135
  <div class="wf-block wf-active wf-add-bottom">
136
  <div class="wf-block-content">
137
  <div class="wf-support-block">
138
+ <h4><a href="<?php echo esc_url($entry['permalink']); ?>" target="_blank" rel="noopener noreferrer"><?php echo esc_html($entry['title']); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></h4>
139
  <p><?php echo esc_html($entry['excerpt']); ?></p>
140
  <?php if (isset($entry['children'])): ?>
141
  <ul>
142
  <?php foreach ($entry['children'] as $child): ?>
143
+ <li><a href="<?php echo esc_url($child['permalink']); ?>" target="_blank" rel="noopener noreferrer"><?php echo esc_html($child['title']); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></li>
144
  <?php endforeach; ?>
145
  </ul>
146
  <?php endif; ?>
161
  <div class="wf-support-missing-block">
162
  <h4><?php esc_html_e('Documentation', 'wordfence'); ?></h4>
163
  <p><?php echo wp_kses(__('Documentation about Wordfence may be found on our website by clicking the button below or by clicking the <i class="wf-fa wf-fa-question-circle-o" aria-hidden="true"></i> links on any of the plugin\'s pages.', 'wordfence'), array('i'=>array('class'=>array(), 'aria-hidden'=>array()))); ?></p>
164
+ <p class="wf-no-bottom"><a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_INDEX); ?>" target="_blank" rel="noopener noreferrer" class="wf-btn wf-btn-default wf-btn-callout-subtle"><?php esc_html_e('View Documentation', 'wordfence'); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></p>
165
  </div>
166
  </div>
167
  </div>
275
  className: 'wf-modal'
276
  });
277
  <?php
278
+ //Congratulations! Wordfence Premium is now active on your website. Please note that some Premium features are not enabled by default. Read this brief article to learn more about <a href="#todo" target="_blank" rel="noopener noreferrer">getting the most out of Wordfence Premium</a>.
279
  ?>
280
  }
281
  else { //Unlikely to happen but possible
lib/menu_tools.php CHANGED
@@ -19,12 +19,12 @@ else if (wfConfig::get('touppPromptNeeded')) {
19
  <?php
20
  $tabsArray = array();
21
  if (wfCredentialsController::allowLegacy2FA()) {
22
- $tabsArray[] = array('twofactor', __('Two-Factor Authentication'));
23
  }
24
- $tabsArray[] = array('livetraffic', __('Live Traffic'));
25
- $tabsArray[] = array('whois', __('Whois Lookup'));
26
- $tabsArray[] = array('importexport', __('Import/Export Options'));
27
- $tabsArray[] = array('diagnostics', __('Diagnostics'));
28
 
29
  $tabs = array();
30
  foreach ($tabsArray as $tab) {
19
  <?php
20
  $tabsArray = array();
21
  if (wfCredentialsController::allowLegacy2FA()) {
22
+ $tabsArray[] = array('twofactor', __('Two-Factor Authentication', 'wordfence'));
23
  }
24
+ $tabsArray[] = array('livetraffic', __('Live Traffic', 'wordfence'));
25
+ $tabsArray[] = array('whois', __('Whois Lookup', 'wordfence'));
26
+ $tabsArray[] = array('importexport', __('Import/Export Options', 'wordfence'));
27
+ $tabsArray[] = array('diagnostics', __('Diagnostics', 'wordfence'));
28
 
29
  $tabs = array();
30
  foreach ($tabsArray as $tab) {
lib/menu_tools_diagnostic.php CHANGED
@@ -109,6 +109,7 @@ if (!isset($sendingDiagnosticEmail)) {
109
  'strong' => array(),
110
  'em' => array(),
111
  'a' => array('href' => true),
 
112
  ))) ?></td>
113
  <td>
114
  <?php if ($infoOnly): ?>
@@ -162,7 +163,7 @@ if (!isset($sendingDiagnosticEmail)) {
162
  <div class="wf-result-error"><?php echo nl2br(esc_html($result['message'])); ?></div>
163
  <?php endif ?>
164
  <?php if (isset($result['detail']) && !empty($result['detail'])): ?>
165
- <p><a href="#" onclick="jQuery('#wf-diagnostics-detail-<?php echo esc_attr($key); ?>').show(); jQuery(this).hide(); return false;"><?php esc_html_e('View Additional Detail', 'wordfence'); ?></a></p>
166
  <pre class="wf-pre wf-split-word" id="wf-diagnostics-detail-<?php echo esc_attr($key); ?>" style="max-width: 600px; display: none;"><?php echo esc_html($result['detail']); ?></pre>
167
  <?php endif; ?>
168
  </div>
@@ -461,19 +462,19 @@ if (!isset($sendingDiagnosticEmail)) {
461
  <?php
462
  //Taken from plugin.php and modified to always show multisite drop-ins
463
  $dropins = array(
464
- 'advanced-cache.php' => array( __( 'Advanced caching plugin' ), 'WP_CACHE' ), // WP_CACHE
465
- 'db.php' => array( __( 'Custom database class' ), true ), // auto on load
466
- 'db-error.php' => array( __( 'Custom database error message' ), true ), // auto on error
467
- 'install.php' => array( __( 'Custom installation script' ), true ), // auto on installation
468
- 'maintenance.php' => array( __( 'Custom maintenance message' ), true ), // auto on maintenance
469
- 'object-cache.php' => array( __( 'External object cache' ), true ), // auto on load
470
- 'php-error.php' => array( __( 'Custom PHP error message' ), true ), // auto on error
471
- 'fatal-error-handler.php'=> array( __( 'Custom PHP fatal error handler' ), true ), // auto on error
472
  );
473
- $dropins['sunrise.php' ] = array( __( 'Executed before Multisite is loaded' ), is_multisite() && 'SUNRISE' ); // SUNRISE
474
- $dropins['blog-deleted.php' ] = array( __( 'Custom site deleted message' ), is_multisite() ); // auto on deleted blog
475
- $dropins['blog-inactive.php' ] = array( __( 'Custom site inactive message' ), is_multisite() ); // auto on inactive blog
476
- $dropins['blog-suspended.php'] = array( __( 'Custom site suspended message' ), is_multisite() ); // auto on archived or spammed blog
477
  ?>
478
  <?php foreach ($dropins as $file => $data): ?>
479
  <?php
@@ -767,7 +768,7 @@ if (!isset($sendingDiagnosticEmail)) {
767
  ?>
768
  <tr>
769
  <td style="width: 100%"><?php echo esc_html($shortLog); if (!empty($metadata)) { echo ' (' . esc_html(implode(', ', $metadata)) . ')'; } ?></td>
770
- <td style="white-space: nowrap; text-align: right;"><?php echo($readable ? '<a href="#" data-logfile="' . esc_attr($log) . '" class="downloadLogFile" target="_blank" rel="noopener noreferrer">' . esc_html__('Download', 'wordfence') . '</a>' : '<em>' . esc_html__('Requires downloading from the server directly', 'wordfence') . '</em>'); ?></td>
771
  </tr>
772
  <?php endforeach;
773
  endif; ?>
@@ -834,33 +835,33 @@ if (!isset($sendingDiagnosticEmail)) {
834
  <ul class="wf-block-list">
835
  <li>
836
  <span>
837
- <a href="<?php echo wfUtils::siteURLRelative(); ?>?_wfsf=sysinfo&nonce=<?php echo wp_create_nonce('wp-ajax'); ?>" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Click to view your system\'s configuration in a new window', 'wordfence'); ?></a>
838
- <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_SYSTEM_CONFIGURATION); ?>" target="_blank" rel="noopener noreferrer" class="wfhelp wf-inline-help"></a>
839
  </span>
840
  </li>
841
  <li>
842
  <span>
843
- <a href="<?php echo wfUtils::siteURLRelative(); ?>?_wfsf=testmem&nonce=<?php echo wp_create_nonce('wp-ajax'); ?>" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Test your WordPress host\'s available memory', 'wordfence'); ?></a>
844
- <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_TEST_MEMORY); ?>" target="_blank" rel="noopener noreferrer" class="wfhelp wf-inline-help"></a>
845
  </span>
846
  </li>
847
  <li>
848
  <span>
849
- <?php esc_html_e('Send a test email from this WordPress server to an email address:', 'wordfence'); ?> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_TEST_EMAIL); ?>" target="_blank" rel="noopener noreferrer" class="wfhelp wf-inline-help"></a>
850
  <input type="text" id="testEmailDest" value="" size="20" maxlength="255" class="wfConfigElem"/>
851
  <input class="wf-btn wf-btn-default wf-btn-sm" type="button" value="<?php esc_attr_e('Send Test Email', 'wordfence'); ?>" onclick="WFAD.sendTestEmail(jQuery('#testEmailDest').val());"/>
852
  </span>
853
  </li>
854
  <li>
855
  <span>
856
- <?php esc_html_e('Send a test activity report email:', 'wordfence'); ?> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_TEST_ACTIVITY_REPORT); ?>" target="_blank" rel="noopener noreferrer" class="wfhelp wf-inline-help"></a>
857
  <input type="email" id="email_summary_email_address_debug" value="" size="20" maxlength="255" class="wfConfigElem"/>
858
  <input class="wf-btn wf-btn-default wf-btn-sm" type="button" value="<?php esc_attr_e('Send Test Activity Report', 'wordfence'); ?>" onclick="WFAD.sendTestActivityReport(jQuery('#email_summary_email_address_debug').val());"/>
859
  </span>
860
  </li>
861
  <li>
862
  <span>
863
- <?php esc_html_e('Clear all Wordfence Central connection data', 'wordfence'); ?> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_REMOVE_CENTRAL_DATA); ?>" target="_blank" rel="noopener noreferrer" class="wfhelp wf-inline-help"></a>
864
  <input class="wf-btn wf-btn-default wf-btn-sm" type="button" value="<?php esc_attr_e('Clear Connection Data', 'wordfence'); ?>" onclick="WFAD.ajax('wordfence_wfcentral_disconnect', {}, function() { WFAD.colorboxModal((self.isSmallScreen ? '300px' : '400px'), 'Successfully removed data', 'All associated Wordfence Central data has been removed from the database.'); });"/>
865
  </span>
866
  </li>
@@ -957,9 +958,9 @@ if (!isset($sendingDiagnosticEmail)) {
957
  </li>
958
  <li>
959
  <p>
960
- <a id="wf-restore-defaults" class="wf-btn wf-btn-default wf-btn-callout-subtle" href="#" data-restore-defaults-section="<?php echo esc_attr(wfConfig::OPTIONS_TYPE_DIAGNOSTICS); ?>"><?php esc_html_e('Restore Defaults', 'wordfence'); ?></a>
961
- <a id="wf-cancel-changes" class="wf-btn wf-btn-default wf-btn-callout-subtle wf-disabled" href="#"><?php esc_html_e('Cancel Changes', 'wordfence'); ?></a>
962
- <a id="wf-save-changes" class="wf-btn wf-btn-primary wf-btn-callout-subtle wf-disabled" href="#"><?php esc_html_e('Save Changes', 'wordfence'); ?></a>
963
  </p>
964
  </li>
965
  </ul>
109
  'strong' => array(),
110
  'em' => array(),
111
  'a' => array('href' => true),
112
+ 'span' => array('class' => true)
113
  ))) ?></td>
114
  <td>
115
  <?php if ($infoOnly): ?>
163
  <div class="wf-result-error"><?php echo nl2br(esc_html($result['message'])); ?></div>
164
  <?php endif ?>
165
  <?php if (isset($result['detail']) && !empty($result['detail'])): ?>
166
+ <p><a href="#" onclick="jQuery('#wf-diagnostics-detail-<?php echo esc_attr($key); ?>').show(); jQuery(this).hide(); return false;" role="button"><?php esc_html_e('View Additional Detail', 'wordfence'); ?></a></p>
167
  <pre class="wf-pre wf-split-word" id="wf-diagnostics-detail-<?php echo esc_attr($key); ?>" style="max-width: 600px; display: none;"><?php echo esc_html($result['detail']); ?></pre>
168
  <?php endif; ?>
169
  </div>
462
  <?php
463
  //Taken from plugin.php and modified to always show multisite drop-ins
464
  $dropins = array(
465
+ 'advanced-cache.php' => array( __( 'Advanced caching plugin', 'wordfence' ), 'WP_CACHE' ), // WP_CACHE
466
+ 'db.php' => array( __( 'Custom database class', 'wordfence' ), true ), // auto on load
467
+ 'db-error.php' => array( __( 'Custom database error message', 'wordfence' ), true ), // auto on error
468
+ 'install.php' => array( __( 'Custom installation script', 'wordfence' ), true ), // auto on installation
469
+ 'maintenance.php' => array( __( 'Custom maintenance message', 'wordfence' ), true ), // auto on maintenance
470
+ 'object-cache.php' => array( __( 'External object cache', 'wordfence' ), true ), // auto on load
471
+ 'php-error.php' => array( __( 'Custom PHP error message', 'wordfence' ), true ), // auto on error
472
+ 'fatal-error-handler.php'=> array( __( 'Custom PHP fatal error handler', 'wordfence' ), true ), // auto on error
473
  );
474
+ $dropins['sunrise.php' ] = array( __( 'Executed before Multisite is loaded', 'wordfence' ), is_multisite() && 'SUNRISE' ); // SUNRISE
475
+ $dropins['blog-deleted.php' ] = array( __( 'Custom site deleted message', 'wordfence' ), is_multisite() ); // auto on deleted blog
476
+ $dropins['blog-inactive.php' ] = array( __( 'Custom site inactive message', 'wordfence' ), is_multisite() ); // auto on inactive blog
477
+ $dropins['blog-suspended.php'] = array( __( 'Custom site suspended message', 'wordfence' ), is_multisite() ); // auto on archived or spammed blog
478
  ?>
479
  <?php foreach ($dropins as $file => $data): ?>
480
  <?php
768
  ?>
769
  <tr>
770
  <td style="width: 100%"><?php echo esc_html($shortLog); if (!empty($metadata)) { echo ' (' . esc_html(implode(', ', $metadata)) . ')'; } ?></td>
771
+ <td style="white-space: nowrap; text-align: right;"><?php echo($readable ? '<a href="#" data-logfile="' . esc_attr($log) . '" class="downloadLogFile" target="_blank" rel="noopener noreferrer" role="button">' . esc_html__('Download', 'wordfence') . '<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>' : '<em>' . esc_html__('Requires downloading from the server directly', 'wordfence') . '</em>'); ?></td>
772
  </tr>
773
  <?php endforeach;
774
  endif; ?>
835
  <ul class="wf-block-list">
836
  <li>
837
  <span>
838
+ <a href="<?php echo wfUtils::siteURLRelative(); ?>?_wfsf=sysinfo&nonce=<?php echo wp_create_nonce('wp-ajax'); ?>" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Click to view your system\'s configuration in a new window', 'wordfence'); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>
839
+ <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_SYSTEM_CONFIGURATION); ?>" target="_blank" rel="noopener noreferrer" class="wfhelp wf-inline-help"><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>
840
  </span>
841
  </li>
842
  <li>
843
  <span>
844
+ <a href="<?php echo wfUtils::siteURLRelative(); ?>?_wfsf=testmem&nonce=<?php echo wp_create_nonce('wp-ajax'); ?>" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Test your WordPress host\'s available memory', 'wordfence'); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>
845
+ <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_TEST_MEMORY); ?>" target="_blank" rel="noopener noreferrer" class="wfhelp wf-inline-help"><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>
846
  </span>
847
  </li>
848
  <li>
849
  <span>
850
+ <?php esc_html_e('Send a test email from this WordPress server to an email address:', 'wordfence'); ?> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_TEST_EMAIL); ?>" target="_blank" rel="noopener noreferrer" class="wfhelp wf-inline-help"><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>
851
  <input type="text" id="testEmailDest" value="" size="20" maxlength="255" class="wfConfigElem"/>
852
  <input class="wf-btn wf-btn-default wf-btn-sm" type="button" value="<?php esc_attr_e('Send Test Email', 'wordfence'); ?>" onclick="WFAD.sendTestEmail(jQuery('#testEmailDest').val());"/>
853
  </span>
854
  </li>
855
  <li>
856
  <span>
857
+ <?php esc_html_e('Send a test activity report email:', 'wordfence'); ?> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_TEST_ACTIVITY_REPORT); ?>" target="_blank" rel="noopener noreferrer" class="wfhelp wf-inline-help"><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>
858
  <input type="email" id="email_summary_email_address_debug" value="" size="20" maxlength="255" class="wfConfigElem"/>
859
  <input class="wf-btn wf-btn-default wf-btn-sm" type="button" value="<?php esc_attr_e('Send Test Activity Report', 'wordfence'); ?>" onclick="WFAD.sendTestActivityReport(jQuery('#email_summary_email_address_debug').val());"/>
860
  </span>
861
  </li>
862
  <li>
863
  <span>
864
+ <?php esc_html_e('Clear all Wordfence Central connection data', 'wordfence'); ?> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_REMOVE_CENTRAL_DATA); ?>" target="_blank" rel="noopener noreferrer" class="wfhelp wf-inline-help"><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>
865
  <input class="wf-btn wf-btn-default wf-btn-sm" type="button" value="<?php esc_attr_e('Clear Connection Data', 'wordfence'); ?>" onclick="WFAD.ajax('wordfence_wfcentral_disconnect', {}, function() { WFAD.colorboxModal((self.isSmallScreen ? '300px' : '400px'), 'Successfully removed data', 'All associated Wordfence Central data has been removed from the database.'); });"/>
866
  </span>
867
  </li>
958
  </li>
959
  <li>
960
  <p>
961
+ <a id="wf-restore-defaults" class="wf-btn wf-btn-default wf-btn-callout-subtle" href="#" data-restore-defaults-section="<?php echo esc_attr(wfConfig::OPTIONS_TYPE_DIAGNOSTICS); ?>" role="button"><?php esc_html_e('Restore Defaults', 'wordfence'); ?></a>
962
+ <a id="wf-cancel-changes" class="wf-btn wf-btn-default wf-btn-callout-subtle wf-disabled" href="#" role="button"><?php esc_html_e('Cancel Changes', 'wordfence'); ?></a>
963
+ <a id="wf-save-changes" class="wf-btn wf-btn-primary wf-btn-callout-subtle wf-disabled" href="#" role="button"><?php esc_html_e('Save Changes', 'wordfence'); ?></a>
964
  </p>
965
  </li>
966
  </ul>
lib/menu_tools_importExport.php CHANGED
@@ -13,7 +13,7 @@ if (!defined('WORDFENCE_VERSION')) { exit; }
13
  <h2><?php esc_html_e('Import/Export Options', 'wordfence') ?></h2>
14
  <span><?php echo wp_kses(sprintf(
15
  /* translators: URL to support page. */
16
- __('<a href="%s" target="_blank" rel="noopener noreferrer" class="wf-help-link">Learn more<span class="wf-hidden-xs"> about importing and exporting options</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_TOOLS_IMPORT_EXPORT)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array()), 'span'=>array('class'=>array()))); ?>
17
  <i class="wf-fa wf-fa-external-link" aria-hidden="true"></i></span>
18
  </div>
19
 
13
  <h2><?php esc_html_e('Import/Export Options', 'wordfence') ?></h2>
14
  <span><?php echo wp_kses(sprintf(
15
  /* translators: URL to support page. */
16
+ __('<a href="%s" target="_blank" rel="noopener noreferrer" class="wf-help-link">Learn more<span class="wf-hidden-xs"> about importing and exporting options</span><span class="screen-reader-text"> (opens in new tab)</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_TOOLS_IMPORT_EXPORT)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array()), 'span'=>array('class'=>array()))); ?>
17
  <i class="wf-fa wf-fa-external-link" aria-hidden="true"></i></span>
18
  </div>
19
 
lib/menu_tools_livetraffic.php CHANGED
@@ -41,7 +41,7 @@ $w = new wfConfig();
41
  <h2><?php esc_html_e('Live Traffic', 'wordfence') ?></h2>
42
  <span><?php echo wp_kses(sprintf(
43
  /* translators: URL to support page. */
44
- __('<a href="%s" target="_blank" rel="noopener noreferrer" class="wf-help-link">Learn more<span class="wf-hidden-xs"> about Live Traffic</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_TOOLS_LIVE_TRAFFIC)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array()))); ?>
45
  <i class="wf-fa wf-fa-external-link" aria-hidden="true"></i></span>
46
  </div>
47
 
@@ -74,7 +74,7 @@ if (!wfConfig::liveTrafficEnabled($overridden)):
74
  if ($overridden) {
75
  echo wp_kses(sprintf(
76
  /* translators: URL to support page. */
77
- __(' (host setting <a href="%s" class="wfhelp" target="_blank" rel="noopener noreferrer"></a>)', 'wordfence'), wfSupportController::supportURL(wfSupportController::ITEM_TOOLS_LIVE_TRAFFIC_OPTION_ENABLE)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array())));
78
  } ?>.</strong> <?php esc_html_e('Login and firewall activity will appear below.', 'wordfence') ?></p>
79
  </div>
80
  <?php else: ?>
@@ -83,7 +83,7 @@ if (!wfConfig::liveTrafficEnabled($overridden)):
83
  if ($overridden) {
84
  echo wp_kses(sprintf(
85
  /* translators: URL to support page. */
86
- __(' (host setting <a href="%s" class="wfhelp" target="_blank" rel="noopener noreferrer"></a>)', 'wordfence'), wfSupportController::supportURL(wfSupportController::ITEM_TOOLS_LIVE_TRAFFIC_OPTION_ENABLE)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array())));
87
  } ?>.</strong> <?php esc_html_e('Regular traffic and security-related traffic will appear below.', 'wordfence') ?></p>
88
  </div>
89
  <?php endif; ?>
@@ -156,7 +156,7 @@ if (!wfConfig::liveTrafficEnabled($overridden)):
156
  </div>
157
  <div>
158
  <!--<button data-bind="click: $root.removeFilter" type="button" class="wf-btn wf-btn-default">Remove</button> -->
159
- <a href="#" data-bind="click: $root.removeFilter" class="wf-live-traffic-filter-remove"><i class="wf-ion-trash-a"></i></a>
160
  </div>
161
  </div>
162
  </div>
@@ -206,7 +206,7 @@ if (!wfConfig::liveTrafficEnabled($overridden)):
206
  <span data-bind="attr: { class: 'wf-flag wf-flag-' + loc().countryCode.toLowerCase(), title: loc().countryName }"></span>
207
  <a data-bind="text: (loc().city ? loc().city + ', ' : '') + (loc().region ? loc().region + ', ' : '') + loc().countryName,
208
  attr: { href: 'http://maps.google.com/maps?q=' + loc().lat + ',' + loc().lon + '&z=6' }"
209
- target="_blank" rel="noopener noreferrer"></a>
210
  </div>
211
  <div data-bind="if: !loc()">
212
  <?php esc_html_e('An unknown location at IP', 'wordfence') ?>
@@ -343,37 +343,37 @@ if (!wfConfig::liveTrafficEnabled($overridden)):
343
  <span data-bind="if: action() != 'loginOK' && action() != 'loginFailValidUsername' && action() != 'loginFailInvalidUsername' && user()">
344
  <span data-bind="attr: {'data-userid': user().ID}" class="wfAvatar"></span>
345
  <a data-bind="attr: { href: user().editLink }, text: user().display_name"
346
- target="_blank" rel="noopener noreferrer"></a>
347
  </span>
348
  <span data-bind="if: loc()">
349
  <span data-bind="if: action() != 'loginOK' && action() != 'loginFailValidUsername' && action() != 'loginFailInvalidUsername' && user()"> in</span>
350
  <span data-bind="attr: { class: 'wf-flag wf-flag-' + loc().countryCode.toLowerCase(), title: loc().countryName }"></span>
351
  <a data-bind="text: (loc().city ? loc().city + ', ' : '') + (loc().region ? loc().region + ', ' : '') + loc().countryName,
352
  attr: { href: 'http://maps.google.com/maps?q=' + loc().lat + ',' + loc().lon + '&z=6' }"
353
- target="_blank" rel="noopener noreferrer"></a>
354
  </span>
355
  <span data-bind="if: !loc()">
356
  <span data-bind="if: action() != 'loginOK' && action() != 'loginFailValidUsername' && action() != 'loginFailInvalidUsername' && user()">
357
  <?php echo wp_kses(sprintf(
358
  /* translators: 1. User agent. 2. IP address */
359
- __('%1$s at an unknown location at IP %2$s', 'wordfence'), '', '<a data-bind="text: IP, attr: { href: WFAD.makeIPTrafLink(IP()) }" target="_blank" rel="noopener noreferrer"></a>'), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'data-bind'=>array()))) ?>
360
  </span>
361
  <span data-bind="if: !(action() != 'loginOK' && action() != 'loginFailValidUsername' && action() != 'loginFailInvalidUsername' && user())">
362
  <?php echo wp_kses(sprintf(
363
  /* translators: IP address */
364
- __('An unknown location at IP %s', 'wordfence'), '<a data-bind="text: IP, attr: { href: WFAD.makeIPTrafLink(IP()) }" target="_blank" rel="noopener noreferrer"></a>'), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'data-bind'=>array()))) ?>
365
  </span>
366
  </span>
367
  <span data-bind="if: referer()">
368
  <span data-bind="if: extReferer()">
369
  <?php echo wp_kses(sprintf(
370
  /* translators: 1. User agent. 2. HTTP referer. 3. Server response. */
371
- __('%1$s arrived from %2$s and %3$s', 'wordfence'), '', '<a data-bind="text: LiveTrafficViewModel.truncateText(referer(), 100), attr: { title: referer, href: referer }" target="_blank" rel="noopener noreferrer" class="wf-split-word-xs"></a>', ''), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array(), 'data-bind'=>array()))) ?>
372
  </span>
373
  <span data-bind="if: !extReferer()">
374
  <?php echo wp_kses(sprintf(
375
  /* translators: 1. User agent. 2. HTTP referer. 3. Server response. */
376
- __('%1$s left %2$s and %3$s', 'wordfence'), '', '<a data-bind="text: LiveTrafficViewModel.truncateText(referer(), 100), attr: { title: referer, href: referer }" target="_blank" rel="noopener noreferrer" class="wf-split-word-xs"></a>', ''), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array(), 'data-bind'=>array()))) ?>
377
  </span>
378
  </span>
379
  <span data-bind="if: statusCode() == 404">
@@ -425,7 +425,7 @@ if (!wfConfig::liveTrafficEnabled($overridden)):
425
  </span>
426
  <a class="wf-lt-url wf-split-word-xs"
427
  data-bind="text: displayURL, attr: { href: URL, title: URL }"
428
- target="_blank" rel="noopener noreferrer"></a>
429
  </div>
430
  <div>
431
  <span data-bind="text: timeAgo, attr: { 'data-timestamp': ctime }"
@@ -478,7 +478,7 @@ if (!wfConfig::liveTrafficEnabled($overridden)):
478
  </a>
479
  </span>
480
  <a class="wf-btn wf-btn-default wf-btn-sm" data-bind="click: showWhoisOverlay"
481
- target="_blank" rel="noopener noreferrer"><?php esc_html_e('Run Whois', 'wordfence') ?></a>
482
  <a class="wf-btn wf-btn-default wf-btn-sm"
483
  data-bind="click: showRecentTraffic" target="_blank" rel="noopener noreferrer">
484
  <span class="wf-hidden-xs"><?php esc_html_e('See recent traffic', 'wordfence'); ?></span><span class="wf-visible-xs"><?php esc_html_e('Recent', 'wordfence'); ?></span>
@@ -574,9 +574,9 @@ if (!wfConfig::liveTrafficEnabled($overridden)):
574
  <ul class="wf-tour-pagination">
575
  <li class="wf-active">&bullet;</li>
576
  </ul>
577
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
578
  </div>
579
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
580
  </div>
581
  </script>
582
  <?php endif; ?>
@@ -605,9 +605,9 @@ if (!wfConfig::liveTrafficEnabled($overridden)):
605
  <ul class="wf-tour-pagination">
606
  <li class="wf-active">&bullet;</li>
607
  </ul>
608
- <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
609
  </div>
610
- <div id="wf-tour-close"><a href="#"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
611
  </div>
612
  </script>
613
  <?php endif; ?>
41
  <h2><?php esc_html_e('Live Traffic', 'wordfence') ?></h2>
42
  <span><?php echo wp_kses(sprintf(
43
  /* translators: URL to support page. */
44
+ __('<a href="%s" target="_blank" rel="noopener noreferrer" class="wf-help-link">Learn more<span class="wf-hidden-xs"> about Live Traffic</span><span class="screen-reader-text"> (opens in new tab)</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_TOOLS_LIVE_TRAFFIC)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array()), 'span'=>array('class'=>array()))); ?>
45
  <i class="wf-fa wf-fa-external-link" aria-hidden="true"></i></span>
46
  </div>
47
 
74
  if ($overridden) {
75
  echo wp_kses(sprintf(
76
  /* translators: URL to support page. */
77
+ __(' (host setting <a href="%s" class="wfhelp" target="_blank" rel="noopener noreferrer"><span class="screen-reader-text"> (opens in new tab)</span></a>)', 'wordfence'), wfSupportController::supportURL(wfSupportController::ITEM_TOOLS_LIVE_TRAFFIC_OPTION_ENABLE)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array()), 'span'=>array('class'=>array())));
78
  } ?>.</strong> <?php esc_html_e('Login and firewall activity will appear below.', 'wordfence') ?></p>
79
  </div>
80
  <?php else: ?>
83
  if ($overridden) {
84
  echo wp_kses(sprintf(
85
  /* translators: URL to support page. */
86
+ __(' (host setting <a href="%s" class="wfhelp" target="_blank" rel="noopener noreferrer"><span class="screen-reader-text"> (opens in new tab)</span></a>)', 'wordfence'), wfSupportController::supportURL(wfSupportController::ITEM_TOOLS_LIVE_TRAFFIC_OPTION_ENABLE)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array()), 'span'=>array('class'=>array())));
87
  } ?>.</strong> <?php esc_html_e('Regular traffic and security-related traffic will appear below.', 'wordfence') ?></p>
88
  </div>
89
  <?php endif; ?>
156
  </div>
157
  <div>
158
  <!--<button data-bind="click: $root.removeFilter" type="button" class="wf-btn wf-btn-default">Remove</button> -->
159
+ <a href="#" data-bind="click: $root.removeFilter" class="wf-live-traffic-filter-remove" role="button"><i class="wf-ion-trash-a"></i></a>
160
  </div>
161
  </div>
162
  </div>
206
  <span data-bind="attr: { class: 'wf-flag wf-flag-' + loc().countryCode.toLowerCase(), title: loc().countryName }"></span>
207
  <a data-bind="text: (loc().city ? loc().city + ', ' : '') + (loc().region ? loc().region + ', ' : '') + loc().countryName,
208
  attr: { href: 'http://maps.google.com/maps?q=' + loc().lat + ',' + loc().lon + '&z=6' }"
209
+ target="_blank" rel="noopener noreferrer"><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>
210
  </div>
211
  <div data-bind="if: !loc()">
212
  <?php esc_html_e('An unknown location at IP', 'wordfence') ?>
343
  <span data-bind="if: action() != 'loginOK' && action() != 'loginFailValidUsername' && action() != 'loginFailInvalidUsername' && user()">
344
  <span data-bind="attr: {'data-userid': user().ID}" class="wfAvatar"></span>
345
  <a data-bind="attr: { href: user().editLink }, text: user().display_name"
346
+ target="_blank" rel="noopener noreferrer"><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>
347
  </span>
348
  <span data-bind="if: loc()">
349
  <span data-bind="if: action() != 'loginOK' && action() != 'loginFailValidUsername' && action() != 'loginFailInvalidUsername' && user()"> in</span>
350
  <span data-bind="attr: { class: 'wf-flag wf-flag-' + loc().countryCode.toLowerCase(), title: loc().countryName }"></span>
351
  <a data-bind="text: (loc().city ? loc().city + ', ' : '') + (loc().region ? loc().region + ', ' : '') + loc().countryName,
352
  attr: { href: 'http://maps.google.com/maps?q=' + loc().lat + ',' + loc().lon + '&z=6' }"
353
+ target="_blank" rel="noopener noreferrer"><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>
354
  </span>
355
  <span data-bind="if: !loc()">
356
  <span data-bind="if: action() != 'loginOK' && action() != 'loginFailValidUsername' && action() != 'loginFailInvalidUsername' && user()">
357
  <?php echo wp_kses(sprintf(
358
  /* translators: 1. User agent. 2. IP address */
359
+ __('%1$s at an unknown location at IP %2$s', 'wordfence'), '', '<a data-bind="text: IP, attr: { href: WFAD.makeIPTrafLink(IP()) }" target="_blank" rel="noopener noreferrer"><span class="screen-reader-text"> (opens in new tab)</span></a>'), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'data-bind'=>array()), 'span'=>array('class'=>array()))) ?>
360
  </span>
361
  <span data-bind="if: !(action() != 'loginOK' && action() != 'loginFailValidUsername' && action() != 'loginFailInvalidUsername' && user())">
362
  <?php echo wp_kses(sprintf(
363
  /* translators: IP address */
364
+ __('An unknown location at IP %s', 'wordfence'), '<a data-bind="text: IP, attr: { href: WFAD.makeIPTrafLink(IP()) }" target="_blank" rel="noopener noreferrer"><span class="screen-reader-text"> (opens in new tab)</span></a>'), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'data-bind'=>array()), 'span'=>array('class'=>array()))) ?>
365
  </span>
366
  </span>
367
  <span data-bind="if: referer()">
368
  <span data-bind="if: extReferer()">
369
  <?php echo wp_kses(sprintf(
370
  /* translators: 1. User agent. 2. HTTP referer. 3. Server response. */
371
+ __('%1$s arrived from %2$s and %3$s', 'wordfence'), '', '<a data-bind="text: LiveTrafficViewModel.truncateText(referer(), 100), attr: { title: referer, href: referer }" target="_blank" rel="noopener noreferrer" class="wf-split-word-xs"><span class="screen-reader-text"> (opens in new tab)</span></a>', ''), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array(), 'data-bind'=>array()), 'span'=>array('class'=>array()))) ?>
372
  </span>
373
  <span data-bind="if: !extReferer()">
374
  <?php echo wp_kses(sprintf(
375
  /* translators: 1. User agent. 2. HTTP referer. 3. Server response. */
376
+ __('%1$s left %2$s and %3$s', 'wordfence'), '', '<a data-bind="text: LiveTrafficViewModel.truncateText(referer(), 100), attr: { title: referer, href: referer }" target="_blank" rel="noopener noreferrer" class="wf-split-word-xs"><span class="screen-reader-text"> (opens in new tab)</span></a>', ''), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array(), 'data-bind'=>array()), 'span'=>array('class'=>array()))) ?>
377
  </span>
378
  </span>
379
  <span data-bind="if: statusCode() == 404">
425
  </span>
426
  <a class="wf-lt-url wf-split-word-xs"
427
  data-bind="text: displayURL, attr: { href: URL, title: URL }"
428
+ target="_blank" rel="noopener noreferrer"><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>
429
  </div>
430
  <div>
431
  <span data-bind="text: timeAgo, attr: { 'data-timestamp': ctime }"
478
  </a>
479
  </span>
480
  <a class="wf-btn wf-btn-default wf-btn-sm" data-bind="click: showWhoisOverlay"
481
+ target="_blank" rel="noopener noreferrer"><?php esc_html_e('Run Whois', 'wordfence') ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>
482
  <a class="wf-btn wf-btn-default wf-btn-sm"
483
  data-bind="click: showRecentTraffic" target="_blank" rel="noopener noreferrer">
484
  <span class="wf-hidden-xs"><?php esc_html_e('See recent traffic', 'wordfence'); ?></span><span class="wf-visible-xs"><?php esc_html_e('Recent', 'wordfence'); ?></span>
574
  <ul class="wf-tour-pagination">
575
  <li class="wf-active">&bullet;</li>
576
  </ul>
577
+ <div id="wf-tour-continue"><a href="#" class="wf-onboarding-btn wf-onboarding-btn-primary" role="button"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
578
  </div>
579
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
580
  </div>
581
  </script>
582
  <?php endif; ?>
605
  <ul class="wf-tour-pagination">
606
  <li class="wf-active">&bullet;</li>
607
  </ul>
608
+ <div id="wf-tour-continue"><a href="#" role="button" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Got it', 'wordfence'); ?></a></div>
609
  </div>
610
+ <div id="wf-tour-close"><a href="#" role="button"><i class="wf-fa wf-fa-times-circle" aria-hidden="true"></i></a></div>
611
  </div>
612
  </script>
613
  <?php endif; ?>
lib/menu_tools_twoFactor.php CHANGED
@@ -33,7 +33,7 @@ echo wfView::create('common/section-title', array(
33
  <div class="wf-col-xs-12">
34
  <div id="wordfenceTwoFactorLegacy">
35
  <p><strong><?php esc_html_e('2FA Mode: Legacy', 'wordfence') ?>.</strong> <?php esc_html_e('Two-factor authentication is using legacy support, which enables SMS-based codes but is less compatible. An improved interface and use by non-administrators is available by activating the new login security module.', 'wordfence'); ?></p>
36
- <p><a id="wf-migrate2fanew-start" class="wf-btn wf-btn-default wf-btn-sm wf-dismiss-link" href="#"><?php esc_html_e('Switch to New 2FA', 'wordfence'); ?></a></p>
37
  </div>
38
  </div>
39
  </div>
@@ -48,7 +48,7 @@ echo wfView::create('common/section-title', array(
48
  </p>
49
 
50
  <p class="center">
51
- <a class="wf-btn wf-btn-primary wf-btn-callout" href="https://www.wordfence.com/gnl1twoFac1/wordfence-signup/" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Upgrade to Premium', 'wordfence') ?></a>
52
  </p>
53
  </div>
54
 
@@ -76,7 +76,7 @@ echo wfView::create('common/section-title', array(
76
  <?php if (!wfConfig::get('loginSecurityEnabled')): ?>
77
  <ul class="wf-block-banner">
78
  <li><?php echo wp_kses(__('<strong>Note:</strong> Two-Factor Authentication is disabled when the option "Enable Brute Force Protection" is off.', 'wordfence'), array('strong'=>array())); ?></li>
79
- <li><a href="#" class="wf-btn wf-btn-default" id="wf-2fa-enable"><?php esc_html_e('Turn On', 'wordfence'); ?></a></li>
80
  </ul>
81
  <?php endif; ?>
82
  <div class="wf-block-header">
@@ -201,7 +201,7 @@ echo wfView::create('common/section-title', array(
201
  {{/if}}
202
  </td>
203
  <td style="white-space: nowrap; text-align: center;" class="wf-twofactor-delete">
204
- <a href="#" onclick="WFAD.delTwoFac('${user.userID}'); return false;"><i class="wf-ion-ios-trash-outline"></i></a>
205
  </td>
206
  </tr>
207
  {{/each}}
@@ -220,7 +220,7 @@ echo wfView::create('common/section-title', array(
220
  <div id="wordfenceTwoFactorModern">
221
  <p><strong><?php esc_html_e('2FA Mode: Normal', 'wordfence') ?>.</strong> <?php esc_html_e('Legacy support for SMS-based two-factor authentication is being phased out, as it is less secure than using a modern authenticator app.', 'wordfence') ?></p>
222
  <p><?php esc_html_e('If you have a conflict with the new 2FA method, you can temporarily switch back to the Legacy version.', 'wordfence'); ?></p>
223
- <p><a id="wf-migrate2faold-start" class="wf-btn wf-btn-default wf-btn-sm wf-dismiss-link" href="#"><?php esc_html_e('Revert to Legacy 2FA', 'wordfence'); ?></a></p>
224
  </div>
225
  </div>
226
  </div>
33
  <div class="wf-col-xs-12">
34
  <div id="wordfenceTwoFactorLegacy">
35
  <p><strong><?php esc_html_e('2FA Mode: Legacy', 'wordfence') ?>.</strong> <?php esc_html_e('Two-factor authentication is using legacy support, which enables SMS-based codes but is less compatible. An improved interface and use by non-administrators is available by activating the new login security module.', 'wordfence'); ?></p>
36
+ <p><a id="wf-migrate2fanew-start" class="wf-btn wf-btn-default wf-btn-sm wf-dismiss-link" href="#" role="button"><?php esc_html_e('Switch to New 2FA', 'wordfence'); ?></a></p>
37
  </div>
38
  </div>
39
  </div>
48
  </p>
49
 
50
  <p class="center">
51
+ <a class="wf-btn wf-btn-primary wf-btn-callout" href="https://www.wordfence.com/gnl1twoFac1/wordfence-signup/" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Upgrade to Premium', 'wordfence') ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>
52
  </p>
53
  </div>
54
 
76
  <?php if (!wfConfig::get('loginSecurityEnabled')): ?>
77
  <ul class="wf-block-banner">
78
  <li><?php echo wp_kses(__('<strong>Note:</strong> Two-Factor Authentication is disabled when the option "Enable Brute Force Protection" is off.', 'wordfence'), array('strong'=>array())); ?></li>
79
+ <li><a href="#" class="wf-btn wf-btn-default" id="wf-2fa-enable" role="button"><?php esc_html_e('Turn On', 'wordfence'); ?></a></li>
80
  </ul>
81
  <?php endif; ?>
82
  <div class="wf-block-header">
201
  {{/if}}
202
  </td>
203
  <td style="white-space: nowrap; text-align: center;" class="wf-twofactor-delete">
204
+ <a href="#" onclick="WFAD.delTwoFac('${user.userID}'); return false;" role="button"><i class="wf-ion-ios-trash-outline"></i></a>
205
  </td>
206
  </tr>
207
  {{/each}}
220
  <div id="wordfenceTwoFactorModern">
221
  <p><strong><?php esc_html_e('2FA Mode: Normal', 'wordfence') ?>.</strong> <?php esc_html_e('Legacy support for SMS-based two-factor authentication is being phased out, as it is less secure than using a modern authenticator app.', 'wordfence') ?></p>
222
  <p><?php esc_html_e('If you have a conflict with the new 2FA method, you can temporarily switch back to the Legacy version.', 'wordfence'); ?></p>
223
+ <p><a id="wf-migrate2faold-start" class="wf-btn wf-btn-default wf-btn-sm wf-dismiss-link" href="#" role="button"><?php esc_html_e('Revert to Legacy 2FA', 'wordfence'); ?></a></p>
224
  </div>
225
  </div>
226
  </div>
lib/menu_tools_whois.php CHANGED
@@ -16,7 +16,7 @@ if (!defined('WORDFENCE_VERSION')) { exit; }
16
  <h2><?php esc_html_e('Whois Lookup', 'wordfence') ?></h2>
17
  <span><?php echo wp_kses(sprintf(
18
  /* translators: URL to support page. */
19
- __('<a href="%s" target="_blank" rel="noopener noreferrer" class="wf-help-link">Learn more<span class="wf-hidden-xs"> about Whois Lookup</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_TOOLS_WHOIS_LOOKUP)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array()), 'span'=>array('class'=>array()))); ?>
20
  <i class="wf-fa wf-fa-external-link" aria-hidden="true"></i></span>
21
  </div>
22
 
@@ -37,7 +37,7 @@ if (!defined('WORDFENCE_VERSION')) { exit; }
37
  <p style="width: 600px;">
38
  <?php echo wp_kses(sprintf(
39
  /* translators: Hostname or IP address. */
40
- __("You've chosen to block the network that <span style=\"color: #F00;\">%s</span> is part of. We've marked the networks we found that this IP address belongs to in red below. Make sure you read all the WHOIS information so that you see all networks this IP belongs to. We recommend blocking the network with the lowest number of addresses. You may find this is listed at the end as part of the 'rWHOIS' query which contacts the local WHOIS server that is run by the network administrator."), esc_html($_GET['whoisval'])), array('span'=>array('style'=>array()))); ?>
41
  </p>
42
  <?php } ?>
43
  <div id="wfrawhtml" class="wf-padding-add-top"></div>
16
  <h2><?php esc_html_e('Whois Lookup', 'wordfence') ?></h2>
17
  <span><?php echo wp_kses(sprintf(
18
  /* translators: URL to support page. */
19
+ __('<a href="%s" target="_blank" rel="noopener noreferrer" class="wf-help-link">Learn more<span class="wf-hidden-xs"> about Whois Lookup</span><span class="screen-reader-text"> (opens in new tab)</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_TOOLS_WHOIS_LOOKUP)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array()), 'span'=>array('class'=>array()))); ?>
20
  <i class="wf-fa wf-fa-external-link" aria-hidden="true"></i></span>
21
  </div>
22
 
37
  <p style="width: 600px;">
38
  <?php echo wp_kses(sprintf(
39
  /* translators: Hostname or IP address. */
40
+ __("You've chosen to block the network that <span style=\"color: #F00;\">%s</span> is part of. We've marked the networks we found that this IP address belongs to in red below. Make sure you read all the WHOIS information so that you see all networks this IP belongs to. We recommend blocking the network with the lowest number of addresses. You may find this is listed at the end as part of the 'rWHOIS' query which contacts the local WHOIS server that is run by the network administrator.", 'wordfence'), esc_html($_GET['whoisval'])), array('span'=>array('style'=>array()))); ?>
41
  </p>
42
  <?php } ?>
43
  <div id="wfrawhtml" class="wf-padding-add-top"></div>
lib/menu_wordfence_central.php CHANGED
@@ -56,7 +56,7 @@ else {
56
  <div class="wf-central-dashboard-copy">
57
  <p><strong><?php esc_html_e('Wordfence Central', 'wordfence') ?></strong></p>
58
  <p><?php esc_html_e('Wordfence Central allows you to manage Wordfence on multiple sites from one location. It makes security monitoring and configuring Wordfence easier.', 'wordfence') ?></p>
59
- <p class="wf-right-lg"><a href="https://www.wordfence.com/central" target="_blank" rel="noopener noreferrer"><strong><?php esc_html_e('Visit Wordfence Central', 'wordfence') ?></strong></a></p>
60
  </div>
61
  </div>
62
  </div>
@@ -64,7 +64,7 @@ else {
64
  <p><strong><?php esc_html_e('Wordfence Central Status', 'wordfence') ?></strong></p>
65
  <p><?php echo esc_html(sprintf(
66
  /* translators: 1. Email address. 2. Localized date. */
67
- __('Activated - connected by %1$s on %2$s', 'wordfence'), wfConfig::get('wordfenceCentralConnectEmail')), date_i18n('F j, Y', (int) wfConfig::get('wordfenceCentralConnectTime'))) ?></p>
68
  <p class="wf-right-lg"><a href="<?php echo esc_url($wordfenceURL); ?>"><strong><?php esc_html_e('Disconnect This Site', 'wordfence') ?></strong></a></p>
69
  </div>
70
  </div>
56
  <div class="wf-central-dashboard-copy">
57
  <p><strong><?php esc_html_e('Wordfence Central', 'wordfence') ?></strong></p>
58
  <p><?php esc_html_e('Wordfence Central allows you to manage Wordfence on multiple sites from one location. It makes security monitoring and configuring Wordfence easier.', 'wordfence') ?></p>
59
+ <p class="wf-right-lg"><a href="https://www.wordfence.com/central" target="_blank" rel="noopener noreferrer"><strong><?php esc_html_e('Visit Wordfence Central', 'wordfence') ?></strong><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></p>
60
  </div>
61
  </div>
62
  </div>
64
  <p><strong><?php esc_html_e('Wordfence Central Status', 'wordfence') ?></strong></p>
65
  <p><?php echo esc_html(sprintf(
66
  /* translators: 1. Email address. 2. Localized date. */
67
+ __('Activated - connected by %1$s on %2$s', 'wordfence'), wfConfig::get('wordfenceCentralConnectEmail'), date_i18n('F j, Y', (int) wfConfig::get('wordfenceCentralConnectTime')))) ?></p>
68
  <p class="wf-right-lg"><a href="<?php echo esc_url($wordfenceURL); ?>"><strong><?php esc_html_e('Disconnect This Site', 'wordfence') ?></strong></a></p>
69
  </div>
70
  </div>
lib/wf503.php CHANGED
@@ -313,6 +313,36 @@
313
  color: #999999;
314
  margin-top: 2rem;
315
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
316
  </style>
317
  </head>
318
  <body>
@@ -352,12 +382,12 @@
352
  </div>
353
  <div class="about-text">
354
  <h3 class="h4"><?php esc_html_e('About Wordfence', 'wordfence'); ?></h3>
355
- <p><?php esc_html_e('Wordfence is a security plugin installed on over 3 million WordPress sites. The owner of this site is using Wordfence to manage access to their site.', 'wordfence'); ?></p>
356
  <p><?php esc_html_e('You can also read the documentation to learn about Wordfence\'s blocking tools, or visit wordfence.com to learn more about Wordfence.', 'wordfence'); ?></p>
357
  </div>
358
  </div>
359
 
360
- <p class="documentation small"><?php echo wp_kses(sprintf(/* translators: Support URL. */ __('Click here to learn more: <a href="%s" target="_blank" rel="noopener noreferrer">Documentation</a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_LOCKED_OUT)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))); ?></p>
361
  <p class="generated small"><em><?php echo wp_kses(sprintf(/* translators: Localized date. */ __('Generated by Wordfence at %s', 'wordfence'), gmdate('D, j M Y G:i:s T', wfWAFUtils::normalizedTime())), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))); ?>.<br><?php esc_html_e('Your computer\'s time:', 'wordfence'); ?> <script type="application/javascript">document.write(new Date().toUTCString());</script>.</em></p>
362
  </div>
363
  </body>
313
  color: #999999;
314
  margin-top: 2rem;
315
  }
316
+
317
+ /* Text meant only for screen readers. */
318
+ .screen-reader-text {
319
+ border: 0;
320
+ clip: rect(1px, 1px, 1px, 1px);
321
+ clip-path: inset(50%);
322
+ height: 1px;
323
+ margin: -1px;
324
+ overflow: hidden;
325
+ padding: 0;
326
+ position: absolute;
327
+ width: 1px;
328
+ word-wrap: normal !important;
329
+ }
330
+ .screen-reader-text:focus {
331
+ background-color: #eee;
332
+ clip: auto !important;
333
+ clip-path: none;
334
+ color: #444;
335
+ display: block;
336
+ font-size: 1em;
337
+ height: auto;
338
+ left: 5px;
339
+ line-height: normal;
340
+ padding: 15px 23px 14px;
341
+ text-decoration: none;
342
+ top: 5px;
343
+ width: auto;
344
+ z-index: 100000; /* Above WP toolbar. */
345
+ }
346
  </style>
347
  </head>
348
  <body>
382
  </div>
383
  <div class="about-text">
384
  <h3 class="h4"><?php esc_html_e('About Wordfence', 'wordfence'); ?></h3>
385
+ <p><?php esc_html_e('Wordfence is a security plugin installed on over 4 million WordPress sites. The owner of this site is using Wordfence to manage access to their site.', 'wordfence'); ?></p>
386
  <p><?php esc_html_e('You can also read the documentation to learn about Wordfence\'s blocking tools, or visit wordfence.com to learn more about Wordfence.', 'wordfence'); ?></p>
387
  </div>
388
  </div>
389
 
390
+ <p class="documentation small"><?php echo wp_kses(sprintf(/* translators: Support URL. */ __('Click here to learn more: <a href="%s" target="_blank" rel="noopener noreferrer">Documentation<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_LOCKED_OUT)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()), 'span'=>array('class'=>array()))); ?></p>
391
  <p class="generated small"><em><?php echo wp_kses(sprintf(/* translators: Localized date. */ __('Generated by Wordfence at %s', 'wordfence'), gmdate('D, j M Y G:i:s T', wfWAFUtils::normalizedTime())), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))); ?>.<br><?php esc_html_e('Your computer\'s time:', 'wordfence'); ?> <script type="application/javascript">document.write(new Date().toUTCString());</script>.</em></p>
392
  </div>
393
  </body>
lib/wfAPI.php CHANGED
@@ -160,7 +160,7 @@ class wfAPI {
160
  }
161
 
162
  if (200 != $this->lastHTTPStatus) {
163
- throw new wfAPICallFailedException(sprintf(/* translators: HTTP status code. */__("The Wordfence scanning servers are currently unavailable. This may be for maintenance or a temporary outage. If this still occurs in an hour, please contact support. [%s]"), $this->lastHTTPStatus));
164
  }
165
 
166
  $content = wp_remote_retrieve_body($response);
160
  }
161
 
162
  if (200 != $this->lastHTTPStatus) {
163
+ throw new wfAPICallFailedException(sprintf(/* translators: HTTP status code. */__("The Wordfence scanning servers are currently unavailable. This may be for maintenance or a temporary outage. If this still occurs in an hour, please contact support. [%s]", 'wordfence'), $this->lastHTTPStatus));
164
  }
165
 
166
  $content = wp_remote_retrieve_body($response);
lib/wfActivityReport.php CHANGED
@@ -504,7 +504,7 @@ SQL
504
  $success = true;
505
  if (is_string($email_addresses)) { $email_addresses = explode(',', $email_addresses); }
506
  foreach ($email_addresses as $email) {
507
- $uniqueContent = str_replace('<!-- ##UNSUBSCRIBE## -->', sprintf(/* translators: URL to the WordPress admin panel. */ __('No longer an administrator for this site? <a href="%s" target="_blank">Click here</a> to stop receiving security alerts.', 'wordfence'), wfUtils::getSiteBaseURL() . '?_wfsf=removeAlertEmail&jwt=' . wfUtils::generateJWT(array('email' => $email))), $content);
508
  if (!wp_mail($email, sprintf(/* translators: 1. Site URL. 2. Localized date. */ __('Wordfence activity for %1$s on %2$s', 'wordfence'), date_i18n(get_option('date_format')), $shortSiteURL), $uniqueContent, 'Content-Type: text/html')) {
509
  $success = false;
510
  }
504
  $success = true;
505
  if (is_string($email_addresses)) { $email_addresses = explode(',', $email_addresses); }
506
  foreach ($email_addresses as $email) {
507
+ $uniqueContent = str_replace('<!-- ##UNSUBSCRIBE## -->', wp_kses(sprintf(/* translators: URL to the WordPress admin panel. */ __('No longer an administrator for this site? <a href="%s" target="_blank">Click here</a> to stop receiving security alerts.', 'wordfence'), wfUtils::getSiteBaseURL() . '?_wfsf=removeAlertEmail&jwt=' . wfUtils::generateJWT(array('email' => $email))), array('a'=>array('href'=>array(), 'target'=>array()))), $content);
508
  if (!wp_mail($email, sprintf(/* translators: 1. Site URL. 2. Localized date. */ __('Wordfence activity for %1$s on %2$s', 'wordfence'), date_i18n(get_option('date_format')), $shortSiteURL), $uniqueContent, 'Content-Type: text/html')) {
509
  $success = false;
510
  }
lib/wfAdminNoticeQueue.php CHANGED
@@ -2,7 +2,20 @@
2
 
3
  class wfAdminNoticeQueue {
4
  protected static function _notices() {
5
- return wfConfig::get_ser('adminNoticeQueue', array());
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  }
7
 
8
  protected static function _setNotices($notices) {
@@ -74,7 +87,7 @@ class wfAdminNoticeQueue {
74
  $category = false;
75
  $users = false;
76
  }
77
-
78
  $notices = self::_notices();
79
  $found = false;
80
  foreach ($notices as $nid => $n) {
@@ -177,6 +190,6 @@ class wfAdminNotice {
177
  $severityClass = 'notice-warning';
178
  }
179
 
180
- echo '<div class="wf-admin-notice notice ' . $severityClass . '" data-notice-id="' . esc_attr($this->_id) . '"><p>' . $this->_messageHTML . '</p><p><a class="wf-btn wf-btn-default wf-btn-sm wf-dismiss-link" href="#" onclick="wordfenceExt.dismissAdminNotice(\'' . esc_attr($this->_id) . '\'); return false;">' . esc_html__('Dismiss', 'wordfence') . '</a></p></div>';
181
  }
182
  }
2
 
3
  class wfAdminNoticeQueue {
4
  protected static function _notices() {
5
+ return self::_purgeObsoleteNotices(wfConfig::get_ser('adminNoticeQueue', array()));
6
+ }
7
+
8
+ private static function _purgeObsoleteNotices($notices) {
9
+ $altered = false;
10
+ foreach ($notices as $id => $notice) {
11
+ if ($notice['category'] === 'php8') {
12
+ unset($notices[$id]);
13
+ $altered = true;
14
+ }
15
+ }
16
+ if ($altered)
17
+ self::_setNotices($notices);
18
+ return $notices;
19
  }
20
 
21
  protected static function _setNotices($notices) {
87
  $category = false;
88
  $users = false;
89
  }
90
+
91
  $notices = self::_notices();
92
  $found = false;
93
  foreach ($notices as $nid => $n) {
190
  $severityClass = 'notice-warning';
191
  }
192
 
193
+ echo '<div class="wf-admin-notice notice ' . $severityClass . '" data-notice-id="' . esc_attr($this->_id) . '"><p>' . $this->_messageHTML . '</p><p><a class="wf-btn wf-btn-default wf-btn-sm wf-dismiss-link" href="#" onclick="wordfenceExt.dismissAdminNotice(\'' . esc_attr($this->_id) . '\'); return false;" role="button">' . esc_html__('Dismiss', 'wordfence') . '</a></p></div>';
194
  }
195
  }
lib/wfDiagnostic.php CHANGED
@@ -108,7 +108,7 @@ class wfDiagnostic
108
  'PHP Environment' => array(
109
  'description' => __('PHP version, important PHP extensions.', 'wordfence'),
110
  'tests' => array(
111
- 'phpVersion' => array('raw' => true, 'value' => sprintf(/* translators: Support URL. */ __('PHP version >= PHP 5.6.20<br><em> (<a href="https://wordpress.org/about/requirements/" target="_blank" rel="noopener noreferrer">Minimum version required by WordPress</a>)</em> <a href="%s" target="_blank" rel="noopener noreferrer" class="wfhelp"></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_PHP))),
112
  'processOwner' => __('Process Owner', 'wordfence'),
113
  'hasOpenSSL' => __('Checking for OpenSSL support', 'wordfence'),
114
  'openSSLVersion' => __('Checking OpenSSL version', 'wordfence'),
@@ -118,7 +118,7 @@ class wfDiagnostic
118
  'curlProtocols' => __('cURL Support Protocols', 'wordfence'),
119
  'curlSSLVersion' => __('cURL SSL Version', 'wordfence'),
120
  'curlLibZVersion' => __('cURL libz Version', 'wordfence'),
121
- 'displayErrors' => __('Checking <code>display_errors</code><br><em> (<a href="http://php.net/manual/en/errorfunc.configuration.php#ini.display-errors" target="_blank" rel="noopener noreferrer">Should be disabled on production servers</a>)</em>', 'wordfence'),
122
  )
123
  ),
124
  'Connectivity' => array(
@@ -137,6 +137,7 @@ class wfDiagnostic
137
  'serverTime' => __('Server Time', 'wordfence'),
138
  'wfTimeOffset' => __('Wordfence Network Time Offset', 'wordfence'),
139
  'ntpTimeOffset' => __('NTP Time Offset', 'wordfence'),
 
140
  'timeSourceInUse' => __('TOTP Time Source', 'wordfence'),
141
  'wpTimeZone' => __('WordPress Time Zone', 'wordfence'),
142
  ),
@@ -776,6 +777,36 @@ class wfDiagnostic
776
  'message' => '-',
777
  );
778
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
779
 
780
  public function timeSourceInUse() {
781
  if (class_exists('WFLSPHP52Compatability')) {
@@ -822,5 +853,4 @@ class wfDiagnostic
822
  'message' => $tz,
823
  );
824
  }
825
- }
826
-
108
  'PHP Environment' => array(
109
  'description' => __('PHP version, important PHP extensions.', 'wordfence'),
110
  'tests' => array(
111
+ 'phpVersion' => array('raw' => true, 'value' => wp_kses(sprintf(/* translators: Support URL. */ __('PHP version >= PHP 5.6.20<br><em> (<a href="https://wordpress.org/about/requirements/" target="_blank" rel="noopener noreferrer">Minimum version required by WordPress</a>)</em> <a href="%s" target="_blank" rel="noopener noreferrer" class="wfhelp"><span class="screen-reader-text"> (opens in new tab)</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_PHP)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array()), 'span'=>array('class'=>array())))),
112
  'processOwner' => __('Process Owner', 'wordfence'),
113
  'hasOpenSSL' => __('Checking for OpenSSL support', 'wordfence'),
114
  'openSSLVersion' => __('Checking OpenSSL version', 'wordfence'),
118
  'curlProtocols' => __('cURL Support Protocols', 'wordfence'),
119
  'curlSSLVersion' => __('cURL SSL Version', 'wordfence'),
120
  'curlLibZVersion' => __('cURL libz Version', 'wordfence'),
121
+ 'displayErrors' => array('raw' => true, 'value' => wp_kses(__('Checking <code>display_errors</code><br><em> (<a href="http://php.net/manual/en/errorfunc.configuration.php#ini.display-errors" target="_blank" rel="noopener noreferrer">Should be disabled on production servers<span class="screen-reader-text"> (opens in new tab)</span></a>)</em>', 'wordfence'), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()), 'span'=>array('class'=>array()), 'em'=>array(), 'code'=>array(), 'br'=>array()))),
122
  )
123
  ),
124
  'Connectivity' => array(
137
  'serverTime' => __('Server Time', 'wordfence'),
138
  'wfTimeOffset' => __('Wordfence Network Time Offset', 'wordfence'),
139
  'ntpTimeOffset' => __('NTP Time Offset', 'wordfence'),
140
+ 'ntpStatus' => __('NTP Status', 'wordfence'),
141
  'timeSourceInUse' => __('TOTP Time Source', 'wordfence'),
142
  'wpTimeZone' => __('WordPress Time Zone', 'wordfence'),
143
  ),
777
  'message' => '-',
778
  );
779
  }
780
+
781
+ public function ntpStatus() {
782
+ $maxFailures = \WordfenceLS\Controller_Time::FAILURE_LIMIT;
783
+ $cronDisabled = \WordfenceLS\Controller_Settings::shared()->is_ntp_cron_disabled($failureCount);
784
+ if ($cronDisabled) {
785
+ $constant = \WordfenceLS\Controller_Settings::shared()->is_ntp_disabled_via_constant();
786
+ $status = __('Disabled ', 'wordfence');
787
+ if ($constant) {
788
+ $status .= __('(WORDFENCE_LS_DISABLE_NTP)', 'wordfence');
789
+ }
790
+ else if ($failureCount > 0) {
791
+ $status .= __('(failures exceeded limit)', 'wordfence');
792
+ }
793
+ else {
794
+ $status .= __('(settings)', 'wordfence');
795
+ }
796
+ }
797
+ else {
798
+ $status = __('Enabled', 'wordfence');
799
+ if ($failureCount > 0) {
800
+ $remainingAttempts = $maxFailures - $failureCount;
801
+ $status .= sprintf(__(' (%d of %d attempts remaining)', 'wordfence'), $remainingAttempts, $maxFailures);
802
+ }
803
+ }
804
+ return array(
805
+ 'test' => true,
806
+ 'infoOnly' => true,
807
+ 'message' => $status
808
+ );
809
+ }
810
 
811
  public function timeSourceInUse() {
812
  if (class_exists('WFLSPHP52Compatability')) {
853
  'message' => $tz,
854
  );
855
  }
856
+ }
 
lib/wfIssues.php CHANGED
@@ -484,7 +484,7 @@ class wfIssues {
484
  ));
485
 
486
  foreach ($emails as $email) {
487
- $uniqueContent = str_replace('<!-- ##UNSUBSCRIBE## -->', sprintf(__('No longer an administrator for this site? <a href="%s" target="_blank">Click here</a> to stop receiving security alerts.', 'wordfence'), wfUtils::getSiteBaseURL() . '?_wfsf=removeAlertEmail&jwt=' . wfUtils::generateJWT(array('email' => $email))), $content);
488
  wp_mail($email, $subject, $uniqueContent, 'Content-type: text/html');
489
  }
490
  }
@@ -747,4 +747,4 @@ class wfIssues {
747
  public function getIssuesTable() {
748
  return $this->issuesTable;
749
  }
750
- }
484
  ));
485
 
486
  foreach ($emails as $email) {
487
+ $uniqueContent = str_replace('<!-- ##UNSUBSCRIBE## -->', wp_kses(sprintf(__('No longer an administrator for this site? <a href="%s" target="_blank">Click here</a> to stop receiving security alerts.', 'wordfence'), wfUtils::getSiteBaseURL() . '?_wfsf=removeAlertEmail&jwt=' . wfUtils::generateJWT(array('email' => $email))), array('a'=>array('href'=>array(), 'target'=>array()))), $content);
488
  wp_mail($email, $subject, $uniqueContent, 'Content-type: text/html');
489
  }
490
  }
747
  public function getIssuesTable() {
748
  return $this->issuesTable;
749
  }
750
+ }
lib/wfLockedOut.php CHANGED
@@ -318,6 +318,36 @@ header('Status: 503 Service Temporarily Unavailable');
318
  color: #999999;
319
  margin-top: 2rem;
320
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
321
  </style>
322
  </head>
323
  <body>
@@ -361,12 +391,12 @@ header('Status: 503 Service Temporarily Unavailable');
361
  </div>
362
  <div class="about-text">
363
  <h3 class="h4"><?php esc_html_e('About Wordfence', 'wordfence'); ?></h3>
364
- <p><?php esc_html_e('Wordfence is a security plugin installed on over 3 million WordPress sites. The owner of this site is using Wordfence to manage access to their site.', 'wordfence'); ?></p>
365
  <p><?php esc_html_e('You can also read the documentation to learn about Wordfence\'s blocking tools, or visit wordfence.com to learn more about Wordfence.', 'wordfence'); ?></p>
366
  </div>
367
  </div>
368
 
369
- <p class="documentation small"><?php echo wp_kses(sprintf(__('Click here to learn more: <a href="%s" target="_blank" rel="noopener noreferrer">Documentation</a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_LOCKED_OUT)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))); ?></p>
370
  <p class="generated small"><em><?php esc_html(printf(__('Generated by Wordfence at %s', 'wordfence'), gmdate('D, j M Y G:i:s T', wfWAFUtils::normalizedTime()))); ?>.<br><?php esc_html_e('Your computer\'s time:', 'wordfence'); ?> <script type="application/javascript">document.write(new Date().toUTCString());</script>.</em></p>
371
  </div>
372
  </body>
318
  color: #999999;
319
  margin-top: 2rem;
320
  }
321
+
322
+ /* Text meant only for screen readers. */
323
+ .screen-reader-text {
324
+ border: 0;
325
+ clip: rect(1px, 1px, 1px, 1px);
326
+ clip-path: inset(50%);
327
+ height: 1px;
328
+ margin: -1px;
329
+ overflow: hidden;
330
+ padding: 0;
331
+ position: absolute;
332
+ width: 1px;
333
+ word-wrap: normal !important;
334
+ }
335
+ .screen-reader-text:focus {
336
+ background-color: #eee;
337
+ clip: auto !important;
338
+ clip-path: none;
339
+ color: #444;
340
+ display: block;
341
+ font-size: 1em;
342
+ height: auto;
343
+ left: 5px;
344
+ line-height: normal;
345
+ padding: 15px 23px 14px;
346
+ text-decoration: none;
347
+ top: 5px;
348
+ width: auto;
349
+ z-index: 100000; /* Above WP toolbar. */
350
+ }
351
  </style>
352
  </head>
353
  <body>
391
  </div>
392
  <div class="about-text">
393
  <h3 class="h4"><?php esc_html_e('About Wordfence', 'wordfence'); ?></h3>
394
+ <p><?php esc_html_e('Wordfence is a security plugin installed on over 4 million WordPress sites. The owner of this site is using Wordfence to manage access to their site.', 'wordfence'); ?></p>
395
  <p><?php esc_html_e('You can also read the documentation to learn about Wordfence\'s blocking tools, or visit wordfence.com to learn more about Wordfence.', 'wordfence'); ?></p>
396
  </div>
397
  </div>
398
 
399
+ <p class="documentation small"><?php echo wp_kses(sprintf(__('Click here to learn more: <a href="%s" target="_blank" rel="noopener noreferrer">Documentation<span class="screen-reader-text"> (opens in new tab)</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_LOCKED_OUT)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()), 'span'=>array('class'=>array()))); ?></p>
400
  <p class="generated small"><em><?php esc_html(printf(__('Generated by Wordfence at %s', 'wordfence'), gmdate('D, j M Y G:i:s T', wfWAFUtils::normalizedTime()))); ?>.<br><?php esc_html_e('Your computer\'s time:', 'wordfence'); ?> <script type="application/javascript">document.write(new Date().toUTCString());</script>.</em></p>
401
  </div>
402
  </body>
lib/wfScan.php CHANGED
@@ -74,7 +74,7 @@ class wfScan {
74
  if ($expired) {
75
  self::errorExit(sprintf(
76
  /* translators: 1. Unix timestamp. 2. WordPress nonce. 3. Unix timestamp. */
77
- __('The key used to start a scan expired. The value is: %1$s and split is: %2$s and time is: %3$d'), $expired, $storedCronKey, time()));
78
  } //keys only last 60 seconds and are used within milliseconds of creation
79
 
80
  if (!$storedCronKey) {
@@ -178,7 +178,7 @@ class wfScan {
178
  if ($scanController->schedulingMode() == wfScanner::SCAN_SCHEDULING_MODE_AUTOMATIC && $isScheduled) {
179
  if (isset($response['defer'])) {
180
  $defer = (int) $response['defer'];
181
- wordfence::status(2, 'info', sprintf(/* translators: Time until. */ __("Deferring scheduled scan by %s"), wfUtils::makeDuration($defer)));
182
  wfConfig::set('lastScheduledScanStart', 0);
183
  wfConfig::set('lastScanCompleted', 'ok');
184
  wfConfig::set('lastScanFailureType', false);
@@ -355,4 +355,4 @@ MSG
355
  private static function status($level, $type, $msg){
356
  wordfence::status($level, $type, $msg);
357
  }
358
- }
74
  if ($expired) {
75
  self::errorExit(sprintf(
76
  /* translators: 1. Unix timestamp. 2. WordPress nonce. 3. Unix timestamp. */
77
+ __('The key used to start a scan expired. The value is: %1$s and split is: %2$s and time is: %3$d', 'wordfence'), $expired, $storedCronKey, time()));
78
  } //keys only last 60 seconds and are used within milliseconds of creation
79
 
80
  if (!$storedCronKey) {
178
  if ($scanController->schedulingMode() == wfScanner::SCAN_SCHEDULING_MODE_AUTOMATIC && $isScheduled) {
179
  if (isset($response['defer'])) {
180
  $defer = (int) $response['defer'];
181
+ wordfence::status(2, 'info', sprintf(/* translators: Time until. */ __("Deferring scheduled scan by %s", 'wordfence'), wfUtils::makeDuration($defer)));
182
  wfConfig::set('lastScheduledScanStart', 0);
183
  wfConfig::set('lastScanCompleted', 'ok');
184
  wfConfig::set('lastScanFailureType', false);
355
  private static function status($level, $type, $msg){
356
  wordfence::status($level, $type, $msg);
357
  }
358
+ }
lib/wfScanEngine.php CHANGED
@@ -275,7 +275,7 @@ class wfScanEngine {
275
  if ((time() - $this->startTime) > $timeLimit) {
276
  $error = sprintf(
277
  /* translators: 1. Time duration. 2. Support URL. */
278
- __('The scan time limit of %1$s has been exceeded and the scan will be terminated. This limit can be customized on the options page. <a href="%2$s" target="_blank" rel="noopener noreferrer">Get More Information</a>', 'wordfence'),
279
  wfUtils::makeDuration($timeLimit),
280
  wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_TIME_LIMIT)
281
  );
@@ -294,7 +294,6 @@ class wfScanEngine {
294
  wfUtils::makeDuration(time() - $this->startTime, true)
295
  ));
296
  if ($this->i->totalIssues > 0) {
297
- $this->status(10, 'info', "SUM_FINAL:" . __("Scan interrupted. You have " . $this->i->totalIssues . " new issue" . ($this->i->totalIssues == 1 ? "" : "s") . " to fix. See below."));
298
  $this->status(10, 'info', "SUM_FINAL:" . sprintf(
299
  /* translators: Number of scan results. */
300
  _n(
@@ -609,7 +608,7 @@ class wfScanEngine {
609
  }
610
  $longMsg = sprintf(
611
  /* translators: 1. URL. 2. URL. */
612
- __('The URL %1$s is on the malware list. More info available at <a href="http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%2$s&client=googlechrome&hl=en-US" target="_blank" rel="noopener noreferrer">Google Safe Browsing diagnostic page</a>.', 'wordfence'), esc_html($url), urlencode($url));
613
  $data['gsb'] = $badList;
614
  } else if ($badList == 'googpub-phish-shavar') {
615
  if (is_multisite()) {
@@ -622,7 +621,7 @@ class wfScanEngine {
622
  }
623
  $longMsg = sprintf(
624
  /* translators: 1. URL. 2. URL. */
625
- __('The URL %1$s is on the phishing list. More info available at <a href="http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%2$s&client=googlechrome&hl=en-US" target="_blank" rel="noopener noreferrer">Google Safe Browsing diagnostic page</a>.', 'wordfence'), esc_html($url), urlencode($url));
626
  $data['gsb'] = $badList;
627
  } else if ($badList == 'wordfence-dbl') {
628
  if (is_multisite()) {
@@ -694,7 +693,7 @@ class wfScanEngine {
694
  } else if ($recommendation == 'UNKNOWN') {
695
  $added = $this->addIssue('checkHowGetIPs', wfIssues::SEVERITY_HIGH, 'checkHowGetIPs', 'checkHowGetIPs' . $recommendation . WORDFENCE_VERSION,
696
  __("Unable to accurately detect IPs", 'wordfence'),
697
- sprintf(/* translators: Support URL. */ __('Wordfence was unable to validate a test request to your website. This can happen if your website is behind a proxy that does not use one of the standard ways to convey the IP of the request or it is unreachable publicly. IP blocking and live traffic information may not be accurate. <a href="%s" target="_blank" rel="noopener noreferrer">Get More Information</a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_MISCONFIGURED_HOW_GET_IPS))
698
  , array());
699
  if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) {
700
  $haveIssues = wfIssues::STATUS_PROBLEM;
@@ -717,7 +716,7 @@ class wfScanEngine {
717
  __("'How does Wordfence get IPs' is misconfigured", 'wordfence'),
718
  sprintf(
719
  /* translators: Support URL. */
720
- __('A test request to this website was detected on a different value for this setting. IP blocking and live traffic information may not be accurate. <a href="%s" target="_blank" rel="noopener noreferrer">Get More Information</a>', 'wordfence'),
721
  wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_MISCONFIGURED_HOW_GET_IPS)
722
  ) . $extraMsg,
723
  array('recommendation' => $recommendation));
@@ -792,7 +791,7 @@ class wfScanEngine {
792
  __('Publicly accessible config, backup, or log file found: %s', 'wordfence'), esc_html($pathFromRoot)),
793
  sprintf(
794
  /* translators: 1. URL to publicly accessible file. 2. Support URL. */
795
- __('<a href="%1$s" target="_blank" rel="noopener noreferrer">%1$s</a> is publicly accessible and may expose source code or sensitive information about your site. Files such as this one are commonly checked for by scanners and should be made inaccessible. Alternately, some can be removed if you are certain your site does not need them. Sites using the nginx web server may need manual configuration changes to protect such files. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn more</a>', 'wordfence'),
796
  $test->getUrl(),
797
  wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_PUBLIC_CONFIG)
798
  ),
@@ -993,8 +992,8 @@ class wfScanEngine {
993
  sprintf(
994
  /* translators: 1. Number of paths skipped in scan. 2. Support URL. 3. List of skipped paths. */
995
  _n(
996
- 'The option "Scan files outside your WordPress installation" is off by default, which means %1$d path and its file(s) will not be scanned for malware or unauthorized changes. To continue skipping this path, you may ignore this issue. Or to start scanning it, enable the option and subsequent scans will include it. Some paths may not be necessary to scan, so this is optional. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn More</a><br><br>The path skipped is %3$s',
997
- 'The option "Scan files outside your WordPress installation" is off by default, which means %1$d paths and their file(s) will not be scanned for malware or unauthorized changes. To continue skipping these paths, you may ignore this issue. Or to start scanning them, enable the option and subsequent scans will include them. Some paths may not be necessary to scan, so this is optional. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn More</a><br><br>The paths skipped are %3$s',
998
  $c,
999
  'wordfence'
1000
  ),
@@ -1135,7 +1134,7 @@ class wfScanEngine {
1135
  sprintf(/* translators: File path. */ __('Publicly accessible quarantined file found: %s', 'wordfence'), esc_html($file)),
1136
  sprintf(
1137
  /* translators: URL to publicly accessible file. */
1138
- __('<a href="%1$s" target="_blank" rel="noopener noreferrer">%1$s</a> is publicly accessible and may expose source code or sensitive information about your site. Files such as this one are commonly checked for by scanners and should be removed or made inaccessible.', 'wordfence'),
1139
  $test->getUrl()
1140
  ),
1141
  array(
@@ -1272,7 +1271,7 @@ class wfScanEngine {
1272
  );
1273
  $longMsg = sprintf(
1274
  /* translators: 1. WordPress Post type. 2. URL. 3. URL. */
1275
- __('This %1$s contains a suspected malware URL listed on Google\'s list of malware sites. The URL is: %2$s - More info available at <a href="http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%3$s&client=googlechrome&hl=en-US" target="_blank" rel="noopener noreferrer">Google Safe Browsing diagnostic page</a>.', 'wordfence'),
1276
  esc_html($type),
1277
  esc_html($result['URL']),
1278
  urlencode($result['URL'])
@@ -1415,7 +1414,7 @@ class wfScanEngine {
1415
  __('%1$s with author %2$s contains a suspected malware URL.', 'wordfence'), $uctype, esc_html($author));
1416
  $longMsg = sprintf(
1417
  /* translators: 1. WordPress post type. 2. URL. 3. URL. */
1418
- __('This %$1s contains a suspected malware URL listed on Google\'s list of malware sites. The URL is: %2$s - More info available at <a href="http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%3$s&client=googlechrome&hl=en-US" target="_blank" rel="noopener noreferrer">Google Safe Browsing diagnostic page</a>.', 'wordfence'),
1419
  esc_html($type),
1420
  esc_html($result['URL']),
1421
  urlencode($result['URL'])
@@ -1779,7 +1778,7 @@ class wfScanEngine {
1779
  'wafStatus',
1780
  'wafStatus' . $firewall->firewallMode(),
1781
  __('Web Application Firewall is disabled', 'wordfence'),
1782
- sprintf(/* translators: Support URL. */ __('Wordfence\'s Web Application Firewall has been unexpectedly disabled. If you see a notice at the top of the Wordfence admin pages that says "The Wordfence Web Application Firewall cannot run," click the link in that message to rebuild the configuration. If this does not work, you may need to fix file permissions. <a href="%s" target="_blank" rel="noopener noreferrer">More Details</a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_WAF_DISABLED)),
1783
  array('wafStatus' => $firewall->firewallMode(), 'wafStatusDisplay' => $firewall->displayText())
1784
  );
1785
  }
@@ -2025,7 +2024,7 @@ class wfScanEngine {
2025
  }
2026
  $longMsg .= ' ' . sprintf(
2027
  /* translators: Support URL. */
2028
- __('<a href="%s" target="_blank" rel="noopener noreferrer">Get more information.</a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_PLUGIN_ABANDONED));
2029
  $added = $this->addIssue('wfPluginAbandoned', $severity, $key, $key, $shortMsg, $longMsg, $statusArray);
2030
  if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) {
2031
  $haveIssues = wfIssues::STATUS_PROBLEM;
@@ -2064,7 +2063,7 @@ class wfScanEngine {
2064
  }
2065
  $longMsg .= ' ' . sprintf(
2066
  /* translators: Support URL. */
2067
- __('<a href="%s" target="_blank" rel="noopener noreferrer">Get more information.</a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_PLUGIN_REMOVED));
2068
  $added = $this->addIssue('wfPluginRemoved', wfIssues::SEVERITY_CRITICAL, $key, $key, $shortMsg, $longMsg, $pluginData);
2069
  if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) {
2070
  $haveIssues = wfIssues::STATUS_PROBLEM;
@@ -2089,7 +2088,7 @@ class wfScanEngine {
2089
 
2090
  $key = 'wfPluginVulnerable' . ' ' . $plugin['pluginFile'] . ' ' . $plugin['Version'];
2091
  $shortMsg = "The Plugin \"" . $plugin['Name'] . "\" has an unpatched security vulnerability.";
2092
- $longMsg = 'To protect your site from this vulnerability, the safest option is to deactivate and completely remove ' . esc_html($plugin['Name']) . ' until the developer releases a security fix. <a href="https://docs.wordfence.com/en/Understanding_scan_results#Plugin_has_an_unpatched_security_vulnerability" target="_blank" rel="noopener noreferrer">Get more information.</a>';
2093
  $added = $this->addIssue('wfPluginVulnerable', 1, $key, $key, $shortMsg, $longMsg, $plugin);
2094
  if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; }
2095
  else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; }
@@ -2252,7 +2251,7 @@ class wfScanEngine {
2252
  continue;
2253
  }
2254
 
2255
- $longMsg .= ' - ' . sprintf(/* translators: Support URL. */ __('<a href="%s" target="_blank" rel="noopener noreferrer">Get more information.</a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_OPTION_MALWARE_URL));
2256
 
2257
  $this->status(2, 'info', sprintf(/* translators: Scan result description. */ __("Adding issue: %s", 'wordfence'), $shortMsg));
2258
 
@@ -2294,7 +2293,7 @@ class wfScanEngine {
2294
  $shortMsg = __('PHP Update Needed for Country Blocking', 'wordfence');
2295
  $longMsg = sprintf(/* translators: Software version. */ __('The GeoIP database that is required for country blocking has been updated to a new format. This new format requires sites to run PHP 5.4 or newer, and this site is on PHP %s. To ensure country blocking continues functioning, please update PHP.', 'wordfence'), wfUtils::cleanPHPVersion());
2296
 
2297
- $longMsg .= ' ' . sprintf(/* translators: Support URL. */ __('<a href="%s" target="_blank" rel="noopener noreferrer">Get more information.</a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_GEOIP_UPDATE));
2298
 
2299
  $this->status(2, 'info', sprintf(/* translators: Scan result description. */ __("Adding issue: %s", 'wordfence'), $shortMsg));
2300
 
@@ -2973,4 +2972,4 @@ class wfScanEngineCoreVersionChangeException extends Exception {
2973
  }
2974
 
2975
  class wfScanEngineTestCallbackFailedException extends Exception {
2976
- }
275
  if ((time() - $this->startTime) > $timeLimit) {
276
  $error = sprintf(
277
  /* translators: 1. Time duration. 2. Support URL. */
278
+ __('The scan time limit of %1$s has been exceeded and the scan will be terminated. This limit can be customized on the options page. <a href="%2$s" target="_blank" rel="noopener noreferrer">Get More Information<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'),
279
  wfUtils::makeDuration($timeLimit),
280
  wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_TIME_LIMIT)
281
  );
294
  wfUtils::makeDuration(time() - $this->startTime, true)
295
  ));
296
  if ($this->i->totalIssues > 0) {
 
297
  $this->status(10, 'info', "SUM_FINAL:" . sprintf(
298
  /* translators: Number of scan results. */
299
  _n(
608
  }
609
  $longMsg = sprintf(
610
  /* translators: 1. URL. 2. URL. */
611
+ __('The URL %1$s is on the malware list. More info available at <a href="http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%2$s&client=googlechrome&hl=en-US" target="_blank" rel="noopener noreferrer">Google Safe Browsing diagnostic page<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>.', 'wordfence'), esc_html($url), urlencode($url));
612
  $data['gsb'] = $badList;
613
  } else if ($badList == 'googpub-phish-shavar') {
614
  if (is_multisite()) {
621
  }
622
  $longMsg = sprintf(
623
  /* translators: 1. URL. 2. URL. */
624
+ __('The URL %1$s is on the phishing list. More info available at <a href="http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%2$s&client=googlechrome&hl=en-US" target="_blank" rel="noopener noreferrer">Google Safe Browsing diagnostic page<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>.', 'wordfence'), esc_html($url), urlencode($url));
625
  $data['gsb'] = $badList;
626
  } else if ($badList == 'wordfence-dbl') {
627
  if (is_multisite()) {
693
  } else if ($recommendation == 'UNKNOWN') {
694
  $added = $this->addIssue('checkHowGetIPs', wfIssues::SEVERITY_HIGH, 'checkHowGetIPs', 'checkHowGetIPs' . $recommendation . WORDFENCE_VERSION,
695
  __("Unable to accurately detect IPs", 'wordfence'),
696
+ sprintf(/* translators: Support URL. */ __('Wordfence was unable to validate a test request to your website. This can happen if your website is behind a proxy that does not use one of the standard ways to convey the IP of the request or it is unreachable publicly. IP blocking and live traffic information may not be accurate. <a href="%s" target="_blank" rel="noopener noreferrer">Get More Information<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_MISCONFIGURED_HOW_GET_IPS))
697
  , array());
698
  if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) {
699
  $haveIssues = wfIssues::STATUS_PROBLEM;
716
  __("'How does Wordfence get IPs' is misconfigured", 'wordfence'),
717
  sprintf(
718
  /* translators: Support URL. */
719
+ __('A test request to this website was detected on a different value for this setting. IP blocking and live traffic information may not be accurate. <a href="%s" target="_blank" rel="noopener noreferrer">Get More Information<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'),
720
  wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_MISCONFIGURED_HOW_GET_IPS)
721
  ) . $extraMsg,
722
  array('recommendation' => $recommendation));
791
  __('Publicly accessible config, backup, or log file found: %s', 'wordfence'), esc_html($pathFromRoot)),
792
  sprintf(
793
  /* translators: 1. URL to publicly accessible file. 2. Support URL. */
794
+ __('<a href="%1$s" target="_blank" rel="noopener noreferrer">%1$s</a> is publicly accessible and may expose source code or sensitive information about your site. Files such as this one are commonly checked for by scanners and should be made inaccessible. Alternately, some can be removed if you are certain your site does not need them. Sites using the nginx web server may need manual configuration changes to protect such files. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn more<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'),
795
  $test->getUrl(),
796
  wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_PUBLIC_CONFIG)
797
  ),
992
  sprintf(
993
  /* translators: 1. Number of paths skipped in scan. 2. Support URL. 3. List of skipped paths. */
994
  _n(
995
+ 'The option "Scan files outside your WordPress installation" is off by default, which means %1$d path and its file(s) will not be scanned for malware or unauthorized changes. To continue skipping this path, you may ignore this issue. Or to start scanning it, enable the option and subsequent scans will include it. Some paths may not be necessary to scan, so this is optional. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn More<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a><br><br>The path skipped is %3$s',
996
+ 'The option "Scan files outside your WordPress installation" is off by default, which means %1$d paths and their file(s) will not be scanned for malware or unauthorized changes. To continue skipping these paths, you may ignore this issue. Or to start scanning them, enable the option and subsequent scans will include them. Some paths may not be necessary to scan, so this is optional. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn More<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a><br><br>The paths skipped are %3$s',
997
  $c,
998
  'wordfence'
999
  ),
1134
  sprintf(/* translators: File path. */ __('Publicly accessible quarantined file found: %s', 'wordfence'), esc_html($file)),
1135
  sprintf(
1136
  /* translators: URL to publicly accessible file. */
1137
+ __('<a href="%1$s" target="_blank" rel="noopener noreferrer">%1$s<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a> is publicly accessible and may expose source code or sensitive information about your site. Files such as this one are commonly checked for by scanners and should be removed or made inaccessible.', 'wordfence'),
1138
  $test->getUrl()
1139
  ),
1140
  array(
1271
  );
1272
  $longMsg = sprintf(
1273
  /* translators: 1. WordPress Post type. 2. URL. 3. URL. */
1274
+ __('This %1$s contains a suspected malware URL listed on Google\'s list of malware sites. The URL is: %2$s - More info available at <a href="http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%3$s&client=googlechrome&hl=en-US" target="_blank" rel="noopener noreferrer">Google Safe Browsing diagnostic page<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>.', 'wordfence'),
1275
  esc_html($type),
1276
  esc_html($result['URL']),
1277
  urlencode($result['URL'])
1414
  __('%1$s with author %2$s contains a suspected malware URL.', 'wordfence'), $uctype, esc_html($author));
1415
  $longMsg = sprintf(
1416
  /* translators: 1. WordPress post type. 2. URL. 3. URL. */
1417
+ __('This %1$s contains a suspected malware URL listed on Google\'s list of malware sites. The URL is: %2$s - More info available at <a href="http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%3$s&client=googlechrome&hl=en-US" target="_blank" rel="noopener noreferrer">Google Safe Browsing diagnostic page<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>.', 'wordfence'),
1418
  esc_html($type),
1419
  esc_html($result['URL']),
1420
  urlencode($result['URL'])
1778
  'wafStatus',
1779
  'wafStatus' . $firewall->firewallMode(),
1780
  __('Web Application Firewall is disabled', 'wordfence'),
1781
+ sprintf(/* translators: Support URL. */ __('Wordfence\'s Web Application Firewall has been unexpectedly disabled. If you see a notice at the top of the Wordfence admin pages that says "The Wordfence Web Application Firewall cannot run," click the link in that message to rebuild the configuration. If this does not work, you may need to fix file permissions. <a href="%s" target="_blank" rel="noopener noreferrer">More Details<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_WAF_DISABLED)),
1782
  array('wafStatus' => $firewall->firewallMode(), 'wafStatusDisplay' => $firewall->displayText())
1783
  );
1784
  }
2024
  }
2025
  $longMsg .= ' ' . sprintf(
2026
  /* translators: Support URL. */
2027
+ __('<a href="%s" target="_blank" rel="noopener noreferrer">Get more information.<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_PLUGIN_ABANDONED));
2028
  $added = $this->addIssue('wfPluginAbandoned', $severity, $key, $key, $shortMsg, $longMsg, $statusArray);
2029
  if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) {
2030
  $haveIssues = wfIssues::STATUS_PROBLEM;
2063
  }
2064
  $longMsg .= ' ' . sprintf(
2065
  /* translators: Support URL. */
2066
+ __('<a href="%s" target="_blank" rel="noopener noreferrer">Get more information.<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_PLUGIN_REMOVED));
2067
  $added = $this->addIssue('wfPluginRemoved', wfIssues::SEVERITY_CRITICAL, $key, $key, $shortMsg, $longMsg, $pluginData);
2068
  if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) {
2069
  $haveIssues = wfIssues::STATUS_PROBLEM;
2088
 
2089
  $key = 'wfPluginVulnerable' . ' ' . $plugin['pluginFile'] . ' ' . $plugin['Version'];
2090
  $shortMsg = "The Plugin \"" . $plugin['Name'] . "\" has an unpatched security vulnerability.";
2091
+ $longMsg = 'To protect your site from this vulnerability, the safest option is to deactivate and completely remove ' . esc_html($plugin['Name']) . ' until the developer releases a security fix. <a href="https://docs.wordfence.com/en/Understanding_scan_results#Plugin_has_an_unpatched_security_vulnerability" target="_blank" rel="noopener noreferrer">Get more information.<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>';
2092
  $added = $this->addIssue('wfPluginVulnerable', 1, $key, $key, $shortMsg, $longMsg, $plugin);
2093
  if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; }
2094
  else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; }
2251
  continue;
2252
  }
2253
 
2254
+ $longMsg .= ' - ' . sprintf(/* translators: Support URL. */ __('<a href="%s" target="_blank" rel="noopener noreferrer">Get more information.<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_OPTION_MALWARE_URL));
2255
 
2256
  $this->status(2, 'info', sprintf(/* translators: Scan result description. */ __("Adding issue: %s", 'wordfence'), $shortMsg));
2257
 
2293
  $shortMsg = __('PHP Update Needed for Country Blocking', 'wordfence');
2294
  $longMsg = sprintf(/* translators: Software version. */ __('The GeoIP database that is required for country blocking has been updated to a new format. This new format requires sites to run PHP 5.4 or newer, and this site is on PHP %s. To ensure country blocking continues functioning, please update PHP.', 'wordfence'), wfUtils::cleanPHPVersion());
2295
 
2296
+ $longMsg .= ' ' . sprintf(/* translators: Support URL. */ __('<a href="%s" target="_blank" rel="noopener noreferrer">Get more information.<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_GEOIP_UPDATE));
2297
 
2298
  $this->status(2, 'info', sprintf(/* translators: Scan result description. */ __("Adding issue: %s", 'wordfence'), $shortMsg));
2299
 
2972
  }
2973
 
2974
  class wfScanEngineTestCallbackFailedException extends Exception {
2975
+ }
lib/wfVersionCheckController.php CHANGED
@@ -11,7 +11,7 @@ class wfVersionCheckController {
11
  const OPENSSL_DEPRECATING = '1.0.1';
12
  const OPENSSL_MINIMUM = '1.0.1';
13
 
14
- const WORDPRESS_DEPRECATING = '3.9.0';
15
  const WORDPRESS_MINIMUM = '3.9.0';
16
 
17
  const OPENSSL_DEV = 0;
@@ -65,7 +65,7 @@ class wfVersionCheckController {
65
  __('<strong>WARNING: </strong> Your site is using a PHP version (%1$s) that will no longer be supported by Wordfence in an upcoming release and needs to be updated. We recommend using the newest version of PHP available but will currently support PHP versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'),
66
  phpversion(),
67
  self::PHP_DEPRECATING
68
- ), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_PHP) . '" target="_blank" rel="noopener noreferrer">' . esc_html__('Learn More', 'wordfence') . '</a>'
69
  );
70
  }
71
  else if ($php == self::VERSION_UNSUPPORTED) {
@@ -88,7 +88,7 @@ class wfVersionCheckController {
88
  __('<strong>WARNING: </strong> Your site is using a PHP version (%1$s) that is no longer supported by Wordfence and needs to be updated. We recommend using the newest version of PHP available but will currently support PHP versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'),
89
  phpversion(),
90
  self::PHP_DEPRECATING
91
- ), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_PHP) . '" target="_blank" rel="noopener noreferrer">' . esc_html__('Learn More', 'wordfence') . '</a>'
92
  );
93
  }
94
  else {
@@ -112,7 +112,7 @@ class wfVersionCheckController {
112
  $this->_adminNotice(
113
  'opensslVersionCheckDeprecationNotice_' . self::OPENSSL_DEPRECATING,
114
  'opensslVersionCheck',
115
- sprintf(__('<strong>WARNING: </strong> Your site is using an OpenSSL version (%s) that will no longer be supported by Wordfence in an upcoming release and needs to be updated. We recommend using the newest version of OpenSSL but will currently support OpenSSL versions as old as %s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), self::openssl_make_text_version(), self::OPENSSL_DEPRECATING) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_OPENSSL) . '" target="_blank" rel="noopener noreferrer">' . __('Learn More', 'wordfence') . '</a>'
116
  );
117
 
118
  return false;
@@ -127,7 +127,7 @@ class wfVersionCheckController {
127
  $this->_adminNotice(
128
  'opensslVersionCheckUnsupportedNotice_' . self::OPENSSL_MINIMUM,
129
  'opensslVersionCheck',
130
- sprintf(__('<strong>WARNING: </strong> Your site is using an OpenSSL version (%s) that is no longer supported by Wordfence and needs to be updated. We recommend using the newest version of OpenSSL but will currently support OpenSSL versions as old as %s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), self::openssl_make_text_version(), self::OPENSSL_DEPRECATING) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_OPENSSL) . '" target="_blank" rel="noopener noreferrer">' . __('Learn More', 'wordfence') . '</a>'
131
  );
132
 
133
  return false;
@@ -164,7 +164,7 @@ class wfVersionCheckController {
164
  __('<strong>WARNING: </strong> Your site is using a WordPress version (%1$s) that will no longer be supported by Wordfence in an upcoming release and needs to be updated. We recommend using the newest version of WordPress but will currently support WordPress versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'),
165
  $wp_version,
166
  self::WORDPRESS_DEPRECATING
167
- ), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_WORDPRESS) . '" target="_blank" rel="noopener noreferrer">' . esc_html__('Learn More', 'wordfence') . '</a>'
168
  );
169
  }
170
  else if ($wordpress == self::VERSION_UNSUPPORTED) {
@@ -183,7 +183,7 @@ class wfVersionCheckController {
183
  'wordpressVersionCheck',
184
  wp_kses(sprintf(
185
  /* translators: 1. WordPress version. 2. WordPress version. */
186
- __('<strong>WARNING: </strong> Your site is using a WordPress version (%1$s) that is no longer supported by Wordfence and needs to be updated. We recommend using the newest version of WordPress but will currently support WordPress versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), $wp_version, self::WORDPRESS_DEPRECATING), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_WORDPRESS) . '" target="_blank" rel="noopener noreferrer">' . esc_html__('Learn More', 'wordfence') . '</a>'
187
  );
188
  }
189
  else {
11
  const OPENSSL_DEPRECATING = '1.0.1';
12
  const OPENSSL_MINIMUM = '1.0.1';
13
 
14
+ const WORDPRESS_DEPRECATING = '4.4.0';
15
  const WORDPRESS_MINIMUM = '3.9.0';
16
 
17
  const OPENSSL_DEV = 0;
65
  __('<strong>WARNING: </strong> Your site is using a PHP version (%1$s) that will no longer be supported by Wordfence in an upcoming release and needs to be updated. We recommend using the newest version of PHP available but will currently support PHP versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'),
66
  phpversion(),
67
  self::PHP_DEPRECATING
68
+ ), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_PHP) . '" target="_blank" rel="noopener noreferrer">' . esc_html__('Learn More', 'wordfence') . '<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>'
69
  );
70
  }
71
  else if ($php == self::VERSION_UNSUPPORTED) {
88
  __('<strong>WARNING: </strong> Your site is using a PHP version (%1$s) that is no longer supported by Wordfence and needs to be updated. We recommend using the newest version of PHP available but will currently support PHP versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'),
89
  phpversion(),
90
  self::PHP_DEPRECATING
91
+ ), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_PHP) . '" target="_blank" rel="noopener noreferrer">' . esc_html__('Learn More', 'wordfence') . '<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>'
92
  );
93
  }
94
  else {
112
  $this->_adminNotice(
113
  'opensslVersionCheckDeprecationNotice_' . self::OPENSSL_DEPRECATING,
114
  'opensslVersionCheck',
115
+ sprintf(__('<strong>WARNING: </strong> Your site is using an OpenSSL version (%s) that will no longer be supported by Wordfence in an upcoming release and needs to be updated. We recommend using the newest version of OpenSSL but will currently support OpenSSL versions as old as %s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), self::openssl_make_text_version(), self::OPENSSL_DEPRECATING) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_OPENSSL) . '" target="_blank" rel="noopener noreferrer">' . __('Learn More', 'wordfence') . '<span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>'
116
  );
117
 
118
  return false;
127
  $this->_adminNotice(
128
  'opensslVersionCheckUnsupportedNotice_' . self::OPENSSL_MINIMUM,
129
  'opensslVersionCheck',
130
+ sprintf(__('<strong>WARNING: </strong> Your site is using an OpenSSL version (%s) that is no longer supported by Wordfence and needs to be updated. We recommend using the newest version of OpenSSL but will currently support OpenSSL versions as old as %s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), self::openssl_make_text_version(), self::OPENSSL_DEPRECATING) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_OPENSSL) . '" target="_blank" rel="noopener noreferrer">' . __('Learn More', 'wordfence') . '<span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a>'
131
  );
132
 
133
  return false;
164
  __('<strong>WARNING: </strong> Your site is using a WordPress version (%1$s) that will no longer be supported by Wordfence in an upcoming release and needs to be updated. We recommend using the newest version of WordPress but will currently support WordPress versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'),
165
  $wp_version,
166
  self::WORDPRESS_DEPRECATING
167
+ ), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_WORDPRESS) . '" target="_blank" rel="noopener noreferrer">' . esc_html__('Learn More', 'wordfence') . '<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>'
168
  );
169
  }
170
  else if ($wordpress == self::VERSION_UNSUPPORTED) {
183
  'wordpressVersionCheck',
184
  wp_kses(sprintf(
185
  /* translators: 1. WordPress version. 2. WordPress version. */
186
+ __('<strong>WARNING: </strong> Your site is using a WordPress version (%1$s) that is no longer supported by Wordfence and needs to be updated. We recommend using the newest version of WordPress but will currently support WordPress versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), $wp_version, self::WORDPRESS_DEPRECATING), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_WORDPRESS) . '" target="_blank" rel="noopener noreferrer">' . esc_html__('Learn More', 'wordfence') . '<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>'
187
  );
188
  }
189
  else {
lib/wordfenceClass.php CHANGED
@@ -1202,7 +1202,7 @@ SQL
1202
  add_action('login_init','wordfence::loginInitAction');
1203
  add_action('wp_login','wordfence::loginAction');
1204
  add_action('wp_logout','wordfence::logoutAction');
1205
- add_action('lostpassword_post', 'wordfence::lostPasswordPost', '1');
1206
 
1207
  $allowSeparatePrompt = ini_get('output_buffering') > 0;
1208
  if (wfConfig::get('loginSec_enableSeparateTwoFactor') && $allowSeparatePrompt) {
@@ -1211,7 +1211,7 @@ SQL
1211
 
1212
  if(wfUtils::hasLoginCookie()){
1213
  add_action('user_profile_update_errors', 'wordfence::validateProfileUpdate', 0, 3 );
1214
- add_action('profile_update', 'wordfence::profileUpdateAction', '99', 2);
1215
  }
1216
 
1217
  add_action('validate_password_reset', 'wordfence::validatePassword', 10, 2);
@@ -1368,7 +1368,7 @@ SQL
1368
  }
1369
  public static function _pluginPageActionLinks($links) {
1370
  if (!wfConfig::get('isPaid')) {
1371
- $links = array_merge(array('aWordfencePluginCallout' => '<a href="https://www.wordfence.com/zz12/wordfence-signup/" target="_blank" rel="noopener noreferrer"><strong style="color: #11967A; display: inline;">' . esc_html__('Upgrade To Premium', 'wordfence') . '</strong></a>'), $links);
1372
  }
1373
  return $links;
1374
  }
@@ -1703,7 +1703,7 @@ SQL
1703
  return true;
1704
  }
1705
  }
1706
- public static function lostPasswordPost() {
1707
  $IP = wfUtils::getIP();
1708
  if ($request = self::getLog()->getCurrentRequest()) {
1709
  $request->action = 'lostPassword';
@@ -1712,21 +1712,28 @@ SQL
1712
  if (wfBlock::isWhitelisted($IP)) {
1713
  return;
1714
  }
1715
-
1716
  $lockout = wfBlock::lockoutForIP(wfUtils::getIP());
1717
  if ($lockout !== false) {
1718
  $lockout->recordBlock();
1719
  $customText = wpautop(wp_strip_all_tags(wfConfig::get('blockCustomText', '')));
1720
  require(dirname(__FILE__) . '/wfLockedOut.php');
1721
  }
1722
-
1723
- if (empty($_POST['user_login'])) { return; }
1724
- $user_login = $_POST['user_login'];
1725
- if (is_array($user_login)) { $user_login = wfUtils::array_first($user_login); }
1726
- $user_login = trim($user_login);
1727
- $user = get_user_by('login', $user_login);
1728
- if (!$user) {
1729
- $user = get_user_by('email', $user_login);
 
 
 
 
 
 
 
1730
  }
1731
 
1732
  if($user){
@@ -1748,7 +1755,7 @@ SQL
1748
  if($forgotAttempts >= wfConfig::get('loginSec_maxForgotPasswd')){
1749
  self::lockOutIP($IP, sprintf(
1750
  /* translators: 1. Password reset limit (number). 2. WordPress username. */
1751
- __('Exceeded the maximum number of tries to recover their password which is set at: %1$s. The last username or email they entered before getting locked out was: \'%2$s\''),
1752
  wfConfig::get('loginSec_maxForgotPasswd'),
1753
  $_POST['user_login']
1754
  ));
@@ -2571,14 +2578,14 @@ SQL
2571
  if (!current_user_can('edit_others_posts')) {
2572
  $urlBase = wfWP_REST_Users_Controller::wfGetURLBase();
2573
  if (preg_match('~' . preg_quote($urlBase, '~') . '/*$~i', $route)) {
2574
- $error = new WP_Error('rest_user_cannot_view', __('Sorry, you are not allowed to list users.'), array('status' => rest_authorization_required_code()));
2575
  $response = rest_ensure_response($error);
2576
  if (!defined('WORDFENCE_REST_API_SUPPRESSED')) { define('WORDFENCE_REST_API_SUPPRESSED', true); }
2577
  }
2578
  else if (preg_match('~' . preg_quote($urlBase, '~') . '/+(\d+)/*$~i', $route, $matches)) {
2579
  $id = (int) $matches[1];
2580
  if (get_current_user_id() !== $id) {
2581
- $error = new WP_Error('rest_user_invalid_id', __('Invalid user ID.'), array('status' => 404));
2582
  $response = rest_ensure_response($error);
2583
  if (!defined('WORDFENCE_REST_API_SUPPRESSED')) { define('WORDFENCE_REST_API_SUPPRESSED', true); }
2584
  }
@@ -2722,14 +2729,14 @@ SQL
2722
  $twoFactorNonce = preg_replace('/[^a-f0-9]/i', '', $_POST['wordfence_twoFactorNonce']);
2723
  if (!self::verifyTwoFactorIntermediateValues($userID, $twoFactorNonce)) {
2724
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2725
- self::$authError = new WP_Error('twofactor_required', __('<strong>VERIFICATION FAILED</strong>: Two-factor authentication verification failed. Please try again.'));
2726
  return self::processBruteForceAttempt(self::$authError, $username, $passwd);
2727
  }
2728
  }
2729
  else { //Code path for old method, invalid password the second time
2730
  self::$authError = $authUser;
2731
  if (is_wp_error(self::$authError) && (self::$authError->get_error_code() == 'invalid_username' || $authUser->get_error_code() == 'invalid_email' || self::$authError->get_error_code() == 'incorrect_password' || $authUser->get_error_code() == 'authentication_failed') && wfConfig::get('loginSec_maskLoginErrors')) {
2732
- self::$authError = new WP_Error('incorrect_password', sprintf(/* translators: 1. WordPress username. 2. Password reset URL. */ __('<strong>ERROR</strong>: The username or password you entered is incorrect. <a href="%2$s" title="Password Lost and Found">Lost your password</a>?'), $username, wp_lostpassword_url()));
2733
  }
2734
 
2735
  return self::processBruteForceAttempt(self::$authError, $username, $passwd);
@@ -2739,7 +2746,7 @@ SQL
2739
  wfAdminNoticeQueue::removeAdminNotice(false, 'previousIPBreachPassword', array($userID));
2740
  wfAdminNoticeQueue::addAdminNotice(wfAdminNotice::SEVERITY_CRITICAL, sprintf(
2741
  /* translators: 1. WordPress admin panel URL. 2. Support URL. */
2742
- __('<strong>WARNING: </strong>The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href="%1$s">change your password</a>. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn More</a>', 'wordfence'),
2743
  self_admin_url('profile.php'),
2744
  wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD)
2745
  ), '2faBreachPassword', array($authUser->ID));
@@ -2763,18 +2770,18 @@ SQL
2763
  if (is_object($authUser) && get_class($authUser) == 'WP_User' && $authUser->ID == $userID) { //Using the old method of appending the code to the password
2764
  if ($mode == 'authenticator') {
2765
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2766
- self::$authError = new WP_Error('twofactor_invalid', __('<strong>INVALID CODE</strong>: Please sign in again and add a space, the letters <code>wf</code>, and the code from your authenticator app to the end of your password (e.g., <code>wf123456</code>).'));
2767
  }
2768
  else {
2769
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2770
- self::$authError = new WP_Error('twofactor_invalid', __('<strong>INVALID CODE</strong>: Please sign in again and add a space, the letters <code>wf</code>, and the code sent to your phone to the end of your password (e.g., <code>wf123456</code>).'));
2771
  }
2772
  }
2773
  else {
2774
  $loginNonce = wfWAFUtils::random_bytes(20);
2775
  if ($loginNonce === false) { //Should never happen but is technically possible
2776
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2777
- self::$authError = new WP_Error('twofactor_required', __('<strong>AUTHENTICATION FAILURE</strong>: A temporary failure was encountered while trying to log in. Please try again.'));
2778
  return self::$authError;
2779
  }
2780
 
@@ -2784,11 +2791,11 @@ SQL
2784
 
2785
  if ($mode == 'authenticator') {
2786
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2787
- self::$authError = new WP_Error('twofactor_invalid', __('<strong>INVALID CODE</strong>: You need to enter the code generated by your authenticator app. The code should be a six digit number (e.g., 123456).') . '<!-- wftwofactornonce:' . $userDat->ID . '/' . $loginNonce . ' -->');
2788
  }
2789
  else {
2790
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2791
- self::$authError = new WP_Error('twofactor_invalid', __('<strong>INVALID CODE</strong>: You need to enter the code generated sent to your phone. The code should be a six digit number (e.g., 123456).') . '<!-- wftwofactornonce:' . $userDat->ID . '/' . $loginNonce . ' -->');
2792
  }
2793
  }
2794
  return self::processBruteForceAttempt(self::$authError, $username, $passwd);
@@ -2825,7 +2832,7 @@ SQL
2825
  $loginNonce = wfWAFUtils::random_bytes(20);
2826
  if ($loginNonce === false) { //Should never happen but is technically possible
2827
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2828
- self::$authError = new WP_Error('twofactor_required', __('<strong>AUTHENTICATION FAILURE</strong>: A temporary failure was encountered while trying to log in. Please try again.'));
2829
  return self::$authError;
2830
  }
2831
 
@@ -2834,7 +2841,7 @@ SQL
2834
  update_user_meta($userDat->ID, '_wf_twoFactorNonceTime', time());
2835
 
2836
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2837
- self::$authError = new WP_Error('twofactor_required', __('<strong>CODE EXPIRED. CHECK YOUR PHONE:</strong> The code you entered has expired. Codes are only valid for 30 minutes for security reasons. We have sent you a new code. Please sign in using your username, password, and the new code we sent you.') . '<!-- wftwofactornonce:' . $userDat->ID . '/' . $loginNonce . ' -->');
2838
  return self::$authError;
2839
  }
2840
 
@@ -2848,7 +2855,7 @@ SQL
2848
  $loginNonce = wfWAFUtils::random_bytes(20);
2849
  if ($loginNonce === false) { //Should never happen but is technically possible
2850
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2851
- self::$authError = new WP_Error('twofactor_required', __('<strong>AUTHENTICATION FAILURE</strong>: A temporary failure was encountered while trying to log in. Please try again.'));
2852
  return self::$authError;
2853
  }
2854
 
@@ -2857,7 +2864,7 @@ SQL
2857
  update_user_meta($userDat->ID, '_wf_twoFactorNonceTime', time());
2858
 
2859
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2860
- self::$authError = new WP_Error('twofactor_invalid', __('<strong>INVALID CODE</strong>: You need to enter your password and the code we sent to your phone. The code should start with \'wf\' and should be four characters (e.g., wfAB12).') . '<!-- wftwofactornonce:' . $userDat->ID . '/' . $loginNonce . ' -->');
2861
  return self::processBruteForceAttempt(self::$authError, $username, $passwd);
2862
  }
2863
  }
@@ -2875,7 +2882,7 @@ SQL
2875
  wfAdminNoticeQueue::removeAdminNotice(false, 'previousIPBreachPassword', array($authUser->ID));
2876
  wfAdminNoticeQueue::addAdminNotice(wfAdminNotice::SEVERITY_CRITICAL, sprintf(
2877
  /* translators: 1. WordPress admin panel URL. 2. Support URL. */
2878
- __('<strong>WARNING: </strong>The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href="%1$s">change your password</a>. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn More</a>', 'wordfence'), self_admin_url('profile.php'), wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD)), '2faBreachPassword', array($authUser->ID));
2879
  }
2880
 
2881
  $loginNonce = wfWAFUtils::random_bytes(20);
@@ -2908,12 +2915,12 @@ SQL
2908
  $allowSeparatePrompt = ini_get('output_buffering') > 0;
2909
  if (wfConfig::get('loginSec_enableSeparateTwoFactor') && $allowSeparatePrompt) {
2910
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2911
- self::$authError = new WP_Error('twofactor_required', __('<strong>CODE REQUIRED</strong>: Please check your authenticator app for the current code. Enter it below to sign in.') . '<!-- wftwofactornonce:' . $userDat->ID . '/' . $loginNonce . ' -->');
2912
  return self::$authError;
2913
  }
2914
  else {
2915
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2916
- self::$authError = new WP_Error('twofactor_required', __('<strong>CODE REQUIRED</strong>: Please check your authenticator app for the current code. Please sign in again and add a space, the letters <code>wf</code>, and the code to the end of your password (e.g., <code>wf123456</code>).'));
2917
  return self::$authError;
2918
  }
2919
  }
@@ -2947,12 +2954,12 @@ SQL
2947
  $allowSeparatePrompt = ini_get('output_buffering') > 0;
2948
  if (wfConfig::get('loginSec_enableSeparateTwoFactor') && $allowSeparatePrompt) {
2949
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2950
- self::$authError = new WP_Error('twofactor_required', __('<strong>CHECK YOUR PHONE</strong>: A code has been sent to your phone and will arrive within 30 seconds. Enter it below to sign in.') . '<!-- wftwofactornonce:' . $userDat->ID . '/' . $loginNonce . ' -->');
2951
  return self::$authError;
2952
  }
2953
  else {
2954
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2955
- self::$authError = new WP_Error('twofactor_required', __('<strong>CHECK YOUR PHONE</strong>: A code has been sent to your phone and will arrive within 30 seconds. Please sign in again and add a space, the letters <code>wf</code>, and the code to the end of your password (e.g., <code>wf123456</code>).'));
2956
  return self::$authError;
2957
  }
2958
  }
@@ -3004,12 +3011,12 @@ SQL
3004
  $allowSeparatePrompt = ini_get('output_buffering') > 0;
3005
  if (wfConfig::get('loginSec_enableSeparateTwoFactor') && $allowSeparatePrompt) {
3006
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
3007
- self::$authError = new WP_Error('twofactor_required', __('<strong>CHECK YOUR PHONE</strong>: A code has been sent to your phone and will arrive within 30 seconds. Enter it below to sign in.') . '<!-- wftwofactornonce:' . $userDat->ID . '/' . $loginNonce . ' -->');
3008
  return self::$authError;
3009
  }
3010
  else {
3011
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
3012
- self::$authError = new WP_Error('twofactor_required', __('<strong>CHECK YOUR PHONE</strong>: A code has been sent to your phone and will arrive within 30 seconds. Please sign in again and add a space and the code to the end of your password (e.g., <code>wfABCD</code>).'));
3013
  return self::$authError;
3014
  }
3015
  }
@@ -3030,7 +3037,7 @@ SQL
3030
  else if ($usingBreachedPassword) {
3031
  if (wfCredentialsController::hasPreviousLoginFromIP($authUser, wfUtils::getIP())) {
3032
  wfAdminNoticeQueue::removeAdminNotice(false, '2faBreachPassword', array($authUser->ID));
3033
- wfAdminNoticeQueue::addAdminNotice(wfAdminNotice::SEVERITY_CRITICAL, sprintf(__('<strong>WARNING: </strong>Your login has been allowed because you have previously logged in from the same IP, but you will be blocked if your IP changes. The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href="%1$s">change your password</a>. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn More</a>', 'wordfence'), self_admin_url('profile.php'), wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD)), 'previousIPBreachPassword', array($authUser->ID));
3034
  }
3035
  else {
3036
  $username = $authUser->user_login;
@@ -3047,7 +3054,7 @@ SQL
3047
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
3048
  self::$authError = new WP_Error('breached_password', sprintf(
3049
  /* translators: 1. Reset password URL. 2. Support URL. */
3050
- __('<strong>INSECURE PASSWORD:</strong> Your login attempt has been blocked because the password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href="%1$s">reset your password</a> to reactivate your account. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn More</a>'), wp_lostpassword_url(), wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD)));
3051
  return self::$authError;
3052
  }
3053
  }
@@ -3055,8 +3062,8 @@ SQL
3055
  if ($requireAdminTwoFactor && wfUtils::isAdmin($authUser)) {
3056
  $username = $authUser->user_login;
3057
  self::getLog()->logLogin('loginFailValidUsername', 1, $username);
3058
- wordfence::alert(__("Admin Login Blocked"), sprintf(/* translators: WordPress username. */__("A user with username \"%s\" who has administrator access tried to sign in to your WordPress site. Access was denied because all administrator accounts are required to have Cellphone Sign-in enabled but this account does not.", 'wordfence'), $username), wfUtils::getIP());
3059
- self::$authError = new WP_Error('twofactor_disabled_required', __('<strong>Cellphone Sign-in Required</strong>: Cellphone Sign-in is required for all administrator accounts. Please contact the site administrator to enable it for your account.'));
3060
  return self::$authError;
3061
  }
3062
 
@@ -3066,7 +3073,7 @@ SQL
3066
  else if ($usingBreachedPassword) {
3067
  if (wfCredentialsController::hasPreviousLoginFromIP($authUser, wfUtils::getIP())) {
3068
  wfAdminNoticeQueue::removeAdminNotice(false, '2faBreachPassword', array($authUser->ID));
3069
- wfAdminNoticeQueue::addAdminNotice(wfAdminNotice::SEVERITY_CRITICAL, sprintf(/* translators: 1. Reset password URL. 2. Support URL. */ __('<strong>WARNING: </strong>Your login has been allowed because you have previously logged in from the same IP, but you will be blocked if your IP changes. The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href="%1$s">change your password</a>. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn More</a>', 'wordfence'), self_admin_url('profile.php'), wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD)), 'previousIPBreachPassword', array($authUser->ID));
3070
  }
3071
  else {
3072
  $username = $authUser->user_login;
@@ -3083,7 +3090,7 @@ SQL
3083
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
3084
  self::$authError = new WP_Error('breached_password', sprintf(
3085
  /* translators: 1. Reset password URL. 2. Support URL. */
3086
- __('<strong>INSECURE PASSWORD:</strong> Your login attempt has been blocked because the password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href="%1$s">reset your password</a> to reactivate your account. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn More</a>'), wp_lostpassword_url(), wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD)));
3087
  return self::$authError;
3088
  }
3089
  }
@@ -3179,7 +3186,7 @@ SQL
3179
  if(is_wp_error($authUser) && ($authUser->get_error_code() == 'invalid_username' || $authUser->get_error_code() == 'invalid_email' || $authUser->get_error_code() == 'incorrect_password') && wfConfig::get('loginSec_maskLoginErrors')){
3180
  return new WP_Error( 'incorrect_password', sprintf(
3181
  /* translators: 1. WordPress username. 2. Reset password URL. */
3182
- __( '<strong>ERROR</strong>: The username or password you entered is incorrect. <a href="%2$s" title="Password Lost and Found">Lost your password</a>?' ), $username, wp_lostpassword_url() ) );
3183
  }
3184
 
3185
  return $authUser;
@@ -3537,7 +3544,7 @@ SQL
3537
  public static function ajax_sendDiagnostic_callback(){
3538
  add_filter('gettext', 'wordfence::_diagnosticsTranslationDisabler', 0, 3);
3539
  $inEmail = true;
3540
- $body = "This email is the diagnostic from " . site_url() . ".\nThe IP address that requested this was: " . wfUtils::getIP() . "\nTicket Number/Forum Username: " . $_POST['ticket'];
3541
  $sendingDiagnosticEmail = true;
3542
  ob_start();
3543
  require(dirname(__FILE__) . '/menu_tools_diagnostic.php');
@@ -3594,7 +3601,7 @@ SQL
3594
  }
3595
  public static function ajax_addTwoFactor_callback(){
3596
  if(! wfConfig::get('isPaid')){
3597
- return array('errorMsg' => __('Cellphone Sign-in is only available to paid members. <a href="https://www.wordfence.com/gnl1twoFac3/wordfence-signup/" target="_blank" rel="noopener noreferrer">Click here to upgrade now.</a>', 'wordfence'));
3598
  }
3599
  $username = sanitize_text_field($_POST['username']);
3600
  $phone = sanitize_text_field($_POST['phone']);
@@ -4091,6 +4098,12 @@ SQL
4091
  }
4092
  return array('ok' => 1);
4093
  }
 
 
 
 
 
 
4094
  public static function ajax_updateConfig_callback(){
4095
  $key = $_POST['key'];
4096
  $val = $_POST['val'];
@@ -4916,7 +4929,7 @@ HTACCESS;
4916
  }
4917
 
4918
  $scanFailedHTML = wfView::create('scanner/scan-failed', array(
4919
- 'messageHTML' => sprintf(/* translators: Localized date. */ __('The current scan looks like it has failed. Its last status update was <span id="wf-scan-failed-time-ago">%s</span> ago. You may continue to wait in case it resumes or stop and restart the scan. Some sites may need adjustments to run scans reliably.', 'wordfence'), $scanFailedTiming) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_FAILS) . '" target="_blank" rel="noopener noreferrer">' . __('Click here for steps you can try.', 'wordfence') . '</a>',
4920
  'buttonTitle' => __('Cancel Scan', 'wordfence'),
4921
  ))->render();
4922
 
@@ -4924,13 +4937,13 @@ HTACCESS;
4924
  case wfIssues::SCAN_FAILED_FORK_FAILED:
4925
  case wfIssues::SCAN_FAILED_GENERAL:
4926
  $scanFailedHTML = wfView::create('scanner/scan-failed', array(
4927
- 'messageHTML' => __('The previous scan has failed. Some sites may need adjustments to run scans reliably.', 'wordfence') . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_FAILS) . '" target="_blank" rel="noopener noreferrer">' . __('Click here for steps you can try.', 'wordfence') . '</a>',
4928
  'buttonTitle' => __('Close', 'wordfence'),
4929
  ))->render();
4930
  break;
4931
  case wfIssues::SCAN_FAILED_DURATION_REACHED:
4932
  $scanFailedHTML = wfView::create('scanner/scan-failed', array(
4933
- 'messageHTML' => sprintf(/* translators: Time limit (number). */ __('The previous scan has terminated because the time limit of %s was reached. This limit can be customized on the options page.', 'wordfence'), wfUtils::makeDuration($timeLimit)) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_OPTION_OVERALL_TIME_LIMIT) . '" target="_blank" rel="noopener noreferrer" class="wf-inline-help"><i class="wf-fa wf-fa-question-circle-o" aria-hidden="true"></i></a>',
4934
  'buttonTitle' => __('Close', 'wordfence'),
4935
  ))->render();
4936
  break;
@@ -4943,7 +4956,7 @@ HTACCESS;
4943
  case wfIssues::SCAN_FAILED_START_TIMEOUT:
4944
  case wfIssues::SCAN_FAILED_CALLBACK_TEST_FAILED:
4945
  $scanFailedHTML = wfView::create('scanner/scan-failed', array(
4946
- 'messageHTML' => __('The scan has failed to start. This is often because the site either cannot make outbound requests or is blocked from connecting to itself.', 'wordfence') . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_FAILED_START) . '" target="_blank" rel="noopener noreferrer">' . __('Click here for steps you can try.', 'wordfence') . '</a>',
4947
  'buttonTitle' => __('Close', 'wordfence'),
4948
  ))->render();
4949
  break;
@@ -4955,7 +4968,7 @@ HTACCESS;
4955
  break;
4956
  case wfIssues::SCAN_FAILED_API_CALL_FAILED:
4957
  $scanFailedHTML = wfView::create('scanner/scan-failed', array(
4958
- 'messageHTML' => __('The scan has failed because we were unable to contact the Wordfence servers. Some sites may need adjustments to run scans reliably.', 'wordfence') . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_FAILS) . '" target="_blank" rel="noopener noreferrer">' . __('Click here for steps you can try.', 'wordfence') . '</a>',
4959
  'rawErrorHTML' => esc_html(wfConfig::get('lastScanCompleted', '')),
4960
  'buttonTitle' => __('Close', 'wordfence'),
4961
  ))->render();
@@ -4963,7 +4976,7 @@ HTACCESS;
4963
  case wfIssues::SCAN_FAILED_API_INVALID_RESPONSE:
4964
  case wfIssues::SCAN_FAILED_API_ERROR_RESPONSE:
4965
  $scanFailedHTML = wfView::create('scanner/scan-failed', array(
4966
- 'messageHTML' => __('The scan has failed because we received an unexpected response from the Wordfence servers. This may be a temporary error, though some sites may need adjustments to run scans reliably.', 'wordfence') . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_FAILS) . '" target="_blank" rel="noopener noreferrer">' . __('Click here for steps you can try.', 'wordfence') . '</a>',
4967
  'rawErrorHTML' => esc_html(wfConfig::get('lastScanCompleted'), ''),
4968
  'buttonTitle' => __('Close', 'wordfence'),
4969
  ))->render();
@@ -5921,6 +5934,7 @@ HTML;
5921
  'switchTo2FANew', 'switchTo2FAOld',
5922
  'wfcentral_step1', 'wfcentral_step2', 'wfcentral_step3', 'wfcentral_step4', 'wfcentral_step5', 'wfcentral_step6', 'wfcentral_disconnect',
5923
  'exportDiagnostics',
 
5924
  ) as $func){
5925
  add_action('wp_ajax_wordfence_' . $func, 'wordfence::ajaxReceiver');
5926
  }
@@ -6187,7 +6201,7 @@ HTML;
6187
  'We encountered a problem' => __('We encountered a problem', 'wordfence'),
6188
  'Wordfence Firewall blocked a background request to WordPress for the URL %s. If this occurred as a result of an intentional action, you may consider allowlisting the request to allow it in the future.' => /* translators: URL. */ __('Wordfence Firewall blocked a background request to WordPress for the URL %s. If this occurred as a result of an intentional action, you may consider allowlisting the request to allow it in the future.', 'wordfence'),
6189
  'Wordfence is working...' => __('Wordfence is working...', 'wordfence'),
6190
- 'You are using Nginx as your web server. You\'ll need to disable autoindexing in your nginx.conf. See the <a target=\'_blank\' rel=\'noopener noreferrer\' href=\'http://nginx.org/en/docs/http/ngx_http_autoindex_module.html\'>Nginx docs for more info</a> on how to do this.' => __('You are using Nginx as your web server. You\'ll need to disable autoindexing in your nginx.conf. See the <a target=\'_blank\' rel=\'noopener noreferrer\' href=\'http://nginx.org/en/docs/http/ngx_http_autoindex_module.html\'>Nginx docs for more info</a> on how to do this.', 'wordfence'),
6191
  'You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually delete or hide those files.' => __('You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually delete or hide those files.', 'wordfence'),
6192
  'You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually modify your php.ini to disable <em>display_error</em>' => __('You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually modify your php.ini to disable <em>display_error</em>', 'wordfence'),
6193
  'You forgot to include a reason you\'re blocking this IP range. We ask you to include this for your own record keeping.' => __('You forgot to include a reason you\'re blocking this IP range. We ask you to include this for your own record keeping.', 'wordfence'),
@@ -6240,7 +6254,7 @@ HTML;
6240
  echo '<div id="wafConfigInaccessibleNotice" class="fade error"><p><strong>' . __('The Wordfence Web Application Firewall cannot run.', 'wordfence') . '</strong> ' .
6241
  sprintf(
6242
  /* translators: 1. WordPress admin panel URL. 2. Support URL. */
6243
- __('The configuration files are corrupt or inaccessible by the web server, which is preventing the WAF from functioning. Please verify the web server has permission to access the configuration files. You may also try to rebuild the configuration file by <a href="%1$s">clicking here</a>. It will automatically resume normal operation when it is fixed. <a class="wfhelp" target="_blank" rel="noopener noreferrer" href="%2$s"></a>', 'wordfence'),
6244
  $wafMenuURL,
6245
  wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_WAF_INACCESSIBLE_CONFIG)
6246
  ) . '</p></div>';
@@ -6262,7 +6276,7 @@ HTML;
6262
  echo '<div id="wafConfigNeedsUpdateNotice" class="fade error"><p><strong>' . __('The Wordfence Web Application Firewall needs a configuration update.', 'wordfence') . '</strong> ' .
6263
  sprintf(
6264
  /* translators: 1. WordPress admin panel URL. 2. Support URL. */
6265
- __('It is currently configured to use an older version of PHP and may become deactivated if PHP is updated. You may perform the configuration update automatically by <a href="%1$s">clicking here</a>. <a class="wfhelp" target="_blank" rel="noopener noreferrer" href="%2$s"></a>', 'wordfence'),
6266
  $wafMenuURL,
6267
  wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_WAF_MOD_PHP_FIX)
6268
  ) . '</p></div>';
@@ -6281,13 +6295,13 @@ HTML;
6281
  echo '<div id="wafConfigNeedsFixedNotice" class="fade error"><p><strong>' . __('The Wordfence Web Application Firewall needs a configuration update.', 'wordfence') . '</strong> ' .
6282
  sprintf(
6283
  /* translators: 1. WordPress admin panel URL. 2. Support URL. */
6284
- __('It is not currently in extended protection mode but was configured to use an older version of PHP and may have become deactivated when PHP was updated. You may perform the configuration update automatically by <a href="%1$s">clicking here</a> or use the "Optimize the Wordfence Firewall" button on the Firewall Options page. <a class="wfhelp" target="_blank" rel="noopener noreferrer" href="%2$s"></a>', 'wordfence'),
6285
  $wafMenuURL,
6286
  wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_WAF_MOD_PHP_FIX)
6287
  ) . '</p></div>';
6288
  }
6289
  public static function wafReadOnlyNotice() {
6290
- echo '<div id="wordfenceWAFReadOnlyNotice" class="fade error"><p><strong>' . __('The Wordfence Web Application Firewall is in read-only mode.', 'wordfence') . '</strong> ' . sprintf('PHP is currently running as a command line user and to avoid file permission issues, the WAF is running in read-only mode. It will automatically resume normal operation when run normally by a web server. <a class="wfhelp" target="_blank" rel="noopener noreferrer" href="%s"></a>', wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_WAF_READ_ONLY_WARNING)) . '</p></div>';
6291
  }
6292
  public static function misconfiguredHowGetIPsNotice() {
6293
  $url = network_admin_url('admin.php?page=Wordfence&subpage=global_options');
@@ -6323,7 +6337,7 @@ HTML;
6323
  }
6324
  echo '<div id="wordfenceMisconfiguredHowGetIPsNotice" class="fade error"><p><strong>' .
6325
  __('Your \'How does Wordfence get IPs\' setting is misconfigured.', 'wordfence')
6326
- . '</strong> ' . $existingMsg . ' ' . $recommendationMsg . ' <a href="#" onclick="wordfenceExt.misconfiguredHowGetIPsChoice(\'yes\'); return false;">' .
6327
  __('Click here to use the recommended setting', 'wordfence')
6328
  . '</a> ' .
6329
  __('or', 'wordfence')
@@ -6332,19 +6346,47 @@ HTML;
6332
  . '</a> ' .
6333
  __('to manually update it.', 'wordfence')
6334
  . '</p><p>
6335
- <a class="wf-btn wf-btn-default wf-btn-sm wf-dismiss-link" href="#" onclick="wordfenceExt.misconfiguredHowGetIPsChoice(\'no\'); return false;">' .
6336
  __('Dismiss', 'wordfence')
6337
- . '</a> <a class="wfhelp" target="_blank" rel="noopener noreferrer" href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_MISCONFIGURED_HOW_GET_IPS) . '"></a></p></div>';
6338
  }
6339
  public static function autoUpdateNotice(){
6340
  echo '<div id="wordfenceAutoUpdateChoice" class="fade error"><p><strong>' .
6341
  __('Do you want Wordfence to stay up-to-date automatically?', 'wordfence')
6342
- . '</strong>&nbsp;&nbsp;&nbsp;<a href="#" onclick="wordfenceExt.autoUpdateChoice(\'yes\'); return false;">'.
6343
  __('Yes, enable auto-update.', 'wordfence')
6344
- . '</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="#" onclick="wordfenceExt.autoUpdateChoice(\'no\'); return false;">' .
6345
  __('No thanks.', 'wordfence')
6346
  . '</a></p></div>';
6347
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6348
  public static function admin_menus(){
6349
  if(! wfUtils::isAdmin()){ return; }
6350
  $warningAdded = false;
@@ -6536,13 +6578,17 @@ HTML;
6536
  exit;
6537
  }
6538
 
6539
- if (version_compare(PHP_VERSION, '8.0', '>=') && !get_user_option('wordfence_php8_nag')) {
6540
- wfAdminNoticeQueue::addAdminNotice(wfAdminNotice::SEVERITY_INFO, wp_kses(__(<<<HTML
6541
- 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>
6542
- HTML
6543
- , 'wordfence'), 'post')
6544
- , 'php8', array(get_current_user_id()));
6545
- update_user_option(get_current_user_id(), 'wordfence_php8_nag', 1);
 
 
 
 
6546
  }
6547
 
6548
  $notificationCount = count(wfNotification::notifications());
@@ -6714,7 +6760,7 @@ JQUERY;
6714
  wp_enqueue_style('wordfence-jquery-ui-timepicker-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui-timepicker-addon.css'), array(), WORDFENCE_VERSION);
6715
 
6716
  wp_enqueue_script('wordfence-timepicker-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/jquery-ui-timepicker-addon.js'), array('jquery', 'jquery-ui-datepicker', 'jquery-ui-slider'), WORDFENCE_VERSION);
6717
- wp_enqueue_script('wordfence-knockout-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/knockout-3.3.0.js'), array(), WORDFENCE_VERSION);
6718
  wp_enqueue_script('wordfence-live-traffic-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/admin.liveTraffic.js'), array('jquery', 'jquery-ui-tooltip'), WORDFENCE_VERSION);
6719
 
6720
  ob_start();
@@ -7214,7 +7260,7 @@ SQL
7214
  */
7215
  public static function fixGDLimitLoginsErrors($content) {
7216
  if (self::$authError) {
7217
- $content = str_replace(__('<strong>ERROR</strong>: Incorrect username or password.', 'limit-login-attempts') . "<br />\n", '', $content);
7218
  $content .= '<br />' . self::$authError->get_error_message();
7219
  }
7220
  return $content;
@@ -7919,7 +7965,7 @@ SQL
7919
  $html = wfView::create('waf/waf-modal-wrapper', array(
7920
  'title' => __('Filesystem Credentials Required', 'wordfence'),
7921
  'html' => $credentialsContent,
7922
- 'helpHTML' => sprintf(/* translators: Support URL. */ __('If you cannot complete the setup process, <a target="_blank" rel="noopener noreferrer" href="%s">click here for help</a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_INSTALL_MANUALLY)),
7923
  'footerHTML' => esc_html__('Once you have entered credentials, click Continue to complete the setup.', 'wordfence'),
7924
  ))->render();
7925
  return array('needsCredentials' => 1, 'html' => $html);
@@ -7943,7 +7989,7 @@ SQL
7943
  $html = wfView::create('waf/waf-modal-wrapper', array(
7944
  'title' => __('Filesystem Permission Error', 'wordfence'),
7945
  'html' => $credentialsError,
7946
- 'helpHTML' => sprintf(/* translators: Support URL. */ __('If you cannot complete the setup process, <a target="_blank" rel="noopener noreferrer" href="%s">click here for help</a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_INSTALL_MANUALLY)),
7947
  'footerButtonTitle' => __('Cancel', 'wordfence'),
7948
  ))->render();
7949
  return array('credentialsFailed' => 1, 'html' => $html);
@@ -7987,7 +8033,7 @@ SQL
7987
  $html = wfView::create('waf/waf-modal-wrapper', array(
7988
  'title' => __('Installation Failed', 'wordfence'),
7989
  'html' => $installError,
7990
- 'helpHTML' => sprintf(/* translators: Support URL. */ __('If you cannot complete the setup process, <a target="_blank" rel="noopener noreferrer" href="%s">click here for help</a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_INSTALL_MANUALLY)),
7991
  'footerButtonTitle' => __('Cancel', 'wordfence'),
7992
  ))->render();
7993
  return array('installationFailed' => 1, 'html' => $html);
@@ -8026,7 +8072,7 @@ SQL
8026
  $html = wfView::create('waf/waf-modal-wrapper', array(
8027
  'title' => __('Filesystem Credentials Required', 'wordfence'),
8028
  'html' => $credentialsContent,
8029
- 'helpHTML' => sprintf(/* translators: Support URL. */ __('If you cannot complete the uninstall process, <a target="_blank" rel="noopener noreferrer" href="%s">click here for help</a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_REMOVE_MANUALLY)),
8030
  'footerHTML' => esc_html__('Once you have entered credentials, click Continue to complete uninstallation.', 'wordfence'),
8031
  ))->render();
8032
  return array('needsCredentials' => 1, 'html' => $html);
@@ -8051,7 +8097,7 @@ SQL
8051
  $html = wfView::create('waf/waf-modal-wrapper', array(
8052
  'title' => __('Filesystem Permission Error', 'wordfence'),
8053
  'html' => $credentialsError,
8054
- 'helpHTML' => sprintf(/* translators: Support URL. */ __('If you cannot complete the uninstall process, <a target="_blank" rel="noopener noreferrer" href="%s">click here for help</a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_REMOVE_MANUALLY)),
8055
  'footerButtonTitle' => __('Cancel', 'wordfence'),
8056
  ))->render();
8057
  return array('credentialsFailed' => 1, 'html' => $html);
@@ -8082,7 +8128,7 @@ SQL
8082
  $html = wfView::create('waf/waf-modal-wrapper', array(
8083
  'title' => __('Waiting for Changes', 'wordfence'),
8084
  'html' => $waitingResponse,
8085
- 'helpHTML' => sprintf(/* translators: Support URL. */ __('If you cannot complete the uninstall process, <a target="_blank" rel="noopener noreferrer" href="%s">click here for help</a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_REMOVE_MANUALLY)),
8086
  'footerButtonTitle' => __('Close', 'wordfence'),
8087
  'noX' => true,
8088
  ))->render();
@@ -8106,12 +8152,12 @@ SQL
8106
  if ($retryAttempted) {
8107
  $userIniError .= ' <strong>' . __('Retrying Failed.', 'wordfence') . '</strong>';
8108
  }
8109
- $userIniError .= ' <a href="#" class="wf-waf-uninstall-try-again">' . __('Try Again', 'wordfence') . '</a>';
8110
  $userIniError .= '</p>';
8111
  $html = wfView::create('waf/waf-modal-wrapper', array(
8112
  'title' => __('Unable to Uninstall', 'wordfence'),
8113
  'html' => $userIniError,
8114
- 'helpHTML' => sprintf(/* translators: Support URL. */ __('If you cannot complete the uninstall process, <a target="_blank" rel="noopener noreferrer" href="%s">click here for help</a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_REMOVE_MANUALLY)),
8115
  'footerButtonTitle' => __('Cancel', 'wordfence'),
8116
  ))->render();
8117
 
@@ -8157,7 +8203,7 @@ SQL
8157
  $html = wfView::create('waf/waf-modal-wrapper', array(
8158
  'title' => __('Uninstallation Failed', 'wordfence'),
8159
  'html' => $installError,
8160
- 'helpHTML' => sprintf(/* translators: Support URL. */ __('If you cannot complete the uninstall process, <a target="_blank" rel="noopener noreferrer" href="%s">click here for help</a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_REMOVE_MANUALLY)),
8161
  'footerButtonTitle' => __('Cancel', 'wordfence'),
8162
  ))->render();
8163
  return array('uninstallationFailed' => 1, 'html' => $html);
@@ -8877,9 +8923,9 @@ SQL
8877
  public static function wafAutoPrependNotice() {
8878
  $url = network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#configureAutoPrepend');
8879
  echo '<div class="update-nag" id="wf-extended-protection-notice">' . __('To make your site as secure as possible, take a moment to optimize the Wordfence Web Application Firewall:', 'wordfence') . ' &nbsp;<a class="wf-btn wf-btn-default wf-btn-sm" href="' . esc_url($url) . '">' . __('Click here to configure', 'wordfence') . '</a>
8880
- <a class="wf-btn wf-btn-default wf-btn-sm wf-dismiss-link" href="#" onclick="wordfenceExt.setOption(\'dismissAutoPrependNotice\', 1); jQuery(\'#wf-extended-protection-notice\').fadeOut(); return false;">' . __('Dismiss', 'wordfence') . '</a>
8881
  <br>
8882
- <em style="font-size: 85%;">' . sprintf(/* translators: Support URL. */ __('If you cannot complete the setup process, <a target="_blank" rel="noopener noreferrer" href="%s">click here for help</a>.', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_INSTALL_MANUALLY)) . '</em>
8883
  </div>';
8884
  }
8885
 
@@ -9065,13 +9111,13 @@ if (file_exists(__DIR__.%1$s)) {
9065
  if (!is_array($body) || !isset($body['data']['attributes'])) {
9066
  return array(
9067
  'err' => 1,
9068
- 'errorMsg' => sprintf(/* translators: Error message. */ __("Invalid response from Wordfence Central: %s"), $response->getBody()),
9069
  );
9070
  }
9071
  if (!array_key_exists('id', $body['data'])) {
9072
  return array(
9073
  'err' => 1,
9074
- 'errorMsg' => sprintf(/* translators: JSON property. */ __("Invalid response from Wordfence Central. Parameter %s not found in response."), 'id'),
9075
  );
9076
  }
9077
 
@@ -9084,7 +9130,7 @@ if (file_exists(__DIR__.%1$s)) {
9084
  if (!array_key_exists($key, $data)) {
9085
  return array(
9086
  'err' => 1,
9087
- 'errorMsg' => sprintf(/* translators: JSON property. */ __("Invalid response from Wordfence Central. Parameter %s not found in response."), $key),
9088
  );
9089
  }
9090
  }
1202
  add_action('login_init','wordfence::loginInitAction');
1203
  add_action('wp_login','wordfence::loginAction');
1204
  add_action('wp_logout','wordfence::logoutAction');
1205
+ add_action('lostpassword_post', 'wordfence::lostPasswordPost', 1, 2);
1206
 
1207
  $allowSeparatePrompt = ini_get('output_buffering') > 0;
1208
  if (wfConfig::get('loginSec_enableSeparateTwoFactor') && $allowSeparatePrompt) {
1211
 
1212
  if(wfUtils::hasLoginCookie()){
1213
  add_action('user_profile_update_errors', 'wordfence::validateProfileUpdate', 0, 3 );
1214
+ add_action('profile_update', 'wordfence::profileUpdateAction', 99, 2);
1215
  }
1216
 
1217
  add_action('validate_password_reset', 'wordfence::validatePassword', 10, 2);
1368
  }
1369
  public static function _pluginPageActionLinks($links) {
1370
  if (!wfConfig::get('isPaid')) {
1371
+ $links = array_merge(array('aWordfencePluginCallout' => '<a href="https://www.wordfence.com/zz12/wordfence-signup/" target="_blank" rel="noopener noreferrer"><strong style="color: #11967A; display: inline;">' . esc_html__('Upgrade To Premium', 'wordfence') . '</strong><span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>'), $links);
1372
  }
1373
  return $links;
1374
  }
1703
  return true;
1704
  }
1705
  }
1706
+ public static function lostPasswordPost($errors = null, $user = null) {
1707
  $IP = wfUtils::getIP();
1708
  if ($request = self::getLog()->getCurrentRequest()) {
1709
  $request->action = 'lostPassword';
1712
  if (wfBlock::isWhitelisted($IP)) {
1713
  return;
1714
  }
1715
+
1716
  $lockout = wfBlock::lockoutForIP(wfUtils::getIP());
1717
  if ($lockout !== false) {
1718
  $lockout->recordBlock();
1719
  $customText = wpautop(wp_strip_all_tags(wfConfig::get('blockCustomText', '')));
1720
  require(dirname(__FILE__) . '/wfLockedOut.php');
1721
  }
1722
+
1723
+ if ($user === null) {
1724
+ if (empty($_POST['user_login'])) { return; }
1725
+ $user_login = $_POST['user_login'];
1726
+ if (is_array($user_login)) { $user_login = wfUtils::array_first($user_login); }
1727
+ $user_login = trim($user_login);
1728
+ $user = get_user_by('login', $user_login);
1729
+ if (!$user) {
1730
+ $user = get_user_by('email', $user_login);
1731
+ }
1732
+ }
1733
+
1734
+ if ($user === false && wfConfig::get('loginSec_maskLoginErrors')) {
1735
+ wp_safe_redirect(!empty($_REQUEST['redirect_to'])?$_REQUEST['redirect_to']:'wp-login.php?checkemail=confirm');
1736
+ exit;
1737
  }
1738
 
1739
  if($user){
1755
  if($forgotAttempts >= wfConfig::get('loginSec_maxForgotPasswd')){
1756
  self::lockOutIP($IP, sprintf(
1757
  /* translators: 1. Password reset limit (number). 2. WordPress username. */
1758
+ __('Exceeded the maximum number of tries to recover their password which is set at: %1$s. The last username or email they entered before getting locked out was: \'%2$s\'', 'wordfence'),
1759
  wfConfig::get('loginSec_maxForgotPasswd'),
1760
  $_POST['user_login']
1761
  ));
2578
  if (!current_user_can('edit_others_posts')) {
2579
  $urlBase = wfWP_REST_Users_Controller::wfGetURLBase();
2580
  if (preg_match('~' . preg_quote($urlBase, '~') . '/*$~i', $route)) {
2581
+ $error = new WP_Error('rest_user_cannot_view', __('Sorry, you are not allowed to list users.', 'wordfence'), array('status' => rest_authorization_required_code()));
2582
  $response = rest_ensure_response($error);
2583
  if (!defined('WORDFENCE_REST_API_SUPPRESSED')) { define('WORDFENCE_REST_API_SUPPRESSED', true); }
2584
  }
2585
  else if (preg_match('~' . preg_quote($urlBase, '~') . '/+(\d+)/*$~i', $route, $matches)) {
2586
  $id = (int) $matches[1];
2587
  if (get_current_user_id() !== $id) {
2588
+ $error = new WP_Error('rest_user_invalid_id', __('Invalid user ID.', 'wordfence'), array('status' => 404));
2589
  $response = rest_ensure_response($error);
2590
  if (!defined('WORDFENCE_REST_API_SUPPRESSED')) { define('WORDFENCE_REST_API_SUPPRESSED', true); }
2591
  }
2729
  $twoFactorNonce = preg_replace('/[^a-f0-9]/i', '', $_POST['wordfence_twoFactorNonce']);
2730
  if (!self::verifyTwoFactorIntermediateValues($userID, $twoFactorNonce)) {
2731
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2732
+ self::$authError = new WP_Error('twofactor_required', wp_kses(__('<strong>VERIFICATION FAILED</strong>: Two-factor authentication verification failed. Please try again.', 'wordfence'), array('strong'=>array())));
2733
  return self::processBruteForceAttempt(self::$authError, $username, $passwd);
2734
  }
2735
  }
2736
  else { //Code path for old method, invalid password the second time
2737
  self::$authError = $authUser;
2738
  if (is_wp_error(self::$authError) && (self::$authError->get_error_code() == 'invalid_username' || $authUser->get_error_code() == 'invalid_email' || self::$authError->get_error_code() == 'incorrect_password' || $authUser->get_error_code() == 'authentication_failed') && wfConfig::get('loginSec_maskLoginErrors')) {
2739
+ self::$authError = new WP_Error('incorrect_password', sprintf(/* translators: 1. WordPress username. 2. Password reset URL. */ wp_kses(__('<strong>ERROR</strong>: The username or password you entered is incorrect. <a href="%2$s" title="Password Lost and Found">Lost your password</a>?', 'wordfence'), array('strong'=>array(), 'a'=>array('href'=>array(), 'title'=>array()))), $username, wp_lostpassword_url()));
2740
  }
2741
 
2742
  return self::processBruteForceAttempt(self::$authError, $username, $passwd);
2746
  wfAdminNoticeQueue::removeAdminNotice(false, 'previousIPBreachPassword', array($userID));
2747
  wfAdminNoticeQueue::addAdminNotice(wfAdminNotice::SEVERITY_CRITICAL, sprintf(
2748
  /* translators: 1. WordPress admin panel URL. 2. Support URL. */
2749
+ __('<strong>WARNING: </strong>The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href="%1$s">change your password</a>. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn More<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'),
2750
  self_admin_url('profile.php'),
2751
  wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD)
2752
  ), '2faBreachPassword', array($authUser->ID));
2770
  if (is_object($authUser) && get_class($authUser) == 'WP_User' && $authUser->ID == $userID) { //Using the old method of appending the code to the password
2771
  if ($mode == 'authenticator') {
2772
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2773
+ self::$authError = new WP_Error('twofactor_invalid', wp_kses(__('<strong>INVALID CODE</strong>: Please sign in again and add a space, the letters <code>wf</code>, and the code from your authenticator app to the end of your password (e.g., <code>wf123456</code>).', 'wordfence'), array('strong'=>array(), 'code'=>array())));
2774
  }
2775
  else {
2776
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2777
+ self::$authError = new WP_Error('twofactor_invalid', wp_kses(__('<strong>INVALID CODE</strong>: Please sign in again and add a space, the letters <code>wf</code>, and the code sent to your phone to the end of your password (e.g., <code>wf123456</code>).', 'wordfence'), array('strong'=>array(), 'code'=>array())));
2778
  }
2779
  }
2780
  else {
2781
  $loginNonce = wfWAFUtils::random_bytes(20);
2782
  if ($loginNonce === false) { //Should never happen but is technically possible
2783
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2784
+ self::$authError = new WP_Error('twofactor_required', wp_kses(__('<strong>AUTHENTICATION FAILURE</strong>: A temporary failure was encountered while trying to log in. Please try again.', 'wordfence'), array('strong'=>array())));
2785
  return self::$authError;
2786
  }
2787
 
2791
 
2792
  if ($mode == 'authenticator') {
2793
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2794
+ self::$authError = new WP_Error('twofactor_invalid', wp_kses(__('<strong>INVALID CODE</strong>: You need to enter the code generated by your authenticator app. The code should be a six digit number (e.g., 123456).', 'wordfence'), array('strong'=>array())) . '<!-- wftwofactornonce:' . $userDat->ID . '/' . $loginNonce . ' -->');
2795
  }
2796
  else {
2797
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2798
+ self::$authError = new WP_Error('twofactor_invalid', wp_kses(__('<strong>INVALID CODE</strong>: You need to enter the code generated sent to your phone. The code should be a six digit number (e.g., 123456).', 'wordfence'), array('strong'=>array())) . '<!-- wftwofactornonce:' . $userDat->ID . '/' . $loginNonce . ' -->');
2799
  }
2800
  }
2801
  return self::processBruteForceAttempt(self::$authError, $username, $passwd);
2832
  $loginNonce = wfWAFUtils::random_bytes(20);
2833
  if ($loginNonce === false) { //Should never happen but is technically possible
2834
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2835
+ self::$authError = new WP_Error('twofactor_required', wp_kses(__('<strong>AUTHENTICATION FAILURE</strong>: A temporary failure was encountered while trying to log in. Please try again.', 'wordfence'), array('strong'=>array())));
2836
  return self::$authError;
2837
  }
2838
 
2841
  update_user_meta($userDat->ID, '_wf_twoFactorNonceTime', time());
2842
 
2843
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2844
+ self::$authError = new WP_Error('twofactor_required', wp_kses(__('<strong>CODE EXPIRED. CHECK YOUR PHONE:</strong> The code you entered has expired. Codes are only valid for 30 minutes for security reasons. We have sent you a new code. Please sign in using your username, password, and the new code we sent you.', 'wordfence'), array('strong'=>array())) . '<!-- wftwofactornonce:' . $userDat->ID . '/' . $loginNonce . ' -->');
2845
  return self::$authError;
2846
  }
2847
 
2855
  $loginNonce = wfWAFUtils::random_bytes(20);
2856
  if ($loginNonce === false) { //Should never happen but is technically possible
2857
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2858
+ self::$authError = new WP_Error('twofactor_required', wp_kses(__('<strong>AUTHENTICATION FAILURE</strong>: A temporary failure was encountered while trying to log in. Please try again.', 'wordfence'), array('strong'=>array())));
2859
  return self::$authError;
2860
  }
2861
 
2864
  update_user_meta($userDat->ID, '_wf_twoFactorNonceTime', time());
2865
 
2866
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2867
+ self::$authError = new WP_Error('twofactor_invalid', wp_kses(__('<strong>INVALID CODE</strong>: You need to enter your password and the code we sent to your phone. The code should start with \'wf\' and should be four characters (e.g., wfAB12).', 'wordfence'), array('strong'=>array())) . '<!-- wftwofactornonce:' . $userDat->ID . '/' . $loginNonce . ' -->');
2868
  return self::processBruteForceAttempt(self::$authError, $username, $passwd);
2869
  }
2870
  }
2882
  wfAdminNoticeQueue::removeAdminNotice(false, 'previousIPBreachPassword', array($authUser->ID));
2883
  wfAdminNoticeQueue::addAdminNotice(wfAdminNotice::SEVERITY_CRITICAL, sprintf(
2884
  /* translators: 1. WordPress admin panel URL. 2. Support URL. */
2885
+ __('<strong>WARNING: </strong>The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href="%1$s">change your password</a>. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn More<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), self_admin_url('profile.php'), wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD)), '2faBreachPassword', array($authUser->ID));
2886
  }
2887
 
2888
  $loginNonce = wfWAFUtils::random_bytes(20);
2915
  $allowSeparatePrompt = ini_get('output_buffering') > 0;
2916
  if (wfConfig::get('loginSec_enableSeparateTwoFactor') && $allowSeparatePrompt) {
2917
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2918
+ self::$authError = new WP_Error('twofactor_required', wp_kses(__('<strong>CODE REQUIRED</strong>: Please check your authenticator app for the current code. Enter it below to sign in.', 'wordfence'), array('strong'=>array())) . '<!-- wftwofactornonce:' . $userDat->ID . '/' . $loginNonce . ' -->');
2919
  return self::$authError;
2920
  }
2921
  else {
2922
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2923
+ self::$authError = new WP_Error('twofactor_required', wp_kses(__('<strong>CODE REQUIRED</strong>: Please check your authenticator app for the current code. Please sign in again and add a space, the letters <code>wf</code>, and the code to the end of your password (e.g., <code>wf123456</code>).', 'wordfence'), array('strong'=>array(), 'code'=>array())));
2924
  return self::$authError;
2925
  }
2926
  }
2954
  $allowSeparatePrompt = ini_get('output_buffering') > 0;
2955
  if (wfConfig::get('loginSec_enableSeparateTwoFactor') && $allowSeparatePrompt) {
2956
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2957
+ self::$authError = new WP_Error('twofactor_required', wp_kses(__('<strong>CHECK YOUR PHONE</strong>: A code has been sent to your phone and will arrive within 30 seconds. Enter it below to sign in.', 'wordfence'), array('strong'=>array())) . '<!-- wftwofactornonce:' . $userDat->ID . '/' . $loginNonce . ' -->');
2958
  return self::$authError;
2959
  }
2960
  else {
2961
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
2962
+ self::$authError = new WP_Error('twofactor_required', wp_kses(__('<strong>CHECK YOUR PHONE</strong>: A code has been sent to your phone and will arrive within 30 seconds. Please sign in again and add a space, the letters <code>wf</code>, and the code to the end of your password (e.g., <code>wf123456</code>).', 'wordfence'), array('strong'=>array(), 'code'=>array())));
2963
  return self::$authError;
2964
  }
2965
  }
3011
  $allowSeparatePrompt = ini_get('output_buffering') > 0;
3012
  if (wfConfig::get('loginSec_enableSeparateTwoFactor') && $allowSeparatePrompt) {
3013
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
3014
+ self::$authError = new WP_Error('twofactor_required', wp_kses(__('<strong>CHECK YOUR PHONE</strong>: A code has been sent to your phone and will arrive within 30 seconds. Enter it below to sign in.', 'wordfence'), array('strong'=>array())) . '<!-- wftwofactornonce:' . $userDat->ID . '/' . $loginNonce . ' -->');
3015
  return self::$authError;
3016
  }
3017
  else {
3018
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
3019
+ self::$authError = new WP_Error('twofactor_required', wp_kses(__('<strong>CHECK YOUR PHONE</strong>: A code has been sent to your phone and will arrive within 30 seconds. Please sign in again and add a space and the code to the end of your password (e.g., <code>wfABCD</code>).', 'wordfence'), array('strong'=>array(), 'code'=>array())));
3020
  return self::$authError;
3021
  }
3022
  }
3037
  else if ($usingBreachedPassword) {
3038
  if (wfCredentialsController::hasPreviousLoginFromIP($authUser, wfUtils::getIP())) {
3039
  wfAdminNoticeQueue::removeAdminNotice(false, '2faBreachPassword', array($authUser->ID));
3040
+ wfAdminNoticeQueue::addAdminNotice(wfAdminNotice::SEVERITY_CRITICAL, sprintf(__('<strong>WARNING: </strong>Your login has been allowed because you have previously logged in from the same IP, but you will be blocked if your IP changes. The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href="%1$s">change your password</a>. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn More<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), self_admin_url('profile.php'), wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD)), 'previousIPBreachPassword', array($authUser->ID));
3041
  }
3042
  else {
3043
  $username = $authUser->user_login;
3054
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
3055
  self::$authError = new WP_Error('breached_password', sprintf(
3056
  /* translators: 1. Reset password URL. 2. Support URL. */
3057
+ wp_kses(__('<strong>INSECURE PASSWORD:</strong> Your login attempt has been blocked because the password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href="%1$s">reset your password</a> to reactivate your account. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn More<span style="font-size:0;"> (opens in new tab)</span></a>', 'wordfence'), array('strong'=>array(), 'a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()), 'span'=>array('style'=>array()))), wp_lostpassword_url(), wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD)));
3058
  return self::$authError;
3059
  }
3060
  }
3062
  if ($requireAdminTwoFactor && wfUtils::isAdmin($authUser)) {
3063
  $username = $authUser->user_login;
3064
  self::getLog()->logLogin('loginFailValidUsername', 1, $username);
3065
+ wordfence::alert(__("Admin Login Blocked", 'wordfence'), sprintf(/* translators: WordPress username. */__("A user with username \"%s\" who has administrator access tried to sign in to your WordPress site. Access was denied because all administrator accounts are required to have Cellphone Sign-in enabled but this account does not.", 'wordfence'), $username), wfUtils::getIP());
3066
+ self::$authError = new WP_Error('twofactor_disabled_required', wp_kses(__('<strong>Cellphone Sign-in Required</strong>: Cellphone Sign-in is required for all administrator accounts. Please contact the site administrator to enable it for your account.', 'wordfence'), array('strong'=>array())));
3067
  return self::$authError;
3068
  }
3069
 
3073
  else if ($usingBreachedPassword) {
3074
  if (wfCredentialsController::hasPreviousLoginFromIP($authUser, wfUtils::getIP())) {
3075
  wfAdminNoticeQueue::removeAdminNotice(false, '2faBreachPassword', array($authUser->ID));
3076
+ wfAdminNoticeQueue::addAdminNotice(wfAdminNotice::SEVERITY_CRITICAL, sprintf(/* translators: 1. Reset password URL. 2. Support URL. */ __('<strong>WARNING: </strong>Your login has been allowed because you have previously logged in from the same IP, but you will be blocked if your IP changes. The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href="%1$s">change your password</a>. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn More<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), self_admin_url('profile.php'), wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD)), 'previousIPBreachPassword', array($authUser->ID));
3077
  }
3078
  else {
3079
  $username = $authUser->user_login;
3090
  remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages
3091
  self::$authError = new WP_Error('breached_password', sprintf(
3092
  /* translators: 1. Reset password URL. 2. Support URL. */
3093
+ wp_kses(__('<strong>INSECURE PASSWORD:</strong> Your login attempt has been blocked because the password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href="%1$s">reset your password</a> to reactivate your account. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn More<span style="font-size:0;"> (opens in new tab)</span></a>', 'wordfence'), array('strong'=>array(), 'a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()), 'span'=>array('style'=>array()))), wp_lostpassword_url(), wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD)));
3094
  return self::$authError;
3095
  }
3096
  }
3186
  if(is_wp_error($authUser) && ($authUser->get_error_code() == 'invalid_username' || $authUser->get_error_code() == 'invalid_email' || $authUser->get_error_code() == 'incorrect_password') && wfConfig::get('loginSec_maskLoginErrors')){
3187
  return new WP_Error( 'incorrect_password', sprintf(
3188
  /* translators: 1. WordPress username. 2. Reset password URL. */
3189
+ wp_kses(__( '<strong>ERROR</strong>: The username or password you entered is incorrect. <a href="%2$s" title="Password Lost and Found">Lost your password</a>?', 'wordfence' ), array('strong'=>array(), 'a'=>array('href'=>array(), 'title'=>array()))), $username, wp_lostpassword_url() ) );
3190
  }
3191
 
3192
  return $authUser;
3544
  public static function ajax_sendDiagnostic_callback(){
3545
  add_filter('gettext', 'wordfence::_diagnosticsTranslationDisabler', 0, 3);
3546
  $inEmail = true;
3547
+ $body = "<style>.screen-reader-text{ display: none !important; }</style>This email is the diagnostic from " . site_url() . ".\nThe IP address that requested this was: " . wfUtils::getIP() . "\nTicket Number/Forum Username: " . $_POST['ticket'];
3548
  $sendingDiagnosticEmail = true;
3549
  ob_start();
3550
  require(dirname(__FILE__) . '/menu_tools_diagnostic.php');
3601
  }
3602
  public static function ajax_addTwoFactor_callback(){
3603
  if(! wfConfig::get('isPaid')){
3604
+ return array('errorMsg' => __('Cellphone Sign-in is only available to paid members. <a href="https://www.wordfence.com/gnl1twoFac3/wordfence-signup/" target="_blank" rel="noopener noreferrer">Click here to upgrade now.<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'));
3605
  }
3606
  $username = sanitize_text_field($_POST['username']);
3607
  $phone = sanitize_text_field($_POST['phone']);
4098
  }
4099
  return array('ok' => 1);
4100
  }
4101
+ public static function ajax_hideNoticeForUser_callback() {
4102
+ if (isset($_POST['id'])) {
4103
+ self::hideNoticeForUser($_POST['id']);
4104
+ }
4105
+ return array('ok' => 1);
4106
+ }
4107
  public static function ajax_updateConfig_callback(){
4108
  $key = $_POST['key'];
4109
  $val = $_POST['val'];
4929
  }
4930
 
4931
  $scanFailedHTML = wfView::create('scanner/scan-failed', array(
4932
+ 'messageHTML' => sprintf(/* translators: Localized date. */ __('The current scan looks like it has failed. Its last status update was <span id="wf-scan-failed-time-ago">%s</span> ago. You may continue to wait in case it resumes or stop and restart the scan. Some sites may need adjustments to run scans reliably.', 'wordfence'), $scanFailedTiming) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_FAILS) . '" target="_blank" rel="noopener noreferrer">' . __('Click here for steps you can try.', 'wordfence') . '<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>',
4933
  'buttonTitle' => __('Cancel Scan', 'wordfence'),
4934
  ))->render();
4935
 
4937
  case wfIssues::SCAN_FAILED_FORK_FAILED:
4938
  case wfIssues::SCAN_FAILED_GENERAL:
4939
  $scanFailedHTML = wfView::create('scanner/scan-failed', array(
4940
+ 'messageHTML' => __('The previous scan has failed. Some sites may need adjustments to run scans reliably.', 'wordfence') . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_FAILS) . '" target="_blank" rel="noopener noreferrer">' . __('Click here for steps you can try.', 'wordfence') . '<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>',
4941
  'buttonTitle' => __('Close', 'wordfence'),
4942
  ))->render();
4943
  break;
4944
  case wfIssues::SCAN_FAILED_DURATION_REACHED:
4945
  $scanFailedHTML = wfView::create('scanner/scan-failed', array(
4946
+ 'messageHTML' => sprintf(/* translators: Time limit (number). */ __('The previous scan has terminated because the time limit of %s was reached. This limit can be customized on the options page.', 'wordfence'), wfUtils::makeDuration($timeLimit)) . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_OPTION_OVERALL_TIME_LIMIT) . '" target="_blank" rel="noopener noreferrer" class="wf-inline-help"><i class="wf-fa wf-fa-question-circle-o" aria-hidden="true"></i><span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>',
4947
  'buttonTitle' => __('Close', 'wordfence'),
4948
  ))->render();
4949
  break;
4956
  case wfIssues::SCAN_FAILED_START_TIMEOUT:
4957
  case wfIssues::SCAN_FAILED_CALLBACK_TEST_FAILED:
4958
  $scanFailedHTML = wfView::create('scanner/scan-failed', array(
4959
+ 'messageHTML' => __('The scan has failed to start. This is often because the site either cannot make outbound requests or is blocked from connecting to itself.', 'wordfence') . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_FAILED_START) . '" target="_blank" rel="noopener noreferrer">' . __('Click here for steps you can try.', 'wordfence') . '<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>',
4960
  'buttonTitle' => __('Close', 'wordfence'),
4961
  ))->render();
4962
  break;
4968
  break;
4969
  case wfIssues::SCAN_FAILED_API_CALL_FAILED:
4970
  $scanFailedHTML = wfView::create('scanner/scan-failed', array(
4971
+ 'messageHTML' => __('The scan has failed because we were unable to contact the Wordfence servers. Some sites may need adjustments to run scans reliably.', 'wordfence') . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_FAILS) . '" target="_blank" rel="noopener noreferrer">' . __('Click here for steps you can try.', 'wordfence') . '<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>',
4972
  'rawErrorHTML' => esc_html(wfConfig::get('lastScanCompleted', '')),
4973
  'buttonTitle' => __('Close', 'wordfence'),
4974
  ))->render();
4976
  case wfIssues::SCAN_FAILED_API_INVALID_RESPONSE:
4977
  case wfIssues::SCAN_FAILED_API_ERROR_RESPONSE:
4978
  $scanFailedHTML = wfView::create('scanner/scan-failed', array(
4979
+ 'messageHTML' => __('The scan has failed because we received an unexpected response from the Wordfence servers. This may be a temporary error, though some sites may need adjustments to run scans reliably.', 'wordfence') . ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_FAILS) . '" target="_blank" rel="noopener noreferrer">' . __('Click here for steps you can try.', 'wordfence') . '<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>',
4980
  'rawErrorHTML' => esc_html(wfConfig::get('lastScanCompleted'), ''),
4981
  'buttonTitle' => __('Close', 'wordfence'),
4982
  ))->render();
5934
  'switchTo2FANew', 'switchTo2FAOld',
5935
  'wfcentral_step1', 'wfcentral_step2', 'wfcentral_step3', 'wfcentral_step4', 'wfcentral_step5', 'wfcentral_step6', 'wfcentral_disconnect',
5936
  'exportDiagnostics',
5937
+ 'hideNoticeForUser'
5938
  ) as $func){
5939
  add_action('wp_ajax_wordfence_' . $func, 'wordfence::ajaxReceiver');
5940
  }
6201
  'We encountered a problem' => __('We encountered a problem', 'wordfence'),
6202
  'Wordfence Firewall blocked a background request to WordPress for the URL %s. If this occurred as a result of an intentional action, you may consider allowlisting the request to allow it in the future.' => /* translators: URL. */ __('Wordfence Firewall blocked a background request to WordPress for the URL %s. If this occurred as a result of an intentional action, you may consider allowlisting the request to allow it in the future.', 'wordfence'),
6203
  'Wordfence is working...' => __('Wordfence is working...', 'wordfence'),
6204
+ 'You are using Nginx as your web server. You\'ll need to disable autoindexing in your nginx.conf. See the <a target=\'_blank\' rel=\'noopener noreferrer\' href=\'https://nginx.org/en/docs/http/ngx_http_autoindex_module.html\'>Nginx docs for more info</a> on how to do this.' => __('You are using Nginx as your web server. You\'ll need to disable autoindexing in your nginx.conf. See the <a target=\'_blank\' rel=\'noopener noreferrer\' href=\'https://nginx.org/en/docs/http/ngx_http_autoindex_module.html\'>Nginx docs for more info</a> on how to do this.', 'wordfence'),
6205
  'You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually delete or hide those files.' => __('You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually delete or hide those files.', 'wordfence'),
6206
  'You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually modify your php.ini to disable <em>display_error</em>' => __('You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually modify your php.ini to disable <em>display_error</em>', 'wordfence'),
6207
  'You forgot to include a reason you\'re blocking this IP range. We ask you to include this for your own record keeping.' => __('You forgot to include a reason you\'re blocking this IP range. We ask you to include this for your own record keeping.', 'wordfence'),
6254
  echo '<div id="wafConfigInaccessibleNotice" class="fade error"><p><strong>' . __('The Wordfence Web Application Firewall cannot run.', 'wordfence') . '</strong> ' .
6255
  sprintf(
6256
  /* translators: 1. WordPress admin panel URL. 2. Support URL. */
6257
+ __('The configuration files are corrupt or inaccessible by the web server, which is preventing the WAF from functioning. Please verify the web server has permission to access the configuration files. You may also try to rebuild the configuration file by <a href="%1$s">clicking here</a>. It will automatically resume normal operation when it is fixed. <a class="wfhelp" target="_blank" rel="noopener noreferrer" href="%2$s"><span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'),
6258
  $wafMenuURL,
6259
  wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_WAF_INACCESSIBLE_CONFIG)
6260
  ) . '</p></div>';
6276
  echo '<div id="wafConfigNeedsUpdateNotice" class="fade error"><p><strong>' . __('The Wordfence Web Application Firewall needs a configuration update.', 'wordfence') . '</strong> ' .
6277
  sprintf(
6278
  /* translators: 1. WordPress admin panel URL. 2. Support URL. */
6279
+ __('It is currently configured to use an older version of PHP and may become deactivated if PHP is updated. You may perform the configuration update automatically by <a href="%1$s">clicking here</a>. <a class="wfhelp" target="_blank" rel="noopener noreferrer" href="%2$s"><span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'),
6280
  $wafMenuURL,
6281
  wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_WAF_MOD_PHP_FIX)
6282
  ) . '</p></div>';
6295
  echo '<div id="wafConfigNeedsFixedNotice" class="fade error"><p><strong>' . __('The Wordfence Web Application Firewall needs a configuration update.', 'wordfence') . '</strong> ' .
6296
  sprintf(
6297
  /* translators: 1. WordPress admin panel URL. 2. Support URL. */
6298
+ __('It is not currently in extended protection mode but was configured to use an older version of PHP and may have become deactivated when PHP was updated. You may perform the configuration update automatically by <a href="%1$s">clicking here</a> or use the "Optimize the Wordfence Firewall" button on the Firewall Options page. <a class="wfhelp" target="_blank" rel="noopener noreferrer" href="%2$s"><span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'),
6299
  $wafMenuURL,
6300
  wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_WAF_MOD_PHP_FIX)
6301
  ) . '</p></div>';
6302
  }
6303
  public static function wafReadOnlyNotice() {
6304
+ echo '<div id="wordfenceWAFReadOnlyNotice" class="fade error"><p><strong>' . __('The Wordfence Web Application Firewall is in read-only mode.', 'wordfence') . '</strong> ' . sprintf('PHP is currently running as a command line user and to avoid file permission issues, the WAF is running in read-only mode. It will automatically resume normal operation when run normally by a web server. <a class="wfhelp" target="_blank" rel="noopener noreferrer" href="%s"><span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_WAF_READ_ONLY_WARNING)) . '</p></div>';
6305
  }
6306
  public static function misconfiguredHowGetIPsNotice() {
6307
  $url = network_admin_url('admin.php?page=Wordfence&subpage=global_options');
6337
  }
6338
  echo '<div id="wordfenceMisconfiguredHowGetIPsNotice" class="fade error"><p><strong>' .
6339
  __('Your \'How does Wordfence get IPs\' setting is misconfigured.', 'wordfence')
6340
+ . '</strong> ' . $existingMsg . ' ' . $recommendationMsg . ' <a href="#" onclick="wordfenceExt.misconfiguredHowGetIPsChoice(\'yes\'); return false;" role="button">' .
6341
  __('Click here to use the recommended setting', 'wordfence')
6342
  . '</a> ' .
6343
  __('or', 'wordfence')
6346
  . '</a> ' .
6347
  __('to manually update it.', 'wordfence')
6348
  . '</p><p>
6349
+ <a class="wf-btn wf-btn-default wf-btn-sm wf-dismiss-link" href="#" onclick="wordfenceExt.misconfiguredHowGetIPsChoice(\'no\'); return false;" role="button">' .
6350
  __('Dismiss', 'wordfence')
6351
+ . '</a> <a class="wfhelp" target="_blank" rel="noopener noreferrer" href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_MISCONFIGURED_HOW_GET_IPS) . '"><span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a></p></div>';
6352
  }
6353
  public static function autoUpdateNotice(){
6354
  echo '<div id="wordfenceAutoUpdateChoice" class="fade error"><p><strong>' .
6355
  __('Do you want Wordfence to stay up-to-date automatically?', 'wordfence')
6356
+ . '</strong>&nbsp;&nbsp;&nbsp;<a href="#" onclick="wordfenceExt.autoUpdateChoice(\'yes\'); return false;" role="button">'.
6357
  __('Yes, enable auto-update.', 'wordfence')
6358
+ . '</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="#" onclick="wordfenceExt.autoUpdateChoice(\'no\'); return false;" role="button">' .
6359
  __('No thanks.', 'wordfence')
6360
  . '</a></p></div>';
6361
  }
6362
+ private static function getNoticeHideKey($id) {
6363
+ return "wordfence_dismiss_$id";
6364
+ }
6365
+ private static function hideNoticeForUser($id) {
6366
+ $user = get_current_user_id();
6367
+ if ($user !== 0)
6368
+ update_user_meta($user, self::getNoticeHideKey($id), true);
6369
+ }
6370
+ private static function hasHiddenNotice($id) {
6371
+ $user = get_current_user_id();
6372
+ if ($user !== 0)
6373
+ return get_user_meta($user, self::getNoticeHideKey($id), true);
6374
+ return false;
6375
+ }
6376
+ public static function showUnitedStatesBlockedNotice() {
6377
+ $id = "wordfenceUnitedStatesBlocked";
6378
+ if (self::hasHiddenNotice($id))
6379
+ return;
6380
+ ?>
6381
+ <div id="<?php echo esc_attr($id) ?>" class="notice notice-warning">
6382
+ <p>
6383
+ <?php esc_html_e('Wordfence country blocking is currently set to block the United States. We recommend allowing access from the United States for Google and other benign crawlers, unless you choose to only block the login page.', 'wordfence') ?>
6384
+ <a target="_blank" rel="noopener noreferrer" href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_BLOCKING_FULL_SITE) ?>"><?php esc_html_e('Learn More', 'wordfence') ?></a>
6385
+ <a class="wf-btn wf-btn-default wf-btn-sm wf-dismiss-link" href="#" onclick="<?php echo esc_attr('wordfenceExt.hideNoticeForUser(' . json_encode($id) . '); return false;') ?>"><?php esc_html_e('Dismiss', 'wordfence') ?></a>
6386
+ </p>
6387
+ </div>
6388
+ <?php
6389
+ }
6390
  public static function admin_menus(){
6391
  if(! wfUtils::isAdmin()){ return; }
6392
  $warningAdded = false;
6578
  exit;
6579
  }
6580
 
6581
+ if (!$warningAdded) {
6582
+ foreach (wfBlock::countryBlocks() as $block) {
6583
+ if ($block->parameters['blockSite']) {
6584
+ foreach ($block->parameters['countries'] as $country) {
6585
+ if (strtoupper($country) === 'US') {
6586
+ add_action(wfUtils::isAdminPageMU() ? 'network_admin_notices' : 'admin_notices', 'wordfence::showUnitedStatesBlockedNotice');
6587
+ break 2;
6588
+ }
6589
+ }
6590
+ }
6591
+ }
6592
  }
6593
 
6594
  $notificationCount = count(wfNotification::notifications());
6760
  wp_enqueue_style('wordfence-jquery-ui-timepicker-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui-timepicker-addon.css'), array(), WORDFENCE_VERSION);
6761
 
6762
  wp_enqueue_script('wordfence-timepicker-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/jquery-ui-timepicker-addon.js'), array('jquery', 'jquery-ui-datepicker', 'jquery-ui-slider'), WORDFENCE_VERSION);
6763
+ wp_enqueue_script('wordfence-knockout-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/knockout-3.5.1.js'), array(), WORDFENCE_VERSION);
6764
  wp_enqueue_script('wordfence-live-traffic-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/admin.liveTraffic.js'), array('jquery', 'jquery-ui-tooltip'), WORDFENCE_VERSION);
6765
 
6766
  ob_start();
7260
  */
7261
  public static function fixGDLimitLoginsErrors($content) {
7262
  if (self::$authError) {
7263
+ $content = str_replace(wp_kses(__('<strong>ERROR</strong>: Incorrect username or password.', 'limit-login-attempts'), array('strong'=>array())) . "<br />\n", '', $content);
7264
  $content .= '<br />' . self::$authError->get_error_message();
7265
  }
7266
  return $content;
7965
  $html = wfView::create('waf/waf-modal-wrapper', array(
7966
  'title' => __('Filesystem Credentials Required', 'wordfence'),
7967
  'html' => $credentialsContent,
7968
+ 'helpHTML' => sprintf(/* translators: Support URL. */ __('If you cannot complete the setup process, <a target="_blank" rel="noopener noreferrer" href="%s">click here for help<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_INSTALL_MANUALLY)),
7969
  'footerHTML' => esc_html__('Once you have entered credentials, click Continue to complete the setup.', 'wordfence'),
7970
  ))->render();
7971
  return array('needsCredentials' => 1, 'html' => $html);
7989
  $html = wfView::create('waf/waf-modal-wrapper', array(
7990
  'title' => __('Filesystem Permission Error', 'wordfence'),
7991
  'html' => $credentialsError,
7992
+ 'helpHTML' => sprintf(/* translators: Support URL. */ __('If you cannot complete the setup process, <a target="_blank" rel="noopener noreferrer" href="%s">click here for help<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_INSTALL_MANUALLY)),
7993
  'footerButtonTitle' => __('Cancel', 'wordfence'),
7994
  ))->render();
7995
  return array('credentialsFailed' => 1, 'html' => $html);
8033
  $html = wfView::create('waf/waf-modal-wrapper', array(
8034
  'title' => __('Installation Failed', 'wordfence'),
8035
  'html' => $installError,
8036
+ 'helpHTML' => sprintf(/* translators: Support URL. */ __('If you cannot complete the setup process, <a target="_blank" rel="noopener noreferrer" href="%s">click here for help<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_INSTALL_MANUALLY)),
8037
  'footerButtonTitle' => __('Cancel', 'wordfence'),
8038
  ))->render();
8039
  return array('installationFailed' => 1, 'html' => $html);
8072
  $html = wfView::create('waf/waf-modal-wrapper', array(
8073
  'title' => __('Filesystem Credentials Required', 'wordfence'),
8074
  'html' => $credentialsContent,
8075
+ 'helpHTML' => sprintf(/* translators: Support URL. */ __('If you cannot complete the uninstall process, <a target="_blank" rel="noopener noreferrer" href="%s">click here for help<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_REMOVE_MANUALLY)),
8076
  'footerHTML' => esc_html__('Once you have entered credentials, click Continue to complete uninstallation.', 'wordfence'),
8077
  ))->render();
8078
  return array('needsCredentials' => 1, 'html' => $html);
8097
  $html = wfView::create('waf/waf-modal-wrapper', array(
8098
  'title' => __('Filesystem Permission Error', 'wordfence'),
8099
  'html' => $credentialsError,
8100
+ 'helpHTML' => sprintf(/* translators: Support URL. */ __('If you cannot complete the uninstall process, <a target="_blank" rel="noopener noreferrer" href="%s">click here for help<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_REMOVE_MANUALLY)),
8101
  'footerButtonTitle' => __('Cancel', 'wordfence'),
8102
  ))->render();
8103
  return array('credentialsFailed' => 1, 'html' => $html);
8128
  $html = wfView::create('waf/waf-modal-wrapper', array(
8129
  'title' => __('Waiting for Changes', 'wordfence'),
8130
  'html' => $waitingResponse,
8131
+ 'helpHTML' => sprintf(/* translators: Support URL. */ __('If you cannot complete the uninstall process, <a target="_blank" rel="noopener noreferrer" href="%s">click here for help<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_REMOVE_MANUALLY)),
8132
  'footerButtonTitle' => __('Close', 'wordfence'),
8133
  'noX' => true,
8134
  ))->render();
8152
  if ($retryAttempted) {
8153
  $userIniError .= ' <strong>' . __('Retrying Failed.', 'wordfence') . '</strong>';
8154
  }
8155
+ $userIniError .= ' <a href="#" class="wf-waf-uninstall-try-again" role="button">' . __('Try Again', 'wordfence') . '</a>';
8156
  $userIniError .= '</p>';
8157
  $html = wfView::create('waf/waf-modal-wrapper', array(
8158
  'title' => __('Unable to Uninstall', 'wordfence'),
8159
  'html' => $userIniError,
8160
+ 'helpHTML' => sprintf(/* translators: Support URL. */ __('If you cannot complete the uninstall process, <a target="_blank" rel="noopener noreferrer" href="%s">click here for help<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_REMOVE_MANUALLY)),
8161
  'footerButtonTitle' => __('Cancel', 'wordfence'),
8162
  ))->render();
8163
 
8203
  $html = wfView::create('waf/waf-modal-wrapper', array(
8204
  'title' => __('Uninstallation Failed', 'wordfence'),
8205
  'html' => $installError,
8206
+ 'helpHTML' => sprintf(/* translators: Support URL. */ __('If you cannot complete the uninstall process, <a target="_blank" rel="noopener noreferrer" href="%s">click here for help<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_REMOVE_MANUALLY)),
8207
  'footerButtonTitle' => __('Cancel', 'wordfence'),
8208
  ))->render();
8209
  return array('uninstallationFailed' => 1, 'html' => $html);
8923
  public static function wafAutoPrependNotice() {
8924
  $url = network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#configureAutoPrepend');
8925
  echo '<div class="update-nag" id="wf-extended-protection-notice">' . __('To make your site as secure as possible, take a moment to optimize the Wordfence Web Application Firewall:', 'wordfence') . ' &nbsp;<a class="wf-btn wf-btn-default wf-btn-sm" href="' . esc_url($url) . '">' . __('Click here to configure', 'wordfence') . '</a>
8926
+ <a class="wf-btn wf-btn-default wf-btn-sm wf-dismiss-link" href="#" onclick="wordfenceExt.setOption(\'dismissAutoPrependNotice\', 1); jQuery(\'#wf-extended-protection-notice\').fadeOut(); return false;" role="button">' . __('Dismiss', 'wordfence') . '</a>
8927
  <br>
8928
+ <em style="font-size: 85%;">' . sprintf(/* translators: Support URL. */ __('If you cannot complete the setup process, <a target="_blank" rel="noopener noreferrer" href="%s">click here for help<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>.', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_INSTALL_MANUALLY)) . '</em>
8929
  </div>';
8930
  }
8931
 
9111
  if (!is_array($body) || !isset($body['data']['attributes'])) {
9112
  return array(
9113
  'err' => 1,
9114
+ 'errorMsg' => sprintf(/* translators: Error message. */ __("Invalid response from Wordfence Central: %s", 'wordfence'), $response->getBody()),
9115
  );
9116
  }
9117
  if (!array_key_exists('id', $body['data'])) {
9118
  return array(
9119
  'err' => 1,
9120
+ 'errorMsg' => sprintf(/* translators: JSON property. */ __("Invalid response from Wordfence Central. Parameter %s not found in response.", 'wordfence'), 'id'),
9121
  );
9122
  }
9123
 
9130
  if (!array_key_exists($key, $data)) {
9131
  return array(
9132
  'err' => 1,
9133
+ 'errorMsg' => sprintf(/* translators: JSON property. */ __("Invalid response from Wordfence Central. Parameter %s not found in response.", 'wordfence'), $key),
9134
  );
9135
  }
9136
  }
lib/wordfenceHash.php CHANGED
@@ -530,7 +530,7 @@ class wordfenceHash {
530
  sprintf(/* translators: File path. */ __('Modified plugin file: %s', 'wordfence'), $file),
531
  sprintf(
532
  /* translators: 1. Plugin name. 2. Plugin version. 3. Support URL. */
533
- __('This file belongs to plugin "%1$s" version "%2$s" and has been modified from the file that is distributed by WordPress.org for this version. Please use the link to see how the file has changed. If you have modified this file yourself, you can safely ignore this warning. If you see a lot of changed files in a plugin that have been made by the author, then try uninstalling and reinstalling the plugin to force an upgrade. Doing this is a workaround for plugin authors who don\'t manage their code correctly. <a href="%3$s" target="_blank" rel="noopener noreferrer">Learn More</a>', 'wordfence'),
534
  $itemName,
535
  $itemVersion,
536
  wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_MODIFIED_PLUGIN)
@@ -576,7 +576,7 @@ class wordfenceHash {
576
  sprintf(/* translators: File path. */ __('Modified theme file: %s', 'wordfence'), $file),
577
  sprintf(
578
  /* translators: 1. Plugin name. 2. Plugin version. 3. Support URL. */
579
- __('This file belongs to theme "%1$s" version "%2$s" and has been modified from the original distribution. It is common for site owners to modify their theme files, so if you have modified this file yourself you can safely ignore this warning. <a href="%3$s" target="_blank" rel="noopener noreferrer">Learn More</a>', 'wordfence'),
580
  $itemName,
581
  $itemVersion,
582
  wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_MODIFIED_THEME)
@@ -647,7 +647,7 @@ class wordfenceHash {
647
  'coreUnknown' . $file,
648
  'coreUnknown' . $file . $md5,
649
  sprintf(/* translators: File path. */ __('Unknown file in WordPress core: %s', 'wordfence'), $file),
650
- sprintf(/* translators: Support URL. */ __('This file is in a WordPress core location but is not distributed with this version of WordPress. This scan often includes files left over from a previous WordPress version, but it may also find files added by another plugin, files added by your host, or malicious files added by an attacker. <a href="%s" target="_blank" rel="noopener noreferrer">Learn More</a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_UNKNOWN_FILE_CORE)),
651
  array(
652
  'file' => $file,
653
  'cType' => 'core',
@@ -760,7 +760,7 @@ class wordfenceHash {
760
  $i['ignoreP'],
761
  $i['ignoreC'],
762
  $i['shortMsg'] . ($count > 1 ? ' ' . sprintf(/* translators: Number of scan results. */ __('(+ %d more)', 'wordfence'), $count - 1) : ''),
763
- $i['longMsg'] . ($count > 1 ? ' ' . ($count > 2 ? sprintf(/* translators: Number of files. */ __('%d more similar files were found.', 'wordfence'), $count - 1) : __('1 more similar file was found.', 'wordfence')) : '') . (isset($i['data']['learnMore']) ? ' ' . sprintf(__('<a href="%s" target="_blank" rel="noopener noreferrer">Learn More</a>', 'wordfence'), esc_attr($i['data']['learnMore'])) : ''),
764
  $i['data'],
765
  true //Prevent ignoreP and ignoreC from being hashed again
766
  );
@@ -926,4 +926,4 @@ class wordfenceHash {
926
  }
927
  return false;
928
  }
929
- }
530
  sprintf(/* translators: File path. */ __('Modified plugin file: %s', 'wordfence'), $file),
531
  sprintf(
532
  /* translators: 1. Plugin name. 2. Plugin version. 3. Support URL. */
533
+ __('This file belongs to plugin "%1$s" version "%2$s" and has been modified from the file that is distributed by WordPress.org for this version. Please use the link to see how the file has changed. If you have modified this file yourself, you can safely ignore this warning. If you see a lot of changed files in a plugin that have been made by the author, then try uninstalling and reinstalling the plugin to force an upgrade. Doing this is a workaround for plugin authors who don\'t manage their code correctly. <a href="%3$s" target="_blank" rel="noopener noreferrer">Learn More<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'),
534
  $itemName,
535
  $itemVersion,
536
  wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_MODIFIED_PLUGIN)
576
  sprintf(/* translators: File path. */ __('Modified theme file: %s', 'wordfence'), $file),
577
  sprintf(
578
  /* translators: 1. Plugin name. 2. Plugin version. 3. Support URL. */
579
+ __('This file belongs to theme "%1$s" version "%2$s" and has been modified from the original distribution. It is common for site owners to modify their theme files, so if you have modified this file yourself you can safely ignore this warning. <a href="%3$s" target="_blank" rel="noopener noreferrer">Learn More<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'),
580
  $itemName,
581
  $itemVersion,
582
  wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_MODIFIED_THEME)
647
  'coreUnknown' . $file,
648
  'coreUnknown' . $file . $md5,
649
  sprintf(/* translators: File path. */ __('Unknown file in WordPress core: %s', 'wordfence'), $file),
650
+ sprintf(/* translators: Support URL. */ __('This file is in a WordPress core location but is not distributed with this version of WordPress. This scan often includes files left over from a previous WordPress version, but it may also find files added by another plugin, files added by your host, or malicious files added by an attacker. <a href="%s" target="_blank" rel="noopener noreferrer">Learn More<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_UNKNOWN_FILE_CORE)),
651
  array(
652
  'file' => $file,
653
  'cType' => 'core',
760
  $i['ignoreP'],
761
  $i['ignoreC'],
762
  $i['shortMsg'] . ($count > 1 ? ' ' . sprintf(/* translators: Number of scan results. */ __('(+ %d more)', 'wordfence'), $count - 1) : ''),
763
+ $i['longMsg'] . ($count > 1 ? ' ' . ($count > 2 ? sprintf(/* translators: Number of files. */ __('%d more similar files were found.', 'wordfence'), $count - 1) : __('1 more similar file was found.', 'wordfence')) : '') . (isset($i['data']['learnMore']) ? ' ' . sprintf(__('<a href="%s" target="_blank" rel="noopener noreferrer">Learn More<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), esc_attr($i['data']['learnMore'])) : ''),
764
  $i['data'],
765
  true //Prevent ignoreP and ignoreC from being hashed again
766
  );
926
  }
927
  return false;
928
  }
929
+ }
lib/wordfenceScanner.php CHANGED
@@ -91,7 +91,7 @@ class wordfenceScanner {
91
  $wafPatterns = array();
92
  $wafCommonStringIndexes = array();
93
  foreach ($sigData['rules'] as $key => $signatureRow) {
94
- list(, , $pattern) = $signatureRow;
95
  if (empty($pattern)) {
96
  throw new Exception(__('Wordfence received malformed attack signature patterns from the scanning server.', 'wordfence'));
97
  }
@@ -99,7 +99,7 @@ class wordfenceScanner {
99
  $logOnly = (isset($signatureRow[5]) && !empty($signatureRow[5])) ? $signatureRow[5] : false;
100
  $commonStringIndexes = (isset($signatureRow[8]) && is_array($signatureRow[8])) ? $signatureRow[8] : array();
101
  if (@preg_match('/' . $pattern . '/iS', null) === false) {
102
- wordfence::status(1, 'error', __('A regex Wordfence received from its servers is invalid. The pattern is: ', 'wordfence') . esc_html($pattern));
103
  unset($sigData['rules'][$key]);
104
  }
105
  else if (!$logOnly) {
@@ -521,13 +521,13 @@ class wordfenceScanner {
521
  'ignoreP' => $this->path . $file,
522
  'ignoreC' => md5_file($this->path . $file),
523
  'shortMsg' => __('File contains suspected malware URL: ', 'wordfence') . esc_html($file),
524
- 'longMsg' => sprintf(
525
  /* translators: 1. Malware signature matched text. 2. Malicious URL. 3. Malicious URL. */
526
- __('This file contains a suspected malware URL listed on Google\'s list of malware sites. Wordfence decodes %1$s when scanning files so the URL may not be visible if you view this file. The URL is: %2$s - More info available at <a href="http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%3$s&client=googlechrome&hl=en-US" target="_blank" rel="noopener noreferrer">Google Safe Browsing diagnostic page</a>.', 'wordfence'),
527
  esc_html($this->patterns['word3']),
528
  esc_html($result['URL']),
529
  urlencode($result['URL'])
530
- ),
531
  'data' => array_merge(array(
532
  'file' => $file,
533
  'shac' => $record->SHAC,
@@ -819,4 +819,4 @@ class wordfenceMalwareScanFile {
819
  $db->queryWrite("UPDATE " . wfDB::networkTable('wfFileMods') . " SET isSafeFile = '0' WHERE filenameMD5 = '%s'", $this->filenameMD5);
820
  $this->isSafeFile = '0';
821
  }
822
- }
91
  $wafPatterns = array();
92
  $wafCommonStringIndexes = array();
93
  foreach ($sigData['rules'] as $key => $signatureRow) {
94
+ list($id, , $pattern) = $signatureRow;
95
  if (empty($pattern)) {
96
  throw new Exception(__('Wordfence received malformed attack signature patterns from the scanning server.', 'wordfence'));
97
  }
99
  $logOnly = (isset($signatureRow[5]) && !empty($signatureRow[5])) ? $signatureRow[5] : false;
100
  $commonStringIndexes = (isset($signatureRow[8]) && is_array($signatureRow[8])) ? $signatureRow[8] : array();
101
  if (@preg_match('/' . $pattern . '/iS', null) === false) {
102
+ wordfence::status(1, 'error', sprintf(__('Regex compilation failed for signature %d', 'wordfence'), (int) $id));
103
  unset($sigData['rules'][$key]);
104
  }
105
  else if (!$logOnly) {
521
  'ignoreP' => $this->path . $file,
522
  'ignoreC' => md5_file($this->path . $file),
523
  'shortMsg' => __('File contains suspected malware URL: ', 'wordfence') . esc_html($file),
524
+ 'longMsg' => wp_kses(sprintf(
525
  /* translators: 1. Malware signature matched text. 2. Malicious URL. 3. Malicious URL. */
526
+ __('This file contains a suspected malware URL listed on Google\'s list of malware sites. Wordfence decodes %1$s when scanning files so the URL may not be visible if you view this file. The URL is: %2$s - More info available at <a href="http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%3$s&client=googlechrome&hl=en-US" target="_blank" rel="noopener noreferrer">Google Safe Browsing diagnostic page<span class="screen-reader-text"> (opens in new tab)</span></a>.', 'wordfence'),
527
  esc_html($this->patterns['word3']),
528
  esc_html($result['URL']),
529
  urlencode($result['URL'])
530
+ ), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()), 'span'=>array('class'))),
531
  'data' => array_merge(array(
532
  'file' => $file,
533
  'shac' => $record->SHAC,
819
  $db->queryWrite("UPDATE " . wfDB::networkTable('wfFileMods') . " SET isSafeFile = '0' WHERE filenameMD5 = '%s'", $this->filenameMD5);
820
  $this->isSafeFile = '0';
821
  }
822
+ }
lib/wordfenceURLHoover.php CHANGED
@@ -98,7 +98,7 @@ class wordfenceURLHoover {
98
  $this->currentHooverID = $id;
99
  $this->_foundSome = 0;
100
  $this->_excludedHosts = $excludedHosts;
101
- @preg_replace_callback('_((?:(?:(?:\b[a-z+\.\-]+:)?//)(?:\S+(?::\S*)?@)?(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\xa1-\xff0-9]+-?)*[a-z\xa1-\xff0-9]+)(?:\.(?:[a-z\xa1-\xff0-9]+-?)*[a-z\xa1-\xff0-9]+)*(?:\.(?:[a-z\xa1-\xff]{2,})))(?::\d{2,5})?)(?:/[a-z0-9\-\_\.~\!\*\(\);\:@&\=\+\$,\?#\[\]%]*)*)_iS', array($this, 'captureURL'), $data);
102
  $this->writeHosts();
103
  return $this->_foundSome;
104
  }
@@ -109,25 +109,16 @@ class wordfenceURLHoover {
109
 
110
  public function captureURL($matches) {
111
  $id = $this->currentHooverID;
112
- $url = $matches[0];
113
  $components = parse_url($url);
114
- if (substr($url, 0, 2) != '//') {
115
- if (!isset($components['scheme']) || !preg_match('/^https?$/i', $components['scheme'])) {
 
116
  return;
117
  }
118
  }
119
  else {
120
- $url = 'http:' . $url;
121
- if (preg_match('/\.([a-z0-9]+)$/i', $components['host'], $tld)) {
122
- $tld = strtolower($tld[1]);
123
- if (strpos(wfConfig::get('tldlist', ''), '|' . $tld . '|') === false) {
124
- return;
125
- }
126
- }
127
- else {
128
- return;
129
- }
130
- wordfence::status(4, 'info', sprintf(/* translators: URL */ __('Found protocol-relative URL: %s', 'wordfence'), $url));
131
  }
132
 
133
  foreach ($this->_excludedHosts as $h) {
@@ -618,4 +609,4 @@ class wordfenceURLHoover {
618
 
619
  return $array[count($array) - 1];
620
  }
621
- }
98
  $this->currentHooverID = $id;
99
  $this->_foundSome = 0;
100
  $this->_excludedHosts = $excludedHosts;
101
+ @preg_replace_callback('_((?:(?://)(?:\S+(?::\S*)?@)?(?:(?:(?:[a-z\xa1-\xff0-9.-]+)(?:\.(?:(?:xn--[a-z\xa1-\xff0-9-]+)|[a-z\xa1-\xff]{2,}))))(?::\d{2,5})?)(?:/[a-z0-9\-\_\.~\!\*\(\);\:@&\=\+\$,\?#\[\]%]*)*)_iS', array($this, 'captureURL'), $data);
102
  $this->writeHosts();
103
  return $this->_foundSome;
104
  }
109
 
110
  public function captureURL($matches) {
111
  $id = $this->currentHooverID;
112
+ $url = 'http:' . $matches[0];
113
  $components = parse_url($url);
114
+ if (preg_match('/\.(xn--(?:[a-z0-9-]*)[a-z0-9]+|[a-z\xa1-\xff0-9]{2,})$/i', $components['host'], $tld)) {
115
+ $tld = strtolower($tld[1]);
116
+ if (strpos(wfConfig::get('tldlist', ''), '|' . $tld . '|') === false) {
117
  return;
118
  }
119
  }
120
  else {
121
+ return;
 
 
 
 
 
 
 
 
 
 
122
  }
123
 
124
  foreach ($this->_excludedHosts as $h) {
609
 
610
  return $array[count($array) - 1];
611
  }
612
+ }
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(/* translators: Support URL */ __('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'); }
@@ -1478,4 +1478,4 @@ END AS `detailSort`
1478
 
1479
  return array();
1480
  }
1481
- }
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 wp_kses(sprintf(/* translators: Support URL */ __('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<span class="screen-reader-text"> (opens in new tab)</span></a>', 'wordfence'), wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_OPTION_WHITELISTED_SERVICES)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()), 'span'=>array('class'=>array()))); }
181
  }
182
  else if ($payload['type'] == 'country') {
183
  if (!isset($payload['blockLogin']) || !isset($payload['blockSite'])) { return __('Nothing selected to block.', 'wordfence'); }
1478
 
1479
  return array();
1480
  }
1481
+ }
models/firewall/wfFirewall.php CHANGED
@@ -392,7 +392,7 @@ class wfFirewall
392
  $reenbleCount = count($rules) - $enabledCount;
393
  return array(
394
  'percentage' => ($round ? round($percentEnabled, 2) : $percentEnabled),
395
- 'title' => sprintf(_nx('Re-enable %d firewall rule.', 'Re-enable %d firewall rules.', $reenbleCount, 'wordfence'), number_format_i18n($reenbleCount)),
396
  );
397
  }
398
  catch (Exception $e) {
392
  $reenbleCount = count($rules) - $enabledCount;
393
  return array(
394
  'percentage' => ($round ? round($percentEnabled, 2) : $percentEnabled),
395
+ 'title' => sprintf(_n('Re-enable %d firewall rule.', 'Re-enable %d firewall rules.', $reenbleCount, 'wordfence'), number_format_i18n($reenbleCount)),
396
  );
397
  }
398
  catch (Exception $e) {
models/scanner/wfScanner.php CHANGED
@@ -775,7 +775,7 @@ class wfScanner {
775
  $subtraction = min($this->_normalizedPercentageToDisplay($percentage), $remainingPercentage);
776
  $statusList[] = array(
777
  'percentage' => $subtraction,
778
- 'title' => sprintf(_nx('Enable %d scan option.', 'Enable %d scan options.', $disabledOptionCount,'wordfence'), number_format_i18n($disabledOptionCount)),
779
  );
780
  }
781
 
775
  $subtraction = min($this->_normalizedPercentageToDisplay($percentage), $remainingPercentage);
776
  $statusList[] = array(
777
  'percentage' => $subtraction,
778
+ 'title' => sprintf(_n('Enable %d scan option.', 'Enable %d scan options.', $disabledOptionCount,'wordfence'), number_format_i18n($disabledOptionCount)),
779
  );
780
  }
781
 
modules/login-security/classes/controller/ajax.php CHANGED
@@ -6,6 +6,9 @@ use WordfenceLS\Crypto\Model_JWT;
6
  use WordfenceLS\Crypto\Model_Symmetric;
7
 
8
  class Controller_AJAX {
 
 
 
9
  protected $_actions = null; //Populated on init
10
 
11
  /**
@@ -35,7 +38,7 @@ class Controller_AJAX {
35
  'nopriv' => true,
36
  'nonce' => false,
37
  'permissions' => array(),
38
- 'required_parameters' => array('user_login', 'user_email', 'wfls-message-nonce', 'wfls-message'),
39
  ),
40
  'activate' => array(
41
  'handler' => array($this, '_ajax_activate_callback'),
@@ -77,6 +80,31 @@ class Controller_AJAX {
77
  'permissions' => array(Controller_Permissions::CAP_MANAGE_SETTINGS => __('You do not have permission to reset reCAPTCHA statistics.', 'wordfence-2fa')),
78
  'required_parameters' => array('nonce'),
79
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
  );
81
 
82
  $this->_init_actions();
@@ -105,7 +133,7 @@ class Controller_AJAX {
105
 
106
  public function _ajax_handler() {
107
  $action = (isset($_POST['action']) && is_string($_POST['action']) && $_POST['action']) ? $_POST['action'] : $_GET['action'];
108
- if (preg_match('~wordfence_ls_([a-zA-Z_]+)$~', $action, $matches)) {
109
  $action = $matches[1];
110
  if (!isset($this->_actions[$action])) {
111
  self::send_json(array('error' => esc_html__('An unknown action was provided.', 'wordfence-2fa')));
@@ -141,7 +169,20 @@ class Controller_AJAX {
141
  }
142
 
143
  public function _ajax_authenticate_callback() {
144
- if (!isset($_POST['log']) || !is_string($_POST['log']) || empty($_POST['log']) || !isset($_POST['pwd']) || !is_string($_POST['pwd']) || empty($_POST['pwd'])) {
 
 
 
 
 
 
 
 
 
 
 
 
 
145
  self::send_json(array('error' => wp_kses(sprintf(__('<strong>ERROR</strong>: A username and password must be provided. <a href="%s" title="Password Lost and Found">Lost your password</a>?'), wp_lostpassword_url()), array('strong'=>array(), 'a'=>array('href'=>array(), 'title'=>array())))));
146
  }
147
 
@@ -150,8 +191,6 @@ class Controller_AJAX {
150
  self::send_json(array('login' => 1));
151
  }
152
 
153
- $username = $_POST['log'];
154
- $password = $_POST['pwd'];
155
  do_action_ref_array('wp_authenticate', array(&$username, &$password));
156
 
157
  define('WORDFENCE_LS_AUTHENTICATION_CHECK', true); //Prevents our auth filter from recursing
@@ -228,19 +267,28 @@ class Controller_AJAX {
228
  }
229
 
230
  public function _ajax_register_support_callback() {
231
- if (!isset($_POST['user_login']) || !is_string($_POST['user_login']) ||
232
- !isset($_POST['user_email']) || !is_string($_POST['user_email']) ||
 
 
 
 
 
 
 
233
  !isset($_POST['wfls-message']) || !is_string($_POST['wfls-message']) ||
234
  !isset($_POST['wfls-message-nonce']) || !is_string($_POST['wfls-message-nonce'])) {
235
  self::send_json(array('error' => wp_kses(sprintf(__('<strong>ERROR</strong>: Unable to send message. Please refresh the page and try again.')), array('strong'=>array()))));
236
  }
237
 
238
- $login = sanitize_user($_POST['user_login']);
239
- $email = sanitize_email($_POST['user_email']);
 
 
240
  $message = strip_tags($_POST['wfls-message']);
241
  $nonce = $_POST['wfls-message-nonce'];
242
-
243
- if (empty($login) || empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL) || empty($message)) {
244
  self::send_json(array('error' => wp_kses(sprintf(__('<strong>ERROR</strong>: Unable to send message. Please refresh the page and try again.')), array('strong'=>array()))));
245
  }
246
 
@@ -402,42 +450,39 @@ class Controller_AJAX {
402
  }
403
 
404
  public function _ajax_send_grace_period_notification_callback() {
405
- if (!Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_REQUIRE_2FA_ADMIN)) {
406
- self::send_json(array('error' => esc_html__('Two-factor authentication is not currently required for administrators.', 'wordfence-2fa')));
407
- }
408
-
409
- if (!(Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_REQUIRE_2FA_GRACE_PERIOD_ENABLED) && \WordfenceLS\Controller_Time::time() < Controller_Settings::shared()->get_int(Controller_Settings::OPTION_REQUIRE_2FA_GRACE_PERIOD))) {
410
- self::send_json(array('error' => esc_html__('A valid grace period is not configured to allow administrators time to activate two-factor authentication.', 'wordfence-2fa')));
411
- }
412
-
413
- $subject = sprintf(__('2FA will soon be required on %s', 'wordfence-2fa'), home_url());
414
- $requiredDate = Controller_Time::format_local_time('F j, Y', Controller_Settings::shared()->get_int(Controller_Settings::OPTION_REQUIRE_2FA_GRACE_PERIOD));
415
-
416
- $admins = Controller_Users::shared()->admin_users();
417
  $sent = 0;
418
- foreach ($admins as $a) {
419
- /** @var \WP_User $a */
420
- if (Controller_Users::shared()->has_2fa_active($a)) {
421
- continue;
 
 
 
 
 
 
 
 
 
 
422
  }
 
423
 
424
- $message = sprintf(
425
- __("You do not currently have two-factor authentication active on your account, which will be required beginning %s.\n\nConfigure 2FA: %s", 'wordfence-2fa'),
426
- $requiredDate,
427
- (is_multisite() && is_super_admin($a->ID)) ? network_admin_url('admin.php?page=WFLS') : admin_url('admin.php?page=WFLS')
428
- );
429
-
430
- wp_mail($a->user_email, $subject, $message);
431
- $sent++;
432
  }
433
-
434
- if ($sent == 0) {
435
- self::send_json(array('confirmation' => esc_html__('All administrators already have two-factor authenication activated.', 'wordfence-2fa')));
436
  }
437
  else if ($sent == 1) {
438
- self::send_json(array('confirmation' => esc_html(sprintf(__('A reminder to activate two-factor authentication was sent to %d administrator.', 'wordfence-2fa'), $sent))));
439
  }
440
- self::send_json(array('confirmation' => esc_html(sprintf(__('A reminder to activate two-factor authentication was sent to %d administrators.', 'wordfence-2fa'), $sent))));
441
  }
442
 
443
  public function _ajax_update_ip_preview_callback() {
@@ -476,4 +521,46 @@ class Controller_AJAX {
476
  $response = array('success' => true);
477
  self::send_json($response);
478
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
479
  }
6
  use WordfenceLS\Crypto\Model_Symmetric;
7
 
8
  class Controller_AJAX {
9
+
10
+ const MAX_USERS_TO_NOTIFY = 100;
11
+
12
  protected $_actions = null; //Populated on init
13
 
14
  /**
38
  'nopriv' => true,
39
  'nonce' => false,
40
  'permissions' => array(),
41
+ 'required_parameters' => array('wfls-message-nonce', 'wfls-message'),
42
  ),
43
  'activate' => array(
44
  'handler' => array($this, '_ajax_activate_callback'),
80
  'permissions' => array(Controller_Permissions::CAP_MANAGE_SETTINGS => __('You do not have permission to reset reCAPTCHA statistics.', 'wordfence-2fa')),
81
  'required_parameters' => array('nonce'),
82
  ),
83
+ 'reset_2fa_grace_period' => array (
84
+ 'handler' => array($this, '_ajax_reset_2fa_grace_period_callback'),
85
+ 'permissions' => array(Controller_Permissions::CAP_MANAGE_SETTINGS => __('You do not have permission to reset the 2FA grace period.', 'wordfence-2fa')),
86
+ 'required_parameters' => array('nonce', 'user_id')
87
+ ),
88
+ 'revoke_2fa_grace_period' => array (
89
+ 'handler' => array($this, '_ajax_revoke_2fa_grace_period_callback'),
90
+ 'permissions' => array(Controller_Permissions::CAP_MANAGE_SETTINGS => __('You do not have permission to revoke the 2FA grace period.', 'wordfence-2fa')),
91
+ 'required_parameters' => array('nonce', 'user_id')
92
+ ),
93
+ 'reset_ntp_failure_count' => array(
94
+ 'handler' => array($this, '_ajax_reset_ntp_failure_count_callback'),
95
+ 'permissions' => array(Controller_Permissions::CAP_MANAGE_SETTINGS => __('You do not have permission to reset the NTP failure count.', 'wordfence-2fa')),
96
+ 'required_parameters' => array(),
97
+ ),
98
+ 'disable_ntp' => array(
99
+ 'handler' => array($this, '_ajax_disable_ntp_callback'),
100
+ 'permissions' => array(Controller_Permissions::CAP_MANAGE_SETTINGS => __('You do not have permission to disable NTP.', 'wordfence-2fa')),
101
+ 'required_parameters' => array(),
102
+ ),
103
+ 'dismiss_persistent_notice' => array(
104
+ 'handler' => array($this, '_ajax_dismiss_persistent_notice_callback'),
105
+ 'permissions' => array(Controller_Permissions::CAP_MANAGE_SETTINGS => __('You do not have permission to dismiss this notice.', 'wordfence-2fa')),
106
+ 'required_parameters' => array('nonce', 'notice_id')
107
+ )
108
  );
109
 
110
  $this->_init_actions();
133
 
134
  public function _ajax_handler() {
135
  $action = (isset($_POST['action']) && is_string($_POST['action']) && $_POST['action']) ? $_POST['action'] : $_GET['action'];
136
+ if (preg_match('~wordfence_ls_([a-zA-Z_0-9]+)$~', $action, $matches)) {
137
  $action = $matches[1];
138
  if (!isset($this->_actions[$action])) {
139
  self::send_json(array('error' => esc_html__('An unknown action was provided.', 'wordfence-2fa')));
169
  }
170
 
171
  public function _ajax_authenticate_callback() {
172
+ $credentialKeys = array(
173
+ 'log' => 'pwd',
174
+ 'username' => 'password'
175
+ );
176
+ $username = null;
177
+ $password = null;
178
+ foreach ($credentialKeys as $usernameKey => $passwordKey) {
179
+ if (array_key_exists($usernameKey, $_POST) && array_key_exists($passwordKey, $_POST) && is_string($_POST[$usernameKey]) && is_string($_POST[$passwordKey])) {
180
+ $username = $_POST[$usernameKey];
181
+ $password = $_POST[$passwordKey];
182
+ break;
183
+ }
184
+ }
185
+ if (empty($username) || empty($password)) {
186
  self::send_json(array('error' => wp_kses(sprintf(__('<strong>ERROR</strong>: A username and password must be provided. <a href="%s" title="Password Lost and Found">Lost your password</a>?'), wp_lostpassword_url()), array('strong'=>array(), 'a'=>array('href'=>array(), 'title'=>array())))));
187
  }
188
 
191
  self::send_json(array('login' => 1));
192
  }
193
 
 
 
194
  do_action_ref_array('wp_authenticate', array(&$username, &$password));
195
 
196
  define('WORDFENCE_LS_AUTHENTICATION_CHECK', true); //Prevents our auth filter from recursing
267
  }
268
 
269
  public function _ajax_register_support_callback() {
270
+ $email = null;
271
+ if (array_key_exists('email', $_POST) && is_string($_POST['email'])) {
272
+ $email = $_POST['email'];
273
+ }
274
+ else if (array_key_exists('user_email', $_POST) && is_string($_POST['user_email'])) {
275
+ $email = $_POST['user_email'];
276
+ }
277
+ if (
278
+ $email === null ||
279
  !isset($_POST['wfls-message']) || !is_string($_POST['wfls-message']) ||
280
  !isset($_POST['wfls-message-nonce']) || !is_string($_POST['wfls-message-nonce'])) {
281
  self::send_json(array('error' => wp_kses(sprintf(__('<strong>ERROR</strong>: Unable to send message. Please refresh the page and try again.')), array('strong'=>array()))));
282
  }
283
 
284
+ $email = sanitize_email($email);
285
+ $login = '';
286
+ if (array_key_exists('user_login', $_POST) && is_string($_POST['user_login']))
287
+ $login = sanitize_user($_POST['user_login']);
288
  $message = strip_tags($_POST['wfls-message']);
289
  $nonce = $_POST['wfls-message-nonce'];
290
+
291
+ if ((isset($_POST['user_login']) && empty($login)) || empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL) || empty($message)) {
292
  self::send_json(array('error' => wp_kses(sprintf(__('<strong>ERROR</strong>: Unable to send message. Please refresh the page and try again.')), array('strong'=>array()))));
293
  }
294
 
450
  }
451
 
452
  public function _ajax_send_grace_period_notification_callback() {
453
+ $notifyAll = isset($_POST['notify_all']);
454
+ $users = Controller_Users::shared()->get_users_by_role($_POST['role'], $notifyAll ? null: self::MAX_USERS_TO_NOTIFY + 1);
455
+ $userCount = count($users);
456
+ if (!$notifyAll && $userCount > self::MAX_USERS_TO_NOTIFY)
457
+ self::send_json(array('error' => esc_html(sprintf(__('More than %d users exist for the selected role. This notification is not designed to handle large groups of users. In such instances, using a different solution for notifying users of upcoming 2FA requirements is recommended.', 'wordfence-2fa'), self::MAX_USERS_TO_NOTIFY)), 'limit_exceeded' => true));
 
 
 
 
 
 
 
458
  $sent = 0;
459
+ foreach ($users as $user) {
460
+ Controller_Users::shared()->requires_2fa($user, $inGracePeriod, $requiredAt);
461
+ if ($inGracePeriod && !Controller_Users::shared()->has_2fa_active($user)) {
462
+ $subject = sprintf(__('2FA will soon be required on %s', 'wordfence-2fa'), home_url());
463
+ $requiredDate = Controller_Time::format_local_time('F j, Y g:i A', $requiredAt);
464
+
465
+ $message = sprintf(
466
+ __("You do not currently have two-factor authentication active on your account, which will be required beginning %s.\n\nConfigure 2FA: %s", 'wordfence-2fa'),
467
+ $requiredDate,
468
+ (is_multisite() && is_super_admin($user->ID)) ? network_admin_url('admin.php?page=WFLS') : admin_url('admin.php?page=WFLS')
469
+ );
470
+
471
+ wp_mail($user->user_email, $subject, $message);
472
+ $sent++;
473
  }
474
+ }
475
 
476
+ if ($userCount == 0) {
477
+ self::send_json(array('error' => esc_html__('No users currently exist with the selected role.', 'wordfence-2fa')));
 
 
 
 
 
 
478
  }
479
+ else if ($sent == 0) {
480
+ self::send_json(array('confirmation' => esc_html__('All users with the selected role already have two-factor authentication activated or have been locked out.', 'wordfence-2fa')));
 
481
  }
482
  else if ($sent == 1) {
483
+ self::send_json(array('confirmation' => esc_html(sprintf(__('A reminder to activate two-factor authentication was sent to %d user.', 'wordfence-2fa'), $sent))));
484
  }
485
+ self::send_json(array('confirmation' => esc_html(sprintf(__('A reminder to activate two-factor authentication was sent to %d users.', 'wordfence-2fa'), $sent))));
486
  }
487
 
488
  public function _ajax_update_ip_preview_callback() {
521
  $response = array('success' => true);
522
  self::send_json($response);
523
  }
524
+
525
+ public function _ajax_reset_2fa_grace_period_callback() {
526
+ $userId = (int) $_POST['user_id'];
527
+ $gracePeriodOverride = array_key_exists('grace_period_override', $_POST) ? (int) $_POST['grace_period_override'] : null;
528
+ $user = get_userdata($userId);
529
+ if ($user === false)
530
+ self::send_json(array('error' => esc_html__('Invalid user specified', 'wordfence-2fa')));
531
+ if ($gracePeriodOverride < 0 || $gracePeriodOverride > Controller_Settings::MAX_REQUIRE_2FA_USER_GRACE_PERIOD)
532
+ self::send_json(array('error' => esc_html__('Invalid grace period override', 'wordfence-2fa')));
533
+ $gracePeriodAllowed = Controller_Users::shared()->get_grace_period_allowed_flag($userId);
534
+ if (!$gracePeriodAllowed)
535
+ Controller_Users::shared()->allow_grace_period($userId);
536
+ if (!Controller_Users::shared()->reset_2fa_grace_period($user, $gracePeriodOverride))
537
+ self::send_json(array('error' => esc_html__('Failed to reset grace period', 'wordfence-2fa')));
538
+ self::send_json(array('success' => true));
539
+ }
540
+
541
+ public function _ajax_revoke_2fa_grace_period_callback() {
542
+ $user = get_userdata((int) $_POST['user_id']);
543
+ if ($user === false)
544
+ self::send_json(array('error' => esc_html__('Invalid user specified', 'wordfence-2fa')));
545
+ Controller_Users::shared()->revoke_grace_period($user);
546
+ self::send_json(array('success' => true));
547
+ }
548
+
549
+ public function _ajax_reset_ntp_failure_count_callback() {
550
+ Controller_Settings::shared()->reset_ntp_failure_count();
551
+ }
552
+
553
+ public function _ajax_disable_ntp_callback() {
554
+ Controller_Settings::shared()->disable_ntp_cron();
555
+ }
556
+
557
+ public function _ajax_dismiss_persistent_notice_callback() {
558
+ $userId = get_current_user_id();
559
+ $noticeId = $_POST['notice_id'];
560
+ if ($userId !== 0 && Controller_Notices::shared()->dismiss_persistent_notice($userId, $noticeId))
561
+ self::send_json(array('success' => true));
562
+ self::send_json(array(
563
+ 'error' => esc_html__('Unable to dismiss notice', 'wordfence')
564
+ ));
565
+ }
566
  }
modules/login-security/classes/controller/captcha.php CHANGED
@@ -127,4 +127,30 @@ class Controller_CAPTCHA {
127
  $threshold = $this->threshold();
128
  return ($score >= $threshold || abs($score - $threshold) < 0.0001);
129
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
  }
127
  $threshold = $this->threshold();
128
  return ($score >= $threshold || abs($score - $threshold) < 0.0001);
129
  }
130
+
131
+ /**
132
+ * Check if the current request is an XML RPC request
133
+ * @return bool
134
+ */
135
+ private static function is_xml_rpc() {
136
+ return defined('XMLRPC_REQUEST') && XMLRPC_REQUEST;
137
+ }
138
+
139
+ /**
140
+ * Check if captcha is required for the current request
141
+ * @return bool
142
+ */
143
+ public function is_captcha_required() {
144
+ $required = $this->enabled() && !self::is_xml_rpc();
145
+ return apply_filters('wordfence_ls_require_captcha', $required);
146
+ }
147
+
148
+ /**
149
+ * Get the captcha token provided with the current request
150
+ * @param string $key if specified, override the default token parameter
151
+ * @return string|null the captcha token, if present, null otherwise
152
+ */
153
+ public function get_token($key = 'wfls-captcha-token') {
154
+ return (isset($_POST[$key]) && is_string($_POST[$key]) && !empty($_POST[$key]) ? $_POST[$key] : null);
155
+ }
156
  }
modules/login-security/classes/controller/notices.php CHANGED
@@ -6,6 +6,8 @@ use WordfenceLS\Text\Model_HTML;
6
 
7
  class Controller_Notices {
8
  const USER_META_KEY = 'wfls_notices';
 
 
9
 
10
  /**
11
  * Returns the singleton Controller_Notices.
@@ -19,6 +21,8 @@ class Controller_Notices {
19
  }
20
  return $_shared;
21
  }
 
 
22
 
23
  /**
24
  * Adds an admin notice to the display queue. If $user is provided, it will show only for that user, otherwise it
@@ -93,7 +97,7 @@ class Controller_Notices {
93
  */
94
  public function has_notice($user) {
95
  $notices = $this->_notices($user);
96
- return !!count($notices);
97
  }
98
 
99
  /**
@@ -163,4 +167,33 @@ class Controller_Notices {
163
  }
164
  Controller_Settings::shared()->set_array(Controller_Settings::OPTION_GLOBAL_NOTICES, $notices, true);
165
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
166
  }
6
 
7
  class Controller_Notices {
8
  const USER_META_KEY = 'wfls_notices';
9
+ const PERSISTENT_NOTICE_DISMISS_PREFIX = 'wfls-dismiss-';
10
+ const PERSISTENT_NOTICE_WOOCOMMERCE_INTEGRATION = 'wfls-woocommerce-integration-notice';
11
 
12
  /**
13
  * Returns the singleton Controller_Notices.
21
  }
22
  return $_shared;
23
  }
24
+
25
+ private $persistentNotices = array();
26
 
27
  /**
28
  * Adds an admin notice to the display queue. If $user is provided, it will show only for that user, otherwise it
97
  */
98
  public function has_notice($user) {
99
  $notices = $this->_notices($user);
100
+ return !!count($notices) || $this->has_persistent_notices();
101
  }
102
 
103
  /**
167
  }
168
  Controller_Settings::shared()->set_array(Controller_Settings::OPTION_GLOBAL_NOTICES, $notices, true);
169
  }
170
+
171
+ public function get_persistent_notice_ids() {
172
+ return array(
173
+ self::PERSISTENT_NOTICE_WOOCOMMERCE_INTEGRATION
174
+ );
175
+ }
176
+
177
+ private static function get_persistent_notice_dismiss_key($noticeId) {
178
+ return self::PERSISTENT_NOTICE_DISMISS_PREFIX . $noticeId;
179
+ }
180
+
181
+ public function register_persistent_notice($noticeId) {
182
+ $this->persistentNotices[] = $noticeId;
183
+ }
184
+
185
+ public function has_persistent_notices() {
186
+ return count($this->persistentNotices) > 0;
187
+ }
188
+
189
+ public function dismiss_persistent_notice($userId, $noticeId) {
190
+ if (!in_array($noticeId, $this->get_persistent_notice_ids(), true))
191
+ return false;
192
+ update_user_option($userId, self::get_persistent_notice_dismiss_key($noticeId), true, true);
193
+ return true;
194
+ }
195
+
196
+ public function is_persistent_notice_dismissed($userId, $noticeId) {
197
+ return (bool) get_user_option(self::get_persistent_notice_dismiss_key($noticeId), $userId);
198
+ }
199
  }
modules/login-security/classes/controller/permissions.php CHANGED
@@ -164,23 +164,23 @@ class Controller_Permissions {
164
  public function allow_2fa_self($role_name) {
165
  $this->on_role_change();
166
  if (is_multisite()) {
167
- $this->_add_cap_multisite($role_name, self::CAP_ACTIVATE_2FA_SELF, $this->get_primary_sites());
168
  }
169
  else {
170
- $this->_add_cap($role_name, self::CAP_ACTIVATE_2FA_SELF);
171
  }
172
  }
173
 
174
  public function disallow_2fa_self($role_name) {
175
  $this->on_role_change();
176
  if (is_multisite()) {
177
- $this->_remove_cap_multisite($role_name, self::CAP_ACTIVATE_2FA_SELF, $this->get_primary_sites());
178
  }
179
  else {
180
  if ($role_name == 'administrator') {
181
- return;
182
  }
183
- $this->_remove_cap($role_name, self::CAP_ACTIVATE_2FA_SELF);
184
  }
185
  }
186
 
@@ -194,6 +194,15 @@ class Controller_Permissions {
194
  }
195
  return $user->has_cap(self::CAP_MANAGE_SETTINGS);
196
  }
 
 
 
 
 
 
 
 
 
197
 
198
  private function _wp_roles($site_id = null) {
199
  require(ABSPATH . 'wp-includes/version.php'); /** @var string $wp_version */
@@ -213,14 +222,18 @@ class Controller_Permissions {
213
  }
214
 
215
  private function _add_cap_multisite($role_name, $cap, $blog_ids=null) {
 
 
216
  global $wpdb;
217
  $blogs = $blog_ids===null?$wpdb->get_col("SELECT `blog_id` FROM `{$wpdb->blogs}` WHERE `deleted` = 0"):$blog_ids;
 
218
  foreach ($blogs as $id) {
219
  $wp_roles = $this->_wp_roles($id);
220
  switch_to_blog($id);
221
- $this->_add_cap($role_name, $cap, $wp_roles);
222
  restore_current_blog();
223
  }
 
224
  }
225
 
226
  private function _add_cap($role_name, $cap, $wp_roles = null) {
@@ -235,14 +248,18 @@ class Controller_Permissions {
235
  }
236
 
237
  private function _remove_cap_multisite($role_name, $cap, $blog_ids=null) {
 
 
238
  global $wpdb;
239
  $blogs = $blog_ids===null?$wpdb->get_col("SELECT `blog_id` FROM `{$wpdb->blogs}` WHERE `deleted` = 0"):$blog_ids;
 
240
  foreach ($blogs as $id) {
241
  $wp_roles = $this->_wp_roles($id);
242
  switch_to_blog($id);
243
- $this->_remove_cap($role_name, $cap, $wp_roles);
244
  restore_current_blog();
245
  }
 
246
  }
247
 
248
  private function _remove_cap($role_name, $cap, $wp_roles = null) {
@@ -255,4 +272,22 @@ class Controller_Permissions {
255
  $wp_roles->remove_cap($role_name, $cap);
256
  return true;
257
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
258
  }
164
  public function allow_2fa_self($role_name) {
165
  $this->on_role_change();
166
  if (is_multisite()) {
167
+ return $this->_add_cap_multisite($role_name, self::CAP_ACTIVATE_2FA_SELF, $this->get_primary_sites());
168
  }
169
  else {
170
+ return $this->_add_cap($role_name, self::CAP_ACTIVATE_2FA_SELF);
171
  }
172
  }
173
 
174
  public function disallow_2fa_self($role_name) {
175
  $this->on_role_change();
176
  if (is_multisite()) {
177
+ return $this->_remove_cap_multisite($role_name, self::CAP_ACTIVATE_2FA_SELF, $this->get_primary_sites());
178
  }
179
  else {
180
  if ($role_name == 'administrator') {
181
+ return true;
182
  }
183
+ return $this->_remove_cap($role_name, self::CAP_ACTIVATE_2FA_SELF);
184
  }
185
  }
186
 
194
  }
195
  return $user->has_cap(self::CAP_MANAGE_SETTINGS);
196
  }
197
+
198
+ public function can_role_manage_settings($role) {
199
+ if (is_string($role)) {
200
+ $role = get_role($role);
201
+ }
202
+ if ($role)
203
+ return $role->has_cap(self::CAP_MANAGE_SETTINGS);
204
+ return false;
205
+ }
206
 
207
  private function _wp_roles($site_id = null) {
208
  require(ABSPATH . 'wp-includes/version.php'); /** @var string $wp_version */
222
  }
223
 
224
  private function _add_cap_multisite($role_name, $cap, $blog_ids=null) {
225
+ if ($role_name === 'super-admin')
226
+ return true;
227
  global $wpdb;
228
  $blogs = $blog_ids===null?$wpdb->get_col("SELECT `blog_id` FROM `{$wpdb->blogs}` WHERE `deleted` = 0"):$blog_ids;
229
+ $added = false;
230
  foreach ($blogs as $id) {
231
  $wp_roles = $this->_wp_roles($id);
232
  switch_to_blog($id);
233
+ $added = $this->_add_cap($role_name, $cap, $wp_roles) || $added;
234
  restore_current_blog();
235
  }
236
+ return $added;
237
  }
238
 
239
  private function _add_cap($role_name, $cap, $wp_roles = null) {
248
  }
249
 
250
  private function _remove_cap_multisite($role_name, $cap, $blog_ids=null) {
251
+ if ($role_name === 'super-admin')
252
+ return false;
253
  global $wpdb;
254
  $blogs = $blog_ids===null?$wpdb->get_col("SELECT `blog_id` FROM `{$wpdb->blogs}` WHERE `deleted` = 0"):$blog_ids;
255
+ $removed = false;
256
  foreach ($blogs as $id) {
257
  $wp_roles = $this->_wp_roles($id);
258
  switch_to_blog($id);
259
+ $removed = $this->_remove_cap($role_name, $cap, $wp_roles) || $removed;
260
  restore_current_blog();
261
  }
262
+ return $removed;
263
  }
264
 
265
  private function _remove_cap($role_name, $cap, $wp_roles = null) {
272
  $wp_roles->remove_cap($role_name, $cap);
273
  return true;
274
  }
275
+
276
+ public function get_all_roles($user) {
277
+ if (is_multisite()) {
278
+ $roles = array();
279
+ if (is_super_admin($user->ID))
280
+ $roles[] = 'super-admin';
281
+ foreach (get_blogs_of_user($user->ID) as $id => $blog) {
282
+ switch_to_blog($id);
283
+ $blogUser = new \WP_User($user->ID);
284
+ $roles = array_merge($roles, $blogUser->roles);
285
+ restore_current_blog();
286
+ }
287
+ return array_unique($roles);
288
+ }
289
+ else {
290
+ return $user->roles;
291
+ }
292
+ }
293
  }
modules/login-security/classes/controller/settings.php CHANGED
@@ -14,6 +14,7 @@ class Controller_Settings {
14
  const OPTION_REQUIRE_2FA_ADMIN = 'require-2fa.administrator';
15
  const OPTION_REQUIRE_2FA_GRACE_PERIOD_ENABLED = 'require-2fa-grace-period-enabled';
16
  const OPTION_REQUIRE_2FA_GRACE_PERIOD = 'require-2fa-grace-period';
 
17
  const OPTION_REMEMBER_DEVICE_ENABLED = 'remember-device';
18
  const OPTION_REMEMBER_DEVICE_DURATION = 'remember-device-duration';
19
  const OPTION_ALLOW_XML_RPC = 'allow-xml-rpc';
@@ -23,16 +24,27 @@ class Controller_Settings {
23
  const OPTION_RECAPTCHA_SECRET = 'recaptcha-secret';
24
  const OPTION_RECAPTCHA_THRESHOLD = 'recaptcha-threshold';
25
  const OPTION_DELETE_ON_DEACTIVATION = 'delete-deactivation';
 
 
26
 
27
  //Internal
28
  const OPTION_GLOBAL_NOTICES = 'global-notices';
29
  const OPTION_LAST_SECRET_REFRESH = 'last-secret-refresh';
30
  const OPTION_USE_NTP = 'use-ntp';
 
 
31
  const OPTION_NTP_OFFSET = 'ntp-offset';
32
  const OPTION_SHARED_HASH_SECRET_KEY = 'shared-hash-secret';
33
  const OPTION_SHARED_SYMMETRIC_SECRET_KEY = 'shared-symmetric-secret';
34
  const OPTION_DISMISSED_FRESH_INSTALL_MODAL = 'dismissed-fresh-install-modal';
35
  const OPTION_CAPTCHA_STATS = 'captcha-stats';
 
 
 
 
 
 
 
36
 
37
  protected $_settingsStorage;
38
 
@@ -54,6 +66,7 @@ class Controller_Settings {
54
  $settingsStorage = new Model_DB();
55
  }
56
  $this->_settingsStorage = $settingsStorage;
 
57
  }
58
 
59
  public function set_defaults() {
@@ -64,6 +77,7 @@ class Controller_Settings {
64
  self::OPTION_IP_TRUSTED_PROXIES => array('value' => '', 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
65
  self::OPTION_REQUIRE_2FA_ADMIN => array('value' => false, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
66
  self::OPTION_REQUIRE_2FA_GRACE_PERIOD_ENABLED => array('value' => false, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
 
67
  self::OPTION_GLOBAL_NOTICES => array('value' => '[]', 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
68
  self::OPTION_REMEMBER_DEVICE_ENABLED => array('value' => false, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
69
  self::OPTION_REMEMBER_DEVICE_DURATION => array('value' => (30 * 86400), 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
@@ -73,6 +87,7 @@ class Controller_Settings {
73
  self::OPTION_RECAPTCHA_THRESHOLD => array('value' => 0.5, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
74
  self::OPTION_LAST_SECRET_REFRESH => array('value' => 0, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
75
  self::OPTION_DELETE_ON_DEACTIVATION => array('value' => false, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
 
76
  ));
77
  }
78
 
@@ -193,6 +208,8 @@ class Controller_Settings {
193
  return true;
194
  }
195
  return sprintf(__('An error was encountered while validating the reCAPTCHA site key: %s', 'wordfence-2fa'), $response->get_error_message());
 
 
196
  }
197
  return true;
198
  }
@@ -237,6 +254,7 @@ class Controller_Settings {
237
  //Int
238
  case self::OPTION_REMEMBER_DEVICE_DURATION:
239
  case self::OPTION_LAST_SECRET_REFRESH:
 
240
  return (int) $value;
241
 
242
  //Float
@@ -269,24 +287,45 @@ class Controller_Settings {
269
  }
270
  return $cleaned;
271
  }
272
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
273
  /**
274
  * Preprocesses the value, returning true if it was saved here (e.g., saved 2fa enabled by assigning a role
275
  * capability) or false if it is to be saved by the backing storage.
276
  *
277
  * @param string $key
278
  * @param mixed $value
 
279
  * @return bool
280
  */
281
- public function preprocess($key, $value) {
282
  if (preg_match('/^enabled-roles\.(.+)$/', $key, $matches)) { //Enabled roles are stored as capabilities rather than in the settings storage
283
  $role = $matches[1];
284
- if ($this->_truthy_to_bool($value)) {
285
- Controller_Permissions::shared()->allow_2fa_self($role);
 
 
 
286
  }
287
  else {
288
- Controller_Permissions::shared()->disallow_2fa_self($role);
289
  }
 
 
290
  return true;
291
  }
292
  return false;
@@ -295,7 +334,7 @@ class Controller_Settings {
295
  public function preprocess_multiple($changes) {
296
  $remaining = array();
297
  foreach ($changes as $key => $value) {
298
- if (!$this->preprocess($key, $value)) {
299
  $remaining[$key] = $value;
300
  }
301
  }
@@ -323,6 +362,60 @@ class Controller_Settings {
323
  public function trusted_proxies() {
324
  return array_filter(array_map(function($s) { return trim($s); }, preg_split('/[\r\n]/', $this->get(self::OPTION_IP_TRUSTED_PROXIES, ''))));
325
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
326
 
327
  /**
328
  * Utility
@@ -407,4 +500,31 @@ class Controller_Settings {
407
 
408
  return $range;
409
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
410
  }
14
  const OPTION_REQUIRE_2FA_ADMIN = 'require-2fa.administrator';
15
  const OPTION_REQUIRE_2FA_GRACE_PERIOD_ENABLED = 'require-2fa-grace-period-enabled';
16
  const OPTION_REQUIRE_2FA_GRACE_PERIOD = 'require-2fa-grace-period';
17
+ const OPTION_REQUIRE_2FA_USER_GRACE_PERIOD = '2fa-user-grace-period';
18
  const OPTION_REMEMBER_DEVICE_ENABLED = 'remember-device';
19
  const OPTION_REMEMBER_DEVICE_DURATION = 'remember-device-duration';
20
  const OPTION_ALLOW_XML_RPC = 'allow-xml-rpc';
24
  const OPTION_RECAPTCHA_SECRET = 'recaptcha-secret';
25
  const OPTION_RECAPTCHA_THRESHOLD = 'recaptcha-threshold';
26
  const OPTION_DELETE_ON_DEACTIVATION = 'delete-deactivation';
27
+ const OPTION_PREFIX_REQUIRED_2FA_ROLE = 'required-2fa-role';
28
+ const OPTION_ENABLE_WOOCOMMERCE_INTEGRATION = 'enable-woocommerce-integration';
29
 
30
  //Internal
31
  const OPTION_GLOBAL_NOTICES = 'global-notices';
32
  const OPTION_LAST_SECRET_REFRESH = 'last-secret-refresh';
33
  const OPTION_USE_NTP = 'use-ntp';
34
+ const OPTION_ALLOW_DISABLING_NTP = 'allow-disabling-ntp';
35
+ const OPTION_NTP_FAILURE_COUNT = 'ntp-failure-count';
36
  const OPTION_NTP_OFFSET = 'ntp-offset';
37
  const OPTION_SHARED_HASH_SECRET_KEY = 'shared-hash-secret';
38
  const OPTION_SHARED_SYMMETRIC_SECRET_KEY = 'shared-symmetric-secret';
39
  const OPTION_DISMISSED_FRESH_INSTALL_MODAL = 'dismissed-fresh-install-modal';
40
  const OPTION_CAPTCHA_STATS = 'captcha-stats';
41
+
42
+ const DEFAULT_REQUIRE_2FA_USER_GRACE_PERIOD = 10;
43
+ const MAX_REQUIRE_2FA_USER_GRACE_PERIOD = 99;
44
+
45
+ const STATE_2FA_DISABLED = 'disabled';
46
+ const STATE_2FA_OPTIONAL = 'optional';
47
+ const STATE_2FA_REQUIRED = 'required';
48
 
49
  protected $_settingsStorage;
50
 
66
  $settingsStorage = new Model_DB();
67
  }
68
  $this->_settingsStorage = $settingsStorage;
69
+ $this->_migrate_admin_2fa_requirements_to_roles();
70
  }
71
 
72
  public function set_defaults() {
77
  self::OPTION_IP_TRUSTED_PROXIES => array('value' => '', 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
78
  self::OPTION_REQUIRE_2FA_ADMIN => array('value' => false, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
79
  self::OPTION_REQUIRE_2FA_GRACE_PERIOD_ENABLED => array('value' => false, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
80
+ self::OPTION_REQUIRE_2FA_USER_GRACE_PERIOD => array('value' => self::DEFAULT_REQUIRE_2FA_USER_GRACE_PERIOD, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
81
  self::OPTION_GLOBAL_NOTICES => array('value' => '[]', 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
82
  self::OPTION_REMEMBER_DEVICE_ENABLED => array('value' => false, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
83
  self::OPTION_REMEMBER_DEVICE_DURATION => array('value' => (30 * 86400), 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
87
  self::OPTION_RECAPTCHA_THRESHOLD => array('value' => 0.5, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
88
  self::OPTION_LAST_SECRET_REFRESH => array('value' => 0, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
89
  self::OPTION_DELETE_ON_DEACTIVATION => array('value' => false, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false),
90
+ self::OPTION_ENABLE_WOOCOMMERCE_INTEGRATION => array('value' => false, 'autoload' => Model_Settings::AUTOLOAD_YES, 'allowOverwrite' => false)
91
  ));
92
  }
93
 
208
  return true;
209
  }
210
  return sprintf(__('An error was encountered while validating the reCAPTCHA site key: %s', 'wordfence-2fa'), $response->get_error_message());
211
+ case self::OPTION_REQUIRE_2FA_USER_GRACE_PERIOD:
212
+ return is_numeric($value) && $value >= 0 && $value <= self::MAX_REQUIRE_2FA_USER_GRACE_PERIOD;
213
  }
214
  return true;
215
  }
254
  //Int
255
  case self::OPTION_REMEMBER_DEVICE_DURATION:
256
  case self::OPTION_LAST_SECRET_REFRESH:
257
+ case self::OPTION_REQUIRE_2FA_USER_GRACE_PERIOD:
258
  return (int) $value;
259
 
260
  //Float
287
  }
288
  return $cleaned;
289
  }
290
+
291
+ private function get_required_2fa_role_key($role) {
292
+ return implode('.', array(self::OPTION_PREFIX_REQUIRED_2FA_ROLE, $role));
293
+ }
294
+
295
+ public function get_required_2fa_role_activation_time($role) {
296
+ $time = $this->get_int($this->get_required_2fa_role_key($role), -1);
297
+ if ($time < 0)
298
+ return false;
299
+ return $time;
300
+ }
301
+
302
+ public function get_user_2fa_grace_period() {
303
+ return $this->get_int(self::OPTION_REQUIRE_2FA_USER_GRACE_PERIOD, self::DEFAULT_REQUIRE_2FA_USER_GRACE_PERIOD);
304
+ }
305
+
306
  /**
307
  * Preprocesses the value, returning true if it was saved here (e.g., saved 2fa enabled by assigning a role
308
  * capability) or false if it is to be saved by the backing storage.
309
  *
310
  * @param string $key
311
  * @param mixed $value
312
+ * @param array &$settings the array of settings to process, this function may append additional values from preprocessing
313
  * @return bool
314
  */
315
+ public function preprocess($key, $value, &$settings) {
316
  if (preg_match('/^enabled-roles\.(.+)$/', $key, $matches)) { //Enabled roles are stored as capabilities rather than in the settings storage
317
  $role = $matches[1];
318
+ if ($role === 'super-admin') {
319
+ $roleValid = true;
320
+ }
321
+ elseif (in_array($value, array(self::STATE_2FA_OPTIONAL, self::STATE_2FA_REQUIRED))) {
322
+ $roleValid = Controller_Permissions::shared()->allow_2fa_self($role);
323
  }
324
  else {
325
+ $roleValid = Controller_Permissions::shared()->disallow_2fa_self($role);
326
  }
327
+ if ($roleValid)
328
+ $settings[$this->get_required_2fa_role_key($role)] = ($value === self::STATE_2FA_REQUIRED ? time() : -1);
329
  return true;
330
  }
331
  return false;
334
  public function preprocess_multiple($changes) {
335
  $remaining = array();
336
  foreach ($changes as $key => $value) {
337
+ if (!$this->preprocess($key, $value, $remaining)) {
338
  $remaining[$key] = $value;
339
  }
340
  }
362
  public function trusted_proxies() {
363
  return array_filter(array_map(function($s) { return trim($s); }, preg_split('/[\r\n]/', $this->get(self::OPTION_IP_TRUSTED_PROXIES, ''))));
364
  }
365
+
366
+ public function get_ntp_failure_count() {
367
+ return $this->get_int(self::OPTION_NTP_FAILURE_COUNT, 0);
368
+ }
369
+
370
+ public function reset_ntp_failure_count() {
371
+ $this->set(self::OPTION_NTP_FAILURE_COUNT, 0);
372
+ }
373
+
374
+ public function increment_ntp_failure_count() {
375
+ $count = $this->get_ntp_failure_count();
376
+ if ($count < 0)
377
+ return false;
378
+ $count++;
379
+ $this->set(self::OPTION_NTP_FAILURE_COUNT, $count);
380
+ return $count;
381
+ }
382
+
383
+ public function is_ntp_disabled_via_constant() {
384
+ return defined('WORDFENCE_LS_DISABLE_NTP') && WORDFENCE_LS_DISABLE_NTP;
385
+ }
386
+
387
+ public function is_ntp_enabled($requireOffset = true) {
388
+ if ($this->is_ntp_cron_disabled())
389
+ return false;
390
+ if ($this->get_bool(self::OPTION_USE_NTP, true)) {
391
+ if ($requireOffset) {
392
+ $offset = $this->get(self::OPTION_NTP_OFFSET, null);
393
+ return $offset !== null && abs((int)$offset) <= Controller_TOTP::TIME_WINDOW_LENGTH;
394
+ }
395
+ else {
396
+ return true;
397
+ }
398
+ }
399
+ return false;
400
+ }
401
+
402
+ public function is_ntp_cron_disabled(&$failureCount = null) {
403
+ if ($this->is_ntp_disabled_via_constant())
404
+ return true;
405
+ $failureCount = $this->get_ntp_failure_count();
406
+ if ($failureCount >= Controller_Time::FAILURE_LIMIT) {
407
+ return true;
408
+ }
409
+ else if ($failureCount < 0) {
410
+ $failureCount = 0;
411
+ return true;
412
+ }
413
+ return false;
414
+ }
415
+
416
+ public function disable_ntp_cron() {
417
+ $this->set(self::OPTION_NTP_FAILURE_COUNT, -1);
418
+ }
419
 
420
  /**
421
  * Utility
500
 
501
  return $range;
502
  }
503
+
504
+ private function _migrate_admin_2fa_requirements_to_roles() {
505
+ if (!$this->get_bool(self::OPTION_REQUIRE_2FA_ADMIN))
506
+ return;
507
+ $time = time();
508
+ if (is_multisite()) {
509
+ $this->set($this->get_required_2fa_role_key('super-admin'), $time, true);
510
+ }
511
+ else {
512
+ $roles = new \WP_Roles();
513
+ foreach ($roles->roles as $key => $data) {
514
+ $role = $roles->get_role($key);
515
+ if (Controller_Permissions::shared()->can_role_manage_settings($role) && Controller_Permissions::shared()->allow_2fa_self($role->name)) {
516
+ $this->set($this->get_required_2fa_role_key($role->name), $time, true);
517
+ }
518
+ }
519
+ }
520
+ $this->remove(self::OPTION_REQUIRE_2FA_ADMIN);
521
+ $this->remove(self::OPTION_REQUIRE_2FA_GRACE_PERIOD);
522
+ $this->remove(self::OPTION_REQUIRE_2FA_GRACE_PERIOD_ENABLED);
523
+ }
524
+
525
+ public function reset_ntp_disabled_flag() {
526
+ $this->remove(self::OPTION_USE_NTP);
527
+ $this->remove(self::OPTION_NTP_OFFSET);
528
+ $this->remove(self::OPTION_NTP_FAILURE_COUNT);
529
+ }
530
  }
modules/login-security/classes/controller/support.php CHANGED
@@ -18,6 +18,7 @@ class Controller_Support {
18
  const ITEM_MODULE_LOGIN_SECURITY_2FA = 'module-login-security-2fa';
19
  const ITEM_MODULE_LOGIN_SECURITY_2FA_APPS = 'module-login-security-2fa-apps';
20
  const ITEM_MODULE_LOGIN_SECURITY_CAPTCHA = 'module-login-security-captcha';
 
21
 
22
  public static function esc_supportURL($item = self::ITEM_INDEX) {
23
  return esc_url(self::supportURL($item));
@@ -41,6 +42,7 @@ class Controller_Support {
41
  case self::ITEM_MODULE_LOGIN_SECURITY:
42
  case self::ITEM_MODULE_LOGIN_SECURITY_2FA:
43
  case self::ITEM_MODULE_LOGIN_SECURITY_CAPTCHA:
 
44
  return $base . '?query=' . $item;
45
  }
46
 
18
  const ITEM_MODULE_LOGIN_SECURITY_2FA = 'module-login-security-2fa';
19
  const ITEM_MODULE_LOGIN_SECURITY_2FA_APPS = 'module-login-security-2fa-apps';
20
  const ITEM_MODULE_LOGIN_SECURITY_CAPTCHA = 'module-login-security-captcha';
21
+ const ITEM_MODULE_LOGIN_SECURITY_ROLES = 'module-login-security-roles';
22
 
23
  public static function esc_supportURL($item = self::ITEM_INDEX) {
24
  return esc_url(self::supportURL($item));
42
  case self::ITEM_MODULE_LOGIN_SECURITY:
43
  case self::ITEM_MODULE_LOGIN_SECURITY_2FA:
44
  case self::ITEM_MODULE_LOGIN_SECURITY_CAPTCHA:
45
+ case self::ITEM_MODULE_LOGIN_SECURITY_ROLES:
46
  return $base . '?query=' . $item;
47
  }
48
 
modules/login-security/classes/controller/time.php CHANGED
@@ -5,6 +5,7 @@ namespace WordfenceLS;
5
  class Controller_Time {
6
  const NTP_VERSION = 3; // https://www.ietf.org/rfc/rfc1305.txt
7
  const NTP_EPOCH_CONVERT = 2208988800; //RFC 5905, page 13
 
8
 
9
  /**
10
  * Returns the singleton Controller_Time.
@@ -24,10 +25,12 @@ class Controller_Time {
24
  if (is_main_site()) {
25
  wp_schedule_event(time() + 10, 'hourly', 'wordfence_ls_ntp_cron');
26
  }
 
27
  }
28
 
29
  public function uninstall() {
30
  wp_clear_scheduled_hook('wordfence_ls_ntp_cron');
 
31
  }
32
 
33
  public function init() {
@@ -39,18 +42,24 @@ class Controller_Time {
39
  }
40
 
41
  public function _wordfence_ls_ntp_cron() {
 
 
42
  $ntp = self::ntp_time();
43
  $time = time();
44
 
45
  if ($ntp === false) {
46
- Controller_Settings::shared()->set(Controller_Settings::OPTION_USE_NTP, false);
47
- Controller_Settings::shared()->set(Controller_Settings::OPTION_NTP_OFFSET, 0);
 
 
 
48
  }
49
  else {
50
- $useNTP = (abs($ntp - $time) > Controller_TOTP::TIME_WINDOW_LENGTH);
51
- Controller_Settings::shared()->set(Controller_Settings::OPTION_USE_NTP, $useNTP);
52
  Controller_Settings::shared()->set(Controller_Settings::OPTION_NTP_OFFSET, $ntp - $time);
53
  }
 
54
  }
55
 
56
  /**
@@ -66,7 +75,7 @@ class Controller_Time {
66
  }
67
 
68
  $offset = 0;
69
- if (Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_USE_NTP)) {
70
  $offset = Controller_Settings::shared()->get_int(Controller_Settings::OPTION_NTP_OFFSET);
71
  }
72
  else if (WORDFENCE_LS_FROM_CORE) {
5
  class Controller_Time {
6
  const NTP_VERSION = 3; // https://www.ietf.org/rfc/rfc1305.txt
7
  const NTP_EPOCH_CONVERT = 2208988800; //RFC 5905, page 13
8
+ const FAILURE_LIMIT = 3;
9
 
10
  /**
11
  * Returns the singleton Controller_Time.
25
  if (is_main_site()) {
26
  wp_schedule_event(time() + 10, 'hourly', 'wordfence_ls_ntp_cron');
27
  }
28
+ Controller_Settings::shared()->reset_ntp_disabled_flag();
29
  }
30
 
31
  public function uninstall() {
32
  wp_clear_scheduled_hook('wordfence_ls_ntp_cron');
33
+ Controller_Settings::shared()->reset_ntp_disabled_flag();
34
  }
35
 
36
  public function init() {
42
  }
43
 
44
  public function _wordfence_ls_ntp_cron() {
45
+ if (Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_ALLOW_DISABLING_NTP) && Controller_Settings::shared()->is_ntp_cron_disabled())
46
+ return;
47
  $ntp = self::ntp_time();
48
  $time = time();
49
 
50
  if ($ntp === false) {
51
+ $failureCount = Controller_Settings::shared()->increment_ntp_failure_count();
52
+ if ($failureCount >= self::FAILURE_LIMIT) {
53
+ Controller_Settings::shared()->set(Controller_Settings::OPTION_USE_NTP, false);
54
+ Controller_Settings::shared()->set(Controller_Settings::OPTION_NTP_OFFSET, 0);
55
+ }
56
  }
57
  else {
58
+ Controller_Settings::shared()->reset_ntp_failure_count();
59
+ Controller_Settings::shared()->set(Controller_Settings::OPTION_USE_NTP, true);
60
  Controller_Settings::shared()->set(Controller_Settings::OPTION_NTP_OFFSET, $ntp - $time);
61
  }
62
+ Controller_Settings::shared()->set(Controller_Settings::OPTION_ALLOW_DISABLING_NTP, true);
63
  }
64
 
65
  /**
75
  }
76
 
77
  $offset = 0;
78
+ if (Controller_Settings::shared()->is_ntp_enabled()) {
79
  $offset = Controller_Settings::shared()->get_int(Controller_Settings::OPTION_NTP_OFFSET);
80
  }
81
  else if (WORDFENCE_LS_FROM_CORE) {
modules/login-security/classes/controller/users.php CHANGED
@@ -8,6 +8,10 @@ use WordfenceLS\Crypto\Model_Symmetric;
8
  class Controller_Users {
9
  const RECOVERY_CODE_COUNT = 5;
10
  const RECOVERY_CODE_SIZE = 8;
 
 
 
 
11
 
12
  /**
13
  * Returns the singleton Controller_Users.
@@ -65,9 +69,23 @@ class Controller_Users {
65
  return $users;
66
  }
67
 
68
- $query = new \WP_User_Query(array('role' => array('administrator'), 'number' => -1));
69
  return $query->get_results();
70
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
 
72
  /**
73
  * Returns whether or not the user has a valid remembered device.
@@ -232,42 +250,44 @@ class Controller_Users {
232
  $table = Controller_DB::shared()->secrets;
233
  $wpdb->query($wpdb->prepare("DELETE FROM `{$table}` WHERE `user_id` = %d", $user->ID));
234
  }
235
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
236
  /**
237
  * Returns whether or not 2FA is required for the user regardless of activation status. 2FA is considered required
238
  * when the option to require it is enabled and there is at least one administrator with it active.
239
  *
240
  * @param \WP_User $user
 
 
241
  * @return bool
242
  */
243
- public function requires_2fa($user) {
244
- static $_cachedRequired = null;
245
- if ($_cachedRequired !== null) {
246
- return $_cachedRequired;
 
247
  }
248
-
249
- if (Controller_Permissions::shared()->can_manage_settings($user) && Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_REQUIRE_2FA_ADMIN)) {
250
- if (Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_REQUIRE_2FA_GRACE_PERIOD_ENABLED) && \WordfenceLS\Controller_Time::time() < Controller_Settings::shared()->get_int(Controller_Settings::OPTION_REQUIRE_2FA_GRACE_PERIOD)) {
251
- define('WFLS_WILL_BE_REQUIRED', true);
252
- $_cachedRequired = false;
253
- return false;
254
- }
255
-
256
- if ($this->has_2fa_active($user)) {
257
- $_cachedRequired = true;
258
- return true;
259
- }
260
-
261
- $activeIDs = $this->_user_ids_with_2fa_active();
262
- foreach ($activeIDs as $id) {
263
- if (Controller_Permissions::shared()->can_manage_settings(new \WP_User($id))) {
264
- $_cachedRequired = true;
265
- return true;
266
- }
267
- }
268
  }
269
- $_cachedRequired = false;
270
- return false;
271
  }
272
 
273
  /**
@@ -402,13 +422,28 @@ class Controller_Users {
402
  }
403
 
404
  $role_counts['none'] = (int) $row[$col++];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
405
 
406
  // Get the meta_value index from the end of the result set.
407
  $total_users = (int) $row[$col];
408
 
409
  $counts['active_total_users'] = $total_users;
410
  $counts['active_avail_roles'] =& $role_counts;
411
-
412
  return $counts;
413
  }
414
 
@@ -456,13 +491,13 @@ class Controller_Users {
456
 
457
  public function _manage_users_columns($columns = array()) {
458
  if (user_can(wp_get_current_user(), Controller_Permissions::CAP_ACTIVATE_2FA_OTHERS)) {
459
- $columns['wfls_2fa_status'] = __('2FA Status', 'wordfence-2fa');
460
  }
461
 
462
  if (Controller_Permissions::shared()->can_manage_settings(wp_get_current_user())) {
463
- $columns['wfls_last_login'] = __('Last Login', 'wordfence-2fa');
464
  if (Controller_CAPTCHA::shared()->enabled()) {
465
- $columns['wfls_last_captcha'] = __('Last CAPTCHA', 'wordfence-2fa');
466
  }
467
  }
468
  return $columns;
@@ -474,7 +509,20 @@ class Controller_Users {
474
  $user = new \WP_User($user_id);
475
  $value = __('Not Allowed', 'wordfence-2fa');
476
  if (Controller_Users::shared()->can_activate_2fa($user)) {
477
- $value = Controller_Users::shared()->has_2fa_active($user) ? __('Active', 'wordfence-2fa') : __('Inactive', 'wordfence-2fa');
 
 
 
 
 
 
 
 
 
 
 
 
 
478
  }
479
  break;
480
  case 'wfls_last_login':
@@ -596,4 +644,235 @@ class Controller_Users {
596
  }
597
  return $views;
598
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
599
  }
8
  class Controller_Users {
9
  const RECOVERY_CODE_COUNT = 5;
10
  const RECOVERY_CODE_SIZE = 8;
11
+ const SECONDS_PER_DAY = 86400;
12
+ const META_KEY_GRACE_PERIOD_RESET = 'wfls-grace-period-reset';
13
+ const META_KEY_GRACE_PERIOD_OVERRIDE = 'wfls-grace-period-override';
14
+ const META_KEY_ALLOW_GRACE_PERIOD = 'wfls-allow-grace-period';
15
 
16
  /**
17
  * Returns the singleton Controller_Users.
69
  return $users;
70
  }
71
 
72
+ $query = new \WP_User_Query(http_build_query(array('role' => 'administrator', 'number' => -1)));
73
  return $query->get_results();
74
  }
75
+
76
+ public function get_users_by_role($role, $limit = -1) {
77
+ if ($role === 'super-admin') {
78
+ $superAdmins = array();
79
+ foreach(get_super_admins() as $username) {
80
+ $superAdmins[] = new \WP_User($username);
81
+ }
82
+ return $superAdmins;
83
+ }
84
+ else {
85
+ $query = new \WP_User_Query(http_build_query(array('role' => $role, 'number' => is_int($limit) ? $limit : -1)));
86
+ return $query->get_results();
87
+ }
88
+ }
89
 
90
  /**
91
  * Returns whether or not the user has a valid remembered device.
250
  $table = Controller_DB::shared()->secrets;
251
  $wpdb->query($wpdb->prepare("DELETE FROM `{$table}` WHERE `user_id` = %d", $user->ID));
252
  }
253
+
254
+ private function has_admin_with_2fa_active() {
255
+ static $cache = null;
256
+ if ($cache === null) {
257
+ $activeIDs = $this->_user_ids_with_2fa_active();
258
+ foreach ($activeIDs as $id) {
259
+ if (Controller_Permissions::shared()->can_manage_settings(new \WP_User($id))) {
260
+ $cache = true;
261
+ return $cache;
262
+ }
263
+ }
264
+ $cache = false;
265
+ }
266
+ return $cache;
267
+ }
268
+
269
  /**
270
  * Returns whether or not 2FA is required for the user regardless of activation status. 2FA is considered required
271
  * when the option to require it is enabled and there is at least one administrator with it active.
272
  *
273
  * @param \WP_User $user
274
+ * @param bool &$gracePeriod
275
+ * @param int &$requiredAt
276
  * @return bool
277
  */
278
+ public function requires_2fa($user, &$gracePeriod = false, &$requiredAt = null) {
279
+ static $cache = array();
280
+ if (array_key_exists($user->ID, $cache)) {
281
+ list($required, $gracePeriod, $requiredAt) = $cache[$user->ID];
282
+ return $required;
283
  }
284
+ else {
285
+ $gracePeriod = false;
286
+ $requiredAt = null;
287
+ $required = $this->does_user_role_require_2fa($user, $gracePeriod, $requiredAt);
288
+ $cache[$user->ID] = array($required, $gracePeriod, $requiredAt);
289
+ return $required;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
290
  }
 
 
291
  }
292
 
293
  /**
422
  }
423
 
424
  $role_counts['none'] = (int) $row[$col++];
425
+
426
+ // Separately add super admins for multisite
427
+ if (is_multisite()) {
428
+ $superAdmins = 0;
429
+ $activeSuperAdmins = 0;
430
+ foreach(get_super_admins() as $username) {
431
+ $superAdmins++;
432
+ $user = new \WP_User($username);
433
+ if ($this->has_2fa_active($user)) {
434
+ $activeSuperAdmins++;
435
+ }
436
+ }
437
+ $counts['avail_roles']['super-admin'] = $superAdmins;
438
+ $role_counts['super-admin'] = $activeSuperAdmins;
439
+ }
440
 
441
  // Get the meta_value index from the end of the result set.
442
  $total_users = (int) $row[$col];
443
 
444
  $counts['active_total_users'] = $total_users;
445
  $counts['active_avail_roles'] =& $role_counts;
446
+
447
  return $counts;
448
  }
449
 
491
 
492
  public function _manage_users_columns($columns = array()) {
493
  if (user_can(wp_get_current_user(), Controller_Permissions::CAP_ACTIVATE_2FA_OTHERS)) {
494
+ $columns['wfls_2fa_status'] = esc_html__('2FA Status', 'wordfence-2fa');
495
  }
496
 
497
  if (Controller_Permissions::shared()->can_manage_settings(wp_get_current_user())) {
498
+ $columns['wfls_last_login'] = esc_html__('Last Login', 'wordfence-2fa');
499
  if (Controller_CAPTCHA::shared()->enabled()) {
500
+ $columns['wfls_last_captcha'] = esc_html__('Last CAPTCHA', 'wordfence-2fa');
501
  }
502
  }
503
  return $columns;
509
  $user = new \WP_User($user_id);
510
  $value = __('Not Allowed', 'wordfence-2fa');
511
  if (Controller_Users::shared()->can_activate_2fa($user)) {
512
+ $has2fa = Controller_Users::shared()->has_2fa_active($user);
513
+ $requires2fa = $this->requires_2fa($user, $inGracePeriod);
514
+ if ($has2fa) {
515
+ $value = esc_html__('Active', 'wordfence-2fa');
516
+ }
517
+ elseif ($inGracePeriod) {
518
+ $value = wp_kses(__('Inactive<small class="wfls-sub-status">(Grace Period)</small>', 'wordfence-2fa'), array('small'=>array('class'=>array())));
519
+ }
520
+ elseif (($requires2fa && !$has2fa)) {
521
+ $value = wp_kses($inGracePeriod === null ? __('Locked Out<small class="wfls-sub-status">(Grace Period Disabled)</small>') : __('Locked Out<small class="wfls-sub-status">(Grace Period Exceeded)</small>', 'wordfence-2fa'), array('small'=>array('class'=>array())));
522
+ }
523
+ else {
524
+ $value = esc_html__('Inactive', 'wordfence-2fa');
525
+ }
526
  }
527
  break;
528
  case 'wfls_last_login':
644
  }
645
  return $views;
646
  }
647
+
648
+ private function get_grace_period_reset_time($user) {
649
+ $time = get_user_option(self::META_KEY_GRACE_PERIOD_RESET, $user->ID);
650
+ if (empty($time))
651
+ return null;
652
+ return (int) $time;
653
+ }
654
+
655
+ public function get_grace_period_override($user) {
656
+ $override = get_user_option(self::META_KEY_GRACE_PERIOD_OVERRIDE, $user->ID);
657
+ if ($override === false)
658
+ return null;
659
+ return (int) $override;
660
+ }
661
+
662
+ private function does_user_role_require_2fa($user, &$inGracePeriod = null, &$requiredAt = null) {
663
+ $is2faAdmin = Controller_Permissions::shared()->can_manage_settings($user);
664
+ $userDate = self::get_grace_period_reset_time($user);
665
+ if ($userDate === null)
666
+ $userDate = self::get_registration_date($user);
667
+ if ($is2faAdmin && !$this->get_grace_period_allowed_flag($user->ID)) {
668
+ $gracePeriod = 0;
669
+ $inGracePeriod = null;
670
+ }
671
+ else {
672
+ $gracePeriod = self::get_grace_period_override($user);
673
+ if ($gracePeriod === null)
674
+ $gracePeriod = Controller_Settings::shared()->get_user_2fa_grace_period();
675
+ $gracePeriod *= self::SECONDS_PER_DAY;
676
+ $inGracePeriod = false;
677
+ }
678
+ $now = time();
679
+ foreach (Controller_Permissions::shared()->get_all_roles($user) as $role) {
680
+ $roleDate = Controller_Settings::shared()->get_required_2fa_role_activation_time($role);
681
+ if ($roleDate === false)
682
+ continue;
683
+ $effectiveDate = max($userDate, $roleDate) + $gracePeriod;
684
+ if ($requiredAt === null || $effectiveDate < $requiredAt)
685
+ $requiredAt = $effectiveDate;
686
+ if ($effectiveDate <= $now && (!$is2faAdmin || $this->has_admin_with_2fa_active())) {
687
+ if ($inGracePeriod)
688
+ $inGracePeriod = false;
689
+ return true;
690
+ }
691
+ else if ($inGracePeriod !== null) {
692
+ $inGracePeriod = true;
693
+ }
694
+ }
695
+ return false;
696
+ }
697
+
698
+ private static function get_registration_date($user) {
699
+ return strtotime($user->user_registered);
700
+ }
701
+
702
+ public function reset_2fa_grace_period($user, $override = null) {
703
+ if (!$this->can_activate_2fa($user) || $this->has_2fa_active($user))
704
+ return false;
705
+ update_user_option($user->ID, self::META_KEY_GRACE_PERIOD_RESET, time(), true);
706
+ if ($override !== null)
707
+ update_user_option($user->ID, self::META_KEY_GRACE_PERIOD_OVERRIDE, (int) $override, true);
708
+ return true;
709
+ }
710
+
711
+ public function revoke_grace_period($user) {
712
+ foreach(array(
713
+ self::META_KEY_GRACE_PERIOD_RESET,
714
+ self::META_KEY_GRACE_PERIOD_OVERRIDE,
715
+ self::META_KEY_ALLOW_GRACE_PERIOD
716
+ ) as $option) {
717
+ delete_user_option($user->ID, $option, true);
718
+ }
719
+ }
720
+
721
+ public function allow_grace_period($userId) {
722
+ update_user_option($userId, self::META_KEY_ALLOW_GRACE_PERIOD, true, true);
723
+ }
724
+
725
+ public function get_grace_period_allowed_flag($userId) {
726
+ return (bool) get_user_option(self::META_KEY_ALLOW_GRACE_PERIOD, $userId);
727
+ }
728
+
729
+ public function has_revokable_grace_period($user) {
730
+ return $this->get_grace_period_allowed_flag($user->ID) || $this->get_grace_period_reset_time($user) !== null;
731
+ }
732
+
733
+ private function get_inactive_2fa_super_admins($gracePeriod = false) {
734
+ $inactive = array();
735
+ foreach(get_super_admins() as $username) {
736
+ $user = new \WP_User($username);
737
+ if (!$this->has_2fa_active($user)) {
738
+ $this->requires_2fa($user, $inGracePeriod, $requiredAt);
739
+ if ($gracePeriod === null || $gracePeriod == $inGracePeriod) {
740
+ $current = new \StdClass();
741
+ $current->user_id = $user->ID;
742
+ $current->user_login = $username;
743
+ $current->required_at = $requiredAt;
744
+ $inactive[] = $current;
745
+ }
746
+ }
747
+ }
748
+ return $inactive;
749
+ }
750
+
751
+ private function generate_inactive_2fa_user_query($roleKey, $gracePeriod = null, $page = null, $perPage = null) {
752
+ global $wpdb;
753
+ $secondsPerDay = (int) self::SECONDS_PER_DAY;
754
+ $gracePeriodSeconds = (int) (Controller_Settings::shared()->get_user_2fa_grace_period() * self::SECONDS_PER_DAY);
755
+ $roleTime = (int) (Controller_Settings::shared()->get_required_2fa_role_activation_time($roleKey));
756
+ $siteId = get_current_blog_id();
757
+ $blogPrefix = $wpdb->get_blog_prefix($siteId);
758
+ $usermeta = $wpdb->usermeta;
759
+ $users = $wpdb->users;
760
+ $secrets = Controller_DB::shared()->secrets;
761
+ $admin = Controller_Permissions::shared()->can_role_manage_settings($roleKey);
762
+ $parameters = array(
763
+ self::META_KEY_GRACE_PERIOD_RESET,
764
+ self::META_KEY_GRACE_PERIOD_OVERRIDE
765
+ );
766
+ $gracePeriodClause = "IF(overrides.days IS NULL, $gracePeriodSeconds, overrides.days * $secondsPerDay)";
767
+ $registeredTimestampClause = "UNIX_TIMESTAMP(CONVERT_TZ($users.user_registered, '+00:00', @@time_zone))";
768
+ $now = time();
769
+ if ($admin) {
770
+ $allowancesJoin = <<<SQL
771
+ LEFT JOIN (
772
+ SELECT
773
+ user_id,
774
+ meta_value AS allowed
775
+ FROM
776
+ $usermeta
777
+ WHERE
778
+ meta_key = %s
779
+ ) allowances ON allowances.user_id = $usermeta.user_id
780
+ SQL;
781
+ $parameters[] = self::META_KEY_ALLOW_GRACE_PERIOD;
782
+ $allowedClause = 'IFNULL(allowances.allowed, 0)';
783
+ $gracePeriodClause = "IF($allowedClause = 0, 0, $gracePeriodClause)";
784
+ }
785
+ else {
786
+ $allowancesJoin = null;
787
+ $allowedClause = null;
788
+ }
789
+ $timeClause = "GREATEST($roleTime, $registeredTimestampClause, IFNULL(resets.time, 0)) + $gracePeriodClause";
790
+ $query = <<<SQL
791
+ SELECT
792
+ $usermeta.user_id,
793
+ $users.user_login,
794
+ $timeClause AS required_at
795
+ FROM
796
+ $usermeta
797
+ JOIN $users ON $users.ID = $usermeta.user_id
798
+ LEFT JOIN (
799
+ SELECT
800
+ user_id,
801
+ meta_value AS time
802
+ FROM
803
+ $usermeta
804
+ WHERE
805
+ meta_key = %s
806
+ ) resets ON resets.user_id = $usermeta.user_id
807
+ LEFT JOIN (
808
+ SELECT
809
+ user_id,
810
+ meta_value AS days
811
+ FROM
812
+ $usermeta
813
+ WHERE
814
+ meta_key = %s
815
+ ) overrides ON overrides.user_id = $usermeta.user_id
816
+ $allowancesJoin
817
+ WHERE
818
+ meta_key = '{$blogPrefix}capabilities'
819
+ AND meta_value LIKE %s
820
+ AND NOT $usermeta.user_id IN(SELECT user_id FROM {$secrets})
821
+ SQL;
822
+ $conditions = array();
823
+ $operator = 'AND';
824
+ if ($gracePeriod !== null) {
825
+ if ($gracePeriod) {
826
+ $conditions[] = "$timeClause > $now";
827
+ }
828
+ else {
829
+ $conditions[] = "$timeClause <= $now";
830
+ $operator = 'OR';
831
+ }
832
+ }
833
+ if ($admin) {
834
+ $conditions[] = $allowedClause . ' = ' . ($gracePeriod ? 1 : 0);
835
+ }
836
+ if (!empty($conditions))
837
+ $query .= ' AND (' . implode(" $operator ", $conditions). ')';
838
+ if ($page !== null && $perPage !== null) {
839
+ $offset = (int) (($page - 1) * $perPage);
840
+ $limit = (int) ($perPage + 1);
841
+ if ($offset >= 0 && $perPage > 0)
842
+ $query .= " LIMIT $offset, $limit";
843
+ }
844
+ $serializedRoleKey = serialize($roleKey);
845
+ $roleMatch = '%' . (method_exists($wpdb, 'esc_like') ? $wpdb->esc_like($serializedRoleKey) : addcslashes($serializedRoleKey, '_%\\')). '%';
846
+ $parameters[] = $roleMatch;
847
+ return $wpdb->prepare(
848
+ $query.';',
849
+ $parameters
850
+ );
851
+ }
852
+
853
+ public function get_inactive_2fa_users($roleKey, $gracePeriod = null, $page = null, $perPage = null, &$lastPage = null) {
854
+ global $wpdb;
855
+ if (is_multisite() && $roleKey === 'super-admin') {
856
+ $superAdmins = $this->get_inactive_2fa_super_admins($gracePeriod);
857
+ if ($page !== null && $perPage !== null) {
858
+ $start = ($page - 1) * $perPage;
859
+ $end = $start + $perPage;
860
+ $lastPage = $end >= count($superAdmins);
861
+ $superAdmins = array_slice($superAdmins, $start, $perPage);
862
+ }
863
+ return $superAdmins;
864
+ }
865
+ else {
866
+ $query = $this->generate_inactive_2fa_user_query($roleKey, $gracePeriod, $page, $perPage);
867
+ $results = $wpdb->get_results($query);
868
+ if (count($results) > $perPage) {
869
+ $lastPage = false;
870
+ array_pop($results);
871
+ }
872
+ else {
873
+ $lastPage = true;
874
+ }
875
+ return $results;
876
+ }
877
+ }
878
  }
modules/login-security/classes/controller/wordfencels.php CHANGED
@@ -10,6 +10,7 @@ use WordfenceLS\View\Model_Title;
10
 
11
  class Controller_WordfenceLS {
12
  const VERSION_KEY = 'wordfence_ls_version';
 
13
 
14
  /**
15
  * Returns the singleton Controller_Wordfence2FA.
@@ -52,6 +53,13 @@ class Controller_WordfenceLS {
52
  add_action('wp_login', array($this, '_record_login'), 999, 1);
53
  add_action('register_post', array($this, '_register_post'), 25, 3);
54
  add_filter('wp_login_errors', array($this, '_wp_login_errors'), 25, 3);
 
 
 
 
 
 
 
55
 
56
  $useSubmenu = WORDFENCE_LS_FROM_CORE;
57
  if (is_multisite() && !is_network_admin()) {
@@ -116,22 +124,31 @@ class Controller_WordfenceLS {
116
  END
117
  );
118
  }
119
-
120
- if ((is_plugin_active('jetpack/jetpack.php') || (is_multisite() && is_plugin_active_for_network('jetpack/jetpack.php'))) && !Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_ALLOW_XML_RPC) && Controller_Permissions::shared()->can_manage_settings()) {
121
- if (is_multisite()) {
122
- add_action('network_admin_notices', array($this, '_jetpack_xml_rpc_notice'));
123
- }
124
- else {
125
- add_action('admin_notices', array($this, '_jetpack_xml_rpc_notice'));
 
 
126
  }
127
- }
128
-
129
- if (Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_CAPTCHA_TEST_MODE) && Controller_CAPTCHA::shared()->enabled() && Controller_Permissions::shared()->can_manage_settings()) {
130
- if (is_multisite()) {
131
- add_action('network_admin_notices', array($this, '_recaptcha_test_notice'));
 
 
 
132
  }
133
- else {
134
- add_action('admin_notices', array($this, '_recaptcha_test_notice'));
 
 
 
 
135
  }
136
  }
137
  }
@@ -147,6 +164,17 @@ END
147
  public function _recaptcha_test_notice() {
148
  echo '<div class="notice notice-warning"><p>' . wp_kses(sprintf(__('reCAPTCHA test mode is enabled. While enabled, login and registration requests will be checked for their score but will not be blocked if the score is below the minimum score. <a href="%s">Manage Settings</a>', 'wordfence-2fa'), esc_url(network_admin_url('admin.php?page=WFLS#top#settings'))), array('a'=>array('href'=>array()))) . '</p></div>';
149
  }
 
 
 
 
 
 
 
 
 
 
 
150
 
151
  /**
152
  * Installation/Uninstallation
@@ -210,11 +238,30 @@ END
210
  do_action('wfls_xml_rpc_blocked', 2);
211
  return false;
212
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
213
 
214
  /**
215
  * Login Page
216
- */
217
-
218
  public function _login_enqueue_scripts() {
219
  $useCAPTCHA = Controller_CAPTCHA::shared()->enabled();
220
  if ($useCAPTCHA) {
@@ -242,22 +289,19 @@ END
242
  ));
243
  }
244
  }
245
-
246
  /**
247
  * Admin Pages
248
  */
249
- public function _admin_enqueue_scripts() {
250
  if (isset($_GET['page']) && $_GET['page'] == 'WFLS') {
251
  wp_enqueue_script('wordfence-ls-jquery.qrcode', Model_Asset::js('jquery.qrcode.min.js'), array('jquery'), WORDFENCE_LS_VERSION);
252
  wp_enqueue_script('wordfence-ls-jquery.tmpl', Model_Asset::js('jquery.tmpl.min.js'), array('jquery'), WORDFENCE_LS_VERSION);
253
  wp_enqueue_script('wordfence-ls-jquery.colorbox', Model_Asset::js('jquery.colorbox.min.js'), array('jquery'), WORDFENCE_LS_VERSION);
254
  if (Controller_Permissions::shared()->can_manage_settings()) {
255
- wp_enqueue_script('wordfence-ls-jquery-ui.timepicker', Model_Asset::js('jquery-ui-timepicker-addon.js'), array('jquery', 'jquery-ui-datepicker', 'jquery-ui-slider'), WORDFENCE_LS_VERSION);
256
-
257
  wp_enqueue_style('wordfence-ls-jquery-ui-css', Model_Asset::css('jquery-ui.min.css'), array(), WORDFENCE_LS_VERSION);
258
  wp_enqueue_style('wordfence-ls-jquery-ui-css.structure', Model_Asset::css('jquery-ui.structure.min.css'), array(), WORDFENCE_LS_VERSION);
259
  wp_enqueue_style('wordfence-ls-jquery-ui-css.theme', Model_Asset::css('jquery-ui.theme.min.css'), array(), WORDFENCE_LS_VERSION);
260
- wp_enqueue_style('wordfence-ls-jquery-ui-css.timepicker', Model_Asset::css('jquery-ui-timepicker-addon.css'), array(), WORDFENCE_LS_VERSION);
261
  }
262
  wp_enqueue_script('wordfence-ls-admin', Model_Asset::js('admin.js'), array('jquery'), WORDFENCE_LS_VERSION);
263
  if (!WORDFENCE_LS_FROM_CORE) {
@@ -284,7 +328,7 @@ END
284
  wp_enqueue_style('wordfence-ls-admin-global', Model_Asset::css('admin-global.css'), array(), WORDFENCE_LS_VERSION);
285
  }
286
 
287
- if (Controller_Notices::shared()->has_notice(wp_get_current_user())) {
288
  wp_enqueue_script('wordfence-ls-admin-global', Model_Asset::js('admin-global.js'), array('jquery'), WORDFENCE_LS_VERSION);
289
 
290
  wp_localize_script('wordfence-ls-admin-global', 'GWFLSVars', array(
@@ -292,6 +336,7 @@ END
292
  'nonce' => wp_create_nonce('wp-ajax'),
293
  ));
294
  }
 
295
  }
296
 
297
  public function _edit_user_profile($user) {
@@ -310,44 +355,82 @@ END
310
  $manageURL = network_admin_url('admin.php?page=WFLS&user=' . ((int) $user->ID));
311
  }
312
  }
313
-
314
- if (Controller_Users::shared()->can_activate_2fa($user) && $user->ID == get_current_user_id()):
315
- ?>
316
- <h2><?php esc_html_e('Wordfence Login Security', 'wordfence-2fa'); ?></h2>
317
- <table class="form-table">
318
- <tr id="wordfence-ls">
319
- <th><label for="wordfence-ls-btn"><?php esc_html_e('2FA Status'); ?></label></th>
320
- <td>
321
- <p><strong><?php echo (Controller_Users::shared()->has_2fa_active($user) ? esc_html__('Active', 'wordfence-2fa') : esc_html__('Inactive', 'wordfence-2fa')); ?>:</strong> <?php echo (Controller_Users::shared()->has_2fa_active($user) ? esc_html__('Wordfence 2FA is active.', 'wordfence-2fa') : esc_html__('Wordfence 2FA is inactive.', 'wordfence-2fa')); ?> <a href="<?php echo Controller_Support::esc_supportURL(Controller_Support::ITEM_MODULE_LOGIN_SECURITY_2FA); ?>" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Learn More', 'wordfence-2fa'); ?></a></p>
322
- <p><a href="<?php echo esc_url($manageURL); ?>" class="button" id="wordfence-ls-btn"><?php echo (Controller_Users::shared()->has_2fa_active($user) ? esc_html__('Manage 2FA', 'wordfence-2fa') : esc_html__('Activate 2FA', 'wordfence-2fa')); ?></a></p>
323
- </td>
324
- </tr>
325
- </table>
326
- <?php
327
- elseif (current_user_can(Controller_Permissions::CAP_ACTIVATE_2FA_OTHERS)):
328
- ?>
329
- <h2><?php esc_html_e('Wordfence Login Security', 'wordfence-2fa'); ?></h2>
330
  <table class="form-table">
331
  <tr id="wordfence-ls">
332
  <th><label for="wordfence-ls-btn"><?php esc_html_e('2FA Status'); ?></label></th>
333
  <td>
334
- <?php if (Controller_Users::shared()->can_activate_2fa($user)): ?>
335
- <p><strong><?php echo (Controller_Users::shared()->has_2fa_active($user) ? esc_html__('Active', 'wordfence-2fa') : esc_html__('Inactive', 'wordfence-2fa')); ?>:</strong> <?php echo (Controller_Users::shared()->has_2fa_active($user) ? esc_html__('Wordfence 2FA is active.', 'wordfence-2fa') : esc_html__('Wordfence 2FA is inactive.', 'wordfence-2fa')); ?> <a href="<?php echo Controller_Support::esc_supportURL(Controller_Support::ITEM_MODULE_LOGIN_SECURITY_2FA); ?>" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Learn More', 'wordfence-2fa'); ?></a></p>
336
- <?php if (Controller_Users::shared()->has_2fa_active($user)): ?><p><a href="<?php echo esc_url($manageURL); ?>" class="button" id="wordfence-ls-btn"><?php echo esc_html__('Manage 2FA', 'wordfence-2fa'); ?></a></p><?php endif; ?>
337
- <?php else: ?>
338
- <p><strong><?php esc_html_e('Disabled', 'wordfence-2fa'); ?>:</strong> <?php esc_html_e('Two-factor authentication is not currently enabled for this account type. To enable it, visit the Wordfence 2FA Settings page.', 'wordfence-2fa'); ?> <a href="#"><?php esc_html_e('Learn More', 'wordfence-2fa'); ?></a></p>
339
- <p><a href="<?php echo esc_url(is_multisite() ? network_admin_url('admin.php?page=WFLS#top#settings') : admin_url('admin.php?page=WFLS#top#settings')); ?>" class="button" id="wordfence-ls-btn"><?php esc_html_e('Manage 2FA Settings', 'wordfence-2fa'); ?></a></p>
340
- <?php endif; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
341
  </td>
342
  </tr>
343
  </table>
344
- <?php
345
  endif;
346
  }
347
 
348
  /**
349
  * Authentication
350
  */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
351
 
352
  public function _authenticate($user, $username, $password) {
353
  if (defined('XMLRPC_REQUEST') && XMLRPC_REQUEST && !Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_XMLRPC_ENABLED)) { //XML-RPC call and we're not enforcing 2FA on it
@@ -370,13 +453,14 @@ END
370
  * themselves to opt out of the requirement.
371
  * 4. The user does not have 2FA enabled. 2FA exempts the user from requiring email verification if the score is
372
  * below the threshold.
 
373
  */
374
- if (!empty($username)) { //Login attempt, not just a wp-login.php page load
375
- $requireCAPTCHA = Controller_CAPTCHA::shared()->enabled() && !(defined('XMLRPC_REQUEST') && XMLRPC_REQUEST); //CAPTCHA is enabled, not an XML-RPC request
376
- $requireCAPTCHA = apply_filters('wordfence_ls_require_captcha', $requireCAPTCHA);
377
 
378
  $performVerification = false;
379
- $token = (isset($_POST['wfls-captcha-token']) && is_string($_POST['wfls-captcha-token']) ? $_POST['wfls-captcha-token'] : '');
380
  if ($requireCAPTCHA && empty($token) && !Controller_CAPTCHA::shared()->test_mode()) { //No CAPTCHA token means forced additional verification (if neither 2FA nor test mode are active)
381
  $performVerification = true;
382
  }
@@ -448,11 +532,17 @@ END
448
  if ($requireCAPTCHA && $performVerification) {
449
  $encrypted = Model_Symmetric::encrypt((string) $user->ID);
450
  if ($encrypted) {
 
 
 
 
 
 
451
  $jwt = new Model_JWT(array('user' => $encrypted), Controller_Time::time() + 60 * WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES);
452
  $view = new Model_View('email/login-verification', array(
453
  'siteName' => get_bloginfo('name', 'raw'),
454
  'siteURL' => rtrim(site_url(), '/') . '/',
455
- 'verificationURL' => add_query_arg(array('wfls-email-verification' => (string) $jwt), wp_login_url()),
456
  'ip' => Model_Request::current()->ip(),
457
  'canEnable2FA' => Controller_Users::shared()->can_activate_2fa($user),
458
  ));
@@ -577,6 +667,8 @@ END
577
  return $user;
578
  }
579
 
 
 
580
  if (Controller_Users::shared()->has_2fa_active($user)) {
581
  $legacy2FAActive = Controller_WordfenceLS::shared()->legacy_2fa_active();
582
  if ($legacy2FAActive) {
@@ -584,11 +676,11 @@ END
584
  }
585
  return new \WP_Error('wfls_twofactor_required', wp_kses(__('<strong>CODE REQUIRED</strong>: Please provide your 2FA code when prompted.', 'wordfence-2fa'), array('strong'=>array())));
586
  }
587
- else if (Controller_Users::shared()->requires_2fa($user)) {
588
- return new \WP_Error('wfls_twofactor_blocked', wp_kses(__('<strong>LOGIN BLOCKED</strong>: 2FA is required to be active on all administrator accounts.', 'wordfence-2fa'), array('strong'=>array())));
589
  }
590
- else if (defined('WFLS_WILL_BE_REQUIRED') && WFLS_WILL_BE_REQUIRED) {
591
- Controller_Notices::shared()->add_notice(Model_Notice::SEVERITY_CRITICAL, new Model_HTML(wp_kses(sprintf(__('You do not currently have two-factor authentication active on your account, which will be required beginning %s. <a href="%s">Configure 2FA</a>', 'wordfence-2fa'), Controller_Time::format_local_time('F j, Y', Controller_Settings::shared()->get_int(Controller_Settings::OPTION_REQUIRE_2FA_GRACE_PERIOD)), esc_url((is_multisite() && is_super_admin($user->ID)) ? network_admin_url('admin.php?page=WFLS') : admin_url('admin.php?page=WFLS'))), array('a'=>array('href'=>array())))), 'wfls-will-be-required', $user);
592
  }
593
  }
594
 
@@ -611,78 +703,34 @@ END
611
  }
612
 
613
  public function _register_post($sanitized_user_login, $user_email, $errors) {
614
- if (Controller_Whitelist::shared()->is_whitelisted(Model_Request::current()->ip())) { //Whitelisted, so we're not enforcing 2FA
615
- return;
616
- }
617
-
618
- /*
619
- * CAPTCHA Check
620
- *
621
- * It will be enforced so long as:
622
- *
623
- * 1. It's enabled and keys are set.
624
- * 2. This is not an XML-RPC request. An XML-RPC request is de facto an automated request, so a CAPTCHA makes
625
- * no sense.
626
- * 3. A filter does not override it. This is to allow plugins with REST endpoints that handle authentication
627
- * themselves to opt out of the requirement.
628
- */
629
- $requireCAPTCHA = Controller_CAPTCHA::shared()->enabled() && !(defined('XMLRPC_REQUEST') && XMLRPC_REQUEST); //CAPTCHA is enabled, not an XML-RPC request
630
- $requireCAPTCHA = apply_filters('wordfence_ls_require_captcha', $requireCAPTCHA);
631
-
632
- $token = (isset($_POST['wfls-captcha-token']) && is_string($_POST['wfls-captcha-token']) ? $_POST['wfls-captcha-token'] : '');
633
-
634
- if ($requireCAPTCHA && empty($token) && !empty($sanitized_user_login) && !Controller_CAPTCHA::shared()->test_mode()) { //A CAPTCHA token must be provided for the login attempt to proceed past this point except in test mode
635
- $errors->add('wfls_captcha_required', wp_kses(__('<strong>REGISTRATION ATTEMPT BLOCKED</strong>: This site requires a security token created when the page loads for all registration attempts. Please ensure JavaScript is enabled and try again.', 'wordfence-ls'), array('strong'=>array())));
636
- return;
637
- }
638
-
639
- $score = false;
640
- if ($requireCAPTCHA) {
641
- $score = Controller_CAPTCHA::shared()->score($token);
642
- if ($score === false && !Controller_CAPTCHA::shared()->test_mode()) { //The token must be valid except in test mode
643
- $errors->add('wfls_captcha_required', wp_kses(__('<strong>REGISTRATION ATTEMPT BLOCKED</strong>: The security token for the login attempt was invalid or expired. Please reload the page and try again.', 'wordfence-ls'), array('strong'=>array())));
644
- return;
645
- }
646
- }
647
-
648
- if ($requireCAPTCHA) {
649
- Controller_Users::shared()->record_captcha_score(null, $score);
650
-
651
- if (!Controller_CAPTCHA::shared()->is_human($score)) { //Score is below the human threshold, block the user registration
652
- $encryptedIP = Model_Symmetric::encrypt(Model_Request::current()->ip());
653
- $encryptedScore = Model_Symmetric::encrypt($score);
654
- if ($encryptedIP && $encryptedScore && filter_var(get_site_option('admin_email'), FILTER_VALIDATE_EMAIL)) {
655
- $jwt = new Model_JWT(array('ip' => $encryptedIP, 'score' => $encryptedScore), Controller_Time::time() + 600);
656
- $token = (string) $jwt;
657
 
658
- $message = wp_kses(sprintf(__('<strong>REGISTRATION BLOCKED</strong>: The registration request was blocked because it was flagged as spam. Please try again or <a href="#" class="wfls-registration-captcha-contact" data-token="%s">contact the site owner</a> for help.', 'wordfence-ls'), esc_attr($token)), array('strong'=>array(), 'a'=>array('href'=>array(), 'class'=>array(), 'data-token'=>array())));
659
- }
660
- else {
661
- $message = wp_kses(__('<strong>REGISTRATION BLOCKED</strong>: The registration request was blocked because it was flagged as spam. Please try again or contact the site owner for help.', 'wordfence-ls'), array('strong'=>array()));
 
 
 
 
662
  }
663
-
664
- /**
665
- * Fires just prior to blocking user registration due to a failed CAPTCHA. After firing this action hook
666
- * the registration attempt is blocked.
667
- *
668
- * @param int $source The source code of the block.
669
- */
670
- do_action('wfls_registration_blocked', 1);
671
-
672
- /**
673
- * Filters the message to show if registration is blocked due to a captcha rejection.
674
- *
675
- * @since 1.0.0
676
- *
677
- * @param string $message The message to display, HTML allowed.
678
- */
679
- $message = apply_filters('wfls_registration_blocked_message', $message);
680
- $errors->add('wfls_registration_blocked', $message);
681
- return;
682
  }
683
  }
684
  }
685
-
686
  /**
687
  * @param \WP_Error $errors
688
  * @param string $redirect_to
@@ -732,7 +780,8 @@ END
732
  public function _admin_menu() {
733
  $user = wp_get_current_user();
734
  if (Controller_Notices::shared()->has_notice($user)) {
735
- if (!Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_REQUIRE_2FA_ADMIN) || !(Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_REQUIRE_2FA_GRACE_PERIOD_ENABLED) && Controller_Time::time() < Controller_Settings::shared()->get_int(Controller_Settings::OPTION_REQUIRE_2FA_GRACE_PERIOD))) {
 
736
  Controller_Notices::shared()->remove_notice(false, 'wfls-will-be-required', $user);
737
  }
738
  }
@@ -773,25 +822,71 @@ END
773
  }
774
  }
775
  }
776
-
777
- $sections = array(
778
- array(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
779
  'tab' => new Model_Tab('manage', 'manage', __('Two-Factor Authentication', 'wordfence-2fa'), __('Two-Factor Authentication', 'wordfence-2fa')),
780
  'title' => new Model_Title('manage', __('Two-Factor Authentication', 'wordfence-2fa'), Controller_Support::supportURL(Controller_Support::ITEM_MODULE_LOGIN_SECURITY_2FA), new Model_HTML(wp_kses(__('Learn more<span class="wfls-hidden-xs"> about Two-Factor Authentication</span>', 'wordfence'), array('span'=>array('class'=>array()))))),
781
  'content' => new Model_View('page/manage', array(
782
  'user' => $user,
783
  'canEditUsers' => $canEditUsers,
784
  )),
785
- ),
786
- );
787
-
788
- if ($administrator) {
789
- $sections[] = array(
790
- 'tab' => new Model_Tab('settings', 'settings', __('Settings', 'wordfence-2fa'), __('Settings', 'wordfence-2fa')),
791
- 'title' => new Model_Title('settings', __('Login Security Settings', 'wordfence-2fa'), Controller_Support::supportURL(Controller_Support::ITEM_MODULE_LOGIN_SECURITY), new Model_HTML(wp_kses(__('Learn more<span class="wfls-hidden-xs"> about Login Security</span>', 'wordfence'), array('span'=>array('class'=>array()))))),
792
- 'content' => new Model_View('page/settings', array(
793
- )),
794
  );
 
 
 
 
 
 
 
 
 
 
795
  }
796
 
797
  $view = new Model_View('page/page', array(
@@ -799,4 +894,77 @@ END
799
  ));
800
  echo $view->render();
801
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
802
  }
10
 
11
  class Controller_WordfenceLS {
12
  const VERSION_KEY = 'wordfence_ls_version';
13
+ const USERS_PER_PAGE = 25;
14
 
15
  /**
16
  * Returns the singleton Controller_Wordfence2FA.
53
  add_action('wp_login', array($this, '_record_login'), 999, 1);
54
  add_action('register_post', array($this, '_register_post'), 25, 3);
55
  add_filter('wp_login_errors', array($this, '_wp_login_errors'), 25, 3);
56
+ if ($this->has_woocommerce() && Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_ENABLE_WOOCOMMERCE_INTEGRATION)) {
57
+ add_action('woocommerce_before_customer_login_form', array($this, '_woocommerce_login_enqueue_scripts'));
58
+ add_action('woocommerce_before_checkout_form', array($this, '_woocommerce_checkout_login_enqueue_scripts'));
59
+ add_action('wp_loaded', array($this, '_handle_woocommerce_registration'), 10, 0); //Woocommerce uses priority 20
60
+ }
61
+ add_action('user_new_form', array($this, '_user_new_form'));
62
+ add_action('user_register', array($this, '_user_register'));
63
 
64
  $useSubmenu = WORDFENCE_LS_FROM_CORE;
65
  if (is_multisite() && !is_network_admin()) {
124
  END
125
  );
126
  }
127
+
128
+ if (Controller_Permissions::shared()->can_manage_settings()) {
129
+ if ((is_plugin_active('jetpack/jetpack.php') || (is_multisite() && is_plugin_active_for_network('jetpack/jetpack.php'))) && !Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_ALLOW_XML_RPC)) {
130
+ if (is_multisite()) {
131
+ add_action('network_admin_notices', array($this, '_jetpack_xml_rpc_notice'));
132
+ }
133
+ else {
134
+ add_action('admin_notices', array($this, '_jetpack_xml_rpc_notice'));
135
+ }
136
  }
137
+
138
+ if (Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_CAPTCHA_TEST_MODE) && Controller_CAPTCHA::shared()->enabled()) {
139
+ if (is_multisite()) {
140
+ add_action('network_admin_notices', array($this, '_recaptcha_test_notice'));
141
+ }
142
+ else {
143
+ add_action('admin_notices', array($this, '_recaptcha_test_notice'));
144
+ }
145
  }
146
+
147
+ if ($this->has_woocommerce() && !Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_ENABLE_WOOCOMMERCE_INTEGRATION)) {
148
+ if (!Controller_Notices::shared()->is_persistent_notice_dismissed(get_current_user_id(), Controller_Notices::PERSISTENT_NOTICE_WOOCOMMERCE_INTEGRATION)) {
149
+ Controller_Notices::shared()->register_persistent_notice(Controller_Notices::PERSISTENT_NOTICE_WOOCOMMERCE_INTEGRATION);
150
+ add_action(is_multisite() ? 'network_admin_notices' : 'admin_notices', array($this, '_woocommerce_integration_notice'));
151
+ }
152
  }
153
  }
154
  }
164
  public function _recaptcha_test_notice() {
165
  echo '<div class="notice notice-warning"><p>' . wp_kses(sprintf(__('reCAPTCHA test mode is enabled. While enabled, login and registration requests will be checked for their score but will not be blocked if the score is below the minimum score. <a href="%s">Manage Settings</a>', 'wordfence-2fa'), esc_url(network_admin_url('admin.php?page=WFLS#top#settings'))), array('a'=>array('href'=>array()))) . '</p></div>';
166
  }
167
+
168
+ public function _woocommerce_integration_notice() {
169
+ ?>
170
+ <div id="<?php echo esc_attr(Controller_Notices::PERSISTENT_NOTICE_WOOCOMMERCE_INTEGRATION) ?>" class="notice notice-warning is-dismissible wfls-persistent-notice">
171
+ <p>
172
+ <?php esc_html_e('WooCommerce appears to be installed, but the Wordfence Login Security WooCommerce integration is not currently enabled. Without this feature, WooCommerce forms will not support all functionality provided by Wordfence Login Security, including CAPTCHA for the login page and user registration.', 'wordfence-2fa'); ?>
173
+ <a href="<?php echo esc_attr(esc_url(network_admin_url('admin.php?page=WFLS#top#settings'))) ?>"><?php esc_html_e('Manage Settings', 'wordfence-2fa') ?></a>
174
+ </p>
175
+ </div>
176
+ <?php
177
+ }
178
 
179
  /**
180
  * Installation/Uninstallation
238
  do_action('wfls_xml_rpc_blocked', 2);
239
  return false;
240
  }
241
+
242
+ private function has_woocommerce() {
243
+ return class_exists('woocommerce');
244
+ }
245
+
246
+ public function _woocommerce_login_enqueue_scripts() {
247
+ wp_enqueue_style('dashicons');
248
+ $this->_login_enqueue_scripts();
249
+ }
250
+
251
+ public function _woocommerce_checkout_login_enqueue_scripts() {
252
+ /**
253
+ * This is the same check used in WooCommerce to determine whether or not to display the checkout login form
254
+ * @see templates/checkout/form-login.php in WooCommerce
255
+ */
256
+ if ( is_user_logged_in() || 'no' === get_option( 'woocommerce_enable_checkout_login_reminder' ) ) {
257
+ return;
258
+ }
259
+ $this->_woocommerce_login_enqueue_scripts();
260
+ }
261
 
262
  /**
263
  * Login Page
264
+ */
 
265
  public function _login_enqueue_scripts() {
266
  $useCAPTCHA = Controller_CAPTCHA::shared()->enabled();
267
  if ($useCAPTCHA) {
289
  ));
290
  }
291
  }
292
+
293
  /**
294
  * Admin Pages
295
  */
296
+ public function _admin_enqueue_scripts($hookSuffix) {
297
  if (isset($_GET['page']) && $_GET['page'] == 'WFLS') {
298
  wp_enqueue_script('wordfence-ls-jquery.qrcode', Model_Asset::js('jquery.qrcode.min.js'), array('jquery'), WORDFENCE_LS_VERSION);
299
  wp_enqueue_script('wordfence-ls-jquery.tmpl', Model_Asset::js('jquery.tmpl.min.js'), array('jquery'), WORDFENCE_LS_VERSION);
300
  wp_enqueue_script('wordfence-ls-jquery.colorbox', Model_Asset::js('jquery.colorbox.min.js'), array('jquery'), WORDFENCE_LS_VERSION);
301
  if (Controller_Permissions::shared()->can_manage_settings()) {
 
 
302
  wp_enqueue_style('wordfence-ls-jquery-ui-css', Model_Asset::css('jquery-ui.min.css'), array(), WORDFENCE_LS_VERSION);
303
  wp_enqueue_style('wordfence-ls-jquery-ui-css.structure', Model_Asset::css('jquery-ui.structure.min.css'), array(), WORDFENCE_LS_VERSION);
304
  wp_enqueue_style('wordfence-ls-jquery-ui-css.theme', Model_Asset::css('jquery-ui.theme.min.css'), array(), WORDFENCE_LS_VERSION);
 
305
  }
306
  wp_enqueue_script('wordfence-ls-admin', Model_Asset::js('admin.js'), array('jquery'), WORDFENCE_LS_VERSION);
307
  if (!WORDFENCE_LS_FROM_CORE) {
328
  wp_enqueue_style('wordfence-ls-admin-global', Model_Asset::css('admin-global.css'), array(), WORDFENCE_LS_VERSION);
329
  }
330
 
331
+ if (Controller_Notices::shared()->has_notice(wp_get_current_user()) || in_array($hookSuffix, array('user-edit.php', 'user-new.php', 'profile.php'))) {
332
  wp_enqueue_script('wordfence-ls-admin-global', Model_Asset::js('admin-global.js'), array('jquery'), WORDFENCE_LS_VERSION);
333
 
334
  wp_localize_script('wordfence-ls-admin-global', 'GWFLSVars', array(
336
  'nonce' => wp_create_nonce('wp-ajax'),
337
  ));
338
  }
339
+
340
  }
341
 
342
  public function _edit_user_profile($user) {
355
  $manageURL = network_admin_url('admin.php?page=WFLS&user=' . ((int) $user->ID));
356
  }
357
  }
358
+ $userAllowed2fa = Controller_Users::shared()->can_activate_2fa($user);
359
+ $viewerIsUser = $user->ID == get_current_user_id();
360
+ $viewerCanManage2fa = current_user_can(Controller_Permissions::CAP_ACTIVATE_2FA_OTHERS);
361
+ $requires2fa = Controller_Users::shared()->requires_2fa($user, $inGracePeriod, $requiredAt);
362
+ $has2fa = Controller_Users::shared()->has_2fa_active($user);
363
+ $lockedOut = $requires2fa && !$has2fa;
364
+ $hasGracePeriod = Controller_Settings::shared()->get_user_2fa_grace_period() > 0;
365
+ if ($userAllowed2fa && ($viewerIsUser || $viewerCanManage2fa)):
366
+ ?>
367
+ <h2 id="wfls-user-settings"><?php esc_html_e('Wordfence Login Security', 'wordfence-2fa'); ?></h2>
 
 
 
 
 
 
 
368
  <table class="form-table">
369
  <tr id="wordfence-ls">
370
  <th><label for="wordfence-ls-btn"><?php esc_html_e('2FA Status'); ?></label></th>
371
  <td>
372
+ <?php if ($userAllowed2fa): ?>
373
+ <p>
374
+ <strong><?php echo $lockedOut ? esc_html__('Locked Out', 'wordfence-2fa') : ($has2fa ? esc_html__('Active', 'wordfence-2fa') : esc_html__('Inactive', 'wordfence-2fa')); ?>:</strong>
375
+ <?php echo $lockedOut ?
376
+ ($viewerIsUser ? esc_html__('Two-factor authentication is required for your account, but has not been configured.', 'wordfence-2fa') : esc_html__('Two-factor authentication is required for this account, but has not been configured.', 'wordfence-2fa'))
377
+ : ($has2fa ? esc_html__('Wordfence 2FA is active.', 'wordfence-2fa') : esc_html__('Wordfence 2FA is inactive.', 'wordfence-2fa')); ?>
378
+ <a href="<?php echo Controller_Support::esc_supportURL(Controller_Support::ITEM_MODULE_LOGIN_SECURITY_2FA); ?>" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Learn More', 'wordfence-2fa'); ?></a>
379
+ </p>
380
+ <?php if (!$has2fa && $inGracePeriod): ?>
381
+ <p><strong><?php echo sprintf($viewerIsUser ?
382
+ esc_html__('Two-factor authentication must be activated for your account prior to %s to avoid losing access.', 'wordfence-2fa')
383
+ : esc_html__('Two-factor authentication must be activated for this account prior to %s.', 'wordfence-2fa')
384
+ , Controller_Time::format_local_time('F j, Y g:i A', $requiredAt)) ?></strong></p>
385
+ <?php endif ?>
386
+ <?php if ($has2fa || $viewerIsUser): ?><p><a href="<?php echo esc_url($manageURL); ?>" class="button"><?php echo (Controller_Users::shared()->has_2fa_active($user) ? esc_html__('Manage 2FA', 'wordfence-2fa') : esc_html__('Activate 2FA', 'wordfence-2fa')); ?></a></p><?php endif ?>
387
+ <?php endif ?>
388
+ <?php if ($viewerCanManage2fa): ?>
389
+ <?php if (!$userAllowed2fa): ?>
390
+ <p><strong><?php esc_html_e('Disabled', 'wordfence-2fa'); ?>:</strong> <?php esc_html_e('Two-factor authentication is not currently enabled for this account type. To enable it, visit the Wordfence 2FA Settings page.', 'wordfence-2fa'); ?> <a href="#"><?php esc_html_e('Learn More', 'wordfence-2fa'); ?></a></p>
391
+ <?php endif ?>
392
+ <?php if ($lockedOut): ?>
393
+ <?php echo Model_View::create(
394
+ 'common/reset-grace-period',
395
+ array(
396
+ 'user' => $user,
397
+ 'gracePeriod' => $inGracePeriod
398
+ ))->render() ?>
399
+ <?php elseif ($inGracePeriod && Controller_Users::shared()->has_revokable_grace_period($user)): ?>
400
+ <?php echo Model_View::create(
401
+ 'common/revoke-grace-period',
402
+ array(
403
+ 'user' => $user
404
+ ))->render() ?>
405
+ <?php endif ?>
406
+ <p>
407
+ <a href="<?php echo esc_url(is_multisite() ? network_admin_url('admin.php?page=WFLS#top#settings') : admin_url('admin.php?page=WFLS#top#settings')); ?>" class="button"><?php esc_html_e('Manage 2FA Settings', 'wordfence-2fa'); ?></a>
408
+ </p>
409
+ <?php endif ?>
410
  </td>
411
  </tr>
412
  </table>
413
+ <?php
414
  endif;
415
  }
416
 
417
  /**
418
  * Authentication
419
  */
420
+
421
+ private function _is_woocommerce_login() {
422
+ if (!$this->has_woocommerce())
423
+ return false;
424
+ $nonceValue = '';
425
+ foreach (array('woocommerce-login-nonce', '_wpnonce') as $key) {
426
+ if (array_key_exists($key, $_REQUEST)) {
427
+ $nonceValue = $_REQUEST[$key];
428
+ break;
429
+ }
430
+ }
431
+
432
+ return ( isset( $_POST['login'], $_POST['username'], $_POST['password'] ) && is_string($nonceValue) && wp_verify_nonce( $nonceValue, 'woocommerce-login' ) );
433
+ }
434
 
435
  public function _authenticate($user, $username, $password) {
436
  if (defined('XMLRPC_REQUEST') && XMLRPC_REQUEST && !Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_XMLRPC_ENABLED)) { //XML-RPC call and we're not enforcing 2FA on it
453
  * themselves to opt out of the requirement.
454
  * 4. The user does not have 2FA enabled. 2FA exempts the user from requiring email verification if the score is
455
  * below the threshold.
456
+ * 5. The request is not a WooCommerce login while WC integration is disabled
457
  */
458
+ if (!empty($username) && (!$this->_is_woocommerce_login() || Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_ENABLE_WOOCOMMERCE_INTEGRATION))) { //Login attempt, not just a wp-login.php page load
459
+
460
+ $requireCAPTCHA = Controller_CAPTCHA::shared()->is_captcha_required();
461
 
462
  $performVerification = false;
463
+ $token = Controller_CAPTCHA::shared()->get_token();
464
  if ($requireCAPTCHA && empty($token) && !Controller_CAPTCHA::shared()->test_mode()) { //No CAPTCHA token means forced additional verification (if neither 2FA nor test mode are active)
465
  $performVerification = true;
466
  }
532
  if ($requireCAPTCHA && $performVerification) {
533
  $encrypted = Model_Symmetric::encrypt((string) $user->ID);
534
  if ($encrypted) {
535
+ if ($this->has_woocommerce() && array_key_exists('woocommerce-login-nonce', $_POST)) {
536
+ $loginUrl = get_permalink(get_option('woocommerce_myaccount_page_id'));
537
+ }
538
+ else {
539
+ $loginUrl = wp_login_url();
540
+ }
541
  $jwt = new Model_JWT(array('user' => $encrypted), Controller_Time::time() + 60 * WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES);
542
  $view = new Model_View('email/login-verification', array(
543
  'siteName' => get_bloginfo('name', 'raw'),
544
  'siteURL' => rtrim(site_url(), '/') . '/',
545
+ 'verificationURL' => add_query_arg(array('wfls-email-verification' => (string) $jwt), $loginUrl),
546
  'ip' => Model_Request::current()->ip(),
547
  'canEnable2FA' => Controller_Users::shared()->can_activate_2fa($user),
548
  ));
667
  return $user;
668
  }
669
 
670
+ $in2faGracePeriod = false;
671
+ $time2faRequired = null;
672
  if (Controller_Users::shared()->has_2fa_active($user)) {
673
  $legacy2FAActive = Controller_WordfenceLS::shared()->legacy_2fa_active();
674
  if ($legacy2FAActive) {
676
  }
677
  return new \WP_Error('wfls_twofactor_required', wp_kses(__('<strong>CODE REQUIRED</strong>: Please provide your 2FA code when prompted.', 'wordfence-2fa'), array('strong'=>array())));
678
  }
679
+ else if (Controller_Users::shared()->requires_2fa($user, $in2faGracePeriod, $time2faRequired)) {
680
+ return new \WP_Error('wfls_twofactor_blocked', wp_kses(__('<strong>LOGIN BLOCKED</strong>: 2FA is required to be active on your account. Please contact the site administrator.', 'wordfence-2fa'), array('strong'=>array())));
681
  }
682
+ else if ($in2faGracePeriod) {
683
+ Controller_Notices::shared()->add_notice(Model_Notice::SEVERITY_CRITICAL, new Model_HTML(wp_kses(sprintf(__('You do not currently have two-factor authentication active on your account, which will be required beginning %s. <a href="%s">Configure 2FA</a>', 'wordfence-2fa'), Controller_Time::format_local_time('F j, Y g:i A', $time2faRequired), esc_url((is_multisite() && is_super_admin($user->ID)) ? network_admin_url('admin.php?page=WFLS') : admin_url('admin.php?page=WFLS'))), array('a'=>array('href'=>array())))), 'wfls-will-be-required', $user);
684
  }
685
  }
686
 
703
  }
704
 
705
  public function _register_post($sanitized_user_login, $user_email, $errors) {
706
+ if (!empty($sanitized_user_login)) {
707
+ $captchaResult = $this->process_registration_captcha();
708
+ if ($captchaResult !== true) {
709
+ $message = $captchaResult['message'];
710
+ $category = $captchaResult['category'];
711
+ if ($category === 'wfls_registration_blocked') {
712
+ /**
713
+ * Fires just prior to blocking user registration due to a failed CAPTCHA. After firing this action hook
714
+ * the registration attempt is blocked.
715
+ *
716
+ * @param int $source The source code of the block.
717
+ */
718
+ do_action('wfls_registration_blocked', 1);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
719
 
720
+ /**
721
+ * Filters the message to show if registration is blocked due to a captcha rejection.
722
+ *
723
+ * @since 1.0.0
724
+ *
725
+ * @param string $message The message to display, HTML allowed.
726
+ */
727
+ $message = apply_filters('wfls_registration_blocked_message', $message);
728
  }
729
+ $errors->add($category, $message);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
730
  }
731
  }
732
  }
733
+
734
  /**
735
  * @param \WP_Error $errors
736
  * @param string $redirect_to
780
  public function _admin_menu() {
781
  $user = wp_get_current_user();
782
  if (Controller_Notices::shared()->has_notice($user)) {
783
+ Controller_Users::shared()->requires_2fa($user, $gracePeriod);
784
+ if (!$gracePeriod) {
785
  Controller_Notices::shared()->remove_notice(false, 'wfls-will-be-required', $user);
786
  }
787
  }
822
  }
823
  }
824
  }
825
+
826
+ $sections = array();
827
+
828
+ if (isset($_GET['role']) && $canEditUsers) {
829
+ $roleKey = $_GET['role'];
830
+ $roles = new \WP_Roles();
831
+ $role = $roles->get_role($roleKey);
832
+ $roleTitle = $roleKey === 'super-admin' ? __('Super Administrator', 'wordfence-2fa') : $roles->role_names[$roleKey];
833
+ $requiredAt = Controller_Settings::shared()->get_required_2fa_role_activation_time($roleKey);
834
+ $states = array(
835
+ 'grace_period' => array(
836
+ 'title' => __('Grace Period', 'wordfence-2fa'),
837
+ 'gracePeriod' => true
838
+ ),
839
+ 'locked_out' => array(
840
+ 'title' => __('Locked Out', 'wordfence-2fa'),
841
+ 'gracePeriod' => false
842
+ )
843
+ );
844
+ foreach ($states as $key => $state) {
845
+ $pageKey = "page_$key";
846
+ $page = isset($_GET[$pageKey]) ? max((int) $_GET[$pageKey], 1) : 1;
847
+ $title = $state['title'];
848
+ $lastPage = true;
849
+ if ($requiredAt === false)
850
+ $users = array();
851
+ else
852
+ $users = Controller_Users::shared()->get_inactive_2fa_users($roleKey, $state['gracePeriod'], $page, self::USERS_PER_PAGE, $lastPage);
853
+ $sections[] = array(
854
+ 'tab' => new Model_Tab($key, $key, $title, $title),
855
+ 'title' => new Model_Title($key, sprintf(__('Users without 2FA active (%s)', 'wordfence-2fa'), $title) . ' - ' . $roleTitle),
856
+ 'content' => new Model_View('page/role', array(
857
+ 'role' => $role,
858
+ 'roleTitle' => $roleTitle,
859
+ 'stateTitle' => $title,
860
+ 'requiredAt' => $requiredAt,
861
+ 'state' => $state,
862
+ 'users' => $users,
863
+ 'page' => $page,
864
+ 'lastPage' => $lastPage,
865
+ 'pageKey' => $pageKey,
866
+ 'stateKey' => $key
867
+ )),
868
+ );
869
+ }
870
+ }
871
+ else {
872
+ $sections[] = array(
873
  'tab' => new Model_Tab('manage', 'manage', __('Two-Factor Authentication', 'wordfence-2fa'), __('Two-Factor Authentication', 'wordfence-2fa')),
874
  'title' => new Model_Title('manage', __('Two-Factor Authentication', 'wordfence-2fa'), Controller_Support::supportURL(Controller_Support::ITEM_MODULE_LOGIN_SECURITY_2FA), new Model_HTML(wp_kses(__('Learn more<span class="wfls-hidden-xs"> about Two-Factor Authentication</span>', 'wordfence'), array('span'=>array('class'=>array()))))),
875
  'content' => new Model_View('page/manage', array(
876
  'user' => $user,
877
  'canEditUsers' => $canEditUsers,
878
  )),
 
 
 
 
 
 
 
 
 
879
  );
880
+
881
+ if ($administrator) {
882
+ $sections[] = array(
883
+ 'tab' => new Model_Tab('settings', 'settings', __('Settings', 'wordfence-2fa'), __('Settings', 'wordfence-2fa')),
884
+ 'title' => new Model_Title('settings', __('Login Security Settings', 'wordfence-2fa'), Controller_Support::supportURL(Controller_Support::ITEM_MODULE_LOGIN_SECURITY), new Model_HTML(wp_kses(__('Learn more<span class="wfls-hidden-xs"> about Login Security</span>', 'wordfence'), array('span'=>array('class'=>array()))))),
885
+ 'content' => new Model_View('page/settings', array(
886
+ 'hasWoocommerce' => $this->has_woocommerce()
887
+ )),
888
+ );
889
+ }
890
  }
891
 
892
  $view = new Model_View('page/page', array(
894
  ));
895
  echo $view->render();
896
  }
897
+
898
+ private function process_registration_captcha() {
899
+ if (Controller_Whitelist::shared()->is_whitelisted(Model_Request::current()->ip())) { //Whitelisted, so we're not enforcing 2FA
900
+ return true;
901
+ }
902
+
903
+ $captchaController = Controller_CAPTCHA::shared();
904
+ $requireCaptcha = $captchaController->is_captcha_required();
905
+ $token = $captchaController->get_token();
906
+
907
+ if ($requireCaptcha) {
908
+ if ($token === null && !$captchaController->test_mode()) {
909
+ return array(
910
+ 'message' => wp_kses(__('<strong>REGISTRATION ATTEMPT BLOCKED</strong>: This site requires a security token created when the page loads for all registration attempts. Please ensure JavaScript is enabled and try again.', 'wordfence-ls'), array('strong'=>array())),
911
+ 'category' => 'wfls_captcha_required'
912
+ );
913
+ }
914
+ $score = $captchaController->score($token);
915
+ if ($score === false && !$captchaController->test_mode()) {
916
+ return array(
917
+ 'message' => wp_kses(__('<strong>REGISTRATION ATTEMPT BLOCKED</strong>: The security token for the login attempt was invalid or expired. Please reload the page and try again.', 'wordfence-ls'), array('strong'=>array())),
918
+ 'category' => 'wfls_captcha_required'
919
+ );
920
+ }
921
+ Controller_Users::shared()->record_captcha_score(null, $token);
922
+ if (!$captchaController->is_human($score)) {
923
+ $encryptedIP = Model_Symmetric::encrypt(Model_Request::current()->ip());
924
+ $encryptedScore = Model_Symmetric::encrypt($score);
925
+ $result = array(
926
+ 'category' => 'wfls_registration_blocked'
927
+ );
928
+ if ($encryptedIP && $encryptedScore && filter_var(get_site_option('admin_email'), FILTER_VALIDATE_EMAIL)) {
929
+ $jwt = new Model_JWT(array('ip' => $encryptedIP, 'score' => $encryptedScore), Controller_Time::time() + 600);
930
+ $result['message'] = wp_kses(sprintf(__('<strong>REGISTRATION BLOCKED</strong>: The registration request was blocked because it was flagged as spam. Please try again or <a href="#" class="wfls-registration-captcha-contact" data-token="%s">contact the site owner</a> for help.', 'wordfence-ls'), esc_attr((string)$jwt)), array('strong'=>array(), 'a'=>array('href'=>array(), 'class'=>array(), 'data-token'=>array())));
931
+ }
932
+ else {
933
+ $result['message'] = wp_kses(__('<strong>REGISTRATION BLOCKED</strong>: The registration request was blocked because it was flagged as spam. Please try again or contact the site owner for help.', 'wordfence-ls'), array('strong'=>array()));
934
+ }
935
+ return $result;
936
+ }
937
+ }
938
+ return true;
939
+ }
940
+
941
+ private function disable_woocommerce_registration($message) {
942
+ if ($this->has_woocommerce()) {
943
+ remove_action('wp_loaded', array('WC_Form_Handler', 'process_registration'), 20);
944
+ wc_add_notice($message, 'error');
945
+ }
946
+ }
947
+
948
+ public function _handle_woocommerce_registration() {
949
+ if ($this->has_woocommerce() && isset($_POST['register'], $_POST['email']) && (isset($_POST['_wpnonce']) || isset($_POST['woocommerce-register-nonce']))) {
950
+ $captchaResult = $this->process_registration_captcha();
951
+ if ($captchaResult !== true) {
952
+ $this->disable_woocommerce_registration($captchaResult['message']);
953
+ }
954
+ }
955
+ }
956
+
957
+ public function _user_new_form() {
958
+ if (Controller_Settings::shared()->get_user_2fa_grace_period())
959
+ echo Model_View::create('user/grace-period-toggle', array())->render();
960
+ }
961
+
962
+ public function _user_register($newUserId) {
963
+ $creator = wp_get_current_user();
964
+ if (!Controller_Permissions::shared()->can_manage_settings($creator) || $creator->ID == $newUserId)
965
+ return;
966
+ if (isset($_POST['wfls-grace-period-toggle']))
967
+ Controller_Users::shared()->allow_grace_period($newUserId);
968
+ }
969
+
970
  }
modules/login-security/classes/model/view/title.php CHANGED
@@ -16,7 +16,7 @@ class Model_Title {
16
  private $_helpURL;
17
  private $_helpLink;
18
 
19
- public function __construct($id, $title, $helpURL, $helpLink) {
20
  $this->_id = $id;
21
  $this->_title = $title;
22
  $this->_helpURL = $helpURL;
16
  private $_helpURL;
17
  private $_helpLink;
18
 
19
+ public function __construct($id, $title, $helpURL = null, $helpLink = null) {
20
  $this->_id = $id;
21
  $this->_title = $title;
22
  $this->_helpURL = $helpURL;
modules/login-security/css/{admin-global.1623076348.css → admin-global.1629122067.css} RENAMED
@@ -1 +1 @@
1
- .wfls-clearfix:before,.wfls-clearfix:after{content:" ";display:table}.wfls-clearfix:after{clear:both}.wfls-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){.wfls-btn{padding:.5rem 1.25rem;font-size:.875rem;line-height:1.3125rem;border-radius:4px}}.wfls-btn:focus,.wfls-btn.wfls-focus,.wfls-btn:active:focus,.wfls-btn:active.wfls-focus,.wfls-btn.wfls-active:focus,.wfls-btn.wfls-active.wfls-focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.wfls-btn:hover,.wfls-btn:focus,.wfls-btn.wfls-focus{color:#00709e;text-decoration:none !important}.wfls-btn:active,.wfls-btn.wfls-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)}.wfls-btn.wfls-disabled,.wfls-btn[disabled],.wfls-btn[readonly],fieldset[disabled] .wfls-btn{cursor:not-allowed;-webkit-box-shadow:none;box-shadow:none}a.wfls-btn{text-decoration:none}a.wfls-btn.wfls-disabled,fieldset[disabled] a.wfls-btn{cursor:not-allowed;pointer-events:none}.wfls-btn-default{color:#00709e;background-color:#fff;border-color:#00709e}.wfls-btn-default:focus,.wfls-btn-default.focus{color:#00709e;background-color:#e6e6e6;border-color:#00161f}.wfls-btn-default:hover{color:#00709e;background-color:#e6e6e6;border-color:#004561}.wfls-btn-default:active,.wfls-btn-default.active,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle{color:#00709e;background-color:#e6e6e6;border-color:#004561}.wfls-btn-default:active:hover,.wfls-btn-default:active:focus,.wfls-btn-default:active.focus,.wfls-btn-default.active:hover,.wfls-btn-default.active:focus,.wfls-btn-default.active.focus,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle.focus{color:#00709e;background-color:#d4d4d4;border-color:#00161f}.wfls-btn-default:active,.wfls-btn-default.wfls-active,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle{background-image:none}.wfls-btn-default.wfls-disabled,.wfls-btn-default[disabled],.wfls-btn-default[readonly],fieldset[disabled] .wfls-btn-default{color:#777;background-color:#fff;border-color:#e2e2e2;cursor:not-allowed;opacity:0.75}.wfls-btn-default.wfls-disabled:hover,.wfls-btn-default.wfls-disabled:focus,.wfls-btn-default.wfls-disabled.wfls-focus,.wfls-btn-default[disabled]:hover,.wfls-btn-default[disabled]:focus,.wfls-btn-default[disabled].wfls-focus,.wfls-btn-default[readonly]:hover,.wfls-btn-default[readonly]:focus,.wfls-btn-default[readonly].wfls-focus,fieldset[disabled] .wfls-btn-default:hover,fieldset[disabled] .wfls-btn-default:focus,fieldset[disabled] .wfls-btn-default.wfls-focus{background-color:#fff;border-color:#00709e}.wfls-btn-default .wfls-badge{color:#fff;background-color:#00709e}.wfls-btn-primary{color:#fff;background-color:#00709e;border-color:#005e85}.wfls-btn-primary:focus,.wfls-btn-primary.focus{color:#fff;background-color:#004c6b;border-color:#000405}.wfls-btn-primary:hover{color:#fff;background-color:#004c6b;border-color:#003347}.wfls-btn-primary:active,.wfls-btn-primary.active,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle{color:#fff;background-color:#004c6b;border-color:#003347}.wfls-btn-primary:active:hover,.wfls-btn-primary:active:focus,.wfls-btn-primary:active.focus,.wfls-btn-primary.active:hover,.wfls-btn-primary.active:focus,.wfls-btn-primary.active.focus,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle.focus{color:#fff;background-color:#003347;border-color:#000405}.wfls-btn-primary:active,.wfls-btn-primary.wfls-active,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle{background-image:none}.wfls-btn-primary.wfls-disabled,.wfls-btn-primary[disabled],.wfls-btn-primary[readonly],fieldset[disabled] .wfls-btn-primary{color:#fff;background-color:#59a2c0;border-color:#5996b0;cursor:not-allowed;opacity:0.75}.wfls-btn-primary.wfls-disabled:hover,.wfls-btn-primary.wfls-disabled:focus,.wfls-btn-primary.wfls-disabled.wfls-focus,.wfls-btn-primary[disabled]:hover,.wfls-btn-primary[disabled]:focus,.wfls-btn-primary[disabled].wfls-focus,.wfls-btn-primary[readonly]:hover,.wfls-btn-primary[readonly]:focus,.wfls-btn-primary[readonly].wfls-focus,fieldset[disabled] .wfls-btn-primary:hover,fieldset[disabled] .wfls-btn-primary:focus,fieldset[disabled] .wfls-btn-primary.wfls-focus{background-color:#00709e;border-color:#005e85}.wfls-btn-primary .wfls-badge{color:#00709e;background-color:#fff}.wfls-btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.wfls-btn-success:focus,.wfls-btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.wfls-btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.wfls-btn-success:active,.wfls-btn-success.active,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.wfls-btn-success:active:hover,.wfls-btn-success:active:focus,.wfls-btn-success:active.focus,.wfls-btn-success.active:hover,.wfls-btn-success.active:focus,.wfls-btn-success.active.focus,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle.focus{color:#fff;background-color:#398439;border-color:#255625}.wfls-btn-success:active,.wfls-btn-success.wfls-active,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle{background-image:none}.wfls-btn-success.wfls-disabled,.wfls-btn-success[disabled],.wfls-btn-success[readonly],fieldset[disabled] .wfls-btn-success{color:#fff;background-color:#95d195;border-color:#8bca8b;cursor:not-allowed;opacity:0.75}.wfls-btn-success.wfls-disabled:hover,.wfls-btn-success.wfls-disabled:focus,.wfls-btn-success.wfls-disabled.wfls-focus,.wfls-btn-success[disabled]:hover,.wfls-btn-success[disabled]:focus,.wfls-btn-success[disabled].wfls-focus,.wfls-btn-success[readonly]:hover,.wfls-btn-success[readonly]:focus,.wfls-btn-success[readonly].wfls-focus,fieldset[disabled] .wfls-btn-success:hover,fieldset[disabled] .wfls-btn-success:focus,fieldset[disabled] .wfls-btn-success.wfls-focus{background-color:#5cb85c;border-color:#4cae4c}.wfls-btn-success .wfls-badge{color:#5cb85c;background-color:#fff}.wfls-btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.wfls-btn-info:focus,.wfls-btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.wfls-btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.wfls-btn-info:active,.wfls-btn-info.active,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.wfls-btn-info:active:hover,.wfls-btn-info:active:focus,.wfls-btn-info:active.focus,.wfls-btn-info.active:hover,.wfls-btn-info.active:focus,.wfls-btn-info.active.focus,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.wfls-btn-info:active,.wfls-btn-info.wfls-active,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle{background-image:none}.wfls-btn-info.wfls-disabled,.wfls-btn-info[disabled],.wfls-btn-info[readonly],fieldset[disabled] .wfls-btn-info{color:#fff;background-color:#94d6ea;border-color:#87d1e7;cursor:not-allowed;opacity:0.75}.wfls-btn-info.wfls-disabled:hover,.wfls-btn-info.wfls-disabled:focus,.wfls-btn-info.wfls-disabled.wfls-focus,.wfls-btn-info[disabled]:hover,.wfls-btn-info[disabled]:focus,.wfls-btn-info[disabled].wfls-focus,.wfls-btn-info[readonly]:hover,.wfls-btn-info[readonly]:focus,.wfls-btn-info[readonly].wfls-focus,fieldset[disabled] .wfls-btn-info:hover,fieldset[disabled] .wfls-btn-info:focus,fieldset[disabled] .wfls-btn-info.wfls-focus{background-color:#5bc0de;border-color:#46b8da}.wfls-btn-info .wfls-badge{color:#5bc0de;background-color:#fff}.wfls-btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.wfls-btn-warning:focus,.wfls-btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.wfls-btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.wfls-btn-warning:active,.wfls-btn-warning.active,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.wfls-btn-warning:active:hover,.wfls-btn-warning:active:focus,.wfls-btn-warning:active.focus,.wfls-btn-warning.active:hover,.wfls-btn-warning.active:focus,.wfls-btn-warning.active.focus,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.wfls-btn-warning:active,.wfls-btn-warning.wfls-active,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle{background-image:none}.wfls-btn-warning.wfls-disabled,.wfls-btn-warning[disabled],.wfls-btn-warning[readonly],fieldset[disabled] .wfls-btn-warning{color:#fff;background-color:#f5ca8c;border-color:#f4c37c;cursor:not-allowed;opacity:0.75}.wfls-btn-warning.wfls-disabled:hover,.wfls-btn-warning.wfls-disabled:focus,.wfls-btn-warning.wfls-disabled.wfls-focus,.wfls-btn-warning[disabled]:hover,.wfls-btn-warning[disabled]:focus,.wfls-btn-warning[disabled].wfls-focus,.wfls-btn-warning[readonly]:hover,.wfls-btn-warning[readonly]:focus,.wfls-btn-warning[readonly].wfls-focus,fieldset[disabled] .wfls-btn-warning:hover,fieldset[disabled] .wfls-btn-warning:focus,fieldset[disabled] .wfls-btn-warning.wfls-focus{background-color:#f0ad4e;border-color:#eea236}.wfls-btn-warning .wfls-badge{color:#f0ad4e;background-color:#fff}.wfls-btn-danger{color:#fff;background-color:#930000;border-color:#7a0000}.wfls-btn-danger:focus,.wfls-btn-danger.focus{color:#fff;background-color:#600000;border-color:#000}.wfls-btn-danger:hover{color:#fff;background-color:#600000;border-color:#3c0000}.wfls-btn-danger:active,.wfls-btn-danger.active,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle{color:#fff;background-color:#600000;border-color:#3c0000}.wfls-btn-danger:active:hover,.wfls-btn-danger:active:focus,.wfls-btn-danger:active.focus,.wfls-btn-danger.active:hover,.wfls-btn-danger.active:focus,.wfls-btn-danger.active.focus,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle.focus{color:#fff;background-color:#3c0000;border-color:#000}.wfls-btn-danger:active,.wfls-btn-danger.wfls-active,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle{background-image:none}.wfls-btn-danger.wfls-disabled,.wfls-btn-danger[disabled],.wfls-btn-danger[readonly],fieldset[disabled] .wfls-btn-danger{color:#fff;background-color:#b95959;border-color:#a95959;cursor:not-allowed;opacity:0.75}.wfls-btn-danger.wfls-disabled:hover,.wfls-btn-danger.wfls-disabled:focus,.wfls-btn-danger.wfls-disabled.wfls-focus,.wfls-btn-danger[disabled]:hover,.wfls-btn-danger[disabled]:focus,.wfls-btn-danger[disabled].wfls-focus,.wfls-btn-danger[readonly]:hover,.wfls-btn-danger[readonly]:focus,.wfls-btn-danger[readonly].wfls-focus,fieldset[disabled] .wfls-btn-danger:hover,fieldset[disabled] .wfls-btn-danger:focus,fieldset[disabled] .wfls-btn-danger.wfls-focus{background-color:#930000;border-color:#7a0000}.wfls-btn-danger .wfls-badge{color:#930000;background-color:#fff}.wfls-btn-callout{font-weight:600;text-transform:uppercase}.wfls-btn-callout-subtle{font-weight:400;text-transform:uppercase}.wfls-btn-link{color:#00709e;font-weight:normal;border-radius:0}.wfls-btn-link,.wfls-btn-link:active,.wfls-btn-link.wfls-active,.wfls-btn-link[disabled],fieldset[disabled] .wfls-btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.wfls-btn-link,.wfls-btn-link:hover,.wfls-btn-link:focus,.wfls-btn-link:active{border-color:transparent}.wfls-btn-link:hover,.wfls-btn-link:focus{color:#003a52;text-decoration:underline;background-color:transparent}.wfls-btn-link[disabled]:hover,.wfls-btn-link[disabled]:focus,fieldset[disabled] .wfls-btn-link:hover,fieldset[disabled] .wfls-btn-link:focus{color:#777;text-decoration:none}.wfls-btn-lg,.wfls-btn-group-lg>.wfls-btn{padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.wfls-btn-sm,.wfls-btn-group-sm>.wfls-btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.wfls-btn-xs,.wfls-btn-group-xs>.wfls-btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.wfls-btn-block{display:block;width:100%}.wfls-btn-block+.wfls-btn-block{margin-top:5px}input[type="submit"].wfls-btn-block,input[type="reset"].wfls-btn-block,input[type="button"].wfls-btn-block{width:100%}.wfls-btn-group,.wfls-btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.wfls-btn-group>.wfls-btn,.wfls-btn-group-vertical>.wfls-btn{position:relative;float:left}.wfls-btn-group>.wfls-btn:hover,.wfls-btn-group>.wfls-btn:focus,.wfls-btn-group>.wfls-btn:active,.wfls-btn-group>.wfls-btn.wfls-active,.wfls-btn-group-vertical>.wfls-btn:hover,.wfls-btn-group-vertical>.wfls-btn:focus,.wfls-btn-group-vertical>.wfls-btn:active,.wfls-btn-group-vertical>.wfls-btn.wfls-active{z-index:2}.wfls-btn-group .wfls-btn+.wfls-btn,.wfls-btn-group .wfls-btn+.wfls-btn-group,.wfls-btn-group .wfls-btn-group+.wfls-btn,.wfls-btn-group .wfls-btn-group+.wfls-btn-group{margin-left:-1px}.wfls-btn-toolbar{margin-left:-5px}.wfls-btn-toolbar:before,.wfls-btn-toolbar:after{content:" ";display:table}.wfls-btn-toolbar:after{clear:both}.wfls-btn-toolbar .wfls-btn,.wfls-btn-toolbar .wfls-btn-group,.wfls-btn-toolbar .wfls-input-group{float:left}.wfls-btn-toolbar>.wfls-btn,.wfls-btn-toolbar>.wfls-btn-group,.wfls-btn-toolbar>.wfls-input-group{margin-left:5px}.wfls-btn-group>.wfls-btn:not(:first-child):not(:last-child):not(.wfls-dropdown-toggle){border-radius:0}.wfls-btn-group>.wfls-btn:first-child{margin-left:0}.wfls-btn-group>.wfls-btn:first-child:not(:last-child):not(.wfls-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}.wfls-btn-group>.wfls-btn:last-child:not(:first-child),.wfls-btn-group>.wfls-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}.wfls-btn-group>.wfls-btn-group{float:left}.wfls-btn-group>.wfls-btn-group:not(:first-child):not(:last-child)>.wfls-btn{border-radius:0}.wfls-btn-group>.wfls-btn-group:first-child:not(:last-child)>.wfls-btn:last-child,.wfls-btn-group>.wfls-btn-group:first-child:not(:last-child)>.wfls-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}.wfls-btn-group>.wfls-btn-group:last-child:not(:first-child)>.wfls-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}.wfls-btn-group .wfls-dropdown-toggle:active,.wfls-btn-group.wfls-open .wfls-dropdown-toggle{outline:0}.wfls-btn-group>.wfls-btn+.wfls-dropdown-toggle{padding-left:8px;padding-right:8px}.wfls-btn-group>.wfls-btn-lg+.wfls-dropdown-toggle,.wfls-btn-group-lg.wfls-btn-group>.wfls-btn+.wfls-dropdown-toggle{padding-left:12px;padding-right:12px}.wfls-btn-group.open .wfls-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)}.wfls-btn-group.open .wfls-dropdown-toggle.wfls-btn-link{-webkit-box-shadow:none;box-shadow:none}.wfls-btn .wfls-caret{margin-left:0}.wfls-btn-lg .wfls-caret,.wfls-btn-group-lg>.wfls-btn .wfls-caret{border-width:5px 5px 0;border-bottom-width:0}.wfls-dropup .wfls-btn-lg .wfls-caret,.wfls-dropup .wfls-btn-group-lg>.wfls-btn .wfls-caret{border-width:0 5px 5px}.wfls-btn-group-vertical>.wfls-btn,.wfls-btn-group-vertical>.wfls-btn-group,.wfls-btn-group-vertical>.wfls-btn-group>.wfls-btn{display:block;float:none;width:100%;max-width:100%}.wfls-btn-group-vertical>.wfls-btn-group:before,.wfls-btn-group-vertical>.wfls-btn-group:after{content:" ";display:table}.wfls-btn-group-vertical>.wfls-btn-group:after{clear:both}.wfls-btn-group-vertical>.wfls-btn-group>.wfls-btn{float:none}.wfls-btn-group-vertical>.wfls-btn+.wfls-btn,.wfls-btn-group-vertical>.wfls-btn+.wfls-btn-group,.wfls-btn-group-vertical>.wfls-btn-group+.wfls-btn,.wfls-btn-group-vertical>.wfls-btn-group+.wfls-btn-group{margin-top:-1px;margin-left:0}.wfls-btn-group-vertical>.wfls-btn:not(:first-child):not(:last-child){border-radius:0}.wfls-btn-group-vertical>.wfls-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}.wfls-btn-group-vertical>.wfls-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}.wfls-btn-group-vertical>.wfls-btn-group:not(:first-child):not(:last-child)>.wfls-btn{border-radius:0}.wfls-btn-group-vertical>.wfls-btn-group:first-child:not(:last-child)>.wfls-btn:last-child,.wfls-btn-group-vertical>.wfls-btn-group:first-child:not(:last-child)>.wfls-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}.wfls-btn-group-vertical>.wfls-btn-group:last-child:not(:first-child)>.wfls-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}.wfls-btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.wfls-btn-group-justified>.wfls-btn,.wfls-btn-group-justified>.wfls-btn-group{float:none;display:table-cell;width:1%}.wfls-btn-group-justified>.wfls-btn-group .wfls-btn{width:100%}.wfls-btn-group-justified>.wfls-btn-group .wfls-dropdown-menu{left:auto}[data-toggle="buttons"]>.wfls-btn input[type="radio"],[data-toggle="buttons"]>.wfls-btn input[type="checkbox"],[data-toggle="buttons"]>.wfls-btn-group>.wfls-btn input[type="radio"],[data-toggle="buttons"]>.wfls-btn-group>.wfls-btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.wfls-pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.wfls-pagination>li{display:inline}.wfls-pagination>li>a,.wfls-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}.wfls-pagination>li:first-child>a,.wfls-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}.wfls-pagination>li:last-child>a,.wfls-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}.wfls-pagination>li>a:hover,.wfls-pagination>li>a:focus,.wfls-pagination>li>span:hover,.wfls-pagination>li>span:focus{z-index:2;color:#003a52;background-color:#e2e2e2;border-color:#ddd}.wfls-pagination>.wfls-active>a,.wfls-pagination>.wfls-active>a:hover,.wfls-pagination>.wfls-active>a:focus,.wfls-pagination>.wfls-active>span,.wfls-pagination>.wfls-active>span:hover,.wfls-pagination>.wfls-active>span:focus{z-index:3;color:#fff;background-color:#00709e;border-color:#00709e;cursor:default}.wfls-pagination>.wfls-disabled>span,.wfls-pagination>.wfls-disabled>span:hover,.wfls-pagination>.wfls-disabled>span:focus,.wfls-pagination>.wfls-disabled>a,.wfls-pagination>.wfls-disabled>a:hover,.wfls-pagination>.wfls-disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.wfls-pagination-lg>li>a,.wfls-pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.33333}.wfls-pagination-lg>li:first-child>a,.wfls-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}.wfls-pagination-lg>li:last-child>a,.wfls-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}.wfls-pagination-sm>li>a,.wfls-pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.wfls-pagination-sm>li:first-child>a,.wfls-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}.wfls-pagination-sm>li:last-child>a,.wfls-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}#wfls-notices{margin-top:15px}#wfls-notices .wfls-admin-notice{margin-left:0px;margin-right:0px}.wfls-success-text,.wfls-notice-text{display:inline-block;vertical-align:middle;line-height:1.3;font-size:16px;font-weight:bold;font-style:italic}.wfls-notice{margin:12px 0;padding:8px;background-color:#ffffe0;border:1px solid #ffd975;border-width:1px 1px 1px 10px}.wfls-notice-text{color:#6d798c}.wfls-success{margin:12px 0;padding:8px;background-color:#ffffff;border:1px solid #16bc9b;border-width:1px 1px 1px 10px}.wfls-success-text{color:#11967a}.wfls-premium-callout{border:1px solid #dfdfdf;background-color:#ffffff;padding:16px;margin:20px 0 0;text-align:center}.wfls-premium-callout ul{margin:8px 0;padding:0 0 0 15px}.wfls-premium-callout ul li{list-style-type:disc;margin:0;padding:0}.wfls-premium-callout .center{text-align:center;margin:0}.wfls-premium-callout .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709e}#toplevel_page_WFLS .wp-menu-image img{max-width:16px;max-height:16px}
1
+ .wfls-clearfix:before,.wfls-clearfix:after{content:" ";display:table}.wfls-clearfix:after{clear:both}.wfls-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){.wfls-btn{padding:.5rem 1.25rem;font-size:.875rem;line-height:1.3125rem;border-radius:4px}}.wfls-btn:focus,.wfls-btn.wfls-focus,.wfls-btn:active:focus,.wfls-btn:active.wfls-focus,.wfls-btn.wfls-active:focus,.wfls-btn.wfls-active.wfls-focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.wfls-btn:hover,.wfls-btn:focus,.wfls-btn.wfls-focus{color:#00709e;text-decoration:none !important}.wfls-btn:active,.wfls-btn.wfls-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)}.wfls-btn.wfls-disabled,.wfls-btn[disabled],.wfls-btn[readonly],fieldset[disabled] .wfls-btn{cursor:not-allowed;-webkit-box-shadow:none;box-shadow:none}a.wfls-btn{text-decoration:none}a.wfls-btn.wfls-disabled,fieldset[disabled] a.wfls-btn{cursor:not-allowed;pointer-events:none}.wfls-btn-default{color:#00709e;background-color:#fff;border-color:#00709e}.wfls-btn-default:focus,.wfls-btn-default.focus{color:#00709e;background-color:#e6e6e6;border-color:#00161f}.wfls-btn-default:hover{color:#00709e;background-color:#e6e6e6;border-color:#004561}.wfls-btn-default:active,.wfls-btn-default.active,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle{color:#00709e;background-color:#e6e6e6;border-color:#004561}.wfls-btn-default:active:hover,.wfls-btn-default:active:focus,.wfls-btn-default:active.focus,.wfls-btn-default.active:hover,.wfls-btn-default.active:focus,.wfls-btn-default.active.focus,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle.focus{color:#00709e;background-color:#d4d4d4;border-color:#00161f}.wfls-btn-default:active,.wfls-btn-default.wfls-active,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle{background-image:none}.wfls-btn-default.wfls-disabled,.wfls-btn-default[disabled],.wfls-btn-default[readonly],fieldset[disabled] .wfls-btn-default{color:#777;background-color:#fff;border-color:#e2e2e2;cursor:not-allowed;opacity:0.75}.wfls-btn-default.wfls-disabled:hover,.wfls-btn-default.wfls-disabled:focus,.wfls-btn-default.wfls-disabled.wfls-focus,.wfls-btn-default[disabled]:hover,.wfls-btn-default[disabled]:focus,.wfls-btn-default[disabled].wfls-focus,.wfls-btn-default[readonly]:hover,.wfls-btn-default[readonly]:focus,.wfls-btn-default[readonly].wfls-focus,fieldset[disabled] .wfls-btn-default:hover,fieldset[disabled] .wfls-btn-default:focus,fieldset[disabled] .wfls-btn-default.wfls-focus{background-color:#fff;border-color:#00709e}.wfls-btn-default .wfls-badge{color:#fff;background-color:#00709e}.wfls-btn-primary{color:#fff;background-color:#00709e;border-color:#005e85}.wfls-btn-primary:focus,.wfls-btn-primary.focus{color:#fff;background-color:#004c6b;border-color:#000405}.wfls-btn-primary:hover{color:#fff;background-color:#004c6b;border-color:#003347}.wfls-btn-primary:active,.wfls-btn-primary.active,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle{color:#fff;background-color:#004c6b;border-color:#003347}.wfls-btn-primary:active:hover,.wfls-btn-primary:active:focus,.wfls-btn-primary:active.focus,.wfls-btn-primary.active:hover,.wfls-btn-primary.active:focus,.wfls-btn-primary.active.focus,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle.focus{color:#fff;background-color:#003347;border-color:#000405}.wfls-btn-primary:active,.wfls-btn-primary.wfls-active,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle{background-image:none}.wfls-btn-primary.wfls-disabled,.wfls-btn-primary[disabled],.wfls-btn-primary[readonly],fieldset[disabled] .wfls-btn-primary{color:#fff;background-color:#59a2c0;border-color:#5996b0;cursor:not-allowed;opacity:0.75}.wfls-btn-primary.wfls-disabled:hover,.wfls-btn-primary.wfls-disabled:focus,.wfls-btn-primary.wfls-disabled.wfls-focus,.wfls-btn-primary[disabled]:hover,.wfls-btn-primary[disabled]:focus,.wfls-btn-primary[disabled].wfls-focus,.wfls-btn-primary[readonly]:hover,.wfls-btn-primary[readonly]:focus,.wfls-btn-primary[readonly].wfls-focus,fieldset[disabled] .wfls-btn-primary:hover,fieldset[disabled] .wfls-btn-primary:focus,fieldset[disabled] .wfls-btn-primary.wfls-focus{background-color:#00709e;border-color:#005e85}.wfls-btn-primary .wfls-badge{color:#00709e;background-color:#fff}.wfls-btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.wfls-btn-success:focus,.wfls-btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.wfls-btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.wfls-btn-success:active,.wfls-btn-success.active,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.wfls-btn-success:active:hover,.wfls-btn-success:active:focus,.wfls-btn-success:active.focus,.wfls-btn-success.active:hover,.wfls-btn-success.active:focus,.wfls-btn-success.active.focus,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle.focus{color:#fff;background-color:#398439;border-color:#255625}.wfls-btn-success:active,.wfls-btn-success.wfls-active,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle{background-image:none}.wfls-btn-success.wfls-disabled,.wfls-btn-success[disabled],.wfls-btn-success[readonly],fieldset[disabled] .wfls-btn-success{color:#fff;background-color:#95d195;border-color:#8bca8b;cursor:not-allowed;opacity:0.75}.wfls-btn-success.wfls-disabled:hover,.wfls-btn-success.wfls-disabled:focus,.wfls-btn-success.wfls-disabled.wfls-focus,.wfls-btn-success[disabled]:hover,.wfls-btn-success[disabled]:focus,.wfls-btn-success[disabled].wfls-focus,.wfls-btn-success[readonly]:hover,.wfls-btn-success[readonly]:focus,.wfls-btn-success[readonly].wfls-focus,fieldset[disabled] .wfls-btn-success:hover,fieldset[disabled] .wfls-btn-success:focus,fieldset[disabled] .wfls-btn-success.wfls-focus{background-color:#5cb85c;border-color:#4cae4c}.wfls-btn-success .wfls-badge{color:#5cb85c;background-color:#fff}.wfls-btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.wfls-btn-info:focus,.wfls-btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.wfls-btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.wfls-btn-info:active,.wfls-btn-info.active,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.wfls-btn-info:active:hover,.wfls-btn-info:active:focus,.wfls-btn-info:active.focus,.wfls-btn-info.active:hover,.wfls-btn-info.active:focus,.wfls-btn-info.active.focus,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.wfls-btn-info:active,.wfls-btn-info.wfls-active,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle{background-image:none}.wfls-btn-info.wfls-disabled,.wfls-btn-info[disabled],.wfls-btn-info[readonly],fieldset[disabled] .wfls-btn-info{color:#fff;background-color:#94d6ea;border-color:#87d1e7;cursor:not-allowed;opacity:0.75}.wfls-btn-info.wfls-disabled:hover,.wfls-btn-info.wfls-disabled:focus,.wfls-btn-info.wfls-disabled.wfls-focus,.wfls-btn-info[disabled]:hover,.wfls-btn-info[disabled]:focus,.wfls-btn-info[disabled].wfls-focus,.wfls-btn-info[readonly]:hover,.wfls-btn-info[readonly]:focus,.wfls-btn-info[readonly].wfls-focus,fieldset[disabled] .wfls-btn-info:hover,fieldset[disabled] .wfls-btn-info:focus,fieldset[disabled] .wfls-btn-info.wfls-focus{background-color:#5bc0de;border-color:#46b8da}.wfls-btn-info .wfls-badge{color:#5bc0de;background-color:#fff}.wfls-btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.wfls-btn-warning:focus,.wfls-btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.wfls-btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.wfls-btn-warning:active,.wfls-btn-warning.active,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.wfls-btn-warning:active:hover,.wfls-btn-warning:active:focus,.wfls-btn-warning:active.focus,.wfls-btn-warning.active:hover,.wfls-btn-warning.active:focus,.wfls-btn-warning.active.focus,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.wfls-btn-warning:active,.wfls-btn-warning.wfls-active,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle{background-image:none}.wfls-btn-warning.wfls-disabled,.wfls-btn-warning[disabled],.wfls-btn-warning[readonly],fieldset[disabled] .wfls-btn-warning{color:#fff;background-color:#f5ca8c;border-color:#f4c37c;cursor:not-allowed;opacity:0.75}.wfls-btn-warning.wfls-disabled:hover,.wfls-btn-warning.wfls-disabled:focus,.wfls-btn-warning.wfls-disabled.wfls-focus,.wfls-btn-warning[disabled]:hover,.wfls-btn-warning[disabled]:focus,.wfls-btn-warning[disabled].wfls-focus,.wfls-btn-warning[readonly]:hover,.wfls-btn-warning[readonly]:focus,.wfls-btn-warning[readonly].wfls-focus,fieldset[disabled] .wfls-btn-warning:hover,fieldset[disabled] .wfls-btn-warning:focus,fieldset[disabled] .wfls-btn-warning.wfls-focus{background-color:#f0ad4e;border-color:#eea236}.wfls-btn-warning .wfls-badge{color:#f0ad4e;background-color:#fff}.wfls-btn-danger{color:#fff;background-color:#930000;border-color:#7a0000}.wfls-btn-danger:focus,.wfls-btn-danger.focus{color:#fff;background-color:#600000;border-color:#000}.wfls-btn-danger:hover{color:#fff;background-color:#600000;border-color:#3c0000}.wfls-btn-danger:active,.wfls-btn-danger.active,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle{color:#fff;background-color:#600000;border-color:#3c0000}.wfls-btn-danger:active:hover,.wfls-btn-danger:active:focus,.wfls-btn-danger:active.focus,.wfls-btn-danger.active:hover,.wfls-btn-danger.active:focus,.wfls-btn-danger.active.focus,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle.focus{color:#fff;background-color:#3c0000;border-color:#000}.wfls-btn-danger:active,.wfls-btn-danger.wfls-active,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle{background-image:none}.wfls-btn-danger.wfls-disabled,.wfls-btn-danger[disabled],.wfls-btn-danger[readonly],fieldset[disabled] .wfls-btn-danger{color:#fff;background-color:#b95959;border-color:#a95959;cursor:not-allowed;opacity:0.75}.wfls-btn-danger.wfls-disabled:hover,.wfls-btn-danger.wfls-disabled:focus,.wfls-btn-danger.wfls-disabled.wfls-focus,.wfls-btn-danger[disabled]:hover,.wfls-btn-danger[disabled]:focus,.wfls-btn-danger[disabled].wfls-focus,.wfls-btn-danger[readonly]:hover,.wfls-btn-danger[readonly]:focus,.wfls-btn-danger[readonly].wfls-focus,fieldset[disabled] .wfls-btn-danger:hover,fieldset[disabled] .wfls-btn-danger:focus,fieldset[disabled] .wfls-btn-danger.wfls-focus{background-color:#930000;border-color:#7a0000}.wfls-btn-danger .wfls-badge{color:#930000;background-color:#fff}.wfls-btn-callout{font-weight:600;text-transform:uppercase}.wfls-btn-callout-subtle{font-weight:400;text-transform:uppercase}.wfls-btn-link{color:#00709e;font-weight:normal;border-radius:0}.wfls-btn-link,.wfls-btn-link:active,.wfls-btn-link.wfls-active,.wfls-btn-link[disabled],fieldset[disabled] .wfls-btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.wfls-btn-link,.wfls-btn-link:hover,.wfls-btn-link:focus,.wfls-btn-link:active{border-color:transparent}.wfls-btn-link:hover,.wfls-btn-link:focus{color:#003a52;text-decoration:underline;background-color:transparent}.wfls-btn-link[disabled]:hover,.wfls-btn-link[disabled]:focus,fieldset[disabled] .wfls-btn-link:hover,fieldset[disabled] .wfls-btn-link:focus{color:#777;text-decoration:none}.wfls-btn-lg,.wfls-btn-group-lg>.wfls-btn{padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.wfls-btn-sm,.wfls-btn-group-sm>.wfls-btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.wfls-btn-xs,.wfls-btn-group-xs>.wfls-btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.wfls-btn-block{display:block;width:100%}.wfls-btn-block+.wfls-btn-block{margin-top:5px}input[type="submit"].wfls-btn-block,input[type="reset"].wfls-btn-block,input[type="button"].wfls-btn-block{width:100%}.wfls-btn-group,.wfls-btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.wfls-btn-group>.wfls-btn,.wfls-btn-group-vertical>.wfls-btn{position:relative;float:left}.wfls-btn-group>.wfls-btn:hover,.wfls-btn-group>.wfls-btn:focus,.wfls-btn-group>.wfls-btn:active,.wfls-btn-group>.wfls-btn.wfls-active,.wfls-btn-group-vertical>.wfls-btn:hover,.wfls-btn-group-vertical>.wfls-btn:focus,.wfls-btn-group-vertical>.wfls-btn:active,.wfls-btn-group-vertical>.wfls-btn.wfls-active{z-index:2}.wfls-btn-group .wfls-btn+.wfls-btn,.wfls-btn-group .wfls-btn+.wfls-btn-group,.wfls-btn-group .wfls-btn-group+.wfls-btn,.wfls-btn-group .wfls-btn-group+.wfls-btn-group{margin-left:-1px}.wfls-btn-toolbar{margin-left:-5px}.wfls-btn-toolbar:before,.wfls-btn-toolbar:after{content:" ";display:table}.wfls-btn-toolbar:after{clear:both}.wfls-btn-toolbar .wfls-btn,.wfls-btn-toolbar .wfls-btn-group,.wfls-btn-toolbar .wfls-input-group{float:left}.wfls-btn-toolbar>.wfls-btn,.wfls-btn-toolbar>.wfls-btn-group,.wfls-btn-toolbar>.wfls-input-group{margin-left:5px}.wfls-btn-group>.wfls-btn:not(:first-child):not(:last-child):not(.wfls-dropdown-toggle){border-radius:0}.wfls-btn-group>.wfls-btn:first-child{margin-left:0}.wfls-btn-group>.wfls-btn:first-child:not(:last-child):not(.wfls-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}.wfls-btn-group>.wfls-btn:last-child:not(:first-child),.wfls-btn-group>.wfls-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}.wfls-btn-group>.wfls-btn-group{float:left}.wfls-btn-group>.wfls-btn-group:not(:first-child):not(:last-child)>.wfls-btn{border-radius:0}.wfls-btn-group>.wfls-btn-group:first-child:not(:last-child)>.wfls-btn:last-child,.wfls-btn-group>.wfls-btn-group:first-child:not(:last-child)>.wfls-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}.wfls-btn-group>.wfls-btn-group:last-child:not(:first-child)>.wfls-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}.wfls-btn-group .wfls-dropdown-toggle:active,.wfls-btn-group.wfls-open .wfls-dropdown-toggle{outline:0}.wfls-btn-group>.wfls-btn+.wfls-dropdown-toggle{padding-left:8px;padding-right:8px}.wfls-btn-group>.wfls-btn-lg+.wfls-dropdown-toggle,.wfls-btn-group-lg.wfls-btn-group>.wfls-btn+.wfls-dropdown-toggle{padding-left:12px;padding-right:12px}.wfls-btn-group.open .wfls-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)}.wfls-btn-group.open .wfls-dropdown-toggle.wfls-btn-link{-webkit-box-shadow:none;box-shadow:none}.wfls-btn .wfls-caret{margin-left:0}.wfls-btn-lg .wfls-caret,.wfls-btn-group-lg>.wfls-btn .wfls-caret{border-width:5px 5px 0;border-bottom-width:0}.wfls-dropup .wfls-btn-lg .wfls-caret,.wfls-dropup .wfls-btn-group-lg>.wfls-btn .wfls-caret{border-width:0 5px 5px}.wfls-btn-group-vertical>.wfls-btn,.wfls-btn-group-vertical>.wfls-btn-group,.wfls-btn-group-vertical>.wfls-btn-group>.wfls-btn{display:block;float:none;width:100%;max-width:100%}.wfls-btn-group-vertical>.wfls-btn-group:before,.wfls-btn-group-vertical>.wfls-btn-group:after{content:" ";display:table}.wfls-btn-group-vertical>.wfls-btn-group:after{clear:both}.wfls-btn-group-vertical>.wfls-btn-group>.wfls-btn{float:none}.wfls-btn-group-vertical>.wfls-btn+.wfls-btn,.wfls-btn-group-vertical>.wfls-btn+.wfls-btn-group,.wfls-btn-group-vertical>.wfls-btn-group+.wfls-btn,.wfls-btn-group-vertical>.wfls-btn-group+.wfls-btn-group{margin-top:-1px;margin-left:0}.wfls-btn-group-vertical>.wfls-btn:not(:first-child):not(:last-child){border-radius:0}.wfls-btn-group-vertical>.wfls-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}.wfls-btn-group-vertical>.wfls-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}.wfls-btn-group-vertical>.wfls-btn-group:not(:first-child):not(:last-child)>.wfls-btn{border-radius:0}.wfls-btn-group-vertical>.wfls-btn-group:first-child:not(:last-child)>.wfls-btn:last-child,.wfls-btn-group-vertical>.wfls-btn-group:first-child:not(:last-child)>.wfls-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}.wfls-btn-group-vertical>.wfls-btn-group:last-child:not(:first-child)>.wfls-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}.wfls-btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.wfls-btn-group-justified>.wfls-btn,.wfls-btn-group-justified>.wfls-btn-group{float:none;display:table-cell;width:1%}.wfls-btn-group-justified>.wfls-btn-group .wfls-btn{width:100%}.wfls-btn-group-justified>.wfls-btn-group .wfls-dropdown-menu{left:auto}[data-toggle="buttons"]>.wfls-btn input[type="radio"],[data-toggle="buttons"]>.wfls-btn input[type="checkbox"],[data-toggle="buttons"]>.wfls-btn-group>.wfls-btn input[type="radio"],[data-toggle="buttons"]>.wfls-btn-group>.wfls-btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.wfls-pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.wfls-pagination>li{display:inline}.wfls-pagination>li>a,.wfls-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}.wfls-pagination>li:first-child>a,.wfls-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}.wfls-pagination>li:last-child>a,.wfls-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}.wfls-pagination>li>a:hover,.wfls-pagination>li>a:focus,.wfls-pagination>li>span:hover,.wfls-pagination>li>span:focus{z-index:2;color:#003a52;background-color:#e2e2e2;border-color:#ddd}.wfls-pagination>.wfls-active>a,.wfls-pagination>.wfls-active>a:hover,.wfls-pagination>.wfls-active>a:focus,.wfls-pagination>.wfls-active>span,.wfls-pagination>.wfls-active>span:hover,.wfls-pagination>.wfls-active>span:focus{z-index:3;color:#fff;background-color:#00709e;border-color:#00709e;cursor:default}.wfls-pagination>.wfls-disabled>span,.wfls-pagination>.wfls-disabled>span:hover,.wfls-pagination>.wfls-disabled>span:focus,.wfls-pagination>.wfls-disabled>a,.wfls-pagination>.wfls-disabled>a:hover,.wfls-pagination>.wfls-disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.wfls-pagination-lg>li>a,.wfls-pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.33333}.wfls-pagination-lg>li:first-child>a,.wfls-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}.wfls-pagination-lg>li:last-child>a,.wfls-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}.wfls-pagination-sm>li>a,.wfls-pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.wfls-pagination-sm>li:first-child>a,.wfls-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}.wfls-pagination-sm>li:last-child>a,.wfls-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}#wfls-notices{margin-top:15px}#wfls-notices .wfls-admin-notice{margin-left:0px;margin-right:0px}.wfls-success-text,.wfls-notice-text{display:inline-block;vertical-align:middle;line-height:1.3;font-size:16px;font-weight:bold;font-style:italic}.wfls-notice{margin:12px 0;padding:8px;background-color:#ffffe0;border:1px solid #ffd975;border-width:1px 1px 1px 10px}.wfls-notice-text{color:#6d798c}.wfls-success{margin:12px 0;padding:8px;background-color:#ffffff;border:1px solid #16bc9b;border-width:1px 1px 1px 10px}.wfls-success-text{color:#11967a}.wfls-premium-callout{border:1px solid #dfdfdf;background-color:#ffffff;padding:16px;margin:20px 0 0;text-align:center}.wfls-premium-callout ul{margin:8px 0;padding:0 0 0 15px}.wfls-premium-callout ul li{list-style-type:disc;margin:0;padding:0}.wfls-premium-callout .center{text-align:center;margin:0}.wfls-premium-callout .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709e}small.wfls-sub-status{display:block}.wfls-grace-period-container{display:flex;align-items:center;justify-content:left;margin-bottom:1rem;margin-top:1rem}.wfls-grace-period-container .wfls-grace-period-input-container{margin-right:1.5rem;text-align:center}.wfls-grace-period-container .wfls-grace-period-input-container label{display:block;font-weight:bold}.wfls-grace-period-container .wfls-grace-period-input-container input{width:3em;text-align:center}#wfls-reset-grace-period-failed{text-align:center}#toplevel_page_WFLS .wp-menu-image img{max-width:16px;max-height:16px}
modules/login-security/css/admin.1623076348.css DELETED
@@ -1 +0,0 @@
1
- .wfls-clearfix:before,.wfls-clearfix:after{content:" ";display:table}.wfls-clearfix:after{clear:both}.wfls-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){.wfls-btn{padding:.5rem 1.25rem;font-size:.875rem;line-height:1.3125rem;border-radius:4px}}.wfls-btn:focus,.wfls-btn.wfls-focus,.wfls-btn:active:focus,.wfls-btn:active.wfls-focus,.wfls-btn.wfls-active:focus,.wfls-btn.wfls-active.wfls-focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.wfls-btn:hover,.wfls-btn:focus,.wfls-btn.wfls-focus{color:#00709e;text-decoration:none !important}.wfls-btn:active,.wfls-btn.wfls-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)}.wfls-btn.wfls-disabled,.wfls-btn[disabled],.wfls-btn[readonly],fieldset[disabled] .wfls-btn{cursor:not-allowed;-webkit-box-shadow:none;box-shadow:none}a.wfls-btn{text-decoration:none}a.wfls-btn.wfls-disabled,fieldset[disabled] a.wfls-btn{cursor:not-allowed;pointer-events:none}.wfls-btn-default{color:#00709e;background-color:#fff;border-color:#00709e}.wfls-btn-default:focus,.wfls-btn-default.focus{color:#00709e;background-color:#e6e6e6;border-color:#00161f}.wfls-btn-default:hover{color:#00709e;background-color:#e6e6e6;border-color:#004561}.wfls-btn-default:active,.wfls-btn-default.active,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle{color:#00709e;background-color:#e6e6e6;border-color:#004561}.wfls-btn-default:active:hover,.wfls-btn-default:active:focus,.wfls-btn-default:active.focus,.wfls-btn-default.active:hover,.wfls-btn-default.active:focus,.wfls-btn-default.active.focus,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle.focus{color:#00709e;background-color:#d4d4d4;border-color:#00161f}.wfls-btn-default:active,.wfls-btn-default.wfls-active,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle{background-image:none}.wfls-btn-default.wfls-disabled,.wfls-btn-default[disabled],.wfls-btn-default[readonly],fieldset[disabled] .wfls-btn-default{color:#777;background-color:#fff;border-color:#e2e2e2;cursor:not-allowed;opacity:0.75}.wfls-btn-default.wfls-disabled:hover,.wfls-btn-default.wfls-disabled:focus,.wfls-btn-default.wfls-disabled.wfls-focus,.wfls-btn-default[disabled]:hover,.wfls-btn-default[disabled]:focus,.wfls-btn-default[disabled].wfls-focus,.wfls-btn-default[readonly]:hover,.wfls-btn-default[readonly]:focus,.wfls-btn-default[readonly].wfls-focus,fieldset[disabled] .wfls-btn-default:hover,fieldset[disabled] .wfls-btn-default:focus,fieldset[disabled] .wfls-btn-default.wfls-focus{background-color:#fff;border-color:#00709e}.wfls-btn-default .wfls-badge{color:#fff;background-color:#00709e}.wfls-btn-primary{color:#fff;background-color:#00709e;border-color:#005e85}.wfls-btn-primary:focus,.wfls-btn-primary.focus{color:#fff;background-color:#004c6b;border-color:#000405}.wfls-btn-primary:hover{color:#fff;background-color:#004c6b;border-color:#003347}.wfls-btn-primary:active,.wfls-btn-primary.active,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle{color:#fff;background-color:#004c6b;border-color:#003347}.wfls-btn-primary:active:hover,.wfls-btn-primary:active:focus,.wfls-btn-primary:active.focus,.wfls-btn-primary.active:hover,.wfls-btn-primary.active:focus,.wfls-btn-primary.active.focus,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle.focus{color:#fff;background-color:#003347;border-color:#000405}.wfls-btn-primary:active,.wfls-btn-primary.wfls-active,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle{background-image:none}.wfls-btn-primary.wfls-disabled,.wfls-btn-primary[disabled],.wfls-btn-primary[readonly],fieldset[disabled] .wfls-btn-primary{color:#fff;background-color:#59a2c0;border-color:#5996b0;cursor:not-allowed;opacity:0.75}.wfls-btn-primary.wfls-disabled:hover,.wfls-btn-primary.wfls-disabled:focus,.wfls-btn-primary.wfls-disabled.wfls-focus,.wfls-btn-primary[disabled]:hover,.wfls-btn-primary[disabled]:focus,.wfls-btn-primary[disabled].wfls-focus,.wfls-btn-primary[readonly]:hover,.wfls-btn-primary[readonly]:focus,.wfls-btn-primary[readonly].wfls-focus,fieldset[disabled] .wfls-btn-primary:hover,fieldset[disabled] .wfls-btn-primary:focus,fieldset[disabled] .wfls-btn-primary.wfls-focus{background-color:#00709e;border-color:#005e85}.wfls-btn-primary .wfls-badge{color:#00709e;background-color:#fff}.wfls-btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.wfls-btn-success:focus,.wfls-btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.wfls-btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.wfls-btn-success:active,.wfls-btn-success.active,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.wfls-btn-success:active:hover,.wfls-btn-success:active:focus,.wfls-btn-success:active.focus,.wfls-btn-success.active:hover,.wfls-btn-success.active:focus,.wfls-btn-success.active.focus,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle.focus{color:#fff;background-color:#398439;border-color:#255625}.wfls-btn-success:active,.wfls-btn-success.wfls-active,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle{background-image:none}.wfls-btn-success.wfls-disabled,.wfls-btn-success[disabled],.wfls-btn-success[readonly],fieldset[disabled] .wfls-btn-success{color:#fff;background-color:#95d195;border-color:#8bca8b;cursor:not-allowed;opacity:0.75}.wfls-btn-success.wfls-disabled:hover,.wfls-btn-success.wfls-disabled:focus,.wfls-btn-success.wfls-disabled.wfls-focus,.wfls-btn-success[disabled]:hover,.wfls-btn-success[disabled]:focus,.wfls-btn-success[disabled].wfls-focus,.wfls-btn-success[readonly]:hover,.wfls-btn-success[readonly]:focus,.wfls-btn-success[readonly].wfls-focus,fieldset[disabled] .wfls-btn-success:hover,fieldset[disabled] .wfls-btn-success:focus,fieldset[disabled] .wfls-btn-success.wfls-focus{background-color:#5cb85c;border-color:#4cae4c}.wfls-btn-success .wfls-badge{color:#5cb85c;background-color:#fff}.wfls-btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.wfls-btn-info:focus,.wfls-btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.wfls-btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.wfls-btn-info:active,.wfls-btn-info.active,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.wfls-btn-info:active:hover,.wfls-btn-info:active:focus,.wfls-btn-info:active.focus,.wfls-btn-info.active:hover,.wfls-btn-info.active:focus,.wfls-btn-info.active.focus,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.wfls-btn-info:active,.wfls-btn-info.wfls-active,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle{background-image:none}.wfls-btn-info.wfls-disabled,.wfls-btn-info[disabled],.wfls-btn-info[readonly],fieldset[disabled] .wfls-btn-info{color:#fff;background-color:#94d6ea;border-color:#87d1e7;cursor:not-allowed;opacity:0.75}.wfls-btn-info.wfls-disabled:hover,.wfls-btn-info.wfls-disabled:focus,.wfls-btn-info.wfls-disabled.wfls-focus,.wfls-btn-info[disabled]:hover,.wfls-btn-info[disabled]:focus,.wfls-btn-info[disabled].wfls-focus,.wfls-btn-info[readonly]:hover,.wfls-btn-info[readonly]:focus,.wfls-btn-info[readonly].wfls-focus,fieldset[disabled] .wfls-btn-info:hover,fieldset[disabled] .wfls-btn-info:focus,fieldset[disabled] .wfls-btn-info.wfls-focus{background-color:#5bc0de;border-color:#46b8da}.wfls-btn-info .wfls-badge{color:#5bc0de;background-color:#fff}.wfls-btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.wfls-btn-warning:focus,.wfls-btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.wfls-btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.wfls-btn-warning:active,.wfls-btn-warning.active,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.wfls-btn-warning:active:hover,.wfls-btn-warning:active:focus,.wfls-btn-warning:active.focus,.wfls-btn-warning.active:hover,.wfls-btn-warning.active:focus,.wfls-btn-warning.active.focus,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.wfls-btn-warning:active,.wfls-btn-warning.wfls-active,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle{background-image:none}.wfls-btn-warning.wfls-disabled,.wfls-btn-warning[disabled],.wfls-btn-warning[readonly],fieldset[disabled] .wfls-btn-warning{color:#fff;background-color:#f5ca8c;border-color:#f4c37c;cursor:not-allowed;opacity:0.75}.wfls-btn-warning.wfls-disabled:hover,.wfls-btn-warning.wfls-disabled:focus,.wfls-btn-warning.wfls-disabled.wfls-focus,.wfls-btn-warning[disabled]:hover,.wfls-btn-warning[disabled]:focus,.wfls-btn-warning[disabled].wfls-focus,.wfls-btn-warning[readonly]:hover,.wfls-btn-warning[readonly]:focus,.wfls-btn-warning[readonly].wfls-focus,fieldset[disabled] .wfls-btn-warning:hover,fieldset[disabled] .wfls-btn-warning:focus,fieldset[disabled] .wfls-btn-warning.wfls-focus{background-color:#f0ad4e;border-color:#eea236}.wfls-btn-warning .wfls-badge{color:#f0ad4e;background-color:#fff}.wfls-btn-danger{color:#fff;background-color:#930000;border-color:#7a0000}.wfls-btn-danger:focus,.wfls-btn-danger.focus{color:#fff;background-color:#600000;border-color:#000}.wfls-btn-danger:hover{color:#fff;background-color:#600000;border-color:#3c0000}.wfls-btn-danger:active,.wfls-btn-danger.active,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle{color:#fff;background-color:#600000;border-color:#3c0000}.wfls-btn-danger:active:hover,.wfls-btn-danger:active:focus,.wfls-btn-danger:active.focus,.wfls-btn-danger.active:hover,.wfls-btn-danger.active:focus,.wfls-btn-danger.active.focus,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle.focus{color:#fff;background-color:#3c0000;border-color:#000}.wfls-btn-danger:active,.wfls-btn-danger.wfls-active,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle{background-image:none}.wfls-btn-danger.wfls-disabled,.wfls-btn-danger[disabled],.wfls-btn-danger[readonly],fieldset[disabled] .wfls-btn-danger{color:#fff;background-color:#b95959;border-color:#a95959;cursor:not-allowed;opacity:0.75}.wfls-btn-danger.wfls-disabled:hover,.wfls-btn-danger.wfls-disabled:focus,.wfls-btn-danger.wfls-disabled.wfls-focus,.wfls-btn-danger[disabled]:hover,.wfls-btn-danger[disabled]:focus,.wfls-btn-danger[disabled].wfls-focus,.wfls-btn-danger[readonly]:hover,.wfls-btn-danger[readonly]:focus,.wfls-btn-danger[readonly].wfls-focus,fieldset[disabled] .wfls-btn-danger:hover,fieldset[disabled] .wfls-btn-danger:focus,fieldset[disabled] .wfls-btn-danger.wfls-focus{background-color:#930000;border-color:#7a0000}.wfls-btn-danger .wfls-badge{color:#930000;background-color:#fff}.wfls-btn-callout{font-weight:600;text-transform:uppercase}.wfls-btn-callout-subtle{font-weight:400;text-transform:uppercase}.wfls-btn-link{color:#00709e;font-weight:normal;border-radius:0}.wfls-btn-link,.wfls-btn-link:active,.wfls-btn-link.wfls-active,.wfls-btn-link[disabled],fieldset[disabled] .wfls-btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.wfls-btn-link,.wfls-btn-link:hover,.wfls-btn-link:focus,.wfls-btn-link:active{border-color:transparent}.wfls-btn-link:hover,.wfls-btn-link:focus{color:#003a52;text-decoration:underline;background-color:transparent}.wfls-btn-link[disabled]:hover,.wfls-btn-link[disabled]:focus,fieldset[disabled] .wfls-btn-link:hover,fieldset[disabled] .wfls-btn-link:focus{color:#777;text-decoration:none}.wfls-btn-lg,.wfls-btn-group-lg>.wfls-btn{padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.wfls-btn-sm,.wfls-btn-group-sm>.wfls-btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.wfls-btn-xs,.wfls-btn-group-xs>.wfls-btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.wfls-btn-block{display:block;width:100%}.wfls-btn-block+.wfls-btn-block{margin-top:5px}input[type="submit"].wfls-btn-block,input[type="reset"].wfls-btn-block,input[type="button"].wfls-btn-block{width:100%}.wfls-btn-group,.wfls-btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.wfls-btn-group>.wfls-btn,.wfls-btn-group-vertical>.wfls-btn{position:relative;float:left}.wfls-btn-group>.wfls-btn:hover,.wfls-btn-group>.wfls-btn:focus,.wfls-btn-group>.wfls-btn:active,.wfls-btn-group>.wfls-btn.wfls-active,.wfls-btn-group-vertical>.wfls-btn:hover,.wfls-btn-group-vertical>.wfls-btn:focus,.wfls-btn-group-vertical>.wfls-btn:active,.wfls-btn-group-vertical>.wfls-btn.wfls-active{z-index:2}.wfls-btn-group .wfls-btn+.wfls-btn,.wfls-btn-group .wfls-btn+.wfls-btn-group,.wfls-btn-group .wfls-btn-group+.wfls-btn,.wfls-btn-group .wfls-btn-group+.wfls-btn-group{margin-left:-1px}.wfls-btn-toolbar{margin-left:-5px}.wfls-btn-toolbar:before,.wfls-btn-toolbar:after{content:" ";display:table}.wfls-btn-toolbar:after{clear:both}.wfls-btn-toolbar .wfls-btn,.wfls-btn-toolbar .wfls-btn-group,.wfls-btn-toolbar .wfls-input-group{float:left}.wfls-btn-toolbar>.wfls-btn,.wfls-btn-toolbar>.wfls-btn-group,.wfls-btn-toolbar>.wfls-input-group{margin-left:5px}.wfls-btn-group>.wfls-btn:not(:first-child):not(:last-child):not(.wfls-dropdown-toggle){border-radius:0}.wfls-btn-group>.wfls-btn:first-child{margin-left:0}.wfls-btn-group>.wfls-btn:first-child:not(:last-child):not(.wfls-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}.wfls-btn-group>.wfls-btn:last-child:not(:first-child),.wfls-btn-group>.wfls-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}.wfls-btn-group>.wfls-btn-group{float:left}.wfls-btn-group>.wfls-btn-group:not(:first-child):not(:last-child)>.wfls-btn{border-radius:0}.wfls-btn-group>.wfls-btn-group:first-child:not(:last-child)>.wfls-btn:last-child,.wfls-btn-group>.wfls-btn-group:first-child:not(:last-child)>.wfls-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}.wfls-btn-group>.wfls-btn-group:last-child:not(:first-child)>.wfls-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}.wfls-btn-group .wfls-dropdown-toggle:active,.wfls-btn-group.wfls-open .wfls-dropdown-toggle{outline:0}.wfls-btn-group>.wfls-btn+.wfls-dropdown-toggle{padding-left:8px;padding-right:8px}.wfls-btn-group>.wfls-btn-lg+.wfls-dropdown-toggle,.wfls-btn-group-lg.wfls-btn-group>.wfls-btn+.wfls-dropdown-toggle{padding-left:12px;padding-right:12px}.wfls-btn-group.open .wfls-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)}.wfls-btn-group.open .wfls-dropdown-toggle.wfls-btn-link{-webkit-box-shadow:none;box-shadow:none}.wfls-btn .wfls-caret{margin-left:0}.wfls-btn-lg .wfls-caret,.wfls-btn-group-lg>.wfls-btn .wfls-caret{border-width:5px 5px 0;border-bottom-width:0}.wfls-dropup .wfls-btn-lg .wfls-caret,.wfls-dropup .wfls-btn-group-lg>.wfls-btn .wfls-caret{border-width:0 5px 5px}.wfls-btn-group-vertical>.wfls-btn,.wfls-btn-group-vertical>.wfls-btn-group,.wfls-btn-group-vertical>.wfls-btn-group>.wfls-btn{display:block;float:none;width:100%;max-width:100%}.wfls-btn-group-vertical>.wfls-btn-group:before,.wfls-btn-group-vertical>.wfls-btn-group:after{content:" ";display:table}.wfls-btn-group-vertical>.wfls-btn-group:after{clear:both}.wfls-btn-group-vertical>.wfls-btn-group>.wfls-btn{float:none}.wfls-btn-group-vertical>.wfls-btn+.wfls-btn,.wfls-btn-group-vertical>.wfls-btn+.wfls-btn-group,.wfls-btn-group-vertical>.wfls-btn-group+.wfls-btn,.wfls-btn-group-vertical>.wfls-btn-group+.wfls-btn-group{margin-top:-1px;margin-left:0}.wfls-btn-group-vertical>.wfls-btn:not(:first-child):not(:last-child){border-radius:0}.wfls-btn-group-vertical>.wfls-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}.wfls-btn-group-vertical>.wfls-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}.wfls-btn-group-vertical>.wfls-btn-group:not(:first-child):not(:last-child)>.wfls-btn{border-radius:0}.wfls-btn-group-vertical>.wfls-btn-group:first-child:not(:last-child)>.wfls-btn:last-child,.wfls-btn-group-vertical>.wfls-btn-group:first-child:not(:last-child)>.wfls-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}.wfls-btn-group-vertical>.wfls-btn-group:last-child:not(:first-child)>.wfls-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}.wfls-btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.wfls-btn-group-justified>.wfls-btn,.wfls-btn-group-justified>.wfls-btn-group{float:none;display:table-cell;width:1%}.wfls-btn-group-justified>.wfls-btn-group .wfls-btn{width:100%}.wfls-btn-group-justified>.wfls-btn-group .wfls-dropdown-menu{left:auto}[data-toggle="buttons"]>.wfls-btn input[type="radio"],[data-toggle="buttons"]>.wfls-btn input[type="checkbox"],[data-toggle="buttons"]>.wfls-btn-group>.wfls-btn input[type="radio"],[data-toggle="buttons"]>.wfls-btn-group>.wfls-btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.wfls-pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.wfls-pagination>li{display:inline}.wfls-pagination>li>a,.wfls-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}.wfls-pagination>li:first-child>a,.wfls-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}.wfls-pagination>li:last-child>a,.wfls-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}.wfls-pagination>li>a:hover,.wfls-pagination>li>a:focus,.wfls-pagination>li>span:hover,.wfls-pagination>li>span:focus{z-index:2;color:#003a52;background-color:#e2e2e2;border-color:#ddd}.wfls-pagination>.wfls-active>a,.wfls-pagination>.wfls-active>a:hover,.wfls-pagination>.wfls-active>a:focus,.wfls-pagination>.wfls-active>span,.wfls-pagination>.wfls-active>span:hover,.wfls-pagination>.wfls-active>span:focus{z-index:3;color:#fff;background-color:#00709e;border-color:#00709e;cursor:default}.wfls-pagination>.wfls-disabled>span,.wfls-pagination>.wfls-disabled>span:hover,.wfls-pagination>.wfls-disabled>span:focus,.wfls-pagination>.wfls-disabled>a,.wfls-pagination>.wfls-disabled>a:hover,.wfls-pagination>.wfls-disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.wfls-pagination-lg>li>a,.wfls-pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.33333}.wfls-pagination-lg>li:first-child>a,.wfls-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}.wfls-pagination-lg>li:last-child>a,.wfls-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}.wfls-pagination-sm>li>a,.wfls-pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.wfls-pagination-sm>li:first-child>a,.wfls-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}.wfls-pagination-sm>li:last-child>a,.wfls-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}.wfls-visible-xs{display:none !important}.wfls-visible-sm{display:none !important}.wfls-visible-md{display:none !important}.wfls-visible-lg{display:none !important}.wfls-visible-xs-block,.wfls-visible-xs-inline,.wfls-visible-xs-inline-block,.wfls-visible-sm-block,.wfls-visible-sm-inline,.wfls-visible-sm-inline-block,.wfls-visible-md-block,.wfls-visible-md-inline,.wfls-visible-md-inline-block,.wfls-visible-lg-block,.wfls-visible-lg-inline,.wfls-visible-lg-inline-block{display:none !important}@media (max-width: 767px){.wfls-visible-xs{display:block !important}table.wfls-visible-xs{display:table !important}tr.wfls-visible-xs{display:table-row !important}th.wfls-visible-xs,td.wfls-visible-xs{display:table-cell !important}}@media (max-width: 767px){.wfls-visible-xs-block{display:block !important}}@media (max-width: 767px){.wfls-visible-xs-inline{display:inline !important}}@media (max-width: 767px){.wfls-visible-xs-inline-block{display:inline-block !important}}@media (min-width: 768px) and (max-width: 991px){.wfls-visible-sm{display:block !important}table.wfls-visible-sm{display:table !important}tr.wfls-visible-sm{display:table-row !important}th.wfls-visible-sm,td.wfls-visible-sm{display:table-cell !important}}@media (min-width: 768px) and (max-width: 991px){.wfls-visible-sm-block{display:block !important}}@media (min-width: 768px) and (max-width: 991px){.wfls-visible-sm-inline{display:inline !important}}@media (min-width: 768px) and (max-width: 991px){.wfls-visible-sm-inline-block{display:inline-block !important}}@media (min-width: 992px) and (max-width: 1199px){.wfls-visible-md{display:block !important}table.wfls-visible-md{display:table !important}tr.wfls-visible-md{display:table-row !important}th.wfls-visible-md,td.wfls-visible-md{display:table-cell !important}}@media (min-width: 992px) and (max-width: 1199px){.wfls-visible-md-block{display:block !important}}@media (min-width: 992px) and (max-width: 1199px){.wfls-visible-md-inline{display:inline !important}}@media (min-width: 992px) and (max-width: 1199px){.wfls-visible-md-inline-block{display:inline-block !important}}@media (min-width: 1200px){.wfls-visible-lg{display:block !important}table.wfls-visible-lg{display:table !important}tr.wfls-visible-lg{display:table-row !important}th.wfls-visible-lg,td.wfls-visible-lg{display:table-cell !important}}@media (min-width: 1200px){.wfls-visible-lg-block{display:block !important}}@media (min-width: 1200px){.wfls-visible-lg-inline{display:inline !important}}@media (min-width: 1200px){.wfls-visible-lg-inline-block{display:inline-block !important}}@media (max-width: 767px){.wfls-hidden-xs{display:none !important}}@media (min-width: 768px) and (max-width: 991px){.wfls-hidden-sm{display:none !important}}@media (min-width: 992px) and (max-width: 1199px){.wfls-hidden-md{display:none !important}}@media (min-width: 1200px){.wfls-hidden-lg{display:none !important}}.wfls-visible-print{display:none !important}@media print{.wfls-visible-print{display:block !important}table.wfls-visible-print{display:table !important}tr.wfls-visible-print{display:table-row !important}th.wfls-visible-print,td.wfls-visible-print{display:table-cell !important}}.wfls-visible-print-block{display:none !important}@media print{.wfls-visible-print-block{display:block !important}}.wfls-visible-print-inline{display:none !important}@media print{.wfls-visible-print-inline{display:inline !important}}.wfls-visible-print-inline-block{display:none !important}@media print{.wfls-visible-print-inline-block{display:inline-block !important}}@media print{.wfls-hidden-print{display:none !important}}.wfls-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.wfls-container:before,.wfls-container:after{content:" ";display:table}.wfls-container:after{clear:both}@media (min-width: 768px){.wfls-container{width:750px}}@media (min-width: 992px){.wfls-container{width:970px}}@media (min-width: 1200px){.wfls-container{width:1170px}}.wfls-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.wfls-container-fluid:before,.wfls-container-fluid:after{content:" ";display:table}.wfls-container-fluid:after{clear:both}.wfls-row{margin-left:-15px;margin-right:-15px}.wfls-row:before,.wfls-row:after{content:" ";display:table}.wfls-row:after{clear:both}.wfls-col-xs-1,.wfls-col-sm-1,.wfls-col-md-1,.wfls-col-lg-1,.wfls-col-xs-2,.wfls-col-sm-2,.wfls-col-md-2,.wfls-col-lg-2,.wfls-col-xs-3,.wfls-col-sm-3,.wfls-col-md-3,.wfls-col-lg-3,.wfls-col-xs-4,.wfls-col-sm-4,.wfls-col-md-4,.wfls-col-lg-4,.wfls-col-xs-5,.wfls-col-sm-5,.wfls-col-md-5,.wfls-col-lg-5,.wfls-col-xs-6,.wfls-col-sm-6,.wfls-col-md-6,.wfls-col-lg-6,.wfls-col-xs-7,.wfls-col-sm-7,.wfls-col-md-7,.wfls-col-lg-7,.wfls-col-xs-8,.wfls-col-sm-8,.wfls-col-md-8,.wfls-col-lg-8,.wfls-col-xs-9,.wfls-col-sm-9,.wfls-col-md-9,.wfls-col-lg-9,.wfls-col-xs-10,.wfls-col-sm-10,.wfls-col-md-10,.wfls-col-lg-10,.wfls-col-xs-11,.wfls-col-sm-11,.wfls-col-md-11,.wfls-col-lg-11,.wfls-col-xs-12,.wfls-col-sm-12,.wfls-col-md-12,.wfls-col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px;box-sizing:border-box}.wfls-col-xs-1,.wfls-col-xs-2,.wfls-col-xs-3,.wfls-col-xs-4,.wfls-col-xs-5,.wfls-col-xs-6,.wfls-col-xs-7,.wfls-col-xs-8,.wfls-col-xs-9,.wfls-col-xs-10,.wfls-col-xs-11,.wfls-col-xs-12{float:left}.wfls-col-xs-1{width:8.33333%}.wfls-col-xs-2{width:16.66667%}.wfls-col-xs-3{width:25%}.wfls-col-xs-4{width:33.33333%}.wfls-col-xs-5{width:41.66667%}.wfls-col-xs-6{width:50%}.wfls-col-xs-7{width:58.33333%}.wfls-col-xs-8{width:66.66667%}.wfls-col-xs-9{width:75%}.wfls-col-xs-10{width:83.33333%}.wfls-col-xs-11{width:91.66667%}.wfls-col-xs-12{width:100%}.wfls-col-xs-pull-0{right:auto}.wfls-col-xs-pull-1{right:8.33333%}.wfls-col-xs-pull-2{right:16.66667%}.wfls-col-xs-pull-3{right:25%}.wfls-col-xs-pull-4{right:33.33333%}.wfls-col-xs-pull-5{right:41.66667%}.wfls-col-xs-pull-6{right:50%}.wfls-col-xs-pull-7{right:58.33333%}.wfls-col-xs-pull-8{right:66.66667%}.wfls-col-xs-pull-9{right:75%}.wfls-col-xs-pull-10{right:83.33333%}.wfls-col-xs-pull-11{right:91.66667%}.wfls-col-xs-pull-12{right:100%}.wfls-col-xs-push-0{left:auto}.wfls-col-xs-push-1{left:8.33333%}.wfls-col-xs-push-2{left:16.66667%}.wfls-col-xs-push-3{left:25%}.wfls-col-xs-push-4{left:33.33333%}.wfls-col-xs-push-5{left:41.66667%}.wfls-col-xs-push-6{left:50%}.wfls-col-xs-push-7{left:58.33333%}.wfls-col-xs-push-8{left:66.66667%}.wfls-col-xs-push-9{left:75%}.wfls-col-xs-push-10{left:83.33333%}.wfls-col-xs-push-11{left:91.66667%}.wfls-col-xs-push-12{left:100%}.wfls-col-xs-offset-0{margin-left:0%}.wfls-col-xs-offset-1{margin-left:8.33333%}.wfls-col-xs-offset-2{margin-left:16.66667%}.wfls-col-xs-offset-3{margin-left:25%}.wfls-col-xs-offset-4{margin-left:33.33333%}.wfls-col-xs-offset-5{margin-left:41.66667%}.wfls-col-xs-offset-6{margin-left:50%}.wfls-col-xs-offset-7{margin-left:58.33333%}.wfls-col-xs-offset-8{margin-left:66.66667%}.wfls-col-xs-offset-9{margin-left:75%}.wfls-col-xs-offset-10{margin-left:83.33333%}.wfls-col-xs-offset-11{margin-left:91.66667%}.wfls-col-xs-offset-12{margin-left:100%}.wfls-col-xs-half-padding-left{padding-left:8px}.wfls-col-xs-half-padding-right{padding-right:7px}@media (min-width: 768px){.wfls-col-sm-1,.wfls-col-sm-2,.wfls-col-sm-3,.wfls-col-sm-4,.wfls-col-sm-5,.wfls-col-sm-6,.wfls-col-sm-7,.wfls-col-sm-8,.wfls-col-sm-9,.wfls-col-sm-10,.wfls-col-sm-11,.wfls-col-sm-12{float:left}.wfls-col-sm-1{width:8.33333%}.wfls-col-sm-2{width:16.66667%}.wfls-col-sm-3{width:25%}.wfls-col-sm-4{width:33.33333%}.wfls-col-sm-5{width:41.66667%}.wfls-col-sm-6{width:50%}.wfls-col-sm-7{width:58.33333%}.wfls-col-sm-8{width:66.66667%}.wfls-col-sm-9{width:75%}.wfls-col-sm-10{width:83.33333%}.wfls-col-sm-11{width:91.66667%}.wfls-col-sm-12{width:100%}.wfls-col-sm-pull-0{right:auto}.wfls-col-sm-pull-1{right:8.33333%}.wfls-col-sm-pull-2{right:16.66667%}.wfls-col-sm-pull-3{right:25%}.wfls-col-sm-pull-4{right:33.33333%}.wfls-col-sm-pull-5{right:41.66667%}.wfls-col-sm-pull-6{right:50%}.wfls-col-sm-pull-7{right:58.33333%}.wfls-col-sm-pull-8{right:66.66667%}.wfls-col-sm-pull-9{right:75%}.wfls-col-sm-pull-10{right:83.33333%}.wfls-col-sm-pull-11{right:91.66667%}.wfls-col-sm-pull-12{right:100%}.wfls-col-sm-push-0{left:auto}.wfls-col-sm-push-1{left:8.33333%}.wfls-col-sm-push-2{left:16.66667%}.wfls-col-sm-push-3{left:25%}.wfls-col-sm-push-4{left:33.33333%}.wfls-col-sm-push-5{left:41.66667%}.wfls-col-sm-push-6{left:50%}.wfls-col-sm-push-7{left:58.33333%}.wfls-col-sm-push-8{left:66.66667%}.wfls-col-sm-push-9{left:75%}.wfls-col-sm-push-10{left:83.33333%}.wfls-col-sm-push-11{left:91.66667%}.wfls-col-sm-push-12{left:100%}.wfls-col-sm-offset-0{margin-left:0%}.wfls-col-sm-offset-1{margin-left:8.33333%}.wfls-col-sm-offset-2{margin-left:16.66667%}.wfls-col-sm-offset-3{margin-left:25%}.wfls-col-sm-offset-4{margin-left:33.33333%}.wfls-col-sm-offset-5{margin-left:41.66667%}.wfls-col-sm-offset-6{margin-left:50%}.wfls-col-sm-offset-7{margin-left:58.33333%}.wfls-col-sm-offset-8{margin-left:66.66667%}.wfls-col-sm-offset-9{margin-left:75%}.wfls-col-sm-offset-10{margin-left:83.33333%}.wfls-col-sm-offset-11{margin-left:91.66667%}.wfls-col-sm-offset-12{margin-left:100%}.wfls-col-sm-half-padding-left{padding-left:8px}.wfls-col-sm-half-padding-right{padding-right:7px}}@media (min-width: 992px){.wfls-col-md-1,.wfls-col-md-2,.wfls-col-md-3,.wfls-col-md-4,.wfls-col-md-5,.wfls-col-md-6,.wfls-col-md-7,.wfls-col-md-8,.wfls-col-md-9,.wfls-col-md-10,.wfls-col-md-11,.wfls-col-md-12{float:left}.wfls-col-md-1{width:8.33333%}.wfls-col-md-2{width:16.66667%}.wfls-col-md-3{width:25%}.wfls-col-md-4{width:33.33333%}.wfls-col-md-5{width:41.66667%}.wfls-col-md-6{width:50%}.wfls-col-md-7{width:58.33333%}.wfls-col-md-8{width:66.66667%}.wfls-col-md-9{width:75%}.wfls-col-md-10{width:83.33333%}.wfls-col-md-11{width:91.66667%}.wfls-col-md-12{width:100%}.wfls-col-md-pull-0{right:auto}.wfls-col-md-pull-1{right:8.33333%}.wfls-col-md-pull-2{right:16.66667%}.wfls-col-md-pull-3{right:25%}.wfls-col-md-pull-4{right:33.33333%}.wfls-col-md-pull-5{right:41.66667%}.wfls-col-md-pull-6{right:50%}.wfls-col-md-pull-7{right:58.33333%}.wfls-col-md-pull-8{right:66.66667%}.wfls-col-md-pull-9{right:75%}.wfls-col-md-pull-10{right:83.33333%}.wfls-col-md-pull-11{right:91.66667%}.wfls-col-md-pull-12{right:100%}.wfls-col-md-push-0{left:auto}.wfls-col-md-push-1{left:8.33333%}.wfls-col-md-push-2{left:16.66667%}.wfls-col-md-push-3{left:25%}.wfls-col-md-push-4{left:33.33333%}.wfls-col-md-push-5{left:41.66667%}.wfls-col-md-push-6{left:50%}.wfls-col-md-push-7{left:58.33333%}.wfls-col-md-push-8{left:66.66667%}.wfls-col-md-push-9{left:75%}.wfls-col-md-push-10{left:83.33333%}.wfls-col-md-push-11{left:91.66667%}.wfls-col-md-push-12{left:100%}.wfls-col-md-offset-0{margin-left:0%}.wfls-col-md-offset-1{margin-left:8.33333%}.wfls-col-md-offset-2{margin-left:16.66667%}.wfls-col-md-offset-3{margin-left:25%}.wfls-col-md-offset-4{margin-left:33.33333%}.wfls-col-md-offset-5{margin-left:41.66667%}.wfls-col-md-offset-6{margin-left:50%}.wfls-col-md-offset-7{margin-left:58.33333%}.wfls-col-md-offset-8{margin-left:66.66667%}.wfls-col-md-offset-9{margin-left:75%}.wfls-col-md-offset-10{margin-left:83.33333%}.wfls-col-md-offset-11{margin-left:91.66667%}.wfls-col-md-offset-12{margin-left:100%}.wfls-col-md-half-padding-left{padding-left:8px}.wfls-col-md-half-padding-right{padding-right:7px}}@media (min-width: 1200px){.wfls-col-lg-1,.wfls-col-lg-2,.wfls-col-lg-3,.wfls-col-lg-4,.wfls-col-lg-5,.wfls-col-lg-6,.wfls-col-lg-7,.wfls-col-lg-8,.wfls-col-lg-9,.wfls-col-lg-10,.wfls-col-lg-11,.wfls-col-lg-12{float:left}.wfls-col-lg-1{width:8.33333%}.wfls-col-lg-2{width:16.66667%}.wfls-col-lg-3{width:25%}.wfls-col-lg-4{width:33.33333%}.wfls-col-lg-5{width:41.66667%}.wfls-col-lg-6{width:50%}.wfls-col-lg-7{width:58.33333%}.wfls-col-lg-8{width:66.66667%}.wfls-col-lg-9{width:75%}.wfls-col-lg-10{width:83.33333%}.wfls-col-lg-11{width:91.66667%}.wfls-col-lg-12{width:100%}.wfls-col-lg-pull-0{right:auto}.wfls-col-lg-pull-1{right:8.33333%}.wfls-col-lg-pull-2{right:16.66667%}.wfls-col-lg-pull-3{right:25%}.wfls-col-lg-pull-4{right:33.33333%}.wfls-col-lg-pull-5{right:41.66667%}.wfls-col-lg-pull-6{right:50%}.wfls-col-lg-pull-7{right:58.33333%}.wfls-col-lg-pull-8{right:66.66667%}.wfls-col-lg-pull-9{right:75%}.wfls-col-lg-pull-10{right:83.33333%}.wfls-col-lg-pull-11{right:91.66667%}.wfls-col-lg-pull-12{right:100%}.wfls-col-lg-push-0{left:auto}.wfls-col-lg-push-1{left:8.33333%}.wfls-col-lg-push-2{left:16.66667%}.wfls-col-lg-push-3{left:25%}.wfls-col-lg-push-4{left:33.33333%}.wfls-col-lg-push-5{left:41.66667%}.wfls-col-lg-push-6{left:50%}.wfls-col-lg-push-7{left:58.33333%}.wfls-col-lg-push-8{left:66.66667%}.wfls-col-lg-push-9{left:75%}.wfls-col-lg-push-10{left:83.33333%}.wfls-col-lg-push-11{left:91.66667%}.wfls-col-lg-push-12{left:100%}.wfls-col-lg-offset-0{margin-left:0%}.wfls-col-lg-offset-1{margin-left:8.33333%}.wfls-col-lg-offset-2{margin-left:16.66667%}.wfls-col-lg-offset-3{margin-left:25%}.wfls-col-lg-offset-4{margin-left:33.33333%}.wfls-col-lg-offset-5{margin-left:41.66667%}.wfls-col-lg-offset-6{margin-left:50%}.wfls-col-lg-offset-7{margin-left:58.33333%}.wfls-col-lg-offset-8{margin-left:66.66667%}.wfls-col-lg-offset-9{margin-left:75%}.wfls-col-lg-offset-10{margin-left:83.33333%}.wfls-col-lg-offset-11{margin-left:91.66667%}.wfls-col-lg-offset-12{margin-left:100%}.wfls-col-lg-half-padding-left{padding-left:8px}.wfls-col-lg-half-padding-right{padding-right:7px}}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.wfls-plain{font-weight:normal}label.wfls-control-label.wfls-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}.wfls-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}.wfls-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)}.wfls-form-control::-moz-placeholder{color:#bfbfbf;opacity:1}.wfls-form-control:-ms-input-placeholder{color:#bfbfbf}.wfls-form-control::-webkit-input-placeholder{color:#bfbfbf}.wfls-form-control::-ms-expand{border:0;background-color:transparent}.wfls-form-control[disabled],.wfls-form-control[readonly],fieldset[disabled] .wfls-form-control{background-color:#e2e2e2;opacity:1}.wfls-form-control[disabled],.wfls-form-control[readonly],fieldset[disabled] .wfls-form-control{cursor:not-allowed;pointer-events:none}textarea.wfls-form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"].wfls-form-control,input[type="time"].wfls-form-control,input[type="datetime-local"].wfls-form-control,input[type="month"].wfls-form-control{line-height:38px}input[type="date"].wfls-input-sm,.wfls-input-group-sm input[type="date"],input[type="time"].wfls-input-sm,.wfls-input-group-sm input[type="time"],input[type="datetime-local"].wfls-input-sm,.wfls-input-group-sm input[type="datetime-local"],input[type="month"].wfls-input-sm,.wfls-input-group-sm input[type="month"]{line-height:30px}input[type="date"].wfls-input-lg,.wfls-input-group-lg input[type="date"],input[type="time"].wfls-input-lg,.wfls-input-group-lg input[type="time"],input[type="datetime-local"].wfls-input-lg,.wfls-input-group-lg input[type="datetime-local"],input[type="month"].wfls-input-lg,.wfls-input-group-lg input[type="month"]{line-height:46px}}.wfls-form-group{margin-bottom:8px}.wfls-form-group.wfls-sub-group label{color:#666666;font-weight:normal;padding-left:20px}.wfls-form-group.wfls-focus{border-left:4px solid #11967a;padding-bottom:8px;background-color:#e5e5e5}.wfls-form-group.wfls-focus label{margin-left:-4px}.wfls-radio,.wfls-checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.wfls-radio label,.wfls-checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.wfls-radio input[type="radio"],.wfls-radio-inline input[type="radio"],.wfls-checkbox input[type="checkbox"],.wfls-checkbox-inline input[type="checkbox"]{margin-top:4px \9}.wfls-radio-offset{padding-left:29px}@media (min-width: 768px){.wfls-radio-offset{padding-left:20px}}.wfls-radio+.wfls-radio,.wfls-checkbox+.wfls-checkbox{margin-top:-5px}.wfls-radio-inline,.wfls-checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.wfls-radio-inline+.wfls-radio-inline,.wfls-checkbox-inline+.wfls-checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="radio"][readonly],input[type="radio"].wfls-disabled,fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],input[type="checkbox"][readonly],input[type="checkbox"].wfls-disabled,fieldset[disabled] input[type="checkbox"]{cursor:not-allowed;pointer-events:none}.wfls-radio-inline.wfls-disabled,fieldset[disabled] .wfls-radio-inline,.wfls-checkbox-inline.wfls-disabled,fieldset[disabled] .wfls-checkbox-inline{cursor:not-allowed}.wfls-radio.wfls-disabled label,fieldset[disabled] .wfls-radio label,.wfls-checkbox.wfls-disabled label,fieldset[disabled] .wfls-checkbox label{cursor:not-allowed;pointer-events:none}.wfls-form-control-static{padding-top:1.5rem;padding-bottom:1.5rem;margin:0;line-height:1}.wfls-form-control-static.wfls-input-lg,.wfls-form-control-static.wfls-input-sm{padding-left:0;padding-right:0}.wfls-input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.wfls-input-sm{height:30px;line-height:30px}textarea.wfls-input-sm,select[multiple].wfls-input-sm{height:auto}.wfls-form-group-sm .wfls-form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.wfls-form-group-sm select.wfls-form-control{height:30px;line-height:30px}.wfls-form-group-sm textarea.wfls-form-control,.wfls-form-group-sm select[multiple].wfls-form-control{height:auto}.wfls-form-group-sm .wfls-form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.wfls-input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}select.wfls-input-lg{height:46px;line-height:46px}textarea.wfls-input-lg,select[multiple].wfls-input-lg{height:auto}.wfls-form-group-lg .wfls-form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.wfls-form-group-lg select.wfls-form-control{height:46px;line-height:46px}.wfls-form-group-lg textarea.wfls-form-control,.wfls-form-group-lg select[multiple].wfls-form-control{height:auto}.wfls-form-group-lg .wfls-form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.33333}.wfls-has-feedback{position:relative}.wfls-has-feedback .wfls-form-control{padding-right:47.5px}.wfls-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}.wfls-input-lg+.wfls-form-control-feedback,.wfls-input-group-lg+.wfls-form-control-feedback,.wfls-form-group-lg .wfls-form-control+.wfls-form-control-feedback{width:46px;height:46px;line-height:46px}.wfls-input-sm+.wfls-form-control-feedback,.wfls-input-group-sm+.wfls-form-control-feedback,.wfls-form-group-sm .wfls-form-control+.wfls-form-control-feedback{width:30px;height:30px;line-height:30px}.wfls-has-success .wfls-help-block,.wfls-has-success .wfls-control-label,.wfls-has-success .wfls-radio,.wfls-has-success .wfls-checkbox,.wfls-has-success .wfls-radio-inline,.wfls-has-success .wfls-checkbox-inline,.wfls-has-success.wfls-radio label,.wfls-has-success.wfls-checkbox label,.wfls-has-success.wfls-radio-inline label,.wfls-has-success.wfls-checkbox-inline label{color:#3c763d}.wfls-has-success .wfls-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)}.wfls-has-success .wfls-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}.wfls-has-success .wfls-input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.wfls-has-success .wfls-form-control-feedback{color:#3c763d}.wfls-has-warning .wfls-help-block,.wfls-has-warning .wfls-control-label,.wfls-has-warning .wfls-radio,.wfls-has-warning .wfls-checkbox,.wfls-has-warning .wfls-radio-inline,.wfls-has-warning .wfls-checkbox-inline,.wfls-has-warning.wfls-radio label,.wfls-has-warning.wfls-checkbox label,.wfls-has-warning.wfls-radio-inline label,.wfls-has-warning.wfls-checkbox-inline label{color:#8a6d3b}.wfls-has-warning .wfls-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)}.wfls-has-warning .wfls-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}.wfls-has-warning .wfls-input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.wfls-has-warning .wfls-form-control-feedback{color:#8a6d3b}.wfls-has-error .wfls-help-block,.wfls-has-error .wfls-control-label,.wfls-has-error .wfls-radio,.wfls-has-error .wfls-checkbox,.wfls-has-error .wfls-radio-inline,.wfls-has-error .wfls-checkbox-inline,.wfls-has-error.wfls-radio label,.wfls-has-error.wfls-checkbox label,.wfls-has-error.wfls-radio-inline label,.wfls-has-error.wfls-checkbox-inline label{color:#a94442}.wfls-has-error .wfls-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)}.wfls-has-error .wfls-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}.wfls-has-error .wfls-input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.wfls-has-error .wfls-form-control-feedback{color:#a94442}.wfls-has-feedback label ~ .wfls-form-control-feedback{top:25px}.wfls-has-feedback label.wfls-sr-only ~ .wfls-form-control-feedback{top:0}.wfls-help-block{display:block;margin-top:5px;color:#737373}@media (min-width: 768px){.wfls-form-inline .wfls-form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.wfls-form-inline .wfls-form-control{display:inline-block;width:auto;vertical-align:middle}.wfls-form-inline .wfls-form-control-static{display:inline-block}.wfls-form-inline .wfls-input-group{display:inline-table;vertical-align:middle}.wfls-form-inline .wfls-input-group .wfls-input-group-addon,.wfls-form-inline .wfls-input-group .wfls-input-group-btn,.wfls-form-inline .wfls-input-group .wfls-form-control{width:auto}.wfls-form-inline .wfls-input-group>.wfls-form-control{width:100%}.wfls-form-inline .wfls-control-label{margin-bottom:0;vertical-align:middle}.wfls-form-inline .wfls-radio,.wfls-form-inline .wfls-checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.wfls-form-inline .wfls-radio label,.wfls-form-inline .wfls-checkbox label{padding-left:0}.wfls-form-inline .wfls-radio input[type="radio"],.wfls-form-inline .wfls-checkbox input[type="checkbox"]{position:relative;margin-left:0}.wfls-form-inline .wfls-has-feedback .wfls-form-control-feedback{top:0}}.wfls-form-horizontal .wfls-radio,.wfls-form-horizontal .wfls-checkbox,.wfls-form-horizontal .wfls-radio-inline,.wfls-form-horizontal .wfls-checkbox-inline{margin-top:0;margin-bottom:0;padding-top:1.5rem}.wfls-form-horizontal .wfls-radio,.wfls-form-horizontal .wfls-checkbox{min-height:29px}.wfls-form-horizontal .wfls-form-group{margin-left:-15px;margin-right:-15px}.wfls-form-horizontal .wfls-form-group:before,.wfls-form-horizontal .wfls-form-group:after{content:" ";display:table}.wfls-form-horizontal .wfls-form-group:after{clear:both}@media (min-width: 768px){.wfls-form-horizontal .wfls-control-label{text-align:right;margin-bottom:0;padding-top:1.5rem}}.wfls-form-horizontal .wfls-has-feedback .wfls-form-control-feedback{right:15px}@media (min-width: 768px){.wfls-form-horizontal .wfls-form-group-lg .wfls-control-label{padding-top:11px;font-size:18px}}@media (min-width: 768px){.wfls-form-horizontal .wfls-form-group-sm .wfls-control-label{padding-top:6px;font-size:12px}}@media (min-width: 768px){#input-recaptchaSiteKey,#input-recaptchaSecret{min-width:400px}}hr.wfls-half{border:0 !important;border-bottom:1px solid #e4e4e4 !important;width:50%;margin:1.25rem auto}.wrap.wordfence-ls{direction:ltr}@media (min-width: 768px){.wrap.wordfence-ls{max-width:750px}}@media (min-width: 992px){.wrap.wordfence-ls{max-width:970px}}@media (min-width: 1200px){.wrap.wordfence-ls{max-width:1170px}}.wrap.wordfence-ls>.wfls-container-fluid{padding-left:0px;padding-right:0px}.wrap.wordfence-ls .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709e}.wrap.wordfence-ls a{text-decoration:none}.wrap.wordfence-ls a:hover{text-decoration:underline}.wrap.wordfence-ls a.wfls-btn:hover{text-decoration:none}.wrap.wordfence-ls p,.wrap.wordfence-ls td,.wrap.wordfence-ls li{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.875rem;color:#2d2d2d;line-height:1.3125;font-weight:normal}.wrap.wordfence-ls p strong,.wrap.wordfence-ls td strong,.wrap.wordfence-ls li strong{font-weight:600}.wrap.wordfence-ls p em,.wrap.wordfence-ls td em,.wrap.wordfence-ls li em{font-weight:normal}.wrap.wordfence-ls h1,.wrap.wordfence-ls h2,.wrap.wordfence-ls h3,.wrap.wordfence-ls h4,.wrap.wordfence-ls h5,.wrap.wordfence-ls h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;color:#2d2d2d;font-weight:700}.wrap.wordfence-ls h2{font-size:1.3125rem;line-height:1.5}.wrap.wordfence-ls h3{font-size:1.125rem}.wrap.wordfence-ls h4{font-size:1rem}a{color:#00709e}.wfls-inline-help{color:#9f9fa0}.wfls-inline-help:hover{color:#00709e}.wordfenceWrap{margin:20px 0 0 20px}#wfHeading:after{content:'.';visibility:hidden;display:block;clear:both;height:0px}.wfls-header-icon{background-image:url(../img/header.svg);width:32px;height:32px;background-position:0 0;background-repeat:no-repeat;padding:0;margin:0 5px 0 0;float:left}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(../img/icons/bullet_yellow.png)}.wordfenceBoldTD{font-weight:bold}.wfAjax24{display:none;width:24px;height:24px;background-image:url(../img/icons/ajax24.gif);margin:0;padding:0}div.wfLoadingWhite32{width:32px;height:32px;background-image:url(../img/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(../img/icons/ajax3.gif)}.wfStrong{font-weight:bold}.wordfenceModeElem{width:1px;height:1px;opacity:0}.wfWarn{color:#F00}img.wfFlag{vertical-align:middle;margin:-3px 4px 0 0}.wfHitTime{font-style:italic}.wfAvatar img{vertical-align:middle;margin-right:0.5rem}.wfls-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:"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}.wfls-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:"Helvetica Neue",Helvetica,Arial,sans-serif;background-image:url("../img/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:"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:"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}.wfls-striped-table{width:100%;max-width:100%;border-collapse:collapse}.wfls-striped-table th{border-left:1px solid #bdbdbd}.wfls-striped-table th:first-of-type{border-left:0}.wfls-striped-table th,.wfls-striped-table td{padding:1rem}.wfls-striped-table thead th,.wfls-striped-table thead td,.wfls-striped-table tfoot th,.wfls-striped-table tfoot td,.wfls-striped-table tbody.thead th,.wfls-striped-table tbody.thead td{background-color:#ebebeb;color:#777;font-weight:bold;text-align:left}.wfls-striped-table tbody tr.even td,.wfls-striped-table tbody tr:nth-child(2n) td{background-color:#ffffff}.wfls-striped-table tbody tr td,.wfls-striped-table tbody tr.odd td{background-color:#fafafa}.wfls-striped-table tbody tr:hover>td{background-color:#fffbd8}.wfls-striped-table tbody.empty-row tr td{border-width:0;padding:8px 0;background-color:transparent}.wfls-striped-table .wfls-result-error,.wfls-block-list .wfls-result-error{color:#d0514c !important;font-weight:bold}.wfls-striped-table .wfls-result-error:before,.wfls-block-list .wfls-result-error:before{content:"\2718"}.wfls-striped-table .wfls-result-success{max-width:20%}.wfls-striped-table .wfls-result-success,.wfls-block-list .wfls-result-success{color:#008c10 !important;font-weight:bold}.wfls-striped-table .wfls-result-success:before,.wfls-block-list .wfls-result-success:before{content:"\2713"}.wfls-striped-table .wfls-result-success:before,.wfls-block-list .wfls-result-success:before,.wfls-striped-table .wfls-result-error:before,.wfls-block-list .wfls-result-error:before{font-size:16px;display:inline-block;margin:0px 8px 0px 0px}.wfls-striped-table .wfls-result-inactive,.wfls-block-list .wfls-result-inactive{font-weight:bold;color:#666666 !important}.wfls-fixed-table{table-layout:fixed}pre.wfls-pre{margin:8px 0 20px;padding:12px;background:#ffffff;border:1px solid #999999;overflow:auto}.wfls-center{text-align:center}#wfConfigForm,.wfls-diagnostics-wrapper{max-width:1035px}.wfls-hidden{display:none !important}.wfls-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}.wfls-card .wfls-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}.wfls-card .wfls-card-inner .wfls-card-content{max-width:75%}.wfls-card .wfls-card-inner .wfls-card-content .wfls-card-title{font-size:1.125rem;width:100%}.wfls-card .wfls-card-inner .wfls-card-content .wfls-card-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:.875rem;color:#4f748e}.wfls-card .wfls-card-inner .wfls-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}.wfls-card .wfls-card-inner .wfls-card-action .wfls-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}.wfls-card .wfls-card-inner .wfls-card-action .wfls-card-action-checkbox{background-image:url(../img/checkbox.png);background-repeat:no-repeat;background-position:left center;width:29px;height:29px}.wfls-card .wfls-card-inner .wfls-card-action .wfls-card-action-checkbox.checked{background-position:right center}.wfls-card .wfls-card-extra{display:none;padding:0.5rem;margin-top:1rem;border-top:1px solid #f3f6f8}@media (min-width: 768px){.wfls-card .wfls-card-extra{padding:1rem}}.wfls-card.active .wfls-card-extra{display:block}.wfls-card.wfls-card-left .wfls-card-content{margin-left:48px}.wfls-card.wfls-card-left .wfls-card-action{right:auto;left:0px}.wfls-card.disabled .wfls-card-content .wfls-card-title{color:#aaaaaa}.wfls-card.disabled .wfls-card-content .wfls-card-subtitle{color:#8ea6be}.wfls-inline-block{display:inline-block}@media (max-width: 767px){.wfls-inline-block-xs{display:inline-block}}.wfls-full-width{width:100%;max-width:100%}.wfls-no-top{margin-top:0 !important}.wfls-add-top{margin-top:1rem !important}.wfls-add-top-large{margin-top:1.5rem !important}.wfls-add-top-medium{margin-top:0.75rem !important}.wfls-add-top-small{margin-top:0.5rem !important}.wfls-add-top-smaller{margin-top:0.25rem !important}.wfls-no-bottom{margin-bottom:0 !important}.wfls-add-bottom{margin-bottom:1rem !important}.wfls-add-bottom-large{margin-bottom:1.5rem !important}.wfls-add-bottom-medium{margin-bottom:0.75rem !important}.wfls-add-bottom-small{margin-bottom:0.5rem !important}.wfls-add-bottom-smaller{margin-bottom:0.25rem !important}.wfls-padding-no-top{padding-top:0 !important}.wfls-no-right{margin-right:0 !important}.wfls-padding-no-bottom{padding-bottom:0 !important}.wfls-padding-no-left{padding-left:0 !important}.wfls-padding-no-right{padding-right:0 !important}.wfls-padding-add-top{padding-top:1rem !important}.wfls-padding-add-top-small{padding-top:0.5rem !important}.wfls-padding-add-top-medium{padding-top:0.75rem !important}.wfls-padding-add-top-large{padding-top:1.5rem !important}.wfls-padding-add-top-responsive{padding-top:1rem !important}@media (min-width: 768px){.wfls-padding-add-top-responsive{padding-top:1.5rem !important}}.wfls-padding-add-bottom{padding-bottom:1rem !important}.wfls-padding-add-bottom-small{padding-bottom:0.5rem !important}.wfls-padding-add-bottom-medium{padding-bottom:0.75rem !important}.wfls-padding-add-bottom-large{padding-bottom:1.5rem !important}.wfls-padding-add-bottom-responsive{padding-bottom:1rem !important}@media (min-width: 768px){.wfls-padding-add-bottom-responsive{padding-bottom:1.5rem !important}}.wfls-padding-no-bottom{padding-bottom:0 !important}.wfls-padding-add-left{padding-left:1rem !important}.wfls-padding-add-left-small{padding-left:0.5rem !important}.wfls-padding-add-left-medium{padding-left:0.75rem !important}.wfls-padding-add-left-large{padding-left:1.5rem !important}.wfls-padding-add-left-responsive{padding-left:1rem !important}@media (min-width: 768px){.wfls-padding-add-left-responsive{padding-left:1.5rem !important}}.wfls-padding-add-right{padding-right:1rem !important}.wfls-padding-add-right-small{padding-right:0.5rem !important}.wfls-padding-add-right-medium{padding-right:0.75rem !important}.wfls-padding-add-right-large{padding-right:1.5rem !important}.wfls-padding-add-right-responsive{padding-right:1rem !important}@media (min-width: 768px){.wfls-padding-add-right-responsive{padding-right:1.5rem !important}}.wfls-left{text-align:left !important}.wfls-center{text-align:center !important}.wfls-block-center{margin:0 auto}.wfls-right{text-align:right !important}.wfls-block-right{margin:0 0 0 auto}@media (max-width: 767px){.wfls-left-xs{text-align:left !important}.wfls-center-xs{text-align:center !important}.wfls-padding-add-top-xs{padding-top:1rem !important}.wfls-padding-add-top-xs-small{padding-top:0.5rem !important}.wfls-padding-add-top-xs-large{padding-top:1.5rem !important}.wfls-padding-add-bottom-xs{padding-bottom:1rem !important}.wfls-padding-add-bottom-xs-small{padding-bottom:0.5rem !important}.wfls-padding-add-bottom-xs-large{padding-bottom:1.5rem !important}}@media (min-width: 768px) and (max-width: 991px){.wfls-left-sm{text-align:left !important}.wfls-center-sm{text-align:center !important}}@media (min-width: 992px) and (max-width: 1199px){.wfls-left-md{text-align:left !important}.wfls-center-md{text-align:center !important}}@media (min-width: 1200px){.wfls-left-lg{text-align:left !important}.wfls-center-lg{text-align:center !important}}.wfls-border-no-top{border-top:none !important}.wfls-border-no-right{border-right:none !important}.wfls-border-no-bottom{border-bottom:none !important}.wfls-border-no-left{border-left:none !important}.wfls-overflow-x-auto{overflow-x:auto}.wfls-overflow-y-auto{overflow-y:auto}@media (max-width: 767px){.wfls-overflow-x-auto-xs{overflow-x:auto}.wfls-overflow-y-auto-xs{overflow-y:auto}}.wfls-blue{color:#00709e !important}.wfls-blue-light{color:#008cc1 !important}.wfls-gray-dark{color:#2d2d2d !important}.wfls-gray-blue{color:#3f596b !important}.wfls-green-dark{color:#11967a !important}.wfls-green-light{color:#16bc9b !important}.wfls-red-dark{color:#930000 !important}.wfls-red-light{color:#c10000 !important}.wfls-yellow-dark{color:#fcb214 !important}.wfls-yellow-light{color:#ffd10a !important}.wfls-gray{color:#525355 !important}.wfls-gray-light{color:#9f9fa0 !important}.wfls-nowrap{white-space:nowrap}.wfls-tip{color:#fcb214;font-size:1.1rem;margin-right:0.25rem}.wfls-text-small{font-size:85% !important}.wfls-text-plain{font-weight:400 !important}.wfls-scroll-x::-webkit-scrollbar,.wfls-scroll-y::-webkit-scrollbar{-webkit-appearance:none;width:7px;height:7px}.wfls-scroll-x::-webkit-scrollbar-thumb,.wfls-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)}.wfls-split-word{word-wrap:break-word;word-break:break-all}@media (max-width: 767px){.wfls-split-word-xs{word-wrap:break-word;word-break:break-all;white-space:normal !important}}.wfselect2-container{font-family:"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}}.wfls-select2-placeholder-fix .wfselect2-search__field{width:auto !important}.wfls-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}.wfls-page-title>*{-webkit-flex-grow:0;flex-grow:0;min-width:0}.wfls-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}.wfls-page-title .wordfence-icon32{margin:0;margin-right:0.5rem}.wfls-page-title h2{padding:0 !important}.wfls-page-title .wfOnOffSwitch{-webkit-flex-basis:69px;flex-basis:69px;-webkit-flex-shrink:0;flex-shrink:0;margin-left:0.5rem}.wfls-tab-container{background-color:#fff}@media (min-width: 768px){.wfls-tab-container{background-color:unset}}.wfls-page-tabs,.wfls-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){.wfls-page-tabs,.wfls-page-fixed-tabs{margin-left:0;margin-right:0}}.wfls-page-tabs>*,.wfls-page-fixed-tabs>*{-webkit-flex-grow:0;flex-grow:0;min-width:0}.wfls-page-tabs>*:first-child,.wfls-page-fixed-tabs>*:first-child{-webkit-flex-grow:0;flex-grow:0;min-width:32px;-webkit-flex-basis:32px;flex-basis:32px}.wfls-page-tabs .wordfence-icon32,.wfls-page-fixed-tabs .wordfence-icon32{margin:0;margin-right:0.5rem;margin-left:0.5rem}@media (min-width: 768px){.wfls-page-tabs .wordfence-icon32,.wfls-page-fixed-tabs .wordfence-icon32{margin-left:0}}.wfls-page-tabs .wfls-text-tab,.wfls-page-fixed-tabs .wfls-text-tab{margin:0;margin-left:0.5rem;color:#333}.wfls-page-tabs .wfls-tab,.wfls-page-fixed-tabs .wfls-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){.wfls-page-tabs .wfls-tab,.wfls-page-fixed-tabs .wfls-tab{border:1px solid #d0d0d0;background:#e6e6e6}}.wfls-page-tabs .wfls-tab a,.wfls-page-fixed-tabs .wfls-tab a{display:block;padding:0.5rem 1rem;font-size:14px;line-height:24px;text-decoration:none;font-weight:bold;color:#333}.wfls-page-tabs .wfls-tab.wfls-active,.wfls-page-tabs .wfls-tab:hover,.wfls-page-fixed-tabs .wfls-tab.wfls-active,.wfls-page-fixed-tabs .wfls-tab:hover{border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#00709e;-webkit-box-shadow:none;box-shadow:none}.wfls-page-tabs .wfls-tab.wfls-active a,.wfls-page-tabs .wfls-tab:hover a,.wfls-page-fixed-tabs .wfls-tab.wfls-active a,.wfls-page-fixed-tabs .wfls-tab:hover a{color:#00709e}.wfls-tab-content{display:none;margin-top:15px}.wfls-tab-content.wfls-active{display:block}.wfls-fixed-tab-content{margin-top:15px}.wfls-section-title{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start}.wfls-section-title>*{-webkit-flex-grow:0;flex-grow:0;min-width:0}.wfls-section-title>h1,.wfls-section-title>h2,.wfls-section-title>h3,.wfls-section-title>h4,.wfls-section-title>h5,.wfls-section-title>h6{-webkit-flex-grow:1;flex-grow:1;color:#2d2d2d !important;font-family:"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){.wfls-section-title>h1,.wfls-section-title>h2,.wfls-section-title>h3,.wfls-section-title>h4,.wfls-section-title>h5,.wfls-section-title>h6{padding-right:0.25rem !important}}.wfls-section-title h2{font-size:1.3125rem;line-height:1.5}.wfls-section-title h3{font-size:1.125rem}.wfls-section-title h4{font-size:1rem}.wfls-section-title .wordfence-icon32{margin:0;margin-right:0.5rem}.wfls-status-circular{position:relative}.wfls-status-circular-text{position:absolute;left:50%;top:50%;padding:0;margin:0;transform:translate(-50%, -50%);color:#aaa;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:1.3125rem;font-weight:300;line-height:1.5}.wfls-status-circular .wfls-status-overlay-text{position:absolute;left:50%;top:50%;padding:0;margin:0;width:200%;text-align:center;transform:translate(-50%, -50%);font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.875rem;font-weight:normal;line-height:1.3125;opacity:0.0;color:#777}.wfls-status-warning,.wfls-status-critical,.wfls-status-payment-expiring,.wfls-status-renewing{width:100px;height:100px;margin-bottom:1rem}.wfls-status-warning svg path{fill:#fcb214}.wfls-status-critical svg path{fill:#930000}.wfls-status-payment-expiring svg rect,.wfls-status-payment-expiring svg path{fill:#930000}.wfls-status-renewing svg rect,.wfls-status-renewing svg path{fill:#11967a}#howGetIPs-preview{color:#8c8c8c}#howGetIPs-preview strong{color:#666}.wfls-scrollTop{background:#424242;bottom:30px;right:15px;position:fixed;z-index:999;display:none}.wfls-scrollTop a{background:#959595;display:block;padding:4px 5px;line-height:32px;width:32px;color:#ffffff;text-align:center}.wfls-back-icon{color:#00709e;margin-right:0.75rem;font-size:1.5rem !important}.wfls-back-link-chevron{margin-left:1rem}.wfls-back-link-chevron:first-of-type{margin-left:0}.wfls-back-link{font-weight:bold;text-decoration:none}.wfls-premium-link{font-weight:bold}.wfls-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){.wfls-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}}.wfls-boolean-switch .wfls-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){.wfls-boolean-switch .wfls-boolean-switch-handle{width:20px;height:20px;min-width:20px;min-height:20px;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px}}.wfls-boolean-switch.wfls-active{border:1px solid #00709e;background-color:#00709e}.wfls-boolean-switch.wfls-active .wfls-boolean-switch-handle{border:1px solid #00709e;left:25px}@media (min-width: 768px){.wfls-boolean-switch.wfls-active .wfls-boolean-switch-handle{left:15px}}.wfls-boolean-switch.wfls-disabled{pointer-events:none;border-color:#e2e2e2}.wfls-boolean-switch.wfls-disabled .wfls-boolean-switch-handle{border-color:#e2e2e2}.wfls-boolean-switch.wfls-disabled.wfls-active{border-color:#e2e2e2;background-color:#e2e2e2}.wfls-boolean-switch.wfls-disabled.wfls-active .wfls-boolean-switch-handle{border-color:#e2e2e2}.wfls-option-checkbox,[type=checkbox].wfls-option-checkbox+label:before{content:"";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){.wfls-option-checkbox,[type=checkbox].wfls-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){.wfls-option-checkbox{position:relative}.wfls-option-checkbox>*{position:absolute;top:9px;left:50%;transform:translateX(-50%) translateY(-50%)}}.wfls-option-radio,[type=radio].wfls-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){.wfls-option-radio,[type=radio].wfls-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].wfls-option-checkbox.wfls-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].wfls-option-radio.wfls-small+label:before{width:20px;height:20px;min-width:20px;min-height:20px;line-height:21px !important;font-size:20px !important}[type=checkbox].wfls-option-checkbox+label:before,[type=radio].wfls-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].wfls-option-checkbox.wfls-small+label:before,[type=radio].wfls-option-radio.wfls-small+label:before{text-indent:0px;vertical-align:-3px}.wfls-option-checkbox.wfls-checked,[type=checkbox].wfls-option-checkbox:checked+label:before{color:#ffffff !important;box-shadow:0px 0px 0px 1px #00709e !important;background-color:#00709e !important}.wfls-option-checkbox.wfls-disabled,[type=checkbox].wfls-option-checkbox:disabled+label:before{color:#f1f1f1 !important;box-shadow:0px 0px 0px 1px #e2e2e2 !important;background-color:#f1f1f1 !important}.wfls-option-checkbox.wfls-checked.wfls-disabled,[type=checkbox].wfls-option-checkbox:disabled:checked+label:before{color:#777 !important;box-shadow:0px 0px 0px 1px #e2e2e2 !important;background-color:#f1f1f1 !important}.wfls-option-radio.wfls-checked,[type=radio].wfls-option-radio:checked+label:before{content:"\f3a7";color:#00709e !important}.wfls-option-checkbox[type=checkbox],.wfls-option-checkbox[type=radio],.wfls-option-radio[type=checkbox],.wfls-option-radio[type=radio]{position:absolute;left:-9999px}.wfls-option-text input[type="text"],input.wfls-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)}.wfls-option-text input[type="text"]:placeholder-shown,input.wfls-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}.wfls-option-premium .wfls-option-title,.wfls-option-premium .wfls-option-title>ul>li,.wfls-option.wfls-disabled .wfls-option-title,.wfls-option.wfls-disabled .wfls-option-title>ul>li{color:#aaa !important}.wfls-option-premium .wfls-option-checkbox,.wfls-option-premium .wfls-option-radio,.wfls-option.wfls-disabled .wfls-option-checkbox,.wfls-option.wfls-disabled .wfls-option-radio{opacity:0.5}.wfls-block .wfls-block-content .wfls-block-labeled-value.wfls-protection-status .wfls-block-labeled-value-value{padding-top:0}.wfls-block .wfls-block-content .wfls-block-labeled-value.wfls-protection-status .wfls-block-labeled-value-value .wfls-fa{font-size:8rem}.wfls-block .wfls-block-content .wfls-block-labeled-value.wfls-protection-status .wfls-block-labeled-value-value svg{width:160px}.wfls-block .wfls-block-content .wfls-block-labeled-value.wfls-protection-status .wfls-block-labeled-value-label{font-size:1.35rem;font-weight:300;padding-bottom:0}.wfls-block .wfls-block-content .wfls-block-labeled-value.wfls-protection-status-premium .wfls-block-labeled-value-value{color:#9f9fa0}.wfls-block .wfls-block-content .wfls-block-labeled-value.wfls-protection-status-premium .wfls-block-labeled-value-value svg{fill:#9f9fa0}.wfls-block .wfls-block-content .wfls-block-labeled-value.wfls-protection-status-premium .wfls-block-labeled-value-label{color:#9f9fa0}.wfls-indeterminate-progress{-webkit-animation:wfls-indeterminate-progress-keyframes 1s steps(8, end) infinite;-o-animation:wfls-indeterminate-progress-keyframes 1s steps(8, end) infinite;animation:wfls-indeterminate-progress-keyframes 1s steps(8, end) infinite}.wfls-indeterminate-progress path{fill:#00709e}@-moz-keyframes wfls-indeterminate-progress-keyframes{to{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes wfls-indeterminate-progress-keyframes{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes wfls-indeterminate-progress-keyframes{to{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.wfls-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;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wfls-flex-row .wfls-flex-row-1{-webkit-flex-grow:1;flex-grow:1}.wfls-flex-row .wfls-flex-row-0{-webkit-flex-grow:0;flex-grow:0}.wfls-flex-row.wfls-flex-row-wrappable,.wfls-flex-row.wfls-flex-row-xs-wrappable{-webkit-flex-wrap:wrap;flex-wrap:wrap}.wfls-flex-row.wfls-flex-row-equal-heights{-webkit-align-items:stretch;align-items:stretch}.wfls-flex-row .wfls-flex-item-full-width{width:100%}.wfls-flex-row .wfls-flex-item-xs-100{-webkit-flex-basis:100%;flex-basis:100%}@media (min-width: 768px){.wfls-flex-row.wfls-flex-row-xs-wrappable{-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wfls-flex-row .wfls-flex-item-sm-50{-webkit-flex-basis:50%;flex-basis:50%}}.wfls-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}.wfls-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}.wfls-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}.wfls-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}.wfls-switch>li.wfls-active{color:#ffffff;background-color:#00709e}.wfls-tooltip,.ui-widget.wfls-tooltip{max-width:600px;font-size:0.75rem;overflow-wrap:break-word}.wfls-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){.wfls-widget-learning-mode{padding:1.5rem}}.wfls-widget-learning-mode svg{width:18px}.wfls-widget-learning-mode svg path{fill:#aaa}.wfls-widget-learning-mode span{padding-left:0.5rem;font-size:.875rem;line-height:1.3125;font-weight:600}.wfls-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 .wfls-drawer-overlay{left:36px}@media only screen and (max-width: 960px){.auto-fold .wfls-drawer-overlay{left:36px}}.rtl .wfls-drawer-overlay{right:160px;left:0px}.rtl .folded .wfls-drawer-overlay{right:36px}@media only screen and (max-width: 960px){.rtl .auto-fold .wfls-drawer-overlay{right:36px}}@media screen and (max-width: 782px){.wfls-drawer-overlay,.folded .wfls-drawer-overlay,.auto-fold .wfls-drawer-overlay,.rtl .wfls-drawer-overlay,.rtl .folded .wfls-drawer-overlay,.rtl .auto-fold .wfls-drawer-overlay{left:0px;right:0px}}.wfls-drawer{background-color:#ffffff;position:fixed;top:32px;bottom:0px;right:0px;z-index:9981}.wfls-drawer .wfls-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%}.wfls-drawer .wfls-modal ul,.wfls-drawer .wfls-modal li{padding:0;margin:0}.wfls-drawer .wfls-modal .wfls-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}.wfls-drawer .wfls-modal .wfls-modal-header .wfls-modal-header-content{max-width:75%}.wfls-drawer .wfls-modal .wfls-modal-header .wfls-modal-header-content .wfls-modal-title{font-size:1.3125rem;line-height:1.5;font-weight:300;width:100%;transition:color 0.2s ease-in}.wfls-drawer .wfls-modal .wfls-modal-header .wfls-modal-header-content .wfls-modal-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:.575rem;color:#4f748e}.wfls-drawer .wfls-modal .wfls-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}.wfls-drawer .wfls-modal .wfls-modal-content>*:first-child{margin-top:0}.wfls-drawer .wfls-modal .wfls-modal-content select,.wfls-drawer .wfls-modal .wfls-modal-content select option,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default{font-size:0.7rem;font-weight:bold}@media (min-width: 768px){.wfls-drawer .wfls-modal .wfls-modal-content select,.wfls-drawer .wfls-modal .wfls-modal-content select option,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default{font-size:0.8rem}}@media (min-width: 992px){.wfls-drawer .wfls-modal .wfls-modal-content select,.wfls-drawer .wfls-modal .wfls-modal-content select option,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default{font-size:0.9rem}}.wfls-drawer .wfls-modal .wfls-modal-content .wfls-option-select-option,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default,.wfls-drawer .wfls-modal .wfls-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)}.wfls-drawer .wfls-modal .wfls-modal-content .wfls-option-select-option .wfselect2-selection__rendered,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default .wfselect2-selection__rendered,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered{color:#333;line-height:40px}.wfls-drawer .wfls-modal .wfls-modal-content .wfls-option-select-option .wfselect2-selection__arrow,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default .wfselect2-selection__arrow,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow{height:38px}.wfls-drawer .wfls-modal .wfls-modal-content .wfls-option-select-option.wfselect2-container--disabled .wfselect2-selection__rendered,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default.wfselect2-container--disabled .wfselect2-selection__rendered,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default .wfselect2-selection--single.wfselect2-container--disabled .wfselect2-selection__rendered{color:#aaa}.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:#333 transparent transparent}.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default.wfselect2-container--open .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:transparent transparent #333}.wfls-drawer .wfls-modal .wfls-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}.wfls-mobile-menu-overlay{position:fixed;top:0px;right:0px;bottom:0px;left:0px;background-color:rgba(0,0,0,0.5);z-index:100000}.wfls-mobile-menu-overlay>.wfls-mobile-menu-tap-hint{position:absolute;top:25%;left:50%;transform:translateX(-50%);color:#ffffff;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:1.3125rem;font-weight:300;line-height:1.5}.wfls-mobile-menu{position:fixed;left:50%;transform:translateX(-50%);z-index:100001}.wfls-mobile-menu>.wfls-mobile-menu-items{margin:0;padding:0 0 0.25rem 0;list-style:none}.wfls-mobile-menu>.wfls-mobile-menu-items>li{margin:0;padding:0.25rem 0}.wfls-mobile-menu>.wfls-mobile-menu-items>li>a{box-sizing:border-box}.wfls-callout-warning{background-color:#feecc4;padding:0.8rem 1.25rem}.wfls-tip-light-bulb{color:#fcb214;font-size:1.5rem;font-weight:bold}.wfls-tip-info-message{padding-left:0.5rem !important;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.875rem;color:#2d2d2d;line-height:1.3125;font-weight:normal}#wfls-qr-code{width:175px;height:175px;margin:0 auto}@media (min-width: 500px){#wfls-qr-code{width:256px;height:256px}}#wfls-activate-field{margin:0 auto;font-size:1.5rem;display:block;text-align:center}.wfls-recovery-codes{list-style-type:none}.wfls-recovery-codes li{font-family:monospace !important;text-align:center}#wfls-recovery-download .dashicons,#wfls-recovery-new-download .dashicons{line-height:26px}#wfls-ip-source-trusted-proxies{display:none}ul.wfls-option.wfls-option-howgetips .wfls-option-ip-source-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:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.8rem;margin-top:0.5rem}#wfls-ip-source-preview{color:#8c8c8c}#wfls-ip-source-preview strong{color:#666}.wfls-inline-notice{background:#fff;border:1px solid #ccd0d4;border-left-color:#ffb900;border-left-width:4px;box-shadow:0 1px 1px rgba(0,0,0,0.04);padding:4px 12px;display:flex;justify-content:flex-start;align-items:center}.wfls-inline-notice>*{flex-grow:1}.wfls-inline-notice:first-child{flex-grow:0;flex-shrink:0}.wfls-inline-notice span{padding-left:0.5rem}.wfls-block{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;position:relative;margin:0 auto 0.5rem;box-sizing:border-box;background-color:#fff;box-shadow:0 0 0 1px rgba(200,215,225,0.25),0 1px 2px #e9eff3}.wfls-block.wfls-block-transparent{background-color:transparent;box-shadow:none}.wfls-block .wfls-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}.wfls-block .wfls-block-banner>li{margin:0;padding:0.75rem 1rem}@media (min-width: 768px){.wfls-block .wfls-block-banner{margin:0 -1.5rem}.wfls-block .wfls-block-banner>li{padding:0.75rem 1.5rem}}.wfls-block .wfls-block-header{-webkit-flex-basis:44px;flex-basis:44px;-webkit-flex-shrink:0;flex-shrink:0;-webkit-flex-grow:0;flex-grow:0;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}.wfls-block .wfls-block-header.wfls-block-header-border-bottom{padding:0 1rem;border-bottom:1px solid #e2e2e2}@media (min-width: 768px){.wfls-block .wfls-block-header.wfls-block-header-border-bottom{padding:0 1.5rem}}.wfls-block .wfls-block-header .wfls-block-header-content{max-width:75%}.wfls-block .wfls-block-header .wfls-block-header-content .wfls-block-title{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.9rem;width:100%;transition:color 0.2s ease-in}.wfls-block .wfls-block-header .wfls-block-header-content .wfls-block-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:0.775rem}.wfls-block .wfls-block-header .wfls-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}.wfls-block .wfls-block-header .wfls-block-header-action.wfls-block-header-action-text{width:auto}.wfls-block .wfls-block-header .wfls-block-header-action.wfls-block-header-action-text.wfls-block-header-action-text-success{color:#11967a}.wfls-block .wfls-block-header .wfls-block-header-action.wfls-block-header-action-text.wfls-block-header-action-text-warning{color:#930000}.wfls-block .wfls-block-header .wfls-block-header-action.wfls-block-header-action-text.wfls-block-header-action-text-warning a{color:#930000}.wfls-block .wfls-block-header .wfls-block-header-action .wfls-block-header-action-chevron{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJjaGV2cm9uLW9iamVjdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBhdGggaWQ9ImNoZXZyb24iIGQ9Ik0yMCA5bC04IDgtOC04IDEuNDE0LTEuNDE0TDEyIDE0LjE3Mmw2LjU4Ni02LjU4NiIvPgo8L3N2Zz4K");background-repeat:no-repeat;background-position:center center;width:24px;height:24px}.wfls-block .wfls-block-header .wfls-block-header-action .wfls-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}.wfls-block .wfls-block-header .wfls-block-header-action .wfls-block-header-action-checkbox{background-image:url(../img/checkbox.png);background-repeat:no-repeat;background-position:left center;width:29px;height:29px}.wfls-block .wfls-block-header .wfls-block-header-action .wfls-block-header-action-checkbox.wfls-checked{background-position:right center}.wfls-block .wfls-block-content{-webkit-flex-grow:1;flex-grow:1;display:none;padding:0 1rem}@media (min-width: 768px){.wfls-block .wfls-block-content{padding:0 1.5rem}}.wfls-block .wfls-block-content .wfls-block-list{margin:0 -1rem;padding:0;list-style:none}@media (min-width: 768px){.wfls-block .wfls-block-content .wfls-block-list{margin:0 -1.5rem}}.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-striped>li:nth-of-type(odd){background-color:#f9f9f9}.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-striped>li:nth-of-type(even){background-color:#ffffff}.wfls-block .wfls-block-content .wfls-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){.wfls-block .wfls-block-content .wfls-block-list>li{padding:0 1.5rem}}.wfls-block .wfls-block-content .wfls-block-list>li>*:first-child{-webkit-flex-grow:1;flex-grow:1;min-width:0}.wfls-block .wfls-block-content .wfls-block-list.wfls-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}.wfls-block .wfls-block-content .wfls-block-list.wfls-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){.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-horizontal>li{-webkit-flex-basis:50%;flex-basis:50%}}@media (min-width: 992px){.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-horizontal>li{-webkit-flex-basis:25%;flex-basis:25%}}.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-horizontal.wfls-block-list-nowrap{overflow-y:auto;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-horizontal.wfls-block-list-nowrap>li{-webkit-flex-shrink:0;flex-shrink:0}.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-horizontal.wfls-block-list-horizontal-5>li{-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:20%;flex-basis:20%}.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-horizontal>*:first-child{border-left:0}@media (min-width: 768px){.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-horizontal.wfls-block-list-equal>li{max-width:50%}}@media (min-width: 992px){.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-horizontal.wfls-block-list-equal>li{max-width:25%}}.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-horizontal.wfls-block-list-horizontal-5.wfls-block-list-equal>li{max-width:20%}.wfls-block .wfls-block-content .wfls-block-list .wfls-block-list-state{text-align:center}@media (min-width: 1200px){.wfls-block .wfls-block-content .wfls-block-list .wfls-block-list-state{text-align:left}}.wfls-block .wfls-block-content .wfls-block-list .wfls-block-list-state-enabled .wfls-fa{color:#11967a}.wfls-block .wfls-block-content .wfls-block-list .wfls-block-list-state-disabled .wfls-fa{color:#525355}.wfls-block .wfls-block-content .wfls-block-list .wfls-block-list-state-premium{color:#9f9fa0}.wfls-block .wfls-block-content .wfls-block-list .wfls-block-list-dismiss{padding-left:2rem;font-size:1.25rem}.wfls-block .wfls-block-content .wfls-block-list .wfls-block-list-dismiss a{color:#525355}.wfls-block .wfls-block-content:first-child>.wfls-block-list>li:first-child{border-top:none}.wfls-block .wfls-block-content .wfls-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){.wfls-block .wfls-block-content .wfls-block-left-right{margin:0 -1.5rem}}.wfls-block .wfls-block-content .wfls-block-left-right.wfls-block-left-right-nowrap{-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wfls-block .wfls-block-content .wfls-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}.wfls-block .wfls-block-content .wfls-block-left-right>li>*:first-child{-webkit-flex-grow:1;flex-grow:1;min-width:0}.wfls-block .wfls-block-content .wfls-block-left-right>li.wfls-left{text-align:left}.wfls-block .wfls-block-content .wfls-block-left-right>li.wfls-right{text-align:right}.wfls-block .wfls-block-content .wfls-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}.wfls-block .wfls-block-content .wfls-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%}.wfls-block .wfls-block-content .wfls-block-left-center-right>li a{text-decoration:none;font-size:.875rem}.wfls-block .wfls-block-content .wfls-block-left-center-right>li.wfls-left{text-align:left}.wfls-block .wfls-block-content .wfls-block-left-center-right>li.wfls-center{text-align:center;-webkit-justify-content:center;justify-content:center}.wfls-block .wfls-block-content .wfls-block-left-center-right>li.wfls-center .wordfence-icon32{margin:0}.wfls-block .wfls-block-content .wfls-block-left-center-right>li.wfls-right{text-align:right;-webkit-justify-content:flex-end;justify-content:flex-end}.wfls-block .wfls-block-content .wfls-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){.wfls-block .wfls-block-content .wfls-block-labeled-value{margin:0 -1.5rem;padding:1.5rem}}.wfls-block .wfls-block-content .wfls-block-labeled-value-value{font-size:3rem;line-height:3rem;color:#9f9fa0;padding:1rem}.wfls-block .wfls-block-content .wfls-block-labeled-value-label{font-size:0.75rem;color:#9f9fa0;padding:0 1rem 1rem 1rem}.wfls-block .wfls-block-footer{-webkit-flex-shrink:0;flex-shrink:0;-webkit-flex-grow:0;flex-grow: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:#e4e4e4}.wfls-block .wfls-block-footer .wfls-block-footer-content{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;width:100%}.wfls-block .wfls-block-footer .wfls-block-footer-content>*{-webkit-flex-grow:1;flex-grow:1}.wfls-block .wfls-block-footer .wfls-block-footer-content .wfls-block-title{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.9rem;width:100%;transition:color 0.2s ease-in}.wfls-block .wfls-block-footer .wfls-block-footer-content .wfls-block-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:0.775rem}.wfls-block .wfls-block-footer .wfls-block-footer-action{-webkit-flex-grow:0;flex-grow:0;background:none;border:0;outline:0;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-end;justify-content:flex-end;vertical-align:middle}.wfls-block.wfls-block-no-header .wfls-block-content .wfls-block-list>li{border-top:none}.wfls-block.wfls-active .wfls-block-content,.wfls-block.wfls-always-active .wfls-block-content{display:block}.wfls-block.wfls-active>.wfls-block-header>.wfls-block-header-content>.wfls-block-title{color:#00709e}.wfls-block.wfls-active>.wfls-block-header>.wfls-block-header-content>.wfls-block-header-action>.wfls-block-header-action-disclosure{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJkaXNjbG9zdXJlLWNsb3NlZC1vYmplY3QiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIxMnB4IiBoZWlnaHQ9IjEycHgiIHZpZXdCb3g9IjAgMCAxMiAxMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTIgMTIiCgkgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxwYXRoIGlkPSJkaXNjbG9zdXJlLWNsb3NlZCIgZD0iTSA2IDAgbCA2IDYgLTYgNiAwIC0xMiIgZmlsbD0iIzAwNzA5ZSIvPgo8L3N2Zz4=") !important;transform:rotate(90deg)}.wfls-block.wfls-disabled>.wfls-block-header>.wfls-block-header-content>.wfls-block-title,.wfls-block.wfls-disabled>.wfls-block-header>.wfls-block-header-content>.wfls-block-subtitle{color:#bfbfbf !important}.wfls-block.wfls-disabled>.wfls-block-header>.wfls-block-header-content>.wfls-block-header-action>.wfls-block-header-action-disclosure{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJkaXNjbG9zdXJlLWNsb3NlZC1vYmplY3QiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIxMnB4IiBoZWlnaHQ9IjEycHgiIHZpZXdCb3g9IjAgMCAxMiAxMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTIgMTIiCgkgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxwYXRoIGlkPSJkaXNjbG9zdXJlLWNsb3NlZCIgZD0iTSA2IDAgbCA2IDYgLTYgNiAwIC0xMiIgZmlsbD0iI2JkYmRiZCIvPgo8L3N2Zz4=") !important;transform:rotate(0deg)}.wfls-block.wfls-disabled>.wfls-block-content{display:none !important}.wfls-block.wfls-block-header-left .wfls-block-header-content{margin-left:48px}.wfls-block.wfls-block-header-left .wfls-block-header-action{right:auto;left:0px}.wfls-block.wfls-disabled .wfls-dashboard-item-content .wfls-block-title{color:#aaaaaa}.wfls-block.wfls-disabled .wfls-dashboard-item-content .wfls-block-subtitle{color:#8ea6be}.wfls-section-title{margin-bottom:1rem}.wfls-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}.wfls-status-detail p{margin:0 0 0.45rem 0}.wfls-status-detail .wfls-status-circular{margin-bottom:1rem}.wfls-status-detail .wfls-status-detail-title{font-weight:700 !important;font-size:1rem !important;line-height:1.3125 !important}.wfls-status-detail .wfls-status-detail-subtitle{font-size:.875rem !important;line-height:1.3125 !important;font-weight:normal !important;text-align:center}.wfls-status-detail .wfls-status-detail-link>a{font-weight:600 !important;font-size:0.85rem !important}.wfls-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}.wfls-block-navigation-option svg.wfls-block-navigation-option-icon{width:50px;min-width:50px;fill:#9f9fa0}.wfls-block-navigation-option:hover{cursor:pointer}.wfls-block-navigation-option:hover a{text-decoration:underline}.wfls-block-navigation-option:hover svg.wfls-block-navigation-option-icon{fill:#00709e}.wfls-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}.wfls-select-group .wfselect2-container{min-width:200px}@media (max-width: 767px){.wfls-select-group .wfselect2-container{max-width:100px}}.wfls-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}.wfls-select-group .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered{color:#2b2b2b;line-height:inherit}.wfls-select-group .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow{height:38px}.wfls-select-group .wfls-form-control{display:inline-block;width:auto;border-top-left-radius:0;border-bottom-left-radius:0;margin-left:0}.wfls-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}.wfls-flex-horizontal>*:first-child{-webkit-flex-grow:0 !important;flex-grow:0 !important}.wfls-flex-horizontal.wfls-flex-align-left{-webkit-align-items:flex-start !important;align-items:flex-start !important}.wfls-flex-horizontal.wfls-flex-align-right{-webkit-justify-content:flex-end !important;justify-content:flex-end !important}.wfls-flex-horizontal.wfls-flex-full-width{width:100%}.wfls-flex-horizontal.wfls-flex-full-width>*:last-child{-webkit-flex-grow:1 !important;flex-grow:1 !important}.wfls-flex-horizontal.wfls-flex-full-width.wfls-flex-grow-first>*:first-child{-webkit-flex-grow:1 !important;flex-grow:1 !important}.wfls-flex-horizontal.wfls-flex-full-width.wfls-flex-grow-first>*:last-child{-webkit-flex-grow:0 !important;flex-grow:0 !important}.wfls-flex-horizontal.wfls-flex-full-width.wfls-flex-grow-all>*:first-child,.wfls-flex-horizontal.wfls-flex-full-width.wfls-flex-grow-all>*{-webkit-flex-grow:1 !important;flex-grow:1 !important}.wfls-flex-horizontal>li{padding:0;margin:0}.wfls-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}.wfls-flex-vertical>*:first-child{-webkit-flex-grow:0 !important;flex-grow:0 !important}.wfls-flex-vertical.wfls-flex-align-left{-webkit-align-items:flex-start !important;align-items:flex-start !important}.wfls-flex-vertical.wfls-flex-align-right{-webkit-align-items:flex-end !important;align-items:flex-end !important}.wfls-flex-vertical.wfls-flex-full-width{-webkit-align-items:stretch !important;align-items:stretch !important}@media (max-width: 767px){.wfls-flex-vertical.wfls-flex-align-left-xs{-webkit-align-items:flex-start !important;align-items:flex-start !important}}@media (min-width: 768px) and (max-width: 991px){.wfls-flex-vertical.wfls-flex-align-left-sm{-webkit-align-items:flex-start !important;align-items:flex-start !important}}@media (min-width: 992px) and (max-width: 1199px){.wfls-flex-vertical.wfls-flex-align-left-md{-webkit-align-items:flex-start !important;align-items:flex-start !important}}@media (min-width: 1200px){.wfls-flex-vertical.wfls-flex-align-left-lg{-webkit-align-items:flex-start !important;align-items:flex-start !important}}.wfls-flex-vertical>li{padding:0;margin:0}@media (max-width: 767px){.wfls-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}.wfls-flex-vertical-xs>*:first-child{-webkit-flex-grow:0 !important;flex-grow:0 !important}.wfls-flex-vertical-xs.wfls-flex-align-left{-webkit-align-items:flex-start !important;align-items:flex-start !important}.wfls-flex-vertical-xs.wfls-flex-align-right{-webkit-align-items:flex-end !important;align-items:flex-end !important}.wfls-flex-vertical-xs.wfls-flex-full-width{-webkit-align-items:stretch !important;align-items:stretch !important}}ul.wfls-option,.wfls-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.wfls-option li,.wfls-form-field li{margin:0;padding:0}ul.wfls-option.wfls-option-no-spacing,.wfls-form-field.wfls-option-no-spacing{padding:0;margin:0}ul.wfls-option.wfls-option-toggled>*:last-child,ul.wfls-option.wfls-option-toggled-boolean-switch>*:last-child,ul.wfls-option.wfls-option-toggled-select>*:last-child,ul.wfls-option.wfls-option-select>*:last-child,ul.wfls-option.wfls-option-text>*:last-child,ul.wfls-option.wfls-option-textarea>*:last-child,ul.wfls-option.wfls-option-switch>*:last-child,ul.wfls-option.wfls-option-footer>*:last-child,.wfls-form-field.wfls-option-toggled>*:last-child,.wfls-form-field.wfls-option-toggled-boolean-switch>*:last-child,.wfls-form-field.wfls-option-toggled-select>*:last-child,.wfls-form-field.wfls-option-select>*:last-child,.wfls-form-field.wfls-option-text>*:last-child,.wfls-form-field.wfls-option-textarea>*:last-child,.wfls-form-field.wfls-option-switch>*:last-child,.wfls-form-field.wfls-option-footer>*:last-child{margin-right:1rem}@media (max-width: 768px){ul.wfls-option.wfls-option-footer,.wfls-form-field.wfls-option-footer{-webkit-flex-direction:column;flex-direction:column}}ul.wfls-option>.wfls-option-content,.wfls-form-field>.wfls-option-content{-webkit-flex-grow:1;flex-grow:1}ul.wfls-option>.wfls-option-content>ul,.wfls-form-field>.wfls-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.wfls-option>.wfls-option-content>ul>*:first-child,.wfls-form-field>.wfls-option-content>ul>*:first-child{-webkit-flex-grow:1;flex-grow:1}@media (min-width: 768px){ul.wfls-option>.wfls-option-content>ul,.wfls-form-field>.wfls-option-content>ul{-webkit-flex-direction:row;flex-direction:row;-webkit-align-items:center;align-items:center}}ul.wfls-option.wfls-option-toggled-segmented *,.wfls-form-field.wfls-option-toggled-segmented *{-webkit-flex-grow:0;flex-grow:0}ul.wfls-option.wfls-option-toggled-segmented *:first-child,.wfls-form-field.wfls-option-toggled-segmented *:first-child{-webkit-flex-grow:1;flex-grow:1}ul.wfls-option.wfls-option-toggled-segmented>*:last-child,.wfls-form-field.wfls-option-toggled-segmented>*:last-child{margin-left:1rem}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-title,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-title{font-size:.8rem}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments,.wfls-form-field.wfls-option-toggled-segmented .wfls-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.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label,.wfls-form-field.wfls-option-toggled-segmented .wfls-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.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.focus{color:#00709e;background-color:#e6e6e6;border-color:#00161f}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label:hover{color:#00709e;background-color:#e6e6e6;border-color:#004561}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label:active,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.active,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label:active,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.active,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle{color:#00709e;background-color:#e6e6e6;border-color:#004561}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label:active:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label:active:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label:active.focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.active:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.active:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.active.focus,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle:hover,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle:focus,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle.focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label:active:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label:active:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label:active.focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.active:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.active:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.active.focus,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle:hover,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle:focus,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle.focus{color:#00709e;background-color:#d4d4d4;border-color:#00161f}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label:active,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-active,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label:active,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-active,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle{background-image:none}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-disabled,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label[disabled],ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label[readonly],fieldset[disabled] ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-disabled,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label[disabled],.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label[readonly],fieldset[disabled] .wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label{color:#777;background-color:#fff;border-color:#e2e2e2;cursor:not-allowed;opacity:0.75}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-disabled:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-disabled:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-disabled.wfls-focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label[disabled]:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label[disabled]:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label[disabled].wfls-focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label[readonly]:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label[readonly]:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label[readonly].wfls-focus,fieldset[disabled] ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label:hover,fieldset[disabled] ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label:focus,fieldset[disabled] ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-disabled:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-disabled:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-disabled.wfls-focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label[disabled]:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label[disabled]:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label[disabled].wfls-focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label[readonly]:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label[readonly]:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label[readonly].wfls-focus,fieldset[disabled] .wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label:hover,fieldset[disabled] .wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label:focus,fieldset[disabled] .wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-focus{background-color:#fff;border-color:#00709e}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label .wfls-badge,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label .wfls-badge{color:#fff;background-color:#00709e}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-segment-first,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-segment-first{border-radius:4px 0 0 4px}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-segment-last,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-segment-last{border-radius:0 4px 4px 0}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio],.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]{position:absolute;left:-9999px}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label{color:#fff;background-color:#00709e;border-color:#005e85}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.focus{color:#fff;background-color:#004c6b;border-color:#000405}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:hover{color:#fff;background-color:#004c6b;border-color:#003347}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.active,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.active,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle{color:#fff;background-color:#004c6b;border-color:#003347}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active.focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.active:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.active:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.active.focus,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle:hover,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle:focus,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle.focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active.focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.active:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.active:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.active.focus,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle:hover,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle:focus,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle.focus{color:#fff;background-color:#003347;border-color:#000405}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-active,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-active,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle{background-image:none}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-disabled,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[disabled],ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[readonly],fieldset[disabled] ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-disabled,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[disabled],.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[readonly],fieldset[disabled] .wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label{color:#fff;background-color:#59a2c0;border-color:#5996b0;cursor:not-allowed;opacity:0.75}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-disabled:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-disabled:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-disabled.wfls-focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[disabled]:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[disabled]:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[disabled].wfls-focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[readonly]:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[readonly]:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[readonly].wfls-focus,fieldset[disabled] ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:hover,fieldset[disabled] ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:focus,fieldset[disabled] ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-disabled:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-disabled:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-disabled.wfls-focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[disabled]:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[disabled]:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[disabled].wfls-focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[readonly]:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[readonly]:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[readonly].wfls-focus,fieldset[disabled] .wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:hover,fieldset[disabled] .wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:focus,fieldset[disabled] .wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-focus{background-color:#00709e;border-color:#005e85}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label .wfls-badge,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label .wfls-badge{color:#00709e;background-color:#fff}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:disabled+label,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:disabled+label{cursor:not-allowed;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);opacity:.65}ul.wfls-option.wfls-option-toggled-multiple,.wfls-form-field.wfls-option-toggled-multiple{-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:flex-start;align-items:flex-start}ul.wfls-option.wfls-option-toggled-multiple>.wfls-option-title,.wfls-form-field.wfls-option-toggled-multiple>.wfls-option-title{font-weight:600}ul.wfls-option>.wfls-option-spacer,.wfls-form-field>.wfls-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.wfls-option>.wfls-option-spacer,.wfls-form-field>.wfls-option-spacer{width:20px;height:20px}}ul.wfls-option>.wfls-option-premium-lock,.wfls-form-field>.wfls-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.wfls-option>.wfls-option-premium-lock,.wfls-form-field>.wfls-option-premium-lock{margin:0 2rem 0 1rem;width:20px;height:20px}}ul.wfls-option>.wfls-option-checkbox,.wfls-form-field>.wfls-option-checkbox{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-shrink:0;flex-shrink:0;margin:0 1rem 0 0}ul.wfls-option>.wfls-boolean-switch,.wfls-form-field>.wfls-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.wfls-option>.wfls-boolean-switch,.wfls-form-field>.wfls-boolean-switch{margin:0 1rem 0 1rem}}ul.wfls-option.wfls-option-no-spacing>.wfls-boolean-switch,.wfls-form-field.wfls-option-no-spacing>.wfls-boolean-switch{margin:0}ul.wfls-option>.wfls-option-radio-container,.wfls-form-field>.wfls-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.wfls-option>.wfls-option-radio-container,.wfls-form-field>.wfls-option-radio-container{margin:0 2rem 0 1rem}}ul.wfls-option>.wfls-option-radio-container [type=radio].wfls-option-radio+label:before,.wfls-form-field>.wfls-option-radio-container [type=radio].wfls-option-radio+label:before{margin:0}ul.wfls-option>li>.wfls-option-title,ul.wfls-option>.wfls-option-title,ul.wfls-option>.wfls-option-content>ul>.wfls-option-title,.wfls-form-field>li>.wfls-option-title,.wfls-form-field>.wfls-option-title,.wfls-form-field>.wfls-option-content>ul>.wfls-option-title{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.9rem;color:#2b2b2b;padding-right:0.5rem}ul.wfls-option>li>.wfls-option-title.wfls-option-title-top,ul.wfls-option>.wfls-option-title.wfls-option-title-top,ul.wfls-option>.wfls-option-content>ul>.wfls-option-title.wfls-option-title-top,.wfls-form-field>li>.wfls-option-title.wfls-option-title-top,.wfls-form-field>.wfls-option-title.wfls-option-title-top,.wfls-form-field>.wfls-option-content>ul>.wfls-option-title.wfls-option-title-top{-webkit-align-self:flex-start;align-self:flex-start}ul.wfls-option>li>.wfls-option-title.wfls-option-title-bottom,ul.wfls-option>.wfls-option-title.wfls-option-title-bottom,ul.wfls-option>.wfls-option-content>ul>.wfls-option-title.wfls-option-title-bottom,.wfls-form-field>li>.wfls-option-title.wfls-option-title-bottom,.wfls-form-field>.wfls-option-title.wfls-option-title-bottom,.wfls-form-field>.wfls-option-content>ul>.wfls-option-title.wfls-option-title-bottom{-webkit-align-self:flex-end;align-self:flex-end}ul.wfls-option .wfls-option-subtitle,.wfls-form-field .wfls-option-subtitle{padding-top:0.25rem;font-size:0.75rem}ul.wfls-option .wfls-flex-vertical .wfls-option-title,.wfls-form-field .wfls-flex-vertical .wfls-option-title{padding-bottom:0.75rem}ul.wfls-option.wfls-flex-vertical>.wfls-option-subtitle,.wfls-form-field.wfls-flex-vertical>.wfls-option-subtitle{padding-top:0.25rem !important;font-size:0.75rem !important}ul.wfls-option .wfls-option-checkboxes,ul.wfls-option .wfls-option-checkboxes>ul,.wfls-form-field .wfls-option-checkboxes,.wfls-form-field .wfls-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.wfls-option .wfls-option-checkboxes.wfls-option-checkboxes-wrap,ul.wfls-option .wfls-option-checkboxes>ul.wfls-option-checkboxes-wrap,.wfls-form-field .wfls-option-checkboxes.wfls-option-checkboxes-wrap,.wfls-form-field .wfls-option-checkboxes>ul.wfls-option-checkboxes-wrap{-webkit-flex-wrap:wrap;flex-wrap:wrap}ul.wfls-option .wfls-option-checkboxes,.wfls-form-field .wfls-option-checkboxes{margin-top:0.5rem}ul.wfls-option .wfls-option-checkboxes>ul,.wfls-form-field .wfls-option-checkboxes>ul{margin-top:0.5rem;margin-right:1rem}@media (min-width: 768px){ul.wfls-option .wfls-option-checkboxes>ul,.wfls-form-field .wfls-option-checkboxes>ul{margin-right:1.5rem}}ul.wfls-option .wfls-option-checkboxes>ul:last-of-type,.wfls-form-field .wfls-option-checkboxes>ul:last-of-type{margin-right:0}ul.wfls-option .wfls-option-checkboxes>ul>.wfls-option-checkbox,.wfls-form-field .wfls-option-checkboxes>ul>.wfls-option-checkbox{margin:0 1rem 0 0}ul.wfls-option li.wfls-option-text,ul.wfls-option li.wfls-option-textarea,ul.wfls-option td.wfls-option-text,.wfls-form-field li.wfls-option-text,.wfls-form-field li.wfls-option-textarea,.wfls-form-field td.wfls-option-text{padding-top:0.5rem}@media (min-width: 768px){ul.wfls-option li.wfls-option-text,ul.wfls-option li.wfls-option-textarea,ul.wfls-option td.wfls-option-text,.wfls-form-field li.wfls-option-text,.wfls-form-field li.wfls-option-textarea,.wfls-form-field td.wfls-option-text{-webkit-flex-grow:1;flex-grow:1;text-align:right;padding-left:1rem;padding-top:0}}ul.wfls-option li.wfls-option-text>input[type="text"],.wfls-form-field li.wfls-option-text>input[type="text"]{max-width:240px}@media (min-width: 768px){ul.wfls-option li.wfls-option-text>input[type="text"],.wfls-form-field li.wfls-option-text>input[type="text"]{max-width:280px}}@media (min-width: 992px){ul.wfls-option li.wfls-option-text>input[type="text"],.wfls-form-field li.wfls-option-text>input[type="text"]{max-width:340px}}ul.wfls-option li.wfls-option-text.wfls-option-full-width>input[type="text"],.wfls-form-field li.wfls-option-text.wfls-option-full-width>input[type="text"]{max-width:100%;width:100%}ul.wfls-option li.wfls-option-textarea,.wfls-form-field li.wfls-option-textarea{min-width:150px;max-width:240px}@media (min-width: 768px){ul.wfls-option li.wfls-option-textarea,.wfls-form-field li.wfls-option-textarea{min-width:200px;max-width:400px}}@media (min-width: 992px){ul.wfls-option li.wfls-option-textarea,.wfls-form-field li.wfls-option-textarea{min-width:250px;max-width:500px}}ul.wfls-option li.wfls-option-textarea>textarea,.wfls-form-field li.wfls-option-textarea>textarea{width:100%;height:80px;min-width:150px;max-width:240px}@media (min-width: 768px){ul.wfls-option li.wfls-option-textarea>textarea,.wfls-form-field li.wfls-option-textarea>textarea{min-width:200px;max-width:280px}}@media (min-width: 992px){ul.wfls-option li.wfls-option-textarea>textarea,.wfls-form-field li.wfls-option-textarea>textarea{min-width:250px;max-width:340px}}ul.wfls-option li.wfls-option-textarea>.wfls-flex-vertical>li>textarea,.wfls-form-field li.wfls-option-textarea>.wfls-flex-vertical>li>textarea{width:100%;height:80px;box-sizing:border-box}ul.wfls-option li.wfls-option-textarea>.wfls-flex-vertical>li.wfls-option-subtitle,.wfls-form-field li.wfls-option-textarea>.wfls-flex-vertical>li.wfls-option-subtitle{width:100%;text-align:left}ul.wfls-option li.wfls-option-switch,.wfls-form-field li.wfls-option-switch{-webkit-flex-grow:1;flex-grow:1}ul.wfls-option li.wfls-option-switch.wfls-right .wfls-switch,.wfls-form-field li.wfls-option-switch.wfls-right .wfls-switch{justify-content:flex-end !important}ul.wfls-option li.wfls-option-select,.wfls-form-field li.wfls-option-select{-webkit-flex-grow:1;flex-grow:1;text-align:right}ul.wfls-option li.wfls-option-select select,ul.wfls-option li.wfls-option-select select option,ul.wfls-option li.wfls-option-select .wfselect2-container--default,.wfls-form-field li.wfls-option-select select,.wfls-form-field li.wfls-option-select select option,.wfls-form-field li.wfls-option-select .wfselect2-container--default{font-size:0.7rem;font-weight:bold}@media (min-width: 768px){ul.wfls-option li.wfls-option-select select,ul.wfls-option li.wfls-option-select select option,ul.wfls-option li.wfls-option-select .wfselect2-container--default,.wfls-form-field li.wfls-option-select select,.wfls-form-field li.wfls-option-select select option,.wfls-form-field li.wfls-option-select .wfselect2-container--default{font-size:0.8rem}}@media (min-width: 992px){ul.wfls-option li.wfls-option-select select,ul.wfls-option li.wfls-option-select select option,ul.wfls-option li.wfls-option-select .wfselect2-container--default,.wfls-form-field li.wfls-option-select select,.wfls-form-field li.wfls-option-select select option,.wfls-form-field li.wfls-option-select .wfselect2-container--default{font-size:0.9rem}}ul.wfls-option li.wfls-option-select .wfls-option-select-option,ul.wfls-option li.wfls-option-select .wfselect2-container--default,ul.wfls-option li.wfls-option-select .wfselect2-container--default .wfselect2-selection--single,.wfls-form-field li.wfls-option-select .wfls-option-select-option,.wfls-form-field li.wfls-option-select .wfselect2-container--default,.wfls-form-field li.wfls-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.wfls-option li.wfls-option-select .wfls-option-select-option .wfselect2-selection__rendered,ul.wfls-option li.wfls-option-select .wfselect2-container--default .wfselect2-selection__rendered,ul.wfls-option li.wfls-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered,.wfls-form-field li.wfls-option-select .wfls-option-select-option .wfselect2-selection__rendered,.wfls-form-field li.wfls-option-select .wfselect2-container--default .wfselect2-selection__rendered,.wfls-form-field li.wfls-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered{color:#333;line-height:40px}ul.wfls-option li.wfls-option-select .wfls-option-select-option .wfselect2-selection__arrow,ul.wfls-option li.wfls-option-select .wfselect2-container--default .wfselect2-selection__arrow,ul.wfls-option li.wfls-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow,.wfls-form-field li.wfls-option-select .wfls-option-select-option .wfselect2-selection__arrow,.wfls-form-field li.wfls-option-select .wfselect2-container--default .wfselect2-selection__arrow,.wfls-form-field li.wfls-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow{height:38px}ul.wfls-option li.wfls-option-select .wfls-option-select-option.wfselect2-container--disabled .wfselect2-selection__rendered,ul.wfls-option li.wfls-option-select .wfselect2-container--default.wfselect2-container--disabled .wfselect2-selection__rendered,ul.wfls-option li.wfls-option-select .wfselect2-container--default .wfselect2-selection--single.wfselect2-container--disabled .wfselect2-selection__rendered,.wfls-form-field li.wfls-option-select .wfls-option-select-option.wfselect2-container--disabled .wfselect2-selection__rendered,.wfls-form-field li.wfls-option-select .wfselect2-container--default.wfselect2-container--disabled .wfselect2-selection__rendered,.wfls-form-field li.wfls-option-select .wfselect2-container--default .wfselect2-selection--single.wfselect2-container--disabled .wfselect2-selection__rendered{color:#aaa}ul.wfls-option li.wfls-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow b,.wfls-form-field li.wfls-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:#333 transparent transparent}ul.wfls-option li.wfls-option-select .wfselect2-container--default.wfselect2-container--open .wfselect2-selection--single .wfselect2-selection__arrow b,.wfls-form-field li.wfls-option-select .wfselect2-container--default.wfselect2-container--open .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:transparent transparent #333}ul.wfls-option.wfls-option-token select,.wfls-form-field.wfls-option-token select{width:240px}@media (min-width: 768px){ul.wfls-option.wfls-option-token select,.wfls-form-field.wfls-option-token select{width:280px}}@media (min-width: 992px){ul.wfls-option.wfls-option-token select,.wfls-form-field.wfls-option-token select{width:320px}}ul.wfls-option.wfls-option-token .wfselect2-container--default,ul.wfls-option.wfls-option-token .wfselect2-container--default .wfselect2-selection--multiple,.wfls-form-field.wfls-option-token .wfselect2-container--default,.wfls-form-field.wfls-option-token .wfselect2-container--default .wfselect2-selection--multiple{border-color:#e2e2e2}ul.wfls-option.wfls-option-token .wfselect2-container--default .wfselect2-selection__choice,ul.wfls-option.wfls-option-token .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-selection__choice,.wfls-form-field.wfls-option-token .wfselect2-container--default .wfselect2-selection__choice,.wfls-form-field.wfls-option-token .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-selection__choice{background-color:#fff;border-color:#e2e2e2;padding:0.5rem}ul.wfls-option.wfls-option-token .wfselect2-container--default .wfselect2-search__field,ul.wfls-option.wfls-option-token .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-search__field,.wfls-form-field.wfls-option-token .wfselect2-container--default .wfselect2-search__field,.wfls-form-field.wfls-option-token .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-search__field{margin-right:5px;margin-top:5px;padding:0.5rem 0}#wfls-option-require-2fa{margin-top:1rem}#wfls-option-require-2fa>li>ul{margin-left:1rem}@media (min-width: 768px){#wfls-option-require-2fa>li>ul{margin-left:1.5rem}}#wfls-option-require-2fa>li>ul:first-of-type{margin-left:0}#wfls-option-require-2fa>li>ul>.wfls-option-checkbox{margin:0 1rem 0 0}.wfls-option-sub{padding-left:2rem !important;margin-left:30px !important}.wfls-select2-suppress-dropdown .wfselect2-results,.wfls-select2-suppress-dropdown .wfselect2-dropdown{display:none}.wfls-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){.wfls-options-controls{position:fixed}}.wfls-options-controls .wfls-block{margin:0}@media (min-width: 782px){.wfls-options-controls .wfls-block{margin:0.5rem 0}}.wfls-options-controls,.sticky-menu .wfls-options-controls{top:32px}.folded .wfls-options-controls{left:36px}@media only screen and (max-width: 960px){.auto-fold .wfls-options-controls{left:36px}}.rtl .wfls-options-controls{right:160px;left:0px}.rtl .folded .wfls-options-controls{right:36px}@media only screen and (max-width: 960px){.rtl .auto-fold .wfls-options-controls{right:36px}}@media screen and (max-width: 782px){.wfls-options-controls,.folded .wfls-options-controls,.auto-fold .wfls-options-controls,.rtl .wfls-options-controls,.rtl .folded .wfls-options-controls,.rtl .auto-fold .wfls-options-controls{left:-10px;right:0px}}.wfls-options-controls-spacer{height:45px}@media (min-width: 782px){.wfls-options-controls-spacer{height:75px}}.wfls-options-controls-spacer,.sticky-menu .wfls-options-controls-spacer{top:61px}.wordfence .wfselect2-container .wfselect2-selection--single{border:1px solid #dadada;font-weight:normal;font-size:0.8rem}#wfls-notices{margin-top:15px}#wfls-notices .wfls-admin-notice{margin-left:0px;margin-right:0px}.wfls-success-text,.wfls-notice-text{display:inline-block;vertical-align:middle;line-height:1.3;font-size:16px;font-weight:bold;font-style:italic}.wfls-notice{margin:12px 0;padding:8px;background-color:#ffffe0;border:1px solid #ffd975;border-width:1px 1px 1px 10px}.wfls-notice-text{color:#6d798c}.wfls-success{margin:12px 0;padding:8px;background-color:#ffffff;border:1px solid #16bc9b;border-width:1px 1px 1px 10px}.wfls-success-text{color:#11967a}.wfls-premium-callout{border:1px solid #dfdfdf;background-color:#ffffff;padding:16px;margin:20px 0 0;text-align:center}.wfls-premium-callout ul{margin:8px 0;padding:0 0 0 15px}.wfls-premium-callout ul li{list-style-type:disc;margin:0;padding:0}.wfls-premium-callout .center{text-align:center;margin:0}.wfls-premium-callout .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709e}table.wfls-table{background-color:transparent;border-collapse:collapse;border-spacing:0}table.wfls-table td,table.wfls-table th{padding:0}.wfls-table caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}.wfls-table th{text-align:left}.wfls-table{width:100%;max-width:100%;margin-bottom:20px}.wfls-table>thead>tr>th,.wfls-table>thead>tr>td,.wfls-table>tbody>tr>th,.wfls-table>tbody>tr>td,.wfls-table>tfoot>tr>th,.wfls-table>tfoot>tr>td{padding:8px;line-height:1.42857;vertical-align:top;border-top:1px solid #ddd}.wfls-table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.wfls-table>caption+thead>tr:first-child>th,.wfls-table>caption+thead>tr:first-child>td,.wfls-table>colgroup+thead>tr:first-child>th,.wfls-table>colgroup+thead>tr:first-child>td,.wfls-table>thead:first-child>tr:first-child>th,.wfls-table>thead:first-child>tr:first-child>td{border-top:0}.wfls-table>tbody+tbody{border-top:2px solid #ddd}.wfls-table .wfls-table{background-color:#fff}.wfls-table-header-separators>thead>tr>th{border-left:2px solid #ddd}.wfls-table-header-separators>thead>tr>th:first-child{border-left:0}.wfls-table-condensed>thead>tr>th,.wfls-table-condensed>thead>tr>td,.wfls-table-condensed>tbody>tr>th,.wfls-table-condensed>tbody>tr>td,.wfls-table-condensed>tfoot>tr>th,.wfls-table-condensed>tfoot>tr>td{padding:5px}.wfls-table-expanded>thead>tr>th,.wfls-table-expanded>thead>tr>td,.wfls-table-expanded>tbody>tr>th,.wfls-table-expanded>tbody>tr>td,.wfls-table-expanded>tfoot>tr>th,.wfls-table-expanded>tfoot>tr>td{padding:0.5rem 1rem}@media (min-width: 768px){.wfls-table-expanded>thead>tr>th,.wfls-table-expanded>thead>tr>td,.wfls-table-expanded>tbody>tr>th,.wfls-table-expanded>tbody>tr>td,.wfls-table-expanded>tfoot>tr>th,.wfls-table-expanded>tfoot>tr>td{padding:1rem 1.5rem}}.wfls-table-bordered{border:1px solid #ddd}.wfls-table-bordered>thead>tr>th,.wfls-table-bordered>thead>tr>td,.wfls-table-bordered>tbody>tr>th,.wfls-table-bordered>tbody>tr>td,.wfls-table-bordered>tfoot>tr>th,.wfls-table-bordered>tfoot>tr>td{border:1px solid #ddd}.wfls-table-bordered>thead>tr>th,.wfls-table-bordered>thead>tr>td{border-bottom-width:2px}.wfls-table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.wfls-table-hover>tbody>tr:hover{background-color:#f5f5f5}table.wfls-table col[class*="col-"]{position:static;float:none;display:table-column}table.wfls-table td[class*="col-"],table.wfls-table th[class*="col-"]{position:static;float:none;display:table-cell}.wfls-table>thead>tr>td.active,.wfls-table>thead>tr>th.active,.wfls-table>thead>tr.active>td,.wfls-table>thead>tr.active>th,.wfls-table>tbody>tr>td.active,.wfls-table>tbody>tr>th.active,.wfls-table>tbody>tr.active>td,.wfls-table>tbody>tr.active>th,.wfls-table>tfoot>tr>td.active,.wfls-table>tfoot>tr>th.active,.wfls-table>tfoot>tr.active>td,.wfls-table>tfoot>tr.active>th{background-color:#f5f5f5}.wfls-table-hover>tbody>tr>td.active:hover,.wfls-table-hover>tbody>tr>th.active:hover,.wfls-table-hover>tbody>tr.active:hover>td,.wfls-table-hover>tbody>tr:hover>.active,.wfls-table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.wfls-table>thead>tr>td.success,.wfls-table>thead>tr>th.success,.wfls-table>thead>tr.success>td,.wfls-table>thead>tr.success>th,.wfls-table>tbody>tr>td.success,.wfls-table>tbody>tr>th.success,.wfls-table>tbody>tr.success>td,.wfls-table>tbody>tr.success>th,.wfls-table>tfoot>tr>td.success,.wfls-table>tfoot>tr>th.success,.wfls-table>tfoot>tr.success>td,.wfls-table>tfoot>tr.success>th{background-color:#dff0d8}.wfls-table-hover>tbody>tr>td.success:hover,.wfls-table-hover>tbody>tr>th.success:hover,.wfls-table-hover>tbody>tr.success:hover>td,.wfls-table-hover>tbody>tr:hover>.success,.wfls-table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.wfls-table>thead>tr>td.info,.wfls-table>thead>tr>th.info,.wfls-table>thead>tr.info>td,.wfls-table>thead>tr.info>th,.wfls-table>tbody>tr>td.info,.wfls-table>tbody>tr>th.info,.wfls-table>tbody>tr.info>td,.wfls-table>tbody>tr.info>th,.wfls-table>tfoot>tr>td.info,.wfls-table>tfoot>tr>th.info,.wfls-table>tfoot>tr.info>td,.wfls-table>tfoot>tr.info>th{background-color:#d9edf7}.wfls-table-hover>tbody>tr>td.info:hover,.wfls-table-hover>tbody>tr>th.info:hover,.wfls-table-hover>tbody>tr.info:hover>td,.wfls-table-hover>tbody>tr:hover>.info,.wfls-table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.wfls-table>thead>tr>td.warning,.wfls-table>thead>tr>th.warning,.wfls-table>thead>tr.warning>td,.wfls-table>thead>tr.warning>th,.wfls-table>tbody>tr>td.warning,.wfls-table>tbody>tr>th.warning,.wfls-table>tbody>tr.warning>td,.wfls-table>tbody>tr.warning>th,.wfls-table>tfoot>tr>td.warning,.wfls-table>tfoot>tr>th.warning,.wfls-table>tfoot>tr.warning>td,.wfls-table>tfoot>tr.warning>th{background-color:#fcf8e3}.wfls-table-hover>tbody>tr>td.warning:hover,.wfls-table-hover>tbody>tr>th.warning:hover,.wfls-table-hover>tbody>tr.warning:hover>td,.wfls-table-hover>tbody>tr:hover>.warning,.wfls-table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.wfls-table>thead>tr>td.danger,.wfls-table>thead>tr>th.danger,.wfls-table>thead>tr.danger>td,.wfls-table>thead>tr.danger>th,.wfls-table>tbody>tr>td.danger,.wfls-table>tbody>tr>th.danger,.wfls-table>tbody>tr.danger>td,.wfls-table>tbody>tr.danger>th,.wfls-table>tfoot>tr>td.danger,.wfls-table>tfoot>tr>th.danger,.wfls-table>tfoot>tr.danger>td,.wfls-table>tfoot>tr.danger>th{background-color:#f2dede}.wfls-table-hover>tbody>tr>td.danger:hover,.wfls-table-hover>tbody>tr>th.danger:hover,.wfls-table-hover>tbody>tr.danger:hover>td,.wfls-table-hover>tbody>tr:hover>.danger,.wfls-table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.wfls-table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width: 767px){.wfls-table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.wfls-table-responsive>.wfls-table{margin-bottom:0}.wfls-table-responsive>.wfls-table>thead>tr>th,.wfls-table-responsive>.wfls-table>thead>tr>td,.wfls-table-responsive>.wfls-table>tbody>tr>th,.wfls-table-responsive>.wfls-table>tbody>tr>td,.wfls-table-responsive>.wfls-table>tfoot>tr>th,.wfls-table-responsive>.wfls-table>tfoot>tr>td{white-space:nowrap}.wfls-table-responsive>.wfls-table-bordered{border:0}.wfls-table-responsive>.wfls-table-bordered>thead>tr>th:first-child,.wfls-table-responsive>.wfls-table-bordered>thead>tr>td:first-child,.wfls-table-responsive>.wfls-table-bordered>tbody>tr>th:first-child,.wfls-table-responsive>.wfls-table-bordered>tbody>tr>td:first-child,.wfls-table-responsive>.wfls-table-bordered>tfoot>tr>th:first-child,.wfls-table-responsive>.wfls-table-bordered>tfoot>tr>td:first-child{border-left:0}.wfls-table-responsive>.wfls-table-bordered>thead>tr>th:last-child,.wfls-table-responsive>.wfls-table-bordered>thead>tr>td:last-child,.wfls-table-responsive>.wfls-table-bordered>tbody>tr>th:last-child,.wfls-table-responsive>.wfls-table-bordered>tbody>tr>td:last-child,.wfls-table-responsive>.wfls-table-bordered>tfoot>tr>th:last-child,.wfls-table-responsive>.wfls-table-bordered>tfoot>tr>td:last-child{border-right:0}.wfls-table-responsive>.wfls-table-bordered>tbody>tr:last-child>th,.wfls-table-responsive>.wfls-table-bordered>tbody>tr:last-child>td,.wfls-table-responsive>.wfls-table-bordered>tfoot>tr:last-child>th,.wfls-table-responsive>.wfls-table-bordered>tfoot>tr:last-child>td{border-bottom:0}}.wfls-sortable{position:relative;padding-right:2rem !important}.wfls-sortable .wfls-sorted-ascending,.wfls-sortable .wfls-sorted-descending{display:none;position:absolute;right:1rem;top:50%;transform:translateY(-50%)}.wfls-sortable.wfls-unsorted:hover .wfls-sorted-ascending{display:block}.wfls-sortable.wfls-unsorted,.wfls-sortable.wfls-sorted-ascending,.wfls-sortable.wfls-sorted-descending{cursor:pointer}.wfls-sortable.wfls-unsorted:hover,.wfls-sortable.wfls-sorted-ascending:hover,.wfls-sortable.wfls-sorted-descending:hover{background-color:#e0e0e0}.wfls-sortable.wfls-sorted-ascending,.wfls-sortable.wfls-sorted-descending{background-color:#e0e0e0}.wfls-sortable.wfls-sorted-ascending .wfls-sorted-ascending{display:block}.wfls-sortable.wfls-sorted-descending .wfls-sorted-descending{display:block}.wfls-nav{margin-bottom:0;padding-left:0;list-style:none}.wfls-nav:before,.wfls-nav:after{content:" ";display:table}.wfls-nav:after{clear:both}.wfls-nav>li{position:relative;display:block}.wfls-nav>li>a{position:relative;display:block;padding:8px 12px}.wfls-nav>li>a:hover,.wfls-nav>li>a:focus{text-decoration:none;background-color:#e2e2e2}.wfls-nav>li.wfls-disabled>a{color:#777}.wfls-nav>li.wfls-disabled>a:hover,.wfls-nav>li.wfls-disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.wfls-nav .wfls-open>a,.wfls-nav .wfls-open>a:hover,.wfls-nav .wfls-open>a:focus{background-color:#e2e2e2;border-color:#00709e}.wfls-nav>li>a>img{max-width:none}.wfls-nav-tabs{border-bottom:1px solid #d0d0d0}.wfls-nav-tabs>li{float:left;margin-bottom:-1px}.wfls-nav-tabs>li>a{margin-right:2px;line-height:1.42857;border:1px solid transparent;border-radius:4px 4px 0 0}.wfls-nav-tabs>li>a:hover{border-color:#e2e2e2 #e2e2e2 #d0d0d0}.wfls-nav-tabs>li.wfls-active>a,.wfls-nav-tabs>li.wfls-active>a:hover,.wfls-nav-tabs>li.wfls-active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.wfls-nav-pills>li{float:left}.wfls-nav-pills>li>a{border-radius:4px;text-decoration:none;position:relative;display:block;padding:8px 12px}.wfls-nav-pills>li>a:hover,.wfls-nav-pills>li>a:focus{text-decoration:none !important;background-color:#e2e2e2}.wfls-nav-pills>li+li{margin-left:2px}.wfls-nav-pills>li.wfls-active>a,.wfls-nav-pills>li.wfls-active>a:hover,.wfls-nav-pills>li.wfls-active>a:focus{color:#fff;background-color:#00709e}.wfls-nav-pills.wfls-nav-pills-bordered>li>a{border:1px solid #e2e2e2}.wfls-nav-pills.wfls-nav-pills-connected>li>a{border-radius:0;border-right-width:0px}.wfls-nav-pills.wfls-nav-pills-connected>li+li{margin-left:0}.wfls-nav-pills.wfls-nav-pills-connected>li.active+li>a{border-left-width:0px}.wfls-nav-pills.wfls-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}.wfls-nav-pills.wfls-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}.wfls-nav-stacked>li{float:none}.wfls-nav-stacked>li+li{margin-top:2px;margin-left:0}.wfls-nav-justified,.wfls-nav-tabs.wfls-nav-justified{width:100%}.wfls-nav-justified>li,.wfls-nav-tabs.wfls-nav-justified>li{float:none}.wfls-nav-justified>li>a,.wfls-nav-tabs.wfls-nav-justified>li>a{text-align:center;margin-bottom:5px}.wfls-nav-justified>.wfls-dropdown .wfls-dropdown-menu{top:auto;left:auto}@media (min-width: 768px){.wfls-nav-justified>li,.wfls-nav-tabs.wfls-nav-justified>li{display:table-cell;width:1%}.wfls-nav-justified>li>a,.wfls-nav-tabs.wfls-nav-justified>li>a{margin-bottom:0}}.wfls-nav-tabs-justified,.wfls-nav-tabs.wfls-nav-justified{border-bottom:0}.wfls-nav-tabs-justified>li>a,.wfls-nav-tabs.wfls-nav-justified>li>a{margin-right:0;border-radius:4px}.wfls-nav-tabs-justified>.wfls-active>a,.wfls-nav-tabs.wfls-nav-justified>.wfls-active>a,.wfls-nav-tabs-justified>.wfls-active>a:hover,.wfls-nav-tabs.wfls-nav-justified>.wfls-active>a:hover,.wfls-nav-tabs-justified>.wfls-active>a:focus,.wfls-nav-tabs.wfls-nav-justified>.wfls-active>a:focus{border:1px solid #ddd}@media (min-width: 768px){.wfls-nav-tabs-justified>li>a,.wfls-nav-tabs.wfls-nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.wfls-nav-tabs-justified>.wfls-active>a,.wfls-nav-tabs.wfls-nav-justified>.wfls-active>a,.wfls-nav-tabs-justified>.wfls-active>a:hover,.wfls-nav-tabs.wfls-nav-justified>.wfls-active>a:hover,.wfls-nav-tabs-justified>.wfls-active>a:focus,.wfls-nav-tabs.wfls-nav-justified>.wfls-active>a:focus{border-bottom-color:#fff}}.wfls-tab-content>.wfls-tab-pane{display:none}.wfls-tab-content>.wfls-active{display:block}.wfls-nav-tabs .wfls-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}.wfls-navbar-brand{float:left;padding:12px 8px;font-size:18px;line-height:20px;margin:10px 0 0 0}.wfls-navbar-brand:hover,.wfls-navbar-brand:focus{text-decoration:none}.wfls-navbar-brand>img{display:block}@media (min-width: 768px){.navbar>.container .wfls-navbar-brand,.navbar>.container-fluid .wfls-navbar-brand{margin-left:-8px}}.wfls-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}.wfls-dropup,.wfls-dropdown{position:relative}.wfls-dropdown-toggle:focus{outline:0}.wfls-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}.wfls-dropdown-menu .wfls-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.wfls-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}.wfls-dropdown-menu>li>a:hover,.wfls-dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.wfls-dropdown-menu>.wfls-active>a,.wfls-dropdown-menu>.wfls-active>a:hover,.wfls-dropdown-menu>.wfls-active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#00709e}.wfls-dropdown-menu>.wfls-disabled>a,.wfls-dropdown-menu>.wfls-disabled>a:hover,.wfls-dropdown-menu>.wfls-disabled>a:focus{color:#777}.wfls-dropdown-menu>.wfls-disabled>a:hover,.wfls-dropdown-menu>.wfls-disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.wfls-open>.wfls-dropdown-menu{display:block}.wfls-open>a{outline:0}.wfls-dropdown-menu-right{left:auto;right:0}.wfls-dropdown-menu-left{left:0;right:auto}.wfls-dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857;color:#777;white-space:nowrap}.wfls-dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.wfls-pull-right>.wfls-dropdown-menu{right:0;left:auto}.wfls-dropup .wfls-caret,.wfls-navbar-fixed-bottom .wfls-dropdown .wfls-caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.wfls-dropup .wfls-dropdown-menu,.wfls-navbar-fixed-bottom .wfls-dropdown .wfls-dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.wfls-navbar-right .wfls-dropdown-menu{right:0;left:auto}.wfls-navbar-right .wfls-dropdown-menu-left{left:0;right:auto}}.wfls-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}table.wfls-dataTable{width:auto;max-width:800px;clear:both;border-collapse:collapse;border-spacing:0}table.wfls-dataTable>thead th,table.wfls-dataTable>tfoot th{font-weight:bold}table.wfls-dataTable>thead th,table.wfls-dataTable>thead td{cursor:pointer;text-align:left;font-size:11px;border:1px solid #ccc;padding:8px 4px 5px 9px;text-transform:uppercase}table.wfls-dataTable>thead th:active,table.wfls-dataTable>thead td:active{outline:none}table.wfls-dataTable>tfoot th,table.wfls-dataTable>tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.wfls-dataTable>thead .sorting,table.wfls-dataTable>thead .sorting_asc,table.wfls-dataTable>thead .sorting_desc{cursor:pointer;*cursor:hand}table.wfls-dataTable>thead .sorting,table.wfls-dataTable>thead .sorting_asc,table.wfls-dataTable>thead .sorting_desc,table.wfls-dataTable>thead .sorting_asc_disabled,table.wfls-dataTable>thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.wfls-dataTable>thead .sorting{background-image:url(../img/sort_both.png)}table.wfls-dataTable>thead .sorting_asc{background-image:url(../img/sort_asc.png)}table.wfls-dataTable>thead .sorting_desc{background-image:url(../img/sort_desc.png)}table.wfls-dataTable>thead .sorting_asc_disabled{background-image:url(../img/sort_asc_disabled.png)}table.wfls-dataTable>thead .sorting_desc_disabled{background-image:url(../img/sort_desc_disabled.png)}table.wfls-dataTable>tbody>tr{background-color:#ffffff}table.wfls-dataTable>tbody>tr.selected{background-color:#B0BED9}table.wfls-dataTable>tbody>tr>th,table.wfls-dataTable>tbody>tr>td{padding:5px 8px}table.wfls-dataTable.row-border>tbody>tr>th,table.wfls-dataTable.row-border>tbody>tr>td,table.wfls-dataTable.display>tbody>tr>th,table.wfls-dataTable.display>tbody>tr>td{border:1px solid #cccccc}table.wfls-dataTable.row-border>tbody>tr:first-child>th,table.wfls-dataTable.row-border>tbody>tr:first-child>td,table.wfls-dataTable.display>tbody>tr:first-child>th,table.wfls-dataTable.display>tbody>tr:first-child>td{border-top:none}table.wfls-dataTable.cell-border>tbody>tr>th,table.wfls-dataTable.cell-border>tbody>tr>td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.wfls-dataTable.cell-border>tbody>tr>th:first-child,table.wfls-dataTable.cell-border>tbody>tr>td:first-child{border-left:1px solid #ddd}table.wfls-dataTable.cell-border>tbody>tr:first-child>th,table.wfls-dataTable.cell-border>tbody>tr:first-child>td{border-top:none}table.wfls-dataTable.stripe>tbody>tr.odd,table.wfls-dataTable.display>tbody>tr.odd{background-color:#f9f9f9}table.wfls-dataTable.stripe>tbody>tr.odd.selected,table.wfls-dataTable.display>tbody>tr.odd.selected{background-color:#acbad4}table.wfls-dataTable.hover>tbody>tr:hover,table.wfls-dataTable.display>tbody>tr:hover{background-color:#f6f6f6}table.wfls-dataTable.hover>tbody>tr:hover.selected,table.wfls-dataTable.display>tbody>tr:hover.selected{background-color:#aab7d1}table.wfls-dataTable.order-column>tbody>tr>.sorting_1,table.wfls-dataTable.order-column>tbody>tr>.sorting_2,table.wfls-dataTable.order-column>tbody>tr>.sorting_3,table.wfls-dataTable.display tbody>tr>.sorting_1,table.wfls-dataTable.display>tbody>tr>.sorting_2,table.wfls-dataTable.display>tbody>tr>.sorting_3{background-color:#fafafa}table.wfls-dataTable.order-column>tbody>tr.selected>.sorting_1,table.wfls-dataTable.order-column>tbody>tr.selected>.sorting_2,table.wfls-dataTable.order-column>tbody>tr.selected>.sorting_3,table.wfls-dataTable.display>tbody>tr.selected>.sorting_1,table.wfls-dataTable.display>tbody>tr.selected>.sorting_2,table.wfls-dataTable.display>tbody>tr.selected>.sorting_3{background-color:#acbad5}table.wfls-dataTable.display>tbody>tr.odd>.sorting_1,table.wfls-dataTable.order-column.stripe>tbody>tr.odd>.sorting_1{background-color:#f1f1f1}table.wfls-dataTable.display>tbody>tr.odd>.sorting_2,table.wfls-dataTable.order-column.stripe>tbody>tr.odd>.sorting_2{background-color:#f3f3f3}table.wfls-dataTable.display>tbody>tr.odd>.sorting_3,table.wfls-dataTable.order-column.stripe>tbody>tr.odd>.sorting_3{background-color:whitesmoke}table.wfls-dataTable.display>tbody>tr.odd.selected>.sorting_1,table.wfls-dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.wfls-dataTable.display>tbody>tr.odd.selected>.sorting_2,table.wfls-dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.wfls-dataTable.display>tbody>tr.odd.selected>.sorting_3,table.wfls-dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.wfls-dataTable.display>tbody>tr.even>.sorting_1,table.wfls-dataTable.order-column.stripe>tbody>tr.even>.sorting_1{background-color:#fafafa}table.wfls-dataTable.display>tbody>tr.even>.sorting_2,table.wfls-dataTable.order-column.stripe>tbody>tr.even>.sorting_2{background-color:#fcfcfc}table.wfls-dataTable.display>tbody>tr.even>.sorting_3,table.wfls-dataTable.order-column.stripe>tbody>tr.even>.sorting_3{background-color:#fefefe}table.wfls-dataTable.display>tbody>tr.even.selected>.sorting_1,table.wfls-dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_1{background-color:#acbad5}table.wfls-dataTable.display>tbody>tr.even.selected>.sorting_2,table.wfls-dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_2{background-color:#aebcd6}table.wfls-dataTable.display>tbody>tr.even.selected>.sorting_3,table.wfls-dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_3{background-color:#afbdd8}table.wfls-dataTable.display>tbody>tr:hover>.sorting_1,table.wfls-dataTable.order-column.hover>tbody>tr:hover>.sorting_1{background-color:#eaeaea}table.wfls-dataTable.display>tbody>tr:hover>.sorting_2,table.wfls-dataTable.order-column.hover>tbody>tr:hover>.sorting_2{background-color:#ececec}table.wfls-dataTable.display>tbody>tr:hover>.sorting_3,table.wfls-dataTable.order-column.hover>tbody>tr:hover>.sorting_3{background-color:#efefef}table.wfls-dataTable.display>tbody>tr:hover.selected>.sorting_1,table.wfls-dataTable.order-column.hover>tbody>tr:hover.selected>.sorting_1{background-color:#a2aec7}table.wfls-dataTable.display>tbody>tr:hover.selected>.sorting_2,table.wfls-dataTable.order-column.hover>tbody>tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.wfls-dataTable.display>tbody>tr:hover.selected>.sorting_3,table.wfls-dataTable.order-column.hover>tbody>tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.wfls-dataTable.no-footer{border-bottom:1px solid #111}table.wfls-dataTable.nowrap th,table.wfls-dataTable.nowrap td{white-space:nowrap}table.wfls-dataTable.compact thead th,table.wfls-dataTable.compact thead td{padding:4px 17px 4px 4px}table.wfls-dataTable.compact tfoot th,table.wfls-dataTable.compact tfoot td{padding:4px}table.wfls-dataTable.compact>tbody>tr>th,table.wfls-dataTable.compact>tbody>tr>td{padding:4px}table.wfls-dataTable th.dt-left,table.wfls-dataTable td.dt-left{text-align:left}table.wfls-dataTable th.dt-center,table.wfls-dataTable td.dt-center,table.wfls-dataTable td.dataTables_empty{text-align:center}table.wfls-dataTable th.dt-right,table.wfls-dataTable td.dt-right{text-align:right}table.wfls-dataTable th.dt-justify,table.wfls-dataTable td.dt-justify{text-align:justify}table.wfls-dataTable th.dt-nowrap,table.wfls-dataTable td.dt-nowrap{white-space:nowrap}table.wfls-dataTable thead th.dt-head-left,table.wfls-dataTable thead td.dt-head-left,table.wfls-dataTable tfoot th.dt-head-left,table.wfls-dataTable tfoot td.dt-head-left{text-align:left}table.wfls-dataTable thead th.dt-head-center,table.wfls-dataTable thead td.dt-head-center,table.wfls-dataTable tfoot th.dt-head-center,table.wfls-dataTable tfoot td.dt-head-center{text-align:center}table.wfls-dataTable thead th.dt-head-right,table.wfls-dataTable thead td.dt-head-right,table.wfls-dataTable tfoot th.dt-head-right,table.wfls-dataTable tfoot td.dt-head-right{text-align:right}table.wfls-dataTable thead th.dt-head-justify,table.wfls-dataTable thead td.dt-head-justify,table.wfls-dataTable tfoot th.dt-head-justify,table.wfls-dataTable tfoot td.dt-head-justify{text-align:justify}table.wfls-dataTable thead th.dt-head-nowrap,table.wfls-dataTable thead td.dt-head-nowrap,table.wfls-dataTable tfoot th.dt-head-nowrap,table.wfls-dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.wfls-dataTable>tbody>tr>th.dt-body-left,table.wfls-dataTable>tbody>tr>td.dt-body-left{text-align:left}table.wfls-dataTable>tbody>tr>th.dt-body-center,table.wfls-dataTable>tbody>tr>td.dt-body-center{text-align:center}table.wfls-dataTable>tbody>tr>th.dt-body-right,table.wfls-dataTable>tbody>tr>td.dt-body-right{text-align:right}table.wfls-dataTable>tbody>tr>th.dt-body-justify,table.wfls-dataTable>tbody>tr>td.dt-body-justify{text-align:justify}table.wfls-dataTable>tbody>tr>th.dt-body-nowrap,table.wfls-dataTable>tbody>tr>td.dt-body-nowrap{white-space:nowrap}table.wfls-dataTable table.dataTable,table.wfls-dataTable th,table.wfls-dataTable td{-webkit-box-sizing:content-box;box-sizing:content-box}.wfls-dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.wfls-dataTables_wrapper .dataTables_length{float:left}.wfls-dataTables_wrapper .dataTables_filter{float:right;text-align:right}.wfls-dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.wfls-dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.wfls-dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.wfls-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}.wfls-dataTables_wrapper .dataTables_paginate .paginate_button.current,.wfls-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%)}.wfls-dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.wfls-dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.wfls-dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.wfls-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%)}.wfls-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}.wfls-dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.wfls-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%)}.wfls-dataTables_wrapper .dataTables_length,.wfls-dataTables_wrapper .dataTables_filter,.wfls-dataTables_wrapper .dataTables_info,.wfls-dataTables_wrapper .dataTables_processing,.wfls-dataTables_wrapper .dataTables_paginate{color:#333}.wfls-dataTables_wrapper .dataTables_scroll{clear:both}.wfls-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.wfls-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th,.wfls-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td{vertical-align:middle}.wfls-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.wfls-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.wfls-dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.wfls-dataTables_wrapper.no-footer div.dataTables_scrollHead table,.wfls-dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.wfls-dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.wfls-dataTables_wrapper .dataTables_info,.wfls-dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.wfls-dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.wfls-dataTables_wrapper .dataTables_length,.wfls-dataTables_wrapper .dataTables_filter{float:none;text-align:center}.wfls-dataTables_wrapper .dataTables_filter{margin-top:0.5em}}.wfls-alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.wfls-alert h4{margin-top:0;color:inherit}.wfls-alert .wfls-alert-link{font-weight:bold}.wfls-alert>p,.wfls-alert>ul{margin-bottom:0}.wfls-alert>p+p{margin-top:5px}.wfls-alert-dismissable,.wfls-alert-dismissible{padding-right:35px}.wfls-alert-dismissable .close,.wfls-alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.wfls-alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.wfls-alert-success hr{border-top-color:#c9e2b3}.wfls-alert-success .alert-link{color:#2b542c}.wfls-alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.wfls-alert-info hr{border-top-color:#a6e1ec}.wfls-alert-info .alert-link{color:#245269}.wfls-alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.wfls-alert-warning hr{border-top-color:#f7e1b5}.wfls-alert-warning .alert-link{color:#66512c}.wfls-alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.wfls-alert-danger hr{border-top-color:#e4b9c0}.wfls-alert-danger .alert-link{color:#843534}#wfls-onboarding-standalone-modal{margin-bottom:1rem}#wfls-onboarding-standalone-modal #wfls-onboarding-standalone-modal-header{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;background-color:#00709e;color:#ffffff;padding:1rem 2rem}#wfls-onboarding-standalone-modal #wfls-onboarding-standalone-modal-header #wfls-onboarding-standalone-modal-dismiss{font-size:1.35rem;color:#ffffff;text-decoration:none}#wfls-onboarding-standalone-modal #wfls-onboarding-standalone-modal-header #wfls-onboarding-standalone-modal-dismiss:hover{color:#f1f1f1}#wfls-onboarding-standalone-modal #wfls-onboarding-standalone-modal-header>*:last-child{-webkit-flex-grow:1;flex-grow:1;text-align:right}#wfls-onboarding-standalone-modal #wfls-onboarding-standalone-modal-content{background-color:#ffffff;padding:1rem 2rem}#wfls-onboarding-standalone-modal #wfls-onboarding-standalone-modal-content>p{margin-bottom:0}#wfls-onboarding-standalone-modal #wfls-onboarding-standalone-modal-content>p:first-child{margin-top:0}#wfls-onboarding-standalone-modal #wfls-onboarding-standalone-modal-footer{background-color:#525355;color:#ffffff;padding:0.5rem 2rem}#wfls-onboarding-standalone-modal #wfls-onboarding-standalone-modal-footer>ul{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;margin:0;padding:0}#wfls-onboarding-standalone-modal #wfls-onboarding-standalone-modal-footer>ul>li{margin:0;padding:0 0 0 1rem}#toplevel_page_WFLS .wp-menu-image img{max-width:16px;max-height:16px}
 
modules/login-security/css/admin.1629122067.css ADDED
@@ -0,0 +1 @@
 
1
+ .wfls-clearfix:before,.wfls-clearfix:after{content:" ";display:table}.wfls-clearfix:after{clear:both}.wfls-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){.wfls-btn{padding:.5rem 1.25rem;font-size:.875rem;line-height:1.3125rem;border-radius:4px}}.wfls-btn:focus,.wfls-btn.wfls-focus,.wfls-btn:active:focus,.wfls-btn:active.wfls-focus,.wfls-btn.wfls-active:focus,.wfls-btn.wfls-active.wfls-focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.wfls-btn:hover,.wfls-btn:focus,.wfls-btn.wfls-focus{color:#00709e;text-decoration:none !important}.wfls-btn:active,.wfls-btn.wfls-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)}.wfls-btn.wfls-disabled,.wfls-btn[disabled],.wfls-btn[readonly],fieldset[disabled] .wfls-btn{cursor:not-allowed;-webkit-box-shadow:none;box-shadow:none}a.wfls-btn{text-decoration:none}a.wfls-btn.wfls-disabled,fieldset[disabled] a.wfls-btn{cursor:not-allowed;pointer-events:none}.wfls-btn-default{color:#00709e;background-color:#fff;border-color:#00709e}.wfls-btn-default:focus,.wfls-btn-default.focus{color:#00709e;background-color:#e6e6e6;border-color:#00161f}.wfls-btn-default:hover{color:#00709e;background-color:#e6e6e6;border-color:#004561}.wfls-btn-default:active,.wfls-btn-default.active,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle{color:#00709e;background-color:#e6e6e6;border-color:#004561}.wfls-btn-default:active:hover,.wfls-btn-default:active:focus,.wfls-btn-default:active.focus,.wfls-btn-default.active:hover,.wfls-btn-default.active:focus,.wfls-btn-default.active.focus,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle.focus{color:#00709e;background-color:#d4d4d4;border-color:#00161f}.wfls-btn-default:active,.wfls-btn-default.wfls-active,.wfls-open>.wfls-btn-default.wfls-dropdown-toggle{background-image:none}.wfls-btn-default.wfls-disabled,.wfls-btn-default[disabled],.wfls-btn-default[readonly],fieldset[disabled] .wfls-btn-default{color:#777;background-color:#fff;border-color:#e2e2e2;cursor:not-allowed;opacity:0.75}.wfls-btn-default.wfls-disabled:hover,.wfls-btn-default.wfls-disabled:focus,.wfls-btn-default.wfls-disabled.wfls-focus,.wfls-btn-default[disabled]:hover,.wfls-btn-default[disabled]:focus,.wfls-btn-default[disabled].wfls-focus,.wfls-btn-default[readonly]:hover,.wfls-btn-default[readonly]:focus,.wfls-btn-default[readonly].wfls-focus,fieldset[disabled] .wfls-btn-default:hover,fieldset[disabled] .wfls-btn-default:focus,fieldset[disabled] .wfls-btn-default.wfls-focus{background-color:#fff;border-color:#00709e}.wfls-btn-default .wfls-badge{color:#fff;background-color:#00709e}.wfls-btn-primary{color:#fff;background-color:#00709e;border-color:#005e85}.wfls-btn-primary:focus,.wfls-btn-primary.focus{color:#fff;background-color:#004c6b;border-color:#000405}.wfls-btn-primary:hover{color:#fff;background-color:#004c6b;border-color:#003347}.wfls-btn-primary:active,.wfls-btn-primary.active,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle{color:#fff;background-color:#004c6b;border-color:#003347}.wfls-btn-primary:active:hover,.wfls-btn-primary:active:focus,.wfls-btn-primary:active.focus,.wfls-btn-primary.active:hover,.wfls-btn-primary.active:focus,.wfls-btn-primary.active.focus,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle.focus{color:#fff;background-color:#003347;border-color:#000405}.wfls-btn-primary:active,.wfls-btn-primary.wfls-active,.wfls-open>.wfls-btn-primary.wfls-dropdown-toggle{background-image:none}.wfls-btn-primary.wfls-disabled,.wfls-btn-primary[disabled],.wfls-btn-primary[readonly],fieldset[disabled] .wfls-btn-primary{color:#fff;background-color:#59a2c0;border-color:#5996b0;cursor:not-allowed;opacity:0.75}.wfls-btn-primary.wfls-disabled:hover,.wfls-btn-primary.wfls-disabled:focus,.wfls-btn-primary.wfls-disabled.wfls-focus,.wfls-btn-primary[disabled]:hover,.wfls-btn-primary[disabled]:focus,.wfls-btn-primary[disabled].wfls-focus,.wfls-btn-primary[readonly]:hover,.wfls-btn-primary[readonly]:focus,.wfls-btn-primary[readonly].wfls-focus,fieldset[disabled] .wfls-btn-primary:hover,fieldset[disabled] .wfls-btn-primary:focus,fieldset[disabled] .wfls-btn-primary.wfls-focus{background-color:#00709e;border-color:#005e85}.wfls-btn-primary .wfls-badge{color:#00709e;background-color:#fff}.wfls-btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.wfls-btn-success:focus,.wfls-btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.wfls-btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.wfls-btn-success:active,.wfls-btn-success.active,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.wfls-btn-success:active:hover,.wfls-btn-success:active:focus,.wfls-btn-success:active.focus,.wfls-btn-success.active:hover,.wfls-btn-success.active:focus,.wfls-btn-success.active.focus,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle.focus{color:#fff;background-color:#398439;border-color:#255625}.wfls-btn-success:active,.wfls-btn-success.wfls-active,.wfls-open>.wfls-btn-success.wfls-dropdown-toggle{background-image:none}.wfls-btn-success.wfls-disabled,.wfls-btn-success[disabled],.wfls-btn-success[readonly],fieldset[disabled] .wfls-btn-success{color:#fff;background-color:#95d195;border-color:#8bca8b;cursor:not-allowed;opacity:0.75}.wfls-btn-success.wfls-disabled:hover,.wfls-btn-success.wfls-disabled:focus,.wfls-btn-success.wfls-disabled.wfls-focus,.wfls-btn-success[disabled]:hover,.wfls-btn-success[disabled]:focus,.wfls-btn-success[disabled].wfls-focus,.wfls-btn-success[readonly]:hover,.wfls-btn-success[readonly]:focus,.wfls-btn-success[readonly].wfls-focus,fieldset[disabled] .wfls-btn-success:hover,fieldset[disabled] .wfls-btn-success:focus,fieldset[disabled] .wfls-btn-success.wfls-focus{background-color:#5cb85c;border-color:#4cae4c}.wfls-btn-success .wfls-badge{color:#5cb85c;background-color:#fff}.wfls-btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.wfls-btn-info:focus,.wfls-btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.wfls-btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.wfls-btn-info:active,.wfls-btn-info.active,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.wfls-btn-info:active:hover,.wfls-btn-info:active:focus,.wfls-btn-info:active.focus,.wfls-btn-info.active:hover,.wfls-btn-info.active:focus,.wfls-btn-info.active.focus,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.wfls-btn-info:active,.wfls-btn-info.wfls-active,.wfls-open>.wfls-btn-info.wfls-dropdown-toggle{background-image:none}.wfls-btn-info.wfls-disabled,.wfls-btn-info[disabled],.wfls-btn-info[readonly],fieldset[disabled] .wfls-btn-info{color:#fff;background-color:#94d6ea;border-color:#87d1e7;cursor:not-allowed;opacity:0.75}.wfls-btn-info.wfls-disabled:hover,.wfls-btn-info.wfls-disabled:focus,.wfls-btn-info.wfls-disabled.wfls-focus,.wfls-btn-info[disabled]:hover,.wfls-btn-info[disabled]:focus,.wfls-btn-info[disabled].wfls-focus,.wfls-btn-info[readonly]:hover,.wfls-btn-info[readonly]:focus,.wfls-btn-info[readonly].wfls-focus,fieldset[disabled] .wfls-btn-info:hover,fieldset[disabled] .wfls-btn-info:focus,fieldset[disabled] .wfls-btn-info.wfls-focus{background-color:#5bc0de;border-color:#46b8da}.wfls-btn-info .wfls-badge{color:#5bc0de;background-color:#fff}.wfls-btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.wfls-btn-warning:focus,.wfls-btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.wfls-btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.wfls-btn-warning:active,.wfls-btn-warning.active,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.wfls-btn-warning:active:hover,.wfls-btn-warning:active:focus,.wfls-btn-warning:active.focus,.wfls-btn-warning.active:hover,.wfls-btn-warning.active:focus,.wfls-btn-warning.active.focus,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.wfls-btn-warning:active,.wfls-btn-warning.wfls-active,.wfls-open>.wfls-btn-warning.wfls-dropdown-toggle{background-image:none}.wfls-btn-warning.wfls-disabled,.wfls-btn-warning[disabled],.wfls-btn-warning[readonly],fieldset[disabled] .wfls-btn-warning{color:#fff;background-color:#f5ca8c;border-color:#f4c37c;cursor:not-allowed;opacity:0.75}.wfls-btn-warning.wfls-disabled:hover,.wfls-btn-warning.wfls-disabled:focus,.wfls-btn-warning.wfls-disabled.wfls-focus,.wfls-btn-warning[disabled]:hover,.wfls-btn-warning[disabled]:focus,.wfls-btn-warning[disabled].wfls-focus,.wfls-btn-warning[readonly]:hover,.wfls-btn-warning[readonly]:focus,.wfls-btn-warning[readonly].wfls-focus,fieldset[disabled] .wfls-btn-warning:hover,fieldset[disabled] .wfls-btn-warning:focus,fieldset[disabled] .wfls-btn-warning.wfls-focus{background-color:#f0ad4e;border-color:#eea236}.wfls-btn-warning .wfls-badge{color:#f0ad4e;background-color:#fff}.wfls-btn-danger{color:#fff;background-color:#930000;border-color:#7a0000}.wfls-btn-danger:focus,.wfls-btn-danger.focus{color:#fff;background-color:#600000;border-color:#000}.wfls-btn-danger:hover{color:#fff;background-color:#600000;border-color:#3c0000}.wfls-btn-danger:active,.wfls-btn-danger.active,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle{color:#fff;background-color:#600000;border-color:#3c0000}.wfls-btn-danger:active:hover,.wfls-btn-danger:active:focus,.wfls-btn-danger:active.focus,.wfls-btn-danger.active:hover,.wfls-btn-danger.active:focus,.wfls-btn-danger.active.focus,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle:hover,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle:focus,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle.focus{color:#fff;background-color:#3c0000;border-color:#000}.wfls-btn-danger:active,.wfls-btn-danger.wfls-active,.wfls-open>.wfls-btn-danger.wfls-dropdown-toggle{background-image:none}.wfls-btn-danger.wfls-disabled,.wfls-btn-danger[disabled],.wfls-btn-danger[readonly],fieldset[disabled] .wfls-btn-danger{color:#fff;background-color:#b95959;border-color:#a95959;cursor:not-allowed;opacity:0.75}.wfls-btn-danger.wfls-disabled:hover,.wfls-btn-danger.wfls-disabled:focus,.wfls-btn-danger.wfls-disabled.wfls-focus,.wfls-btn-danger[disabled]:hover,.wfls-btn-danger[disabled]:focus,.wfls-btn-danger[disabled].wfls-focus,.wfls-btn-danger[readonly]:hover,.wfls-btn-danger[readonly]:focus,.wfls-btn-danger[readonly].wfls-focus,fieldset[disabled] .wfls-btn-danger:hover,fieldset[disabled] .wfls-btn-danger:focus,fieldset[disabled] .wfls-btn-danger.wfls-focus{background-color:#930000;border-color:#7a0000}.wfls-btn-danger .wfls-badge{color:#930000;background-color:#fff}.wfls-btn-callout{font-weight:600;text-transform:uppercase}.wfls-btn-callout-subtle{font-weight:400;text-transform:uppercase}.wfls-btn-link{color:#00709e;font-weight:normal;border-radius:0}.wfls-btn-link,.wfls-btn-link:active,.wfls-btn-link.wfls-active,.wfls-btn-link[disabled],fieldset[disabled] .wfls-btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.wfls-btn-link,.wfls-btn-link:hover,.wfls-btn-link:focus,.wfls-btn-link:active{border-color:transparent}.wfls-btn-link:hover,.wfls-btn-link:focus{color:#003a52;text-decoration:underline;background-color:transparent}.wfls-btn-link[disabled]:hover,.wfls-btn-link[disabled]:focus,fieldset[disabled] .wfls-btn-link:hover,fieldset[disabled] .wfls-btn-link:focus{color:#777;text-decoration:none}.wfls-btn-lg,.wfls-btn-group-lg>.wfls-btn{padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.wfls-btn-sm,.wfls-btn-group-sm>.wfls-btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.wfls-btn-xs,.wfls-btn-group-xs>.wfls-btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.wfls-btn-block{display:block;width:100%}.wfls-btn-block+.wfls-btn-block{margin-top:5px}input[type="submit"].wfls-btn-block,input[type="reset"].wfls-btn-block,input[type="button"].wfls-btn-block{width:100%}.wfls-btn-group,.wfls-btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.wfls-btn-group>.wfls-btn,.wfls-btn-group-vertical>.wfls-btn{position:relative;float:left}.wfls-btn-group>.wfls-btn:hover,.wfls-btn-group>.wfls-btn:focus,.wfls-btn-group>.wfls-btn:active,.wfls-btn-group>.wfls-btn.wfls-active,.wfls-btn-group-vertical>.wfls-btn:hover,.wfls-btn-group-vertical>.wfls-btn:focus,.wfls-btn-group-vertical>.wfls-btn:active,.wfls-btn-group-vertical>.wfls-btn.wfls-active{z-index:2}.wfls-btn-group .wfls-btn+.wfls-btn,.wfls-btn-group .wfls-btn+.wfls-btn-group,.wfls-btn-group .wfls-btn-group+.wfls-btn,.wfls-btn-group .wfls-btn-group+.wfls-btn-group{margin-left:-1px}.wfls-btn-toolbar{margin-left:-5px}.wfls-btn-toolbar:before,.wfls-btn-toolbar:after{content:" ";display:table}.wfls-btn-toolbar:after{clear:both}.wfls-btn-toolbar .wfls-btn,.wfls-btn-toolbar .wfls-btn-group,.wfls-btn-toolbar .wfls-input-group{float:left}.wfls-btn-toolbar>.wfls-btn,.wfls-btn-toolbar>.wfls-btn-group,.wfls-btn-toolbar>.wfls-input-group{margin-left:5px}.wfls-btn-group>.wfls-btn:not(:first-child):not(:last-child):not(.wfls-dropdown-toggle){border-radius:0}.wfls-btn-group>.wfls-btn:first-child{margin-left:0}.wfls-btn-group>.wfls-btn:first-child:not(:last-child):not(.wfls-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}.wfls-btn-group>.wfls-btn:last-child:not(:first-child),.wfls-btn-group>.wfls-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}.wfls-btn-group>.wfls-btn-group{float:left}.wfls-btn-group>.wfls-btn-group:not(:first-child):not(:last-child)>.wfls-btn{border-radius:0}.wfls-btn-group>.wfls-btn-group:first-child:not(:last-child)>.wfls-btn:last-child,.wfls-btn-group>.wfls-btn-group:first-child:not(:last-child)>.wfls-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}.wfls-btn-group>.wfls-btn-group:last-child:not(:first-child)>.wfls-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}.wfls-btn-group .wfls-dropdown-toggle:active,.wfls-btn-group.wfls-open .wfls-dropdown-toggle{outline:0}.wfls-btn-group>.wfls-btn+.wfls-dropdown-toggle{padding-left:8px;padding-right:8px}.wfls-btn-group>.wfls-btn-lg+.wfls-dropdown-toggle,.wfls-btn-group-lg.wfls-btn-group>.wfls-btn+.wfls-dropdown-toggle{padding-left:12px;padding-right:12px}.wfls-btn-group.open .wfls-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)}.wfls-btn-group.open .wfls-dropdown-toggle.wfls-btn-link{-webkit-box-shadow:none;box-shadow:none}.wfls-btn .wfls-caret{margin-left:0}.wfls-btn-lg .wfls-caret,.wfls-btn-group-lg>.wfls-btn .wfls-caret{border-width:5px 5px 0;border-bottom-width:0}.wfls-dropup .wfls-btn-lg .wfls-caret,.wfls-dropup .wfls-btn-group-lg>.wfls-btn .wfls-caret{border-width:0 5px 5px}.wfls-btn-group-vertical>.wfls-btn,.wfls-btn-group-vertical>.wfls-btn-group,.wfls-btn-group-vertical>.wfls-btn-group>.wfls-btn{display:block;float:none;width:100%;max-width:100%}.wfls-btn-group-vertical>.wfls-btn-group:before,.wfls-btn-group-vertical>.wfls-btn-group:after{content:" ";display:table}.wfls-btn-group-vertical>.wfls-btn-group:after{clear:both}.wfls-btn-group-vertical>.wfls-btn-group>.wfls-btn{float:none}.wfls-btn-group-vertical>.wfls-btn+.wfls-btn,.wfls-btn-group-vertical>.wfls-btn+.wfls-btn-group,.wfls-btn-group-vertical>.wfls-btn-group+.wfls-btn,.wfls-btn-group-vertical>.wfls-btn-group+.wfls-btn-group{margin-top:-1px;margin-left:0}.wfls-btn-group-vertical>.wfls-btn:not(:first-child):not(:last-child){border-radius:0}.wfls-btn-group-vertical>.wfls-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}.wfls-btn-group-vertical>.wfls-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}.wfls-btn-group-vertical>.wfls-btn-group:not(:first-child):not(:last-child)>.wfls-btn{border-radius:0}.wfls-btn-group-vertical>.wfls-btn-group:first-child:not(:last-child)>.wfls-btn:last-child,.wfls-btn-group-vertical>.wfls-btn-group:first-child:not(:last-child)>.wfls-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}.wfls-btn-group-vertical>.wfls-btn-group:last-child:not(:first-child)>.wfls-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}.wfls-btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.wfls-btn-group-justified>.wfls-btn,.wfls-btn-group-justified>.wfls-btn-group{float:none;display:table-cell;width:1%}.wfls-btn-group-justified>.wfls-btn-group .wfls-btn{width:100%}.wfls-btn-group-justified>.wfls-btn-group .wfls-dropdown-menu{left:auto}[data-toggle="buttons"]>.wfls-btn input[type="radio"],[data-toggle="buttons"]>.wfls-btn input[type="checkbox"],[data-toggle="buttons"]>.wfls-btn-group>.wfls-btn input[type="radio"],[data-toggle="buttons"]>.wfls-btn-group>.wfls-btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.wfls-pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.wfls-pagination>li{display:inline}.wfls-pagination>li>a,.wfls-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}.wfls-pagination>li:first-child>a,.wfls-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}.wfls-pagination>li:last-child>a,.wfls-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}.wfls-pagination>li>a:hover,.wfls-pagination>li>a:focus,.wfls-pagination>li>span:hover,.wfls-pagination>li>span:focus{z-index:2;color:#003a52;background-color:#e2e2e2;border-color:#ddd}.wfls-pagination>.wfls-active>a,.wfls-pagination>.wfls-active>a:hover,.wfls-pagination>.wfls-active>a:focus,.wfls-pagination>.wfls-active>span,.wfls-pagination>.wfls-active>span:hover,.wfls-pagination>.wfls-active>span:focus{z-index:3;color:#fff;background-color:#00709e;border-color:#00709e;cursor:default}.wfls-pagination>.wfls-disabled>span,.wfls-pagination>.wfls-disabled>span:hover,.wfls-pagination>.wfls-disabled>span:focus,.wfls-pagination>.wfls-disabled>a,.wfls-pagination>.wfls-disabled>a:hover,.wfls-pagination>.wfls-disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.wfls-pagination-lg>li>a,.wfls-pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.33333}.wfls-pagination-lg>li:first-child>a,.wfls-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}.wfls-pagination-lg>li:last-child>a,.wfls-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}.wfls-pagination-sm>li>a,.wfls-pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.wfls-pagination-sm>li:first-child>a,.wfls-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}.wfls-pagination-sm>li:last-child>a,.wfls-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}.wfls-visible-xs{display:none !important}.wfls-visible-sm{display:none !important}.wfls-visible-md{display:none !important}.wfls-visible-lg{display:none !important}.wfls-visible-xs-block,.wfls-visible-xs-inline,.wfls-visible-xs-inline-block,.wfls-visible-sm-block,.wfls-visible-sm-inline,.wfls-visible-sm-inline-block,.wfls-visible-md-block,.wfls-visible-md-inline,.wfls-visible-md-inline-block,.wfls-visible-lg-block,.wfls-visible-lg-inline,.wfls-visible-lg-inline-block{display:none !important}@media (max-width: 767px){.wfls-visible-xs{display:block !important}table.wfls-visible-xs{display:table !important}tr.wfls-visible-xs{display:table-row !important}th.wfls-visible-xs,td.wfls-visible-xs{display:table-cell !important}}@media (max-width: 767px){.wfls-visible-xs-block{display:block !important}}@media (max-width: 767px){.wfls-visible-xs-inline{display:inline !important}}@media (max-width: 767px){.wfls-visible-xs-inline-block{display:inline-block !important}}@media (min-width: 768px) and (max-width: 991px){.wfls-visible-sm{display:block !important}table.wfls-visible-sm{display:table !important}tr.wfls-visible-sm{display:table-row !important}th.wfls-visible-sm,td.wfls-visible-sm{display:table-cell !important}}@media (min-width: 768px) and (max-width: 991px){.wfls-visible-sm-block{display:block !important}}@media (min-width: 768px) and (max-width: 991px){.wfls-visible-sm-inline{display:inline !important}}@media (min-width: 768px) and (max-width: 991px){.wfls-visible-sm-inline-block{display:inline-block !important}}@media (min-width: 992px) and (max-width: 1199px){.wfls-visible-md{display:block !important}table.wfls-visible-md{display:table !important}tr.wfls-visible-md{display:table-row !important}th.wfls-visible-md,td.wfls-visible-md{display:table-cell !important}}@media (min-width: 992px) and (max-width: 1199px){.wfls-visible-md-block{display:block !important}}@media (min-width: 992px) and (max-width: 1199px){.wfls-visible-md-inline{display:inline !important}}@media (min-width: 992px) and (max-width: 1199px){.wfls-visible-md-inline-block{display:inline-block !important}}@media (min-width: 1200px){.wfls-visible-lg{display:block !important}table.wfls-visible-lg{display:table !important}tr.wfls-visible-lg{display:table-row !important}th.wfls-visible-lg,td.wfls-visible-lg{display:table-cell !important}}@media (min-width: 1200px){.wfls-visible-lg-block{display:block !important}}@media (min-width: 1200px){.wfls-visible-lg-inline{display:inline !important}}@media (min-width: 1200px){.wfls-visible-lg-inline-block{display:inline-block !important}}@media (max-width: 767px){.wfls-hidden-xs{display:none !important}}@media (min-width: 768px) and (max-width: 991px){.wfls-hidden-sm{display:none !important}}@media (min-width: 992px) and (max-width: 1199px){.wfls-hidden-md{display:none !important}}@media (min-width: 1200px){.wfls-hidden-lg{display:none !important}}.wfls-visible-print{display:none !important}@media print{.wfls-visible-print{display:block !important}table.wfls-visible-print{display:table !important}tr.wfls-visible-print{display:table-row !important}th.wfls-visible-print,td.wfls-visible-print{display:table-cell !important}}.wfls-visible-print-block{display:none !important}@media print{.wfls-visible-print-block{display:block !important}}.wfls-visible-print-inline{display:none !important}@media print{.wfls-visible-print-inline{display:inline !important}}.wfls-visible-print-inline-block{display:none !important}@media print{.wfls-visible-print-inline-block{display:inline-block !important}}@media print{.wfls-hidden-print{display:none !important}}.wfls-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.wfls-container:before,.wfls-container:after{content:" ";display:table}.wfls-container:after{clear:both}@media (min-width: 768px){.wfls-container{width:750px}}@media (min-width: 992px){.wfls-container{width:970px}}@media (min-width: 1200px){.wfls-container{width:1170px}}.wfls-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.wfls-container-fluid:before,.wfls-container-fluid:after{content:" ";display:table}.wfls-container-fluid:after{clear:both}.wfls-row{margin-left:-15px;margin-right:-15px}.wfls-row:before,.wfls-row:after{content:" ";display:table}.wfls-row:after{clear:both}.wfls-col-xs-1,.wfls-col-sm-1,.wfls-col-md-1,.wfls-col-lg-1,.wfls-col-xs-2,.wfls-col-sm-2,.wfls-col-md-2,.wfls-col-lg-2,.wfls-col-xs-3,.wfls-col-sm-3,.wfls-col-md-3,.wfls-col-lg-3,.wfls-col-xs-4,.wfls-col-sm-4,.wfls-col-md-4,.wfls-col-lg-4,.wfls-col-xs-5,.wfls-col-sm-5,.wfls-col-md-5,.wfls-col-lg-5,.wfls-col-xs-6,.wfls-col-sm-6,.wfls-col-md-6,.wfls-col-lg-6,.wfls-col-xs-7,.wfls-col-sm-7,.wfls-col-md-7,.wfls-col-lg-7,.wfls-col-xs-8,.wfls-col-sm-8,.wfls-col-md-8,.wfls-col-lg-8,.wfls-col-xs-9,.wfls-col-sm-9,.wfls-col-md-9,.wfls-col-lg-9,.wfls-col-xs-10,.wfls-col-sm-10,.wfls-col-md-10,.wfls-col-lg-10,.wfls-col-xs-11,.wfls-col-sm-11,.wfls-col-md-11,.wfls-col-lg-11,.wfls-col-xs-12,.wfls-col-sm-12,.wfls-col-md-12,.wfls-col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px;box-sizing:border-box}.wfls-col-xs-1,.wfls-col-xs-2,.wfls-col-xs-3,.wfls-col-xs-4,.wfls-col-xs-5,.wfls-col-xs-6,.wfls-col-xs-7,.wfls-col-xs-8,.wfls-col-xs-9,.wfls-col-xs-10,.wfls-col-xs-11,.wfls-col-xs-12{float:left}.wfls-col-xs-1{width:8.33333%}.wfls-col-xs-2{width:16.66667%}.wfls-col-xs-3{width:25%}.wfls-col-xs-4{width:33.33333%}.wfls-col-xs-5{width:41.66667%}.wfls-col-xs-6{width:50%}.wfls-col-xs-7{width:58.33333%}.wfls-col-xs-8{width:66.66667%}.wfls-col-xs-9{width:75%}.wfls-col-xs-10{width:83.33333%}.wfls-col-xs-11{width:91.66667%}.wfls-col-xs-12{width:100%}.wfls-col-xs-pull-0{right:auto}.wfls-col-xs-pull-1{right:8.33333%}.wfls-col-xs-pull-2{right:16.66667%}.wfls-col-xs-pull-3{right:25%}.wfls-col-xs-pull-4{right:33.33333%}.wfls-col-xs-pull-5{right:41.66667%}.wfls-col-xs-pull-6{right:50%}.wfls-col-xs-pull-7{right:58.33333%}.wfls-col-xs-pull-8{right:66.66667%}.wfls-col-xs-pull-9{right:75%}.wfls-col-xs-pull-10{right:83.33333%}.wfls-col-xs-pull-11{right:91.66667%}.wfls-col-xs-pull-12{right:100%}.wfls-col-xs-push-0{left:auto}.wfls-col-xs-push-1{left:8.33333%}.wfls-col-xs-push-2{left:16.66667%}.wfls-col-xs-push-3{left:25%}.wfls-col-xs-push-4{left:33.33333%}.wfls-col-xs-push-5{left:41.66667%}.wfls-col-xs-push-6{left:50%}.wfls-col-xs-push-7{left:58.33333%}.wfls-col-xs-push-8{left:66.66667%}.wfls-col-xs-push-9{left:75%}.wfls-col-xs-push-10{left:83.33333%}.wfls-col-xs-push-11{left:91.66667%}.wfls-col-xs-push-12{left:100%}.wfls-col-xs-offset-0{margin-left:0%}.wfls-col-xs-offset-1{margin-left:8.33333%}.wfls-col-xs-offset-2{margin-left:16.66667%}.wfls-col-xs-offset-3{margin-left:25%}.wfls-col-xs-offset-4{margin-left:33.33333%}.wfls-col-xs-offset-5{margin-left:41.66667%}.wfls-col-xs-offset-6{margin-left:50%}.wfls-col-xs-offset-7{margin-left:58.33333%}.wfls-col-xs-offset-8{margin-left:66.66667%}.wfls-col-xs-offset-9{margin-left:75%}.wfls-col-xs-offset-10{margin-left:83.33333%}.wfls-col-xs-offset-11{margin-left:91.66667%}.wfls-col-xs-offset-12{margin-left:100%}.wfls-col-xs-half-padding-left{padding-left:8px}.wfls-col-xs-half-padding-right{padding-right:7px}@media (min-width: 768px){.wfls-col-sm-1,.wfls-col-sm-2,.wfls-col-sm-3,.wfls-col-sm-4,.wfls-col-sm-5,.wfls-col-sm-6,.wfls-col-sm-7,.wfls-col-sm-8,.wfls-col-sm-9,.wfls-col-sm-10,.wfls-col-sm-11,.wfls-col-sm-12{float:left}.wfls-col-sm-1{width:8.33333%}.wfls-col-sm-2{width:16.66667%}.wfls-col-sm-3{width:25%}.wfls-col-sm-4{width:33.33333%}.wfls-col-sm-5{width:41.66667%}.wfls-col-sm-6{width:50%}.wfls-col-sm-7{width:58.33333%}.wfls-col-sm-8{width:66.66667%}.wfls-col-sm-9{width:75%}.wfls-col-sm-10{width:83.33333%}.wfls-col-sm-11{width:91.66667%}.wfls-col-sm-12{width:100%}.wfls-col-sm-pull-0{right:auto}.wfls-col-sm-pull-1{right:8.33333%}.wfls-col-sm-pull-2{right:16.66667%}.wfls-col-sm-pull-3{right:25%}.wfls-col-sm-pull-4{right:33.33333%}.wfls-col-sm-pull-5{right:41.66667%}.wfls-col-sm-pull-6{right:50%}.wfls-col-sm-pull-7{right:58.33333%}.wfls-col-sm-pull-8{right:66.66667%}.wfls-col-sm-pull-9{right:75%}.wfls-col-sm-pull-10{right:83.33333%}.wfls-col-sm-pull-11{right:91.66667%}.wfls-col-sm-pull-12{right:100%}.wfls-col-sm-push-0{left:auto}.wfls-col-sm-push-1{left:8.33333%}.wfls-col-sm-push-2{left:16.66667%}.wfls-col-sm-push-3{left:25%}.wfls-col-sm-push-4{left:33.33333%}.wfls-col-sm-push-5{left:41.66667%}.wfls-col-sm-push-6{left:50%}.wfls-col-sm-push-7{left:58.33333%}.wfls-col-sm-push-8{left:66.66667%}.wfls-col-sm-push-9{left:75%}.wfls-col-sm-push-10{left:83.33333%}.wfls-col-sm-push-11{left:91.66667%}.wfls-col-sm-push-12{left:100%}.wfls-col-sm-offset-0{margin-left:0%}.wfls-col-sm-offset-1{margin-left:8.33333%}.wfls-col-sm-offset-2{margin-left:16.66667%}.wfls-col-sm-offset-3{margin-left:25%}.wfls-col-sm-offset-4{margin-left:33.33333%}.wfls-col-sm-offset-5{margin-left:41.66667%}.wfls-col-sm-offset-6{margin-left:50%}.wfls-col-sm-offset-7{margin-left:58.33333%}.wfls-col-sm-offset-8{margin-left:66.66667%}.wfls-col-sm-offset-9{margin-left:75%}.wfls-col-sm-offset-10{margin-left:83.33333%}.wfls-col-sm-offset-11{margin-left:91.66667%}.wfls-col-sm-offset-12{margin-left:100%}.wfls-col-sm-half-padding-left{padding-left:8px}.wfls-col-sm-half-padding-right{padding-right:7px}}@media (min-width: 992px){.wfls-col-md-1,.wfls-col-md-2,.wfls-col-md-3,.wfls-col-md-4,.wfls-col-md-5,.wfls-col-md-6,.wfls-col-md-7,.wfls-col-md-8,.wfls-col-md-9,.wfls-col-md-10,.wfls-col-md-11,.wfls-col-md-12{float:left}.wfls-col-md-1{width:8.33333%}.wfls-col-md-2{width:16.66667%}.wfls-col-md-3{width:25%}.wfls-col-md-4{width:33.33333%}.wfls-col-md-5{width:41.66667%}.wfls-col-md-6{width:50%}.wfls-col-md-7{width:58.33333%}.wfls-col-md-8{width:66.66667%}.wfls-col-md-9{width:75%}.wfls-col-md-10{width:83.33333%}.wfls-col-md-11{width:91.66667%}.wfls-col-md-12{width:100%}.wfls-col-md-pull-0{right:auto}.wfls-col-md-pull-1{right:8.33333%}.wfls-col-md-pull-2{right:16.66667%}.wfls-col-md-pull-3{right:25%}.wfls-col-md-pull-4{right:33.33333%}.wfls-col-md-pull-5{right:41.66667%}.wfls-col-md-pull-6{right:50%}.wfls-col-md-pull-7{right:58.33333%}.wfls-col-md-pull-8{right:66.66667%}.wfls-col-md-pull-9{right:75%}.wfls-col-md-pull-10{right:83.33333%}.wfls-col-md-pull-11{right:91.66667%}.wfls-col-md-pull-12{right:100%}.wfls-col-md-push-0{left:auto}.wfls-col-md-push-1{left:8.33333%}.wfls-col-md-push-2{left:16.66667%}.wfls-col-md-push-3{left:25%}.wfls-col-md-push-4{left:33.33333%}.wfls-col-md-push-5{left:41.66667%}.wfls-col-md-push-6{left:50%}.wfls-col-md-push-7{left:58.33333%}.wfls-col-md-push-8{left:66.66667%}.wfls-col-md-push-9{left:75%}.wfls-col-md-push-10{left:83.33333%}.wfls-col-md-push-11{left:91.66667%}.wfls-col-md-push-12{left:100%}.wfls-col-md-offset-0{margin-left:0%}.wfls-col-md-offset-1{margin-left:8.33333%}.wfls-col-md-offset-2{margin-left:16.66667%}.wfls-col-md-offset-3{margin-left:25%}.wfls-col-md-offset-4{margin-left:33.33333%}.wfls-col-md-offset-5{margin-left:41.66667%}.wfls-col-md-offset-6{margin-left:50%}.wfls-col-md-offset-7{margin-left:58.33333%}.wfls-col-md-offset-8{margin-left:66.66667%}.wfls-col-md-offset-9{margin-left:75%}.wfls-col-md-offset-10{margin-left:83.33333%}.wfls-col-md-offset-11{margin-left:91.66667%}.wfls-col-md-offset-12{margin-left:100%}.wfls-col-md-half-padding-left{padding-left:8px}.wfls-col-md-half-padding-right{padding-right:7px}}@media (min-width: 1200px){.wfls-col-lg-1,.wfls-col-lg-2,.wfls-col-lg-3,.wfls-col-lg-4,.wfls-col-lg-5,.wfls-col-lg-6,.wfls-col-lg-7,.wfls-col-lg-8,.wfls-col-lg-9,.wfls-col-lg-10,.wfls-col-lg-11,.wfls-col-lg-12{float:left}.wfls-col-lg-1{width:8.33333%}.wfls-col-lg-2{width:16.66667%}.wfls-col-lg-3{width:25%}.wfls-col-lg-4{width:33.33333%}.wfls-col-lg-5{width:41.66667%}.wfls-col-lg-6{width:50%}.wfls-col-lg-7{width:58.33333%}.wfls-col-lg-8{width:66.66667%}.wfls-col-lg-9{width:75%}.wfls-col-lg-10{width:83.33333%}.wfls-col-lg-11{width:91.66667%}.wfls-col-lg-12{width:100%}.wfls-col-lg-pull-0{right:auto}.wfls-col-lg-pull-1{right:8.33333%}.wfls-col-lg-pull-2{right:16.66667%}.wfls-col-lg-pull-3{right:25%}.wfls-col-lg-pull-4{right:33.33333%}.wfls-col-lg-pull-5{right:41.66667%}.wfls-col-lg-pull-6{right:50%}.wfls-col-lg-pull-7{right:58.33333%}.wfls-col-lg-pull-8{right:66.66667%}.wfls-col-lg-pull-9{right:75%}.wfls-col-lg-pull-10{right:83.33333%}.wfls-col-lg-pull-11{right:91.66667%}.wfls-col-lg-pull-12{right:100%}.wfls-col-lg-push-0{left:auto}.wfls-col-lg-push-1{left:8.33333%}.wfls-col-lg-push-2{left:16.66667%}.wfls-col-lg-push-3{left:25%}.wfls-col-lg-push-4{left:33.33333%}.wfls-col-lg-push-5{left:41.66667%}.wfls-col-lg-push-6{left:50%}.wfls-col-lg-push-7{left:58.33333%}.wfls-col-lg-push-8{left:66.66667%}.wfls-col-lg-push-9{left:75%}.wfls-col-lg-push-10{left:83.33333%}.wfls-col-lg-push-11{left:91.66667%}.wfls-col-lg-push-12{left:100%}.wfls-col-lg-offset-0{margin-left:0%}.wfls-col-lg-offset-1{margin-left:8.33333%}.wfls-col-lg-offset-2{margin-left:16.66667%}.wfls-col-lg-offset-3{margin-left:25%}.wfls-col-lg-offset-4{margin-left:33.33333%}.wfls-col-lg-offset-5{margin-left:41.66667%}.wfls-col-lg-offset-6{margin-left:50%}.wfls-col-lg-offset-7{margin-left:58.33333%}.wfls-col-lg-offset-8{margin-left:66.66667%}.wfls-col-lg-offset-9{margin-left:75%}.wfls-col-lg-offset-10{margin-left:83.33333%}.wfls-col-lg-offset-11{margin-left:91.66667%}.wfls-col-lg-offset-12{margin-left:100%}.wfls-col-lg-half-padding-left{padding-left:8px}.wfls-col-lg-half-padding-right{padding-right:7px}}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.wfls-plain{font-weight:normal}label.wfls-control-label.wfls-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}.wfls-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}.wfls-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)}.wfls-form-control::-moz-placeholder{color:#bfbfbf;opacity:1}.wfls-form-control:-ms-input-placeholder{color:#bfbfbf}.wfls-form-control::-webkit-input-placeholder{color:#bfbfbf}.wfls-form-control::-ms-expand{border:0;background-color:transparent}.wfls-form-control[disabled],.wfls-form-control[readonly],fieldset[disabled] .wfls-form-control{background-color:#e2e2e2;opacity:1}.wfls-form-control[disabled],.wfls-form-control[readonly],fieldset[disabled] .wfls-form-control{cursor:not-allowed;pointer-events:none}textarea.wfls-form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"].wfls-form-control,input[type="time"].wfls-form-control,input[type="datetime-local"].wfls-form-control,input[type="month"].wfls-form-control{line-height:38px}input[type="date"].wfls-input-sm,.wfls-input-group-sm input[type="date"],input[type="time"].wfls-input-sm,.wfls-input-group-sm input[type="time"],input[type="datetime-local"].wfls-input-sm,.wfls-input-group-sm input[type="datetime-local"],input[type="month"].wfls-input-sm,.wfls-input-group-sm input[type="month"]{line-height:30px}input[type="date"].wfls-input-lg,.wfls-input-group-lg input[type="date"],input[type="time"].wfls-input-lg,.wfls-input-group-lg input[type="time"],input[type="datetime-local"].wfls-input-lg,.wfls-input-group-lg input[type="datetime-local"],input[type="month"].wfls-input-lg,.wfls-input-group-lg input[type="month"]{line-height:46px}}.wfls-form-group{margin-bottom:8px}.wfls-form-group.wfls-sub-group label{color:#666666;font-weight:normal;padding-left:20px}.wfls-form-group.wfls-focus{border-left:4px solid #11967a;padding-bottom:8px;background-color:#e5e5e5}.wfls-form-group.wfls-focus label{margin-left:-4px}.wfls-radio,.wfls-checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.wfls-radio label,.wfls-checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.wfls-radio input[type="radio"],.wfls-radio-inline input[type="radio"],.wfls-checkbox input[type="checkbox"],.wfls-checkbox-inline input[type="checkbox"]{margin-top:4px \9}.wfls-radio-offset{padding-left:29px}@media (min-width: 768px){.wfls-radio-offset{padding-left:20px}}.wfls-radio+.wfls-radio,.wfls-checkbox+.wfls-checkbox{margin-top:-5px}.wfls-radio-inline,.wfls-checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.wfls-radio-inline+.wfls-radio-inline,.wfls-checkbox-inline+.wfls-checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="radio"][readonly],input[type="radio"].wfls-disabled,fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],input[type="checkbox"][readonly],input[type="checkbox"].wfls-disabled,fieldset[disabled] input[type="checkbox"]{cursor:not-allowed;pointer-events:none}.wfls-radio-inline.wfls-disabled,fieldset[disabled] .wfls-radio-inline,.wfls-checkbox-inline.wfls-disabled,fieldset[disabled] .wfls-checkbox-inline{cursor:not-allowed}.wfls-radio.wfls-disabled label,fieldset[disabled] .wfls-radio label,.wfls-checkbox.wfls-disabled label,fieldset[disabled] .wfls-checkbox label{cursor:not-allowed;pointer-events:none}.wfls-form-control-static{padding-top:1.5rem;padding-bottom:1.5rem;margin:0;line-height:1}.wfls-form-control-static.wfls-input-lg,.wfls-form-control-static.wfls-input-sm{padding-left:0;padding-right:0}.wfls-input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.wfls-input-sm{height:30px;line-height:30px}textarea.wfls-input-sm,select[multiple].wfls-input-sm{height:auto}.wfls-form-group-sm .wfls-form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.wfls-form-group-sm select.wfls-form-control{height:30px;line-height:30px}.wfls-form-group-sm textarea.wfls-form-control,.wfls-form-group-sm select[multiple].wfls-form-control{height:auto}.wfls-form-group-sm .wfls-form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.wfls-input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}select.wfls-input-lg{height:46px;line-height:46px}textarea.wfls-input-lg,select[multiple].wfls-input-lg{height:auto}.wfls-form-group-lg .wfls-form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.wfls-form-group-lg select.wfls-form-control{height:46px;line-height:46px}.wfls-form-group-lg textarea.wfls-form-control,.wfls-form-group-lg select[multiple].wfls-form-control{height:auto}.wfls-form-group-lg .wfls-form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.33333}.wfls-has-feedback{position:relative}.wfls-has-feedback .wfls-form-control{padding-right:47.5px}.wfls-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}.wfls-input-lg+.wfls-form-control-feedback,.wfls-input-group-lg+.wfls-form-control-feedback,.wfls-form-group-lg .wfls-form-control+.wfls-form-control-feedback{width:46px;height:46px;line-height:46px}.wfls-input-sm+.wfls-form-control-feedback,.wfls-input-group-sm+.wfls-form-control-feedback,.wfls-form-group-sm .wfls-form-control+.wfls-form-control-feedback{width:30px;height:30px;line-height:30px}.wfls-has-success .wfls-help-block,.wfls-has-success .wfls-control-label,.wfls-has-success .wfls-radio,.wfls-has-success .wfls-checkbox,.wfls-has-success .wfls-radio-inline,.wfls-has-success .wfls-checkbox-inline,.wfls-has-success.wfls-radio label,.wfls-has-success.wfls-checkbox label,.wfls-has-success.wfls-radio-inline label,.wfls-has-success.wfls-checkbox-inline label{color:#3c763d}.wfls-has-success .wfls-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)}.wfls-has-success .wfls-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}.wfls-has-success .wfls-input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.wfls-has-success .wfls-form-control-feedback{color:#3c763d}.wfls-has-warning .wfls-help-block,.wfls-has-warning .wfls-control-label,.wfls-has-warning .wfls-radio,.wfls-has-warning .wfls-checkbox,.wfls-has-warning .wfls-radio-inline,.wfls-has-warning .wfls-checkbox-inline,.wfls-has-warning.wfls-radio label,.wfls-has-warning.wfls-checkbox label,.wfls-has-warning.wfls-radio-inline label,.wfls-has-warning.wfls-checkbox-inline label{color:#8a6d3b}.wfls-has-warning .wfls-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)}.wfls-has-warning .wfls-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}.wfls-has-warning .wfls-input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.wfls-has-warning .wfls-form-control-feedback{color:#8a6d3b}.wfls-has-error .wfls-help-block,.wfls-has-error .wfls-control-label,.wfls-has-error .wfls-radio,.wfls-has-error .wfls-checkbox,.wfls-has-error .wfls-radio-inline,.wfls-has-error .wfls-checkbox-inline,.wfls-has-error.wfls-radio label,.wfls-has-error.wfls-checkbox label,.wfls-has-error.wfls-radio-inline label,.wfls-has-error.wfls-checkbox-inline label{color:#a94442}.wfls-has-error .wfls-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)}.wfls-has-error .wfls-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}.wfls-has-error .wfls-input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.wfls-has-error .wfls-form-control-feedback{color:#a94442}.wfls-has-feedback label ~ .wfls-form-control-feedback{top:25px}.wfls-has-feedback label.wfls-sr-only ~ .wfls-form-control-feedback{top:0}.wfls-help-block{display:block;margin-top:5px;color:#737373}@media (min-width: 768px){.wfls-form-inline .wfls-form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.wfls-form-inline .wfls-form-control{display:inline-block;width:auto;vertical-align:middle}.wfls-form-inline .wfls-form-control-static{display:inline-block}.wfls-form-inline .wfls-input-group{display:inline-table;vertical-align:middle}.wfls-form-inline .wfls-input-group .wfls-input-group-addon,.wfls-form-inline .wfls-input-group .wfls-input-group-btn,.wfls-form-inline .wfls-input-group .wfls-form-control{width:auto}.wfls-form-inline .wfls-input-group>.wfls-form-control{width:100%}.wfls-form-inline .wfls-control-label{margin-bottom:0;vertical-align:middle}.wfls-form-inline .wfls-radio,.wfls-form-inline .wfls-checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.wfls-form-inline .wfls-radio label,.wfls-form-inline .wfls-checkbox label{padding-left:0}.wfls-form-inline .wfls-radio input[type="radio"],.wfls-form-inline .wfls-checkbox input[type="checkbox"]{position:relative;margin-left:0}.wfls-form-inline .wfls-has-feedback .wfls-form-control-feedback{top:0}}.wfls-form-horizontal .wfls-radio,.wfls-form-horizontal .wfls-checkbox,.wfls-form-horizontal .wfls-radio-inline,.wfls-form-horizontal .wfls-checkbox-inline{margin-top:0;margin-bottom:0;padding-top:1.5rem}.wfls-form-horizontal .wfls-radio,.wfls-form-horizontal .wfls-checkbox{min-height:29px}.wfls-form-horizontal .wfls-form-group{margin-left:-15px;margin-right:-15px}.wfls-form-horizontal .wfls-form-group:before,.wfls-form-horizontal .wfls-form-group:after{content:" ";display:table}.wfls-form-horizontal .wfls-form-group:after{clear:both}@media (min-width: 768px){.wfls-form-horizontal .wfls-control-label{text-align:right;margin-bottom:0;padding-top:1.5rem}}.wfls-form-horizontal .wfls-has-feedback .wfls-form-control-feedback{right:15px}@media (min-width: 768px){.wfls-form-horizontal .wfls-form-group-lg .wfls-control-label{padding-top:11px;font-size:18px}}@media (min-width: 768px){.wfls-form-horizontal .wfls-form-group-sm .wfls-control-label{padding-top:6px;font-size:12px}}@media (min-width: 768px){#input-recaptchaSiteKey,#input-recaptchaSecret{min-width:400px}}hr.wfls-half{border:0 !important;border-bottom:1px solid #e4e4e4 !important;width:50%;margin:1.25rem auto}.wrap.wordfence-ls{direction:ltr}@media (min-width: 768px){.wrap.wordfence-ls{max-width:750px}}@media (min-width: 992px){.wrap.wordfence-ls{max-width:970px}}@media (min-width: 1200px){.wrap.wordfence-ls{max-width:1170px}}.wrap.wordfence-ls>.wfls-container-fluid{padding-left:0px;padding-right:0px}.wrap.wordfence-ls .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709e}.wrap.wordfence-ls a{text-decoration:none}.wrap.wordfence-ls a:hover{text-decoration:underline}.wrap.wordfence-ls a.wfls-btn:hover{text-decoration:none}.wrap.wordfence-ls p,.wrap.wordfence-ls td,.wrap.wordfence-ls li{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.875rem;color:#2d2d2d;line-height:1.3125;font-weight:normal}.wrap.wordfence-ls p strong,.wrap.wordfence-ls td strong,.wrap.wordfence-ls li strong{font-weight:600}.wrap.wordfence-ls p em,.wrap.wordfence-ls td em,.wrap.wordfence-ls li em{font-weight:normal}.wrap.wordfence-ls h1,.wrap.wordfence-ls h2,.wrap.wordfence-ls h3,.wrap.wordfence-ls h4,.wrap.wordfence-ls h5,.wrap.wordfence-ls h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;color:#2d2d2d;font-weight:700}.wrap.wordfence-ls h2{font-size:1.3125rem;line-height:1.5}.wrap.wordfence-ls h3{font-size:1.125rem}.wrap.wordfence-ls h4{font-size:1rem}a{color:#00709e}.wfls-inline-help{color:#9f9fa0}.wfls-inline-help:hover{color:#00709e}.wordfenceWrap{margin:20px 0 0 20px}#wfHeading:after{content:'.';visibility:hidden;display:block;clear:both;height:0px}.wfls-header-icon{background-image:url(../img/header.svg);width:32px;height:32px;background-position:0 0;background-repeat:no-repeat;padding:0;margin:0 5px 0 0;float:left}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(../img/icons/bullet_yellow.png)}.wordfenceBoldTD{font-weight:bold}.wfAjax24{display:none;width:24px;height:24px;background-image:url(../img/icons/ajax24.gif);margin:0;padding:0}div.wfLoadingWhite32{width:32px;height:32px;background-image:url(../img/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(../img/icons/ajax3.gif)}.wfStrong{font-weight:bold}.wordfenceModeElem{width:1px;height:1px;opacity:0}.wfWarn{color:#F00}img.wfFlag{vertical-align:middle;margin:-3px 4px 0 0}.wfHitTime{font-style:italic}.wfAvatar img{vertical-align:middle;margin-right:0.5rem}.wfls-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:"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}.wfls-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:"Helvetica Neue",Helvetica,Arial,sans-serif;background-image:url("../img/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:"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:"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}.wfls-striped-table{width:100%;max-width:100%;border-collapse:collapse}.wfls-striped-table th{border-left:1px solid #bdbdbd}.wfls-striped-table th:first-of-type{border-left:0}.wfls-striped-table th,.wfls-striped-table td{padding:1rem}.wfls-striped-table thead th,.wfls-striped-table thead td,.wfls-striped-table tfoot th,.wfls-striped-table tfoot td,.wfls-striped-table tbody.thead th,.wfls-striped-table tbody.thead td{background-color:#ebebeb;color:#777;font-weight:bold;text-align:left}.wfls-striped-table tbody tr.even td,.wfls-striped-table tbody tr:nth-child(2n) td{background-color:#ffffff}.wfls-striped-table tbody tr td,.wfls-striped-table tbody tr.odd td{background-color:#fafafa}.wfls-striped-table tbody tr:hover>td{background-color:#fffbd8}.wfls-striped-table tbody.empty-row tr td{border-width:0;padding:8px 0;background-color:transparent}.wfls-striped-table .wfls-result-error,.wfls-block-list .wfls-result-error{color:#d0514c !important;font-weight:bold}.wfls-striped-table .wfls-result-error:before,.wfls-block-list .wfls-result-error:before{content:"\2718"}.wfls-striped-table .wfls-result-success{max-width:20%}.wfls-striped-table .wfls-result-success,.wfls-block-list .wfls-result-success{color:#008c10 !important;font-weight:bold}.wfls-striped-table .wfls-result-success:before,.wfls-block-list .wfls-result-success:before{content:"\2713"}.wfls-striped-table .wfls-result-success:before,.wfls-block-list .wfls-result-success:before,.wfls-striped-table .wfls-result-error:before,.wfls-block-list .wfls-result-error:before{font-size:16px;display:inline-block;margin:0px 8px 0px 0px}.wfls-striped-table .wfls-result-inactive,.wfls-block-list .wfls-result-inactive{font-weight:bold;color:#666666 !important}.wfls-fixed-table{table-layout:fixed}pre.wfls-pre{margin:8px 0 20px;padding:12px;background:#ffffff;border:1px solid #999999;overflow:auto}.wfls-center{text-align:center}#wfConfigForm,.wfls-diagnostics-wrapper{max-width:1035px}.wfls-hidden{display:none !important}.wfls-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}.wfls-card .wfls-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}.wfls-card .wfls-card-inner .wfls-card-content{max-width:75%}.wfls-card .wfls-card-inner .wfls-card-content .wfls-card-title{font-size:1.125rem;width:100%}.wfls-card .wfls-card-inner .wfls-card-content .wfls-card-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:.875rem;color:#4f748e}.wfls-card .wfls-card-inner .wfls-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}.wfls-card .wfls-card-inner .wfls-card-action .wfls-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}.wfls-card .wfls-card-inner .wfls-card-action .wfls-card-action-checkbox{background-image:url(../img/checkbox.png);background-repeat:no-repeat;background-position:left center;width:29px;height:29px}.wfls-card .wfls-card-inner .wfls-card-action .wfls-card-action-checkbox.checked{background-position:right center}.wfls-card .wfls-card-extra{display:none;padding:0.5rem;margin-top:1rem;border-top:1px solid #f3f6f8}@media (min-width: 768px){.wfls-card .wfls-card-extra{padding:1rem}}.wfls-card.active .wfls-card-extra{display:block}.wfls-card.wfls-card-left .wfls-card-content{margin-left:48px}.wfls-card.wfls-card-left .wfls-card-action{right:auto;left:0px}.wfls-card.disabled .wfls-card-content .wfls-card-title{color:#aaaaaa}.wfls-card.disabled .wfls-card-content .wfls-card-subtitle{color:#8ea6be}.wfls-inline-block{display:inline-block}@media (max-width: 767px){.wfls-inline-block-xs{display:inline-block}}.wfls-full-width{width:100%;max-width:100%}.wfls-no-top{margin-top:0 !important}.wfls-add-top{margin-top:1rem !important}.wfls-add-top-large{margin-top:1.5rem !important}.wfls-add-top-medium{margin-top:0.75rem !important}.wfls-add-top-small{margin-top:0.5rem !important}.wfls-add-top-smaller{margin-top:0.25rem !important}.wfls-no-bottom{margin-bottom:0 !important}.wfls-add-bottom{margin-bottom:1rem !important}.wfls-add-bottom-large{margin-bottom:1.5rem !important}.wfls-add-bottom-medium{margin-bottom:0.75rem !important}.wfls-add-bottom-small{margin-bottom:0.5rem !important}.wfls-add-bottom-smaller{margin-bottom:0.25rem !important}.wfls-padding-no-top{padding-top:0 !important}.wfls-no-right{margin-right:0 !important}.wfls-padding-no-bottom{padding-bottom:0 !important}.wfls-padding-no-left{padding-left:0 !important}.wfls-padding-no-right{padding-right:0 !important}.wfls-padding-add-top{padding-top:1rem !important}.wfls-padding-add-top-small{padding-top:0.5rem !important}.wfls-padding-add-top-medium{padding-top:0.75rem !important}.wfls-padding-add-top-large{padding-top:1.5rem !important}.wfls-padding-add-top-responsive{padding-top:1rem !important}@media (min-width: 768px){.wfls-padding-add-top-responsive{padding-top:1.5rem !important}}.wfls-padding-add-bottom{padding-bottom:1rem !important}.wfls-padding-add-bottom-small{padding-bottom:0.5rem !important}.wfls-padding-add-bottom-medium{padding-bottom:0.75rem !important}.wfls-padding-add-bottom-large{padding-bottom:1.5rem !important}.wfls-padding-add-bottom-responsive{padding-bottom:1rem !important}@media (min-width: 768px){.wfls-padding-add-bottom-responsive{padding-bottom:1.5rem !important}}.wfls-padding-no-bottom{padding-bottom:0 !important}.wfls-padding-add-left{padding-left:1rem !important}.wfls-padding-add-left-small{padding-left:0.5rem !important}.wfls-padding-add-left-medium{padding-left:0.75rem !important}.wfls-padding-add-left-large{padding-left:1.5rem !important}.wfls-padding-add-left-responsive{padding-left:1rem !important}@media (min-width: 768px){.wfls-padding-add-left-responsive{padding-left:1.5rem !important}}.wfls-padding-add-right{padding-right:1rem !important}.wfls-padding-add-right-small{padding-right:0.5rem !important}.wfls-padding-add-right-medium{padding-right:0.75rem !important}.wfls-padding-add-right-large{padding-right:1.5rem !important}.wfls-padding-add-right-responsive{padding-right:1rem !important}@media (min-width: 768px){.wfls-padding-add-right-responsive{padding-right:1.5rem !important}}.wfls-left{text-align:left !important}.wfls-center{text-align:center !important}.wfls-block-center{margin:0 auto}.wfls-right{text-align:right !important}.wfls-block-right{margin:0 0 0 auto}@media (max-width: 767px){.wfls-left-xs{text-align:left !important}.wfls-center-xs{text-align:center !important}.wfls-padding-add-top-xs{padding-top:1rem !important}.wfls-padding-add-top-xs-small{padding-top:0.5rem !important}.wfls-padding-add-top-xs-large{padding-top:1.5rem !important}.wfls-padding-add-bottom-xs{padding-bottom:1rem !important}.wfls-padding-add-bottom-xs-small{padding-bottom:0.5rem !important}.wfls-padding-add-bottom-xs-large{padding-bottom:1.5rem !important}}@media (min-width: 768px) and (max-width: 991px){.wfls-left-sm{text-align:left !important}.wfls-center-sm{text-align:center !important}}@media (min-width: 992px) and (max-width: 1199px){.wfls-left-md{text-align:left !important}.wfls-center-md{text-align:center !important}}@media (min-width: 1200px){.wfls-left-lg{text-align:left !important}.wfls-center-lg{text-align:center !important}}.wfls-border-no-top{border-top:none !important}.wfls-border-no-right{border-right:none !important}.wfls-border-no-bottom{border-bottom:none !important}.wfls-border-no-left{border-left:none !important}.wfls-overflow-x-auto{overflow-x:auto}.wfls-overflow-y-auto{overflow-y:auto}@media (max-width: 767px){.wfls-overflow-x-auto-xs{overflow-x:auto}.wfls-overflow-y-auto-xs{overflow-y:auto}}.wfls-blue{color:#00709e !important}.wfls-blue-light{color:#008cc1 !important}.wfls-gray-dark{color:#2d2d2d !important}.wfls-gray-blue{color:#3f596b !important}.wfls-green-dark{color:#11967a !important}.wfls-green-light{color:#16bc9b !important}.wfls-red-dark{color:#930000 !important}.wfls-red-light{color:#c10000 !important}.wfls-yellow-dark{color:#fcb214 !important}.wfls-yellow-light{color:#ffd10a !important}.wfls-gray{color:#525355 !important}.wfls-gray-light{color:#9f9fa0 !important}.wfls-nowrap{white-space:nowrap}.wfls-tip{color:#fcb214;font-size:1.1rem;margin-right:0.25rem}.wfls-text-small{font-size:85% !important}.wfls-text-plain{font-weight:400 !important}.wfls-scroll-x::-webkit-scrollbar,.wfls-scroll-y::-webkit-scrollbar{-webkit-appearance:none;width:7px;height:7px}.wfls-scroll-x::-webkit-scrollbar-thumb,.wfls-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)}.wfls-split-word{word-wrap:break-word;word-break:break-all}@media (max-width: 767px){.wfls-split-word-xs{word-wrap:break-word;word-break:break-all;white-space:normal !important}}.wfselect2-container{font-family:"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}}.wfls-select2-placeholder-fix .wfselect2-search__field{width:auto !important}.wfls-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}.wfls-page-title>*{-webkit-flex-grow:0;flex-grow:0;min-width:0}.wfls-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}.wfls-page-title .wordfence-icon32{margin:0;margin-right:0.5rem}.wfls-page-title h2{padding:0 !important}.wfls-page-title .wfOnOffSwitch{-webkit-flex-basis:69px;flex-basis:69px;-webkit-flex-shrink:0;flex-shrink:0;margin-left:0.5rem}.wfls-tab-container{background-color:#fff}@media (min-width: 768px){.wfls-tab-container{background-color:unset}}.wfls-page-tabs,.wfls-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){.wfls-page-tabs,.wfls-page-fixed-tabs{margin-left:0;margin-right:0}}.wfls-page-tabs>*,.wfls-page-fixed-tabs>*{-webkit-flex-grow:0;flex-grow:0;min-width:0}.wfls-page-tabs>*:first-child,.wfls-page-fixed-tabs>*:first-child{-webkit-flex-grow:0;flex-grow:0;min-width:32px;-webkit-flex-basis:32px;flex-basis:32px}.wfls-page-tabs .wordfence-icon32,.wfls-page-fixed-tabs .wordfence-icon32{margin:0;margin-right:0.5rem;margin-left:0.5rem}@media (min-width: 768px){.wfls-page-tabs .wordfence-icon32,.wfls-page-fixed-tabs .wordfence-icon32{margin-left:0}}.wfls-page-tabs .wfls-text-tab,.wfls-page-fixed-tabs .wfls-text-tab{margin:0;margin-left:0.5rem;color:#333}.wfls-page-tabs .wfls-tab,.wfls-page-fixed-tabs .wfls-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){.wfls-page-tabs .wfls-tab,.wfls-page-fixed-tabs .wfls-tab{border:1px solid #d0d0d0;background:#e6e6e6}}.wfls-page-tabs .wfls-tab a,.wfls-page-fixed-tabs .wfls-tab a{display:block;padding:0.5rem 1rem;font-size:14px;line-height:24px;text-decoration:none;font-weight:bold;color:#333}.wfls-page-tabs .wfls-tab.wfls-active,.wfls-page-tabs .wfls-tab:hover,.wfls-page-fixed-tabs .wfls-tab.wfls-active,.wfls-page-fixed-tabs .wfls-tab:hover{border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#00709e;-webkit-box-shadow:none;box-shadow:none}.wfls-page-tabs .wfls-tab.wfls-active a,.wfls-page-tabs .wfls-tab:hover a,.wfls-page-fixed-tabs .wfls-tab.wfls-active a,.wfls-page-fixed-tabs .wfls-tab:hover a{color:#00709e}.wfls-tab-content{display:none;margin-top:15px}.wfls-tab-content.wfls-active{display:block}.wfls-fixed-tab-content{margin-top:15px}.wfls-section-title{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start}.wfls-section-title>*{-webkit-flex-grow:0;flex-grow:0;min-width:0}.wfls-section-title>h1,.wfls-section-title>h2,.wfls-section-title>h3,.wfls-section-title>h4,.wfls-section-title>h5,.wfls-section-title>h6{-webkit-flex-grow:1;flex-grow:1;color:#2d2d2d !important;font-family:"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){.wfls-section-title>h1,.wfls-section-title>h2,.wfls-section-title>h3,.wfls-section-title>h4,.wfls-section-title>h5,.wfls-section-title>h6{padding-right:0.25rem !important}}.wfls-section-title h2{font-size:1.3125rem;line-height:1.5}.wfls-section-title h3{font-size:1.125rem}.wfls-section-title h4{font-size:1rem}.wfls-section-title .wordfence-icon32{margin:0;margin-right:0.5rem}.wfls-status-circular{position:relative}.wfls-status-circular-text{position:absolute;left:50%;top:50%;padding:0;margin:0;transform:translate(-50%, -50%);color:#aaa;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:1.3125rem;font-weight:300;line-height:1.5}.wfls-status-circular .wfls-status-overlay-text{position:absolute;left:50%;top:50%;padding:0;margin:0;width:200%;text-align:center;transform:translate(-50%, -50%);font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.875rem;font-weight:normal;line-height:1.3125;opacity:0.0;color:#777}.wfls-status-warning,.wfls-status-critical,.wfls-status-payment-expiring,.wfls-status-renewing{width:100px;height:100px;margin-bottom:1rem}.wfls-status-warning svg path{fill:#fcb214}.wfls-status-critical svg path{fill:#930000}.wfls-status-payment-expiring svg rect,.wfls-status-payment-expiring svg path{fill:#930000}.wfls-status-renewing svg rect,.wfls-status-renewing svg path{fill:#11967a}#howGetIPs-preview{color:#8c8c8c}#howGetIPs-preview strong{color:#666}.wfls-scrollTop{background:#424242;bottom:30px;right:15px;position:fixed;z-index:999;display:none}.wfls-scrollTop a{background:#959595;display:block;padding:4px 5px;line-height:32px;width:32px;color:#ffffff;text-align:center}.wfls-back-icon{color:#00709e;margin-right:0.75rem;font-size:1.5rem !important}.wfls-back-link-chevron{margin-left:1rem}.wfls-back-link-chevron:first-of-type{margin-left:0}.wfls-back-link{font-weight:bold;text-decoration:none}.wfls-premium-link{font-weight:bold}.wfls-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){.wfls-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}}.wfls-boolean-switch .wfls-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){.wfls-boolean-switch .wfls-boolean-switch-handle{width:20px;height:20px;min-width:20px;min-height:20px;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px}}.wfls-boolean-switch.wfls-active{border:1px solid #00709e;background-color:#00709e}.wfls-boolean-switch.wfls-active .wfls-boolean-switch-handle{border:1px solid #00709e;left:25px}@media (min-width: 768px){.wfls-boolean-switch.wfls-active .wfls-boolean-switch-handle{left:15px}}.wfls-boolean-switch.wfls-disabled{pointer-events:none;border-color:#e2e2e2}.wfls-boolean-switch.wfls-disabled .wfls-boolean-switch-handle{border-color:#e2e2e2}.wfls-boolean-switch.wfls-disabled.wfls-active{border-color:#e2e2e2;background-color:#e2e2e2}.wfls-boolean-switch.wfls-disabled.wfls-active .wfls-boolean-switch-handle{border-color:#e2e2e2}.wfls-option-checkbox,[type=checkbox].wfls-option-checkbox+label:before{content:"";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){.wfls-option-checkbox,[type=checkbox].wfls-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){.wfls-option-checkbox{position:relative}.wfls-option-checkbox>*{position:absolute;top:9px;left:50%;transform:translateX(-50%) translateY(-50%)}}.wfls-option-radio,[type=radio].wfls-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){.wfls-option-radio,[type=radio].wfls-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].wfls-option-checkbox.wfls-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].wfls-option-radio.wfls-small+label:before{width:20px;height:20px;min-width:20px;min-height:20px;line-height:21px !important;font-size:20px !important}[type=checkbox].wfls-option-checkbox+label:before,[type=radio].wfls-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].wfls-option-checkbox.wfls-small+label:before,[type=radio].wfls-option-radio.wfls-small+label:before{text-indent:0px;vertical-align:-3px}.wfls-option-checkbox.wfls-checked,[type=checkbox].wfls-option-checkbox:checked+label:before{color:#ffffff !important;box-shadow:0px 0px 0px 1px #00709e !important;background-color:#00709e !important}.wfls-option-checkbox.wfls-disabled,[type=checkbox].wfls-option-checkbox:disabled+label:before{color:#f1f1f1 !important;box-shadow:0px 0px 0px 1px #e2e2e2 !important;background-color:#f1f1f1 !important}.wfls-option-checkbox.wfls-checked.wfls-disabled,[type=checkbox].wfls-option-checkbox:disabled:checked+label:before{color:#777 !important;box-shadow:0px 0px 0px 1px #e2e2e2 !important;background-color:#f1f1f1 !important}.wfls-option-radio.wfls-checked,[type=radio].wfls-option-radio:checked+label:before{content:"\f3a7";color:#00709e !important}.wfls-option-checkbox[type=checkbox],.wfls-option-checkbox[type=radio],.wfls-option-radio[type=checkbox],.wfls-option-radio[type=radio]{position:absolute;left:-9999px}.wfls-option-text input[type="text"],input.wfls-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)}.wfls-option-text input[type="text"]:placeholder-shown,input.wfls-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}.wfls-option-premium .wfls-option-title,.wfls-option-premium .wfls-option-title>ul>li,.wfls-option.wfls-disabled .wfls-option-title,.wfls-option.wfls-disabled .wfls-option-title>ul>li{color:#aaa !important}.wfls-option-premium .wfls-option-checkbox,.wfls-option-premium .wfls-option-radio,.wfls-option.wfls-disabled .wfls-option-checkbox,.wfls-option.wfls-disabled .wfls-option-radio{opacity:0.5}.wfls-block .wfls-block-content .wfls-block-labeled-value.wfls-protection-status .wfls-block-labeled-value-value{padding-top:0}.wfls-block .wfls-block-content .wfls-block-labeled-value.wfls-protection-status .wfls-block-labeled-value-value .wfls-fa{font-size:8rem}.wfls-block .wfls-block-content .wfls-block-labeled-value.wfls-protection-status .wfls-block-labeled-value-value svg{width:160px}.wfls-block .wfls-block-content .wfls-block-labeled-value.wfls-protection-status .wfls-block-labeled-value-label{font-size:1.35rem;font-weight:300;padding-bottom:0}.wfls-block .wfls-block-content .wfls-block-labeled-value.wfls-protection-status-premium .wfls-block-labeled-value-value{color:#9f9fa0}.wfls-block .wfls-block-content .wfls-block-labeled-value.wfls-protection-status-premium .wfls-block-labeled-value-value svg{fill:#9f9fa0}.wfls-block .wfls-block-content .wfls-block-labeled-value.wfls-protection-status-premium .wfls-block-labeled-value-label{color:#9f9fa0}.wfls-indeterminate-progress{-webkit-animation:wfls-indeterminate-progress-keyframes 1s steps(8, end) infinite;-o-animation:wfls-indeterminate-progress-keyframes 1s steps(8, end) infinite;animation:wfls-indeterminate-progress-keyframes 1s steps(8, end) infinite}.wfls-indeterminate-progress path{fill:#00709e}@-moz-keyframes wfls-indeterminate-progress-keyframes{to{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes wfls-indeterminate-progress-keyframes{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes wfls-indeterminate-progress-keyframes{to{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.wfls-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;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wfls-flex-row .wfls-flex-row-1{-webkit-flex-grow:1;flex-grow:1}.wfls-flex-row .wfls-flex-row-0{-webkit-flex-grow:0;flex-grow:0}.wfls-flex-row.wfls-flex-row-wrappable,.wfls-flex-row.wfls-flex-row-xs-wrappable{-webkit-flex-wrap:wrap;flex-wrap:wrap}.wfls-flex-row.wfls-flex-row-equal-heights{-webkit-align-items:stretch;align-items:stretch}.wfls-flex-row .wfls-flex-item-full-width{width:100%}.wfls-flex-row .wfls-flex-item-xs-100{-webkit-flex-basis:100%;flex-basis:100%;max-width:100%}@media (min-width: 768px){.wfls-flex-row.wfls-flex-row-xs-wrappable{-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wfls-flex-row .wfls-flex-item-sm-50{-webkit-flex-basis:50%;flex-basis:50%}}.wfls-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}.wfls-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}.wfls-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}.wfls-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}.wfls-switch>li.wfls-active{color:#ffffff;background-color:#00709e}.wfls-tooltip,.ui-widget.wfls-tooltip{max-width:600px;font-size:0.75rem;overflow-wrap:break-word}.wfls-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){.wfls-widget-learning-mode{padding:1.5rem}}.wfls-widget-learning-mode svg{width:18px}.wfls-widget-learning-mode svg path{fill:#aaa}.wfls-widget-learning-mode span{padding-left:0.5rem;font-size:.875rem;line-height:1.3125;font-weight:600}.wfls-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 .wfls-drawer-overlay{left:36px}@media only screen and (max-width: 960px){.auto-fold .wfls-drawer-overlay{left:36px}}.rtl .wfls-drawer-overlay{right:160px;left:0px}.rtl .folded .wfls-drawer-overlay{right:36px}@media only screen and (max-width: 960px){.rtl .auto-fold .wfls-drawer-overlay{right:36px}}@media screen and (max-width: 782px){.wfls-drawer-overlay,.folded .wfls-drawer-overlay,.auto-fold .wfls-drawer-overlay,.rtl .wfls-drawer-overlay,.rtl .folded .wfls-drawer-overlay,.rtl .auto-fold .wfls-drawer-overlay{left:0px;right:0px}}.wfls-drawer{background-color:#ffffff;position:fixed;top:32px;bottom:0px;right:0px;z-index:9981}.wfls-drawer .wfls-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%}.wfls-drawer .wfls-modal ul,.wfls-drawer .wfls-modal li{padding:0;margin:0}.wfls-drawer .wfls-modal .wfls-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}.wfls-drawer .wfls-modal .wfls-modal-header .wfls-modal-header-content{max-width:75%}.wfls-drawer .wfls-modal .wfls-modal-header .wfls-modal-header-content .wfls-modal-title{font-size:1.3125rem;line-height:1.5;font-weight:300;width:100%;transition:color 0.2s ease-in}.wfls-drawer .wfls-modal .wfls-modal-header .wfls-modal-header-content .wfls-modal-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:.575rem;color:#4f748e}.wfls-drawer .wfls-modal .wfls-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}.wfls-drawer .wfls-modal .wfls-modal-content>*:first-child{margin-top:0}.wfls-drawer .wfls-modal .wfls-modal-content select,.wfls-drawer .wfls-modal .wfls-modal-content select option,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default{font-size:0.7rem;font-weight:bold}@media (min-width: 768px){.wfls-drawer .wfls-modal .wfls-modal-content select,.wfls-drawer .wfls-modal .wfls-modal-content select option,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default{font-size:0.8rem}}@media (min-width: 992px){.wfls-drawer .wfls-modal .wfls-modal-content select,.wfls-drawer .wfls-modal .wfls-modal-content select option,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default{font-size:0.9rem}}.wfls-drawer .wfls-modal .wfls-modal-content .wfls-option-select-option,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default,.wfls-drawer .wfls-modal .wfls-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)}.wfls-drawer .wfls-modal .wfls-modal-content .wfls-option-select-option .wfselect2-selection__rendered,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default .wfselect2-selection__rendered,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered{color:#333;line-height:40px}.wfls-drawer .wfls-modal .wfls-modal-content .wfls-option-select-option .wfselect2-selection__arrow,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default .wfselect2-selection__arrow,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow{height:38px}.wfls-drawer .wfls-modal .wfls-modal-content .wfls-option-select-option.wfselect2-container--disabled .wfselect2-selection__rendered,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default.wfselect2-container--disabled .wfselect2-selection__rendered,.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default .wfselect2-selection--single.wfselect2-container--disabled .wfselect2-selection__rendered{color:#aaa}.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:#333 transparent transparent}.wfls-drawer .wfls-modal .wfls-modal-content .wfselect2-container--default.wfselect2-container--open .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:transparent transparent #333}.wfls-drawer .wfls-modal .wfls-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}.wfls-mobile-menu-overlay{position:fixed;top:0px;right:0px;bottom:0px;left:0px;background-color:rgba(0,0,0,0.5);z-index:100000}.wfls-mobile-menu-overlay>.wfls-mobile-menu-tap-hint{position:absolute;top:25%;left:50%;transform:translateX(-50%);color:#ffffff;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:1.3125rem;font-weight:300;line-height:1.5}.wfls-mobile-menu{position:fixed;left:50%;transform:translateX(-50%);z-index:100001}.wfls-mobile-menu>.wfls-mobile-menu-items{margin:0;padding:0 0 0.25rem 0;list-style:none}.wfls-mobile-menu>.wfls-mobile-menu-items>li{margin:0;padding:0.25rem 0}.wfls-mobile-menu>.wfls-mobile-menu-items>li>a{box-sizing:border-box}.wfls-callout-warning{background-color:#feecc4;padding:0.8rem 1.25rem}.wfls-tip-light-bulb{color:#fcb214;font-size:1.5rem;font-weight:bold}.wfls-tip-info-message{padding-left:0.5rem !important;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.875rem;color:#2d2d2d;line-height:1.3125;font-weight:normal}#wfls-qr-code{width:175px;height:175px;margin:0 auto}@media (min-width: 500px){#wfls-qr-code{width:256px;height:256px}}#wfls-activate-field{margin:0 auto;font-size:1.5rem;display:block;text-align:center}.wfls-recovery-codes{list-style-type:none}.wfls-recovery-codes li{font-family:monospace !important;text-align:center}#wfls-recovery-download .dashicons,#wfls-recovery-new-download .dashicons{line-height:26px}#wfls-ip-source-trusted-proxies{display:none}ul.wfls-option.wfls-option-howgetips .wfls-option-ip-source-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:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.8rem;margin-top:0.5rem}#wfls-ip-source-preview{color:#8c8c8c}#wfls-ip-source-preview strong{color:#666}.wfls-inline-notice{background:#fff;border:1px solid #ccd0d4;border-left-color:#ffb900;border-left-width:4px;box-shadow:0 1px 1px rgba(0,0,0,0.04);padding:4px 12px;display:flex;justify-content:flex-start;align-items:center}.wfls-inline-notice>*{flex-grow:1}.wfls-inline-notice:first-child{flex-grow:0;flex-shrink:0}.wfls-inline-notice span{padding-left:0.5rem}.wfls-page-indicator{vertical-align:bottom}.wfls-block{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;position:relative;margin:0 auto 0.5rem;box-sizing:border-box;background-color:#fff;box-shadow:0 0 0 1px rgba(200,215,225,0.25),0 1px 2px #e9eff3}.wfls-block.wfls-block-transparent{background-color:transparent;box-shadow:none}.wfls-block .wfls-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}.wfls-block .wfls-block-banner>li{margin:0;padding:0.75rem 1rem}@media (min-width: 768px){.wfls-block .wfls-block-banner{margin:0 -1.5rem}.wfls-block .wfls-block-banner>li{padding:0.75rem 1.5rem}}.wfls-block .wfls-block-header{-webkit-flex-basis:44px;flex-basis:44px;-webkit-flex-shrink:0;flex-shrink:0;-webkit-flex-grow:0;flex-grow:0;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}.wfls-block .wfls-block-header.wfls-block-header-border-bottom{padding:0 1rem;border-bottom:1px solid #e2e2e2}@media (min-width: 768px){.wfls-block .wfls-block-header.wfls-block-header-border-bottom{padding:0 1.5rem}}.wfls-block .wfls-block-header .wfls-block-header-content{max-width:75%}.wfls-block .wfls-block-header .wfls-block-header-content .wfls-block-title{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.9rem;width:100%;transition:color 0.2s ease-in}.wfls-block .wfls-block-header .wfls-block-header-content .wfls-block-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:0.775rem}.wfls-block .wfls-block-header .wfls-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}.wfls-block .wfls-block-header .wfls-block-header-action.wfls-block-header-action-text{width:auto}.wfls-block .wfls-block-header .wfls-block-header-action.wfls-block-header-action-text.wfls-block-header-action-text-success{color:#11967a}.wfls-block .wfls-block-header .wfls-block-header-action.wfls-block-header-action-text.wfls-block-header-action-text-warning{color:#930000}.wfls-block .wfls-block-header .wfls-block-header-action.wfls-block-header-action-text.wfls-block-header-action-text-warning a{color:#930000}.wfls-block .wfls-block-header .wfls-block-header-action .wfls-block-header-action-chevron{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJjaGV2cm9uLW9iamVjdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBhdGggaWQ9ImNoZXZyb24iIGQ9Ik0yMCA5bC04IDgtOC04IDEuNDE0LTEuNDE0TDEyIDE0LjE3Mmw2LjU4Ni02LjU4NiIvPgo8L3N2Zz4K");background-repeat:no-repeat;background-position:center center;width:24px;height:24px}.wfls-block .wfls-block-header .wfls-block-header-action .wfls-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}.wfls-block .wfls-block-header .wfls-block-header-action .wfls-block-header-action-checkbox{background-image:url(../img/checkbox.png);background-repeat:no-repeat;background-position:left center;width:29px;height:29px}.wfls-block .wfls-block-header .wfls-block-header-action .wfls-block-header-action-checkbox.wfls-checked{background-position:right center}.wfls-block .wfls-block-content{-webkit-flex-grow:1;flex-grow:1;display:none;padding:0 1rem}@media (min-width: 768px){.wfls-block .wfls-block-content{padding:0 1.5rem}}.wfls-block .wfls-block-content .wfls-block-list{margin:0 -1rem;padding:0;list-style:none}@media (min-width: 768px){.wfls-block .wfls-block-content .wfls-block-list{margin:0 -1.5rem}}.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-striped>li:nth-of-type(odd){background-color:#f9f9f9}.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-striped>li:nth-of-type(even){background-color:#ffffff}.wfls-block .wfls-block-content .wfls-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){.wfls-block .wfls-block-content .wfls-block-list>li{padding:0 1.5rem}}.wfls-block .wfls-block-content .wfls-block-list>li>*:first-child{-webkit-flex-grow:1;flex-grow:1;min-width:0}.wfls-block .wfls-block-content .wfls-block-list.wfls-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}.wfls-block .wfls-block-content .wfls-block-list.wfls-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){.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-horizontal>li{-webkit-flex-basis:50%;flex-basis:50%}}@media (min-width: 992px){.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-horizontal>li{-webkit-flex-basis:25%;flex-basis:25%}}.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-horizontal.wfls-block-list-nowrap{overflow-y:auto;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-horizontal.wfls-block-list-nowrap>li{-webkit-flex-shrink:0;flex-shrink:0}.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-horizontal.wfls-block-list-horizontal-5>li{-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:20%;flex-basis:20%}.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-horizontal>*:first-child{border-left:0}@media (min-width: 768px){.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-horizontal.wfls-block-list-equal>li{max-width:50%}}@media (min-width: 992px){.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-horizontal.wfls-block-list-equal>li{max-width:25%}}.wfls-block .wfls-block-content .wfls-block-list.wfls-block-list-horizontal.wfls-block-list-horizontal-5.wfls-block-list-equal>li{max-width:20%}.wfls-block .wfls-block-content .wfls-block-list .wfls-block-list-state{text-align:center}@media (min-width: 1200px){.wfls-block .wfls-block-content .wfls-block-list .wfls-block-list-state{text-align:left}}.wfls-block .wfls-block-content .wfls-block-list .wfls-block-list-state-enabled .wfls-fa{color:#11967a}.wfls-block .wfls-block-content .wfls-block-list .wfls-block-list-state-disabled .wfls-fa{color:#525355}.wfls-block .wfls-block-content .wfls-block-list .wfls-block-list-state-premium{color:#9f9fa0}.wfls-block .wfls-block-content .wfls-block-list .wfls-block-list-dismiss{padding-left:2rem;font-size:1.25rem}.wfls-block .wfls-block-content .wfls-block-list .wfls-block-list-dismiss a{color:#525355}.wfls-block .wfls-block-content:first-child>.wfls-block-list>li:first-child{border-top:none}.wfls-block .wfls-block-content .wfls-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){.wfls-block .wfls-block-content .wfls-block-left-right{margin:0 -1.5rem}}.wfls-block .wfls-block-content .wfls-block-left-right.wfls-block-left-right-nowrap{-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wfls-block .wfls-block-content .wfls-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}.wfls-block .wfls-block-content .wfls-block-left-right>li>*:first-child{-webkit-flex-grow:1;flex-grow:1;min-width:0}.wfls-block .wfls-block-content .wfls-block-left-right>li.wfls-left{text-align:left}.wfls-block .wfls-block-content .wfls-block-left-right>li.wfls-right{text-align:right}.wfls-block .wfls-block-content .wfls-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}.wfls-block .wfls-block-content .wfls-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%}.wfls-block .wfls-block-content .wfls-block-left-center-right>li a{text-decoration:none;font-size:.875rem}.wfls-block .wfls-block-content .wfls-block-left-center-right>li.wfls-left{text-align:left}.wfls-block .wfls-block-content .wfls-block-left-center-right>li.wfls-center{text-align:center;-webkit-justify-content:center;justify-content:center}.wfls-block .wfls-block-content .wfls-block-left-center-right>li.wfls-center .wordfence-icon32{margin:0}.wfls-block .wfls-block-content .wfls-block-left-center-right>li.wfls-right{text-align:right;-webkit-justify-content:flex-end;justify-content:flex-end}.wfls-block .wfls-block-content .wfls-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){.wfls-block .wfls-block-content .wfls-block-labeled-value{margin:0 -1.5rem;padding:1.5rem}}.wfls-block .wfls-block-content .wfls-block-labeled-value-value{font-size:3rem;line-height:3rem;color:#9f9fa0;padding:1rem}.wfls-block .wfls-block-content .wfls-block-labeled-value-label{font-size:0.75rem;color:#9f9fa0;padding:0 1rem 1rem 1rem}.wfls-block .wfls-block-footer{-webkit-flex-shrink:0;flex-shrink:0;-webkit-flex-grow:0;flex-grow: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:#e4e4e4}.wfls-block .wfls-block-footer .wfls-block-footer-content{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;width:100%}.wfls-block .wfls-block-footer .wfls-block-footer-content>*{-webkit-flex-grow:1;flex-grow:1}.wfls-block .wfls-block-footer .wfls-block-footer-content .wfls-block-title{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.9rem;width:100%;transition:color 0.2s ease-in}.wfls-block .wfls-block-footer .wfls-block-footer-content .wfls-block-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:0.775rem}.wfls-block .wfls-block-footer .wfls-block-footer-action{-webkit-flex-grow:0;flex-grow:0;background:none;border:0;outline:0;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-end;justify-content:flex-end;vertical-align:middle}.wfls-block.wfls-block-no-header .wfls-block-content .wfls-block-list>li{border-top:none}.wfls-block.wfls-active .wfls-block-content,.wfls-block.wfls-always-active .wfls-block-content{display:block}.wfls-block.wfls-active>.wfls-block-header>.wfls-block-header-content>.wfls-block-title{color:#00709e}.wfls-block.wfls-active>.wfls-block-header>.wfls-block-header-content>.wfls-block-header-action>.wfls-block-header-action-disclosure{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJkaXNjbG9zdXJlLWNsb3NlZC1vYmplY3QiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIxMnB4IiBoZWlnaHQ9IjEycHgiIHZpZXdCb3g9IjAgMCAxMiAxMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTIgMTIiCgkgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxwYXRoIGlkPSJkaXNjbG9zdXJlLWNsb3NlZCIgZD0iTSA2IDAgbCA2IDYgLTYgNiAwIC0xMiIgZmlsbD0iIzAwNzA5ZSIvPgo8L3N2Zz4=") !important;transform:rotate(90deg)}.wfls-block.wfls-disabled>.wfls-block-header>.wfls-block-header-content>.wfls-block-title,.wfls-block.wfls-disabled>.wfls-block-header>.wfls-block-header-content>.wfls-block-subtitle{color:#bfbfbf !important}.wfls-block.wfls-disabled>.wfls-block-header>.wfls-block-header-content>.wfls-block-header-action>.wfls-block-header-action-disclosure{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJkaXNjbG9zdXJlLWNsb3NlZC1vYmplY3QiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIxMnB4IiBoZWlnaHQ9IjEycHgiIHZpZXdCb3g9IjAgMCAxMiAxMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTIgMTIiCgkgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxwYXRoIGlkPSJkaXNjbG9zdXJlLWNsb3NlZCIgZD0iTSA2IDAgbCA2IDYgLTYgNiAwIC0xMiIgZmlsbD0iI2JkYmRiZCIvPgo8L3N2Zz4=") !important;transform:rotate(0deg)}.wfls-block.wfls-disabled>.wfls-block-content{display:none !important}.wfls-block.wfls-block-header-left .wfls-block-header-content{margin-left:48px}.wfls-block.wfls-block-header-left .wfls-block-header-action{right:auto;left:0px}.wfls-block.wfls-disabled .wfls-dashboard-item-content .wfls-block-title{color:#aaaaaa}.wfls-block.wfls-disabled .wfls-dashboard-item-content .wfls-block-subtitle{color:#8ea6be}.wfls-section-title{margin-bottom:1rem}.wfls-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}.wfls-status-detail p{margin:0 0 0.45rem 0}.wfls-status-detail .wfls-status-circular{margin-bottom:1rem}.wfls-status-detail .wfls-status-detail-title{font-weight:700 !important;font-size:1rem !important;line-height:1.3125 !important}.wfls-status-detail .wfls-status-detail-subtitle{font-size:.875rem !important;line-height:1.3125 !important;font-weight:normal !important;text-align:center}.wfls-status-detail .wfls-status-detail-link>a{font-weight:600 !important;font-size:0.85rem !important}.wfls-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}.wfls-block-navigation-option svg.wfls-block-navigation-option-icon{width:50px;min-width:50px;fill:#9f9fa0}.wfls-block-navigation-option:hover{cursor:pointer}.wfls-block-navigation-option:hover a{text-decoration:underline}.wfls-block-navigation-option:hover svg.wfls-block-navigation-option-icon{fill:#00709e}.wfls-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}.wfls-select-group .wfselect2-container{min-width:200px}@media (max-width: 767px){.wfls-select-group .wfselect2-container{max-width:100px}}.wfls-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}.wfls-select-group .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered{color:#2b2b2b;line-height:inherit}.wfls-select-group .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow{height:38px}.wfls-select-group .wfls-form-control{display:inline-block;width:auto;border-top-left-radius:0;border-bottom-left-radius:0;margin-left:0}.wfls-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}.wfls-flex-horizontal>*:first-child{-webkit-flex-grow:0 !important;flex-grow:0 !important}.wfls-flex-horizontal.wfls-flex-align-left{-webkit-align-items:flex-start !important;align-items:flex-start !important}.wfls-flex-horizontal.wfls-flex-align-right{-webkit-justify-content:flex-end !important;justify-content:flex-end !important}.wfls-flex-horizontal.wfls-flex-full-width{width:100%}.wfls-flex-horizontal.wfls-flex-full-width>*:last-child{-webkit-flex-grow:1 !important;flex-grow:1 !important}.wfls-flex-horizontal.wfls-flex-full-width.wfls-flex-grow-first>*:first-child{-webkit-flex-grow:1 !important;flex-grow:1 !important}.wfls-flex-horizontal.wfls-flex-full-width.wfls-flex-grow-first>*:last-child{-webkit-flex-grow:0 !important;flex-grow:0 !important}.wfls-flex-horizontal.wfls-flex-full-width.wfls-flex-grow-all>*:first-child,.wfls-flex-horizontal.wfls-flex-full-width.wfls-flex-grow-all>*{-webkit-flex-grow:1 !important;flex-grow:1 !important}.wfls-flex-horizontal>li{padding:0;margin:0}.wfls-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}.wfls-flex-vertical>*:first-child{-webkit-flex-grow:0 !important;flex-grow:0 !important}.wfls-flex-vertical.wfls-flex-align-left{-webkit-align-items:flex-start !important;align-items:flex-start !important}.wfls-flex-vertical.wfls-flex-align-right{-webkit-align-items:flex-end !important;align-items:flex-end !important}.wfls-flex-vertical.wfls-flex-full-width{-webkit-align-items:stretch !important;align-items:stretch !important}@media (max-width: 767px){.wfls-flex-vertical.wfls-flex-align-left-xs{-webkit-align-items:flex-start !important;align-items:flex-start !important}}@media (min-width: 768px) and (max-width: 991px){.wfls-flex-vertical.wfls-flex-align-left-sm{-webkit-align-items:flex-start !important;align-items:flex-start !important}}@media (min-width: 992px) and (max-width: 1199px){.wfls-flex-vertical.wfls-flex-align-left-md{-webkit-align-items:flex-start !important;align-items:flex-start !important}}@media (min-width: 1200px){.wfls-flex-vertical.wfls-flex-align-left-lg{-webkit-align-items:flex-start !important;align-items:flex-start !important}}.wfls-flex-vertical>li{padding:0;margin:0}@media (max-width: 767px){.wfls-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}.wfls-flex-vertical-xs>*:first-child{-webkit-flex-grow:0 !important;flex-grow:0 !important}.wfls-flex-vertical-xs.wfls-flex-align-left{-webkit-align-items:flex-start !important;align-items:flex-start !important}.wfls-flex-vertical-xs.wfls-flex-align-right{-webkit-align-items:flex-end !important;align-items:flex-end !important}.wfls-flex-vertical-xs.wfls-flex-full-width{-webkit-align-items:stretch !important;align-items:stretch !important}}ul.wfls-option,.wfls-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.wfls-option li,.wfls-form-field li{margin:0;padding:0}ul.wfls-option.wfls-option-no-spacing,.wfls-form-field.wfls-option-no-spacing{padding:0;margin:0}ul.wfls-option.wfls-option-toggled>*:last-child,ul.wfls-option.wfls-option-toggled-boolean-switch>*:last-child,ul.wfls-option.wfls-option-toggled-select>*:last-child,ul.wfls-option.wfls-option-select>*:last-child,ul.wfls-option.wfls-option-text>*:last-child,ul.wfls-option.wfls-option-textarea>*:last-child,ul.wfls-option.wfls-option-switch>*:last-child,ul.wfls-option.wfls-option-footer>*:last-child,.wfls-form-field.wfls-option-toggled>*:last-child,.wfls-form-field.wfls-option-toggled-boolean-switch>*:last-child,.wfls-form-field.wfls-option-toggled-select>*:last-child,.wfls-form-field.wfls-option-select>*:last-child,.wfls-form-field.wfls-option-text>*:last-child,.wfls-form-field.wfls-option-textarea>*:last-child,.wfls-form-field.wfls-option-switch>*:last-child,.wfls-form-field.wfls-option-footer>*:last-child{margin-right:1rem}@media (max-width: 768px){ul.wfls-option.wfls-option-footer,.wfls-form-field.wfls-option-footer{-webkit-flex-direction:column;flex-direction:column}}ul.wfls-option>.wfls-option-content,.wfls-form-field>.wfls-option-content{-webkit-flex-grow:1;flex-grow:1}ul.wfls-option>.wfls-option-content>ul,.wfls-form-field>.wfls-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.wfls-option>.wfls-option-content>ul>*:first-child,.wfls-form-field>.wfls-option-content>ul>*:first-child{-webkit-flex-grow:1;flex-grow:1}@media (min-width: 768px){ul.wfls-option>.wfls-option-content>ul,.wfls-form-field>.wfls-option-content>ul{-webkit-flex-direction:row;flex-direction:row;-webkit-align-items:center;align-items:center}}ul.wfls-option.wfls-option-toggled-segmented *,.wfls-form-field.wfls-option-toggled-segmented *{-webkit-flex-grow:0;flex-grow:0}ul.wfls-option.wfls-option-toggled-segmented *:first-child,.wfls-form-field.wfls-option-toggled-segmented *:first-child{-webkit-flex-grow:1;flex-grow:1}ul.wfls-option.wfls-option-toggled-segmented>*:last-child,.wfls-form-field.wfls-option-toggled-segmented>*:last-child{margin-left:1rem}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-title,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-title{font-size:.8rem}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments,.wfls-form-field.wfls-option-toggled-segmented .wfls-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.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label,.wfls-form-field.wfls-option-toggled-segmented .wfls-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.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.focus{color:#00709e;background-color:#e6e6e6;border-color:#00161f}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label:hover{color:#00709e;background-color:#e6e6e6;border-color:#004561}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label:active,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.active,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label:active,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.active,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle{color:#00709e;background-color:#e6e6e6;border-color:#004561}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label:active:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label:active:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label:active.focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.active:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.active:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.active.focus,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle:hover,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle:focus,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle.focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label:active:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label:active:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label:active.focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.active:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.active:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.active.focus,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle:hover,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle:focus,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle.focus{color:#00709e;background-color:#d4d4d4;border-color:#00161f}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label:active,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-active,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label:active,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-active,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-dropdown-toggle{background-image:none}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-disabled,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label[disabled],ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label[readonly],fieldset[disabled] ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-disabled,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label[disabled],.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label[readonly],fieldset[disabled] .wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label{color:#777;background-color:#fff;border-color:#e2e2e2;cursor:not-allowed;opacity:0.75}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-disabled:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-disabled:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-disabled.wfls-focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label[disabled]:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label[disabled]:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label[disabled].wfls-focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label[readonly]:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label[readonly]:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label[readonly].wfls-focus,fieldset[disabled] ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label:hover,fieldset[disabled] ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label:focus,fieldset[disabled] ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-disabled:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-disabled:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-disabled.wfls-focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label[disabled]:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label[disabled]:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label[disabled].wfls-focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label[readonly]:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label[readonly]:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label[readonly].wfls-focus,fieldset[disabled] .wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label:hover,fieldset[disabled] .wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label:focus,fieldset[disabled] .wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-focus{background-color:#fff;border-color:#00709e}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label .wfls-badge,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label .wfls-badge{color:#fff;background-color:#00709e}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-segment-first,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-segment-first{border-radius:4px 0 0 4px}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments label.wfls-segment-last,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments label.wfls-segment-last{border-radius:0 4px 4px 0}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio],.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]{position:absolute;left:-9999px}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label{color:#fff;background-color:#00709e;border-color:#005e85}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.focus{color:#fff;background-color:#004c6b;border-color:#000405}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:hover{color:#fff;background-color:#004c6b;border-color:#003347}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.active,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.active,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle{color:#fff;background-color:#004c6b;border-color:#003347}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active.focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.active:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.active:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.active.focus,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle:hover,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle:focus,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle.focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active.focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.active:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.active:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.active.focus,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle:hover,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle:focus,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle.focus{color:#fff;background-color:#003347;border-color:#000405}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-active,.wfls-open>ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:active,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-active,.wfls-open>.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-dropdown-toggle{background-image:none}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-disabled,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[disabled],ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[readonly],fieldset[disabled] ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-disabled,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[disabled],.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[readonly],fieldset[disabled] .wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label{color:#fff;background-color:#59a2c0;border-color:#5996b0;cursor:not-allowed;opacity:0.75}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-disabled:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-disabled:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-disabled.wfls-focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[disabled]:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[disabled]:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[disabled].wfls-focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[readonly]:hover,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[readonly]:focus,ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[readonly].wfls-focus,fieldset[disabled] ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:hover,fieldset[disabled] ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:focus,fieldset[disabled] ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-disabled:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-disabled:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-disabled.wfls-focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[disabled]:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[disabled]:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[disabled].wfls-focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[readonly]:hover,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[readonly]:focus,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label[readonly].wfls-focus,fieldset[disabled] .wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:hover,fieldset[disabled] .wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label:focus,fieldset[disabled] .wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label.wfls-focus{background-color:#00709e;border-color:#005e85}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label .wfls-badge,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:checked+label .wfls-badge{color:#00709e;background-color:#fff}ul.wfls-option.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:disabled+label,.wfls-form-field.wfls-option-toggled-segmented .wfls-option-segments [type=radio]:disabled+label{cursor:not-allowed;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);opacity:.65}ul.wfls-option.wfls-option-toggled-multiple,ul.wfls-option.wfls-option-2fa-roles,.wfls-form-field.wfls-option-toggled-multiple,.wfls-form-field.wfls-option-2fa-roles{-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:flex-start;align-items:flex-start}ul.wfls-option.wfls-option-toggled-multiple>.wfls-option-title,ul.wfls-option.wfls-option-2fa-roles>.wfls-option-title,.wfls-form-field.wfls-option-toggled-multiple>.wfls-option-title,.wfls-form-field.wfls-option-2fa-roles>.wfls-option-title{font-weight:600}ul.wfls-option.wfls-option-2fa-roles .wfls-option-content ul,.wfls-form-field.wfls-option-2fa-roles .wfls-option-content ul{flex-wrap:wrap}ul.wfls-option.wfls-option-2fa-roles .wfls-option-content ul li,.wfls-form-field.wfls-option-2fa-roles .wfls-option-content ul li{flex-grow:0;display:inline;margin:0 0.75rem 0.75rem 0}ul.wfls-option.wfls-option-2fa-roles .wfls-option-content ul li label,.wfls-form-field.wfls-option-2fa-roles .wfls-option-content ul li label{display:block;font-weight:bold}ul.wfls-option.wfls-option-2fa-roles .wfls-option-content ul li select,.wfls-form-field.wfls-option-2fa-roles .wfls-option-content ul li select{display:block}ul.wfls-option.wfls-option-2fa-roles .wfls-2fa-grace-period-container label,ul.wfls-option.wfls-option-2fa-roles .wfls-2fa-grace-period-container input,.wfls-form-field.wfls-option-2fa-roles .wfls-2fa-grace-period-container label,.wfls-form-field.wfls-option-2fa-roles .wfls-2fa-grace-period-container input{vertical-align:middle}ul.wfls-option.wfls-option-2fa-roles .wfls-2fa-grace-period-container label,.wfls-form-field.wfls-option-2fa-roles .wfls-2fa-grace-period-container label{margin-bottom:0}ul.wfls-option.wfls-option-2fa-roles .wfls-2fa-grace-period-container .wfls-primary-label,.wfls-form-field.wfls-option-2fa-roles .wfls-2fa-grace-period-container .wfls-primary-label{display:block;margin-bottom:0.25rem}ul.wfls-option.wfls-option-2fa-roles .wfls-2fa-grace-period-container #wfls-grace-period-zero-warning,.wfls-form-field.wfls-option-2fa-roles .wfls-2fa-grace-period-container #wfls-grace-period-zero-warning{margin-top:0.5rem}ul.wfls-option.wfls-option-2fa-roles .wfls-2fa-notification-action,.wfls-form-field.wfls-option-2fa-roles .wfls-2fa-notification-action{margin-top:0.5rem}ul.wfls-option.wfls-option-2fa-roles small,.wfls-form-field.wfls-option-2fa-roles small{margin-top:0.5rem;display:block}ul.wfls-option>.wfls-option-spacer,.wfls-form-field>.wfls-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.wfls-option>.wfls-option-spacer,.wfls-form-field>.wfls-option-spacer{width:20px;height:20px}}ul.wfls-option>.wfls-option-premium-lock,.wfls-form-field>.wfls-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.wfls-option>.wfls-option-premium-lock,.wfls-form-field>.wfls-option-premium-lock{margin:0 2rem 0 1rem;width:20px;height:20px}}ul.wfls-option>.wfls-option-checkbox,.wfls-form-field>.wfls-option-checkbox{-webkit-flex-grow:0;flex-grow:0;-webkit-flex-shrink:0;flex-shrink:0;margin:0 1rem 0 0}ul.wfls-option>.wfls-boolean-switch,.wfls-form-field>.wfls-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.wfls-option>.wfls-boolean-switch,.wfls-form-field>.wfls-boolean-switch{margin:0 1rem 0 1rem}}ul.wfls-option.wfls-option-no-spacing>.wfls-boolean-switch,.wfls-form-field.wfls-option-no-spacing>.wfls-boolean-switch{margin:0}ul.wfls-option>.wfls-option-radio-container,.wfls-form-field>.wfls-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.wfls-option>.wfls-option-radio-container,.wfls-form-field>.wfls-option-radio-container{margin:0 2rem 0 1rem}}ul.wfls-option>.wfls-option-radio-container [type=radio].wfls-option-radio+label:before,.wfls-form-field>.wfls-option-radio-container [type=radio].wfls-option-radio+label:before{margin:0}ul.wfls-option>li>.wfls-option-title,ul.wfls-option>.wfls-option-title,ul.wfls-option>.wfls-option-content>ul>.wfls-option-title,.wfls-form-field>li>.wfls-option-title,.wfls-form-field>.wfls-option-title,.wfls-form-field>.wfls-option-content>ul>.wfls-option-title{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.9rem;color:#2b2b2b;padding-right:0.5rem}ul.wfls-option>li>.wfls-option-title.wfls-option-title-top,ul.wfls-option>.wfls-option-title.wfls-option-title-top,ul.wfls-option>.wfls-option-content>ul>.wfls-option-title.wfls-option-title-top,.wfls-form-field>li>.wfls-option-title.wfls-option-title-top,.wfls-form-field>.wfls-option-title.wfls-option-title-top,.wfls-form-field>.wfls-option-content>ul>.wfls-option-title.wfls-option-title-top{-webkit-align-self:flex-start;align-self:flex-start}ul.wfls-option>li>.wfls-option-title.wfls-option-title-bottom,ul.wfls-option>.wfls-option-title.wfls-option-title-bottom,ul.wfls-option>.wfls-option-content>ul>.wfls-option-title.wfls-option-title-bottom,.wfls-form-field>li>.wfls-option-title.wfls-option-title-bottom,.wfls-form-field>.wfls-option-title.wfls-option-title-bottom,.wfls-form-field>.wfls-option-content>ul>.wfls-option-title.wfls-option-title-bottom{-webkit-align-self:flex-end;align-self:flex-end}ul.wfls-option .wfls-option-subtitle,.wfls-form-field .wfls-option-subtitle{padding-top:0.25rem;font-size:0.75rem}ul.wfls-option .wfls-flex-vertical .wfls-option-title,.wfls-form-field .wfls-flex-vertical .wfls-option-title{padding-bottom:0.75rem}ul.wfls-option.wfls-flex-vertical>.wfls-option-subtitle,.wfls-form-field.wfls-flex-vertical>.wfls-option-subtitle{padding-top:0.25rem !important;font-size:0.75rem !important}ul.wfls-option .wfls-option-checkboxes,ul.wfls-option .wfls-option-checkboxes>ul,.wfls-form-field .wfls-option-checkboxes,.wfls-form-field .wfls-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.wfls-option .wfls-option-checkboxes.wfls-option-checkboxes-wrap,ul.wfls-option .wfls-option-checkboxes>ul.wfls-option-checkboxes-wrap,.wfls-form-field .wfls-option-checkboxes.wfls-option-checkboxes-wrap,.wfls-form-field .wfls-option-checkboxes>ul.wfls-option-checkboxes-wrap{-webkit-flex-wrap:wrap;flex-wrap:wrap}ul.wfls-option .wfls-option-checkboxes,.wfls-form-field .wfls-option-checkboxes{margin-top:0.5rem}ul.wfls-option .wfls-option-checkboxes>ul,.wfls-form-field .wfls-option-checkboxes>ul{margin-top:0.5rem;margin-right:1rem}@media (min-width: 768px){ul.wfls-option .wfls-option-checkboxes>ul,.wfls-form-field .wfls-option-checkboxes>ul{margin-right:1.5rem}}ul.wfls-option .wfls-option-checkboxes>ul:last-of-type,.wfls-form-field .wfls-option-checkboxes>ul:last-of-type{margin-right:0}ul.wfls-option .wfls-option-checkboxes>ul>.wfls-option-checkbox,.wfls-form-field .wfls-option-checkboxes>ul>.wfls-option-checkbox{margin:0 1rem 0 0}ul.wfls-option li.wfls-option-text,ul.wfls-option li.wfls-option-textarea,ul.wfls-option td.wfls-option-text,.wfls-form-field li.wfls-option-text,.wfls-form-field li.wfls-option-textarea,.wfls-form-field td.wfls-option-text{padding-top:0.5rem}@media (min-width: 768px){ul.wfls-option li.wfls-option-text,ul.wfls-option li.wfls-option-textarea,ul.wfls-option td.wfls-option-text,.wfls-form-field li.wfls-option-text,.wfls-form-field li.wfls-option-textarea,.wfls-form-field td.wfls-option-text{-webkit-flex-grow:1;flex-grow:1;text-align:right;padding-left:1rem;padding-top:0}}ul.wfls-option li.wfls-option-text>input[type="text"],.wfls-form-field li.wfls-option-text>input[type="text"]{max-width:240px}@media (min-width: 768px){ul.wfls-option li.wfls-option-text>input[type="text"],.wfls-form-field li.wfls-option-text>input[type="text"]{max-width:280px}}@media (min-width: 992px){ul.wfls-option li.wfls-option-text>input[type="text"],.wfls-form-field li.wfls-option-text>input[type="text"]{max-width:340px}}ul.wfls-option li.wfls-option-text.wfls-option-full-width>input[type="text"],.wfls-form-field li.wfls-option-text.wfls-option-full-width>input[type="text"]{max-width:100%;width:100%}ul.wfls-option li.wfls-option-textarea,.wfls-form-field li.wfls-option-textarea{min-width:150px;max-width:240px}@media (min-width: 768px){ul.wfls-option li.wfls-option-textarea,.wfls-form-field li.wfls-option-textarea{min-width:200px;max-width:400px}}@media (min-width: 992px){ul.wfls-option li.wfls-option-textarea,.wfls-form-field li.wfls-option-textarea{min-width:250px;max-width:500px}}ul.wfls-option li.wfls-option-textarea>textarea,.wfls-form-field li.wfls-option-textarea>textarea{width:100%;height:80px;min-width:150px;max-width:240px}@media (min-width: 768px){ul.wfls-option li.wfls-option-textarea>textarea,.wfls-form-field li.wfls-option-textarea>textarea{min-width:200px;max-width:280px}}@media (min-width: 992px){ul.wfls-option li.wfls-option-textarea>textarea,.wfls-form-field li.wfls-option-textarea>textarea{min-width:250px;max-width:340px}}ul.wfls-option li.wfls-option-textarea>.wfls-flex-vertical>li>textarea,.wfls-form-field li.wfls-option-textarea>.wfls-flex-vertical>li>textarea{width:100%;height:80px;box-sizing:border-box}ul.wfls-option li.wfls-option-textarea>.wfls-flex-vertical>li.wfls-option-subtitle,.wfls-form-field li.wfls-option-textarea>.wfls-flex-vertical>li.wfls-option-subtitle{width:100%;text-align:left}ul.wfls-option li.wfls-option-switch,.wfls-form-field li.wfls-option-switch{-webkit-flex-grow:1;flex-grow:1}ul.wfls-option li.wfls-option-switch.wfls-right .wfls-switch,.wfls-form-field li.wfls-option-switch.wfls-right .wfls-switch{justify-content:flex-end !important}ul.wfls-option li.wfls-option-select,.wfls-form-field li.wfls-option-select{-webkit-flex-grow:1;flex-grow:1;text-align:right}ul.wfls-option li.wfls-option-select select,ul.wfls-option li.wfls-option-select select option,ul.wfls-option li.wfls-option-select .wfselect2-container--default,.wfls-form-field li.wfls-option-select select,.wfls-form-field li.wfls-option-select select option,.wfls-form-field li.wfls-option-select .wfselect2-container--default{font-size:0.7rem;font-weight:bold}@media (min-width: 768px){ul.wfls-option li.wfls-option-select select,ul.wfls-option li.wfls-option-select select option,ul.wfls-option li.wfls-option-select .wfselect2-container--default,.wfls-form-field li.wfls-option-select select,.wfls-form-field li.wfls-option-select select option,.wfls-form-field li.wfls-option-select .wfselect2-container--default{font-size:0.8rem}}@media (min-width: 992px){ul.wfls-option li.wfls-option-select select,ul.wfls-option li.wfls-option-select select option,ul.wfls-option li.wfls-option-select .wfselect2-container--default,.wfls-form-field li.wfls-option-select select,.wfls-form-field li.wfls-option-select select option,.wfls-form-field li.wfls-option-select .wfselect2-container--default{font-size:0.9rem}}ul.wfls-option li.wfls-option-select .wfls-option-select-option,ul.wfls-option li.wfls-option-select .wfselect2-container--default,ul.wfls-option li.wfls-option-select .wfselect2-container--default .wfselect2-selection--single,.wfls-form-field li.wfls-option-select .wfls-option-select-option,.wfls-form-field li.wfls-option-select .wfselect2-container--default,.wfls-form-field li.wfls-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.wfls-option li.wfls-option-select .wfls-option-select-option .wfselect2-selection__rendered,ul.wfls-option li.wfls-option-select .wfselect2-container--default .wfselect2-selection__rendered,ul.wfls-option li.wfls-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered,.wfls-form-field li.wfls-option-select .wfls-option-select-option .wfselect2-selection__rendered,.wfls-form-field li.wfls-option-select .wfselect2-container--default .wfselect2-selection__rendered,.wfls-form-field li.wfls-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__rendered{color:#333;line-height:40px}ul.wfls-option li.wfls-option-select .wfls-option-select-option .wfselect2-selection__arrow,ul.wfls-option li.wfls-option-select .wfselect2-container--default .wfselect2-selection__arrow,ul.wfls-option li.wfls-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow,.wfls-form-field li.wfls-option-select .wfls-option-select-option .wfselect2-selection__arrow,.wfls-form-field li.wfls-option-select .wfselect2-container--default .wfselect2-selection__arrow,.wfls-form-field li.wfls-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow{height:38px}ul.wfls-option li.wfls-option-select .wfls-option-select-option.wfselect2-container--disabled .wfselect2-selection__rendered,ul.wfls-option li.wfls-option-select .wfselect2-container--default.wfselect2-container--disabled .wfselect2-selection__rendered,ul.wfls-option li.wfls-option-select .wfselect2-container--default .wfselect2-selection--single.wfselect2-container--disabled .wfselect2-selection__rendered,.wfls-form-field li.wfls-option-select .wfls-option-select-option.wfselect2-container--disabled .wfselect2-selection__rendered,.wfls-form-field li.wfls-option-select .wfselect2-container--default.wfselect2-container--disabled .wfselect2-selection__rendered,.wfls-form-field li.wfls-option-select .wfselect2-container--default .wfselect2-selection--single.wfselect2-container--disabled .wfselect2-selection__rendered{color:#aaa}ul.wfls-option li.wfls-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow b,.wfls-form-field li.wfls-option-select .wfselect2-container--default .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:#333 transparent transparent}ul.wfls-option li.wfls-option-select .wfselect2-container--default.wfselect2-container--open .wfselect2-selection--single .wfselect2-selection__arrow b,.wfls-form-field li.wfls-option-select .wfselect2-container--default.wfselect2-container--open .wfselect2-selection--single .wfselect2-selection__arrow b{border-color:transparent transparent #333}ul.wfls-option.wfls-option-token select,.wfls-form-field.wfls-option-token select{width:240px}@media (min-width: 768px){ul.wfls-option.wfls-option-token select,.wfls-form-field.wfls-option-token select{width:280px}}@media (min-width: 992px){ul.wfls-option.wfls-option-token select,.wfls-form-field.wfls-option-token select{width:320px}}ul.wfls-option.wfls-option-token .wfselect2-container--default,ul.wfls-option.wfls-option-token .wfselect2-container--default .wfselect2-selection--multiple,.wfls-form-field.wfls-option-token .wfselect2-container--default,.wfls-form-field.wfls-option-token .wfselect2-container--default .wfselect2-selection--multiple{border-color:#e2e2e2}ul.wfls-option.wfls-option-token .wfselect2-container--default .wfselect2-selection__choice,ul.wfls-option.wfls-option-token .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-selection__choice,.wfls-form-field.wfls-option-token .wfselect2-container--default .wfselect2-selection__choice,.wfls-form-field.wfls-option-token .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-selection__choice{background-color:#fff;border-color:#e2e2e2;padding:0.5rem}ul.wfls-option.wfls-option-token .wfselect2-container--default .wfselect2-search__field,ul.wfls-option.wfls-option-token .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-search__field,.wfls-form-field.wfls-option-token .wfselect2-container--default .wfselect2-search__field,.wfls-form-field.wfls-option-token .wfselect2-container--default .wfselect2-selection--multiple .wfselect2-search__field{margin-right:5px;margin-top:5px;padding:0.5rem 0}#wfls-option-require-2fa{margin-top:1rem}#wfls-option-require-2fa>li>ul{margin-left:1rem}@media (min-width: 768px){#wfls-option-require-2fa>li>ul{margin-left:1.5rem}}#wfls-option-require-2fa>li>ul:first-of-type{margin-left:0}#wfls-option-require-2fa>li>ul>.wfls-option-checkbox{margin:0 1rem 0 0}.wfls-option-sub{padding-left:2rem !important;margin-left:30px !important}.wfls-select2-suppress-dropdown .wfselect2-results,.wfls-select2-suppress-dropdown .wfselect2-dropdown{display:none}.wfls-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){.wfls-options-controls{position:fixed}}.wfls-options-controls .wfls-block{margin:0}@media (min-width: 782px){.wfls-options-controls .wfls-block{margin:0.5rem 0}}.wfls-options-controls,.sticky-menu .wfls-options-controls{top:32px}.folded .wfls-options-controls{left:36px}@media only screen and (max-width: 960px){.auto-fold .wfls-options-controls{left:36px}}.rtl .wfls-options-controls{right:160px;left:0px}.rtl .folded .wfls-options-controls{right:36px}@media only screen and (max-width: 960px){.rtl .auto-fold .wfls-options-controls{right:36px}}@media screen and (max-width: 782px){.wfls-options-controls,.folded .wfls-options-controls,.auto-fold .wfls-options-controls,.rtl .wfls-options-controls,.rtl .folded .wfls-options-controls,.rtl .auto-fold .wfls-options-controls{left:-10px;right:0px}}.wfls-options-controls-spacer{height:45px}@media (min-width: 782px){.wfls-options-controls-spacer{height:75px}}.wfls-options-controls-spacer,.sticky-menu .wfls-options-controls-spacer{top:61px}.wordfence .wfselect2-container .wfselect2-selection--single{border:1px solid #dadada;font-weight:normal;font-size:0.8rem}#wfls-notices{margin-top:15px}#wfls-notices .wfls-admin-notice{margin-left:0px;margin-right:0px}.wfls-success-text,.wfls-notice-text{display:inline-block;vertical-align:middle;line-height:1.3;font-size:16px;font-weight:bold;font-style:italic}.wfls-notice{margin:12px 0;padding:8px;background-color:#ffffe0;border:1px solid #ffd975;border-width:1px 1px 1px 10px}.wfls-notice-text{color:#6d798c}.wfls-success{margin:12px 0;padding:8px;background-color:#ffffff;border:1px solid #16bc9b;border-width:1px 1px 1px 10px}.wfls-success-text{color:#11967a}.wfls-premium-callout{border:1px solid #dfdfdf;background-color:#ffffff;padding:16px;margin:20px 0 0;text-align:center}.wfls-premium-callout ul{margin:8px 0;padding:0 0 0 15px}.wfls-premium-callout ul li{list-style-type:disc;margin:0;padding:0}.wfls-premium-callout .center{text-align:center;margin:0}.wfls-premium-callout .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709e}table.wfls-table{background-color:transparent;border-collapse:collapse;border-spacing:0}table.wfls-table td,table.wfls-table th{padding:0}.wfls-table caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}.wfls-table th{text-align:left}.wfls-table{width:100%;max-width:100%;margin-bottom:20px}.wfls-table>thead>tr>th,.wfls-table>thead>tr>td,.wfls-table>tbody>tr>th,.wfls-table>tbody>tr>td,.wfls-table>tfoot>tr>th,.wfls-table>tfoot>tr>td{padding:8px;line-height:1.42857;vertical-align:top;border-top:1px solid #ddd}.wfls-table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.wfls-table>caption+thead>tr:first-child>th,.wfls-table>caption+thead>tr:first-child>td,.wfls-table>colgroup+thead>tr:first-child>th,.wfls-table>colgroup+thead>tr:first-child>td,.wfls-table>thead:first-child>tr:first-child>th,.wfls-table>thead:first-child>tr:first-child>td{border-top:0}.wfls-table>tbody+tbody{border-top:2px solid #ddd}.wfls-table .wfls-table{background-color:#fff}.wfls-table-header-separators>thead>tr>th{border-left:2px solid #ddd}.wfls-table-header-separators>thead>tr>th:first-child{border-left:0}.wfls-table-condensed>thead>tr>th,.wfls-table-condensed>thead>tr>td,.wfls-table-condensed>tbody>tr>th,.wfls-table-condensed>tbody>tr>td,.wfls-table-condensed>tfoot>tr>th,.wfls-table-condensed>tfoot>tr>td{padding:5px}.wfls-table-expanded>thead>tr>th,.wfls-table-expanded>thead>tr>td,.wfls-table-expanded>tbody>tr>th,.wfls-table-expanded>tbody>tr>td,.wfls-table-expanded>tfoot>tr>th,.wfls-table-expanded>tfoot>tr>td{padding:0.5rem 1rem}@media (min-width: 768px){.wfls-table-expanded>thead>tr>th,.wfls-table-expanded>thead>tr>td,.wfls-table-expanded>tbody>tr>th,.wfls-table-expanded>tbody>tr>td,.wfls-table-expanded>tfoot>tr>th,.wfls-table-expanded>tfoot>tr>td{padding:1rem 1.5rem}}.wfls-table-bordered{border:1px solid #ddd}.wfls-table-bordered>thead>tr>th,.wfls-table-bordered>thead>tr>td,.wfls-table-bordered>tbody>tr>th,.wfls-table-bordered>tbody>tr>td,.wfls-table-bordered>tfoot>tr>th,.wfls-table-bordered>tfoot>tr>td{border:1px solid #ddd}.wfls-table-bordered>thead>tr>th,.wfls-table-bordered>thead>tr>td{border-bottom-width:2px}.wfls-table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.wfls-table-hover>tbody>tr:hover{background-color:#f5f5f5}table.wfls-table col[class*="col-"]{position:static;float:none;display:table-column}table.wfls-table td[class*="col-"],table.wfls-table th[class*="col-"]{position:static;float:none;display:table-cell}.wfls-table>thead>tr>td.active,.wfls-table>thead>tr>th.active,.wfls-table>thead>tr.active>td,.wfls-table>thead>tr.active>th,.wfls-table>tbody>tr>td.active,.wfls-table>tbody>tr>th.active,.wfls-table>tbody>tr.active>td,.wfls-table>tbody>tr.active>th,.wfls-table>tfoot>tr>td.active,.wfls-table>tfoot>tr>th.active,.wfls-table>tfoot>tr.active>td,.wfls-table>tfoot>tr.active>th{background-color:#f5f5f5}.wfls-table-hover>tbody>tr>td.active:hover,.wfls-table-hover>tbody>tr>th.active:hover,.wfls-table-hover>tbody>tr.active:hover>td,.wfls-table-hover>tbody>tr:hover>.active,.wfls-table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.wfls-table>thead>tr>td.success,.wfls-table>thead>tr>th.success,.wfls-table>thead>tr.success>td,.wfls-table>thead>tr.success>th,.wfls-table>tbody>tr>td.success,.wfls-table>tbody>tr>th.success,.wfls-table>tbody>tr.success>td,.wfls-table>tbody>tr.success>th,.wfls-table>tfoot>tr>td.success,.wfls-table>tfoot>tr>th.success,.wfls-table>tfoot>tr.success>td,.wfls-table>tfoot>tr.success>th{background-color:#dff0d8}.wfls-table-hover>tbody>tr>td.success:hover,.wfls-table-hover>tbody>tr>th.success:hover,.wfls-table-hover>tbody>tr.success:hover>td,.wfls-table-hover>tbody>tr:hover>.success,.wfls-table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.wfls-table>thead>tr>td.info,.wfls-table>thead>tr>th.info,.wfls-table>thead>tr.info>td,.wfls-table>thead>tr.info>th,.wfls-table>tbody>tr>td.info,.wfls-table>tbody>tr>th.info,.wfls-table>tbody>tr.info>td,.wfls-table>tbody>tr.info>th,.wfls-table>tfoot>tr>td.info,.wfls-table>tfoot>tr>th.info,.wfls-table>tfoot>tr.info>td,.wfls-table>tfoot>tr.info>th{background-color:#d9edf7}.wfls-table-hover>tbody>tr>td.info:hover,.wfls-table-hover>tbody>tr>th.info:hover,.wfls-table-hover>tbody>tr.info:hover>td,.wfls-table-hover>tbody>tr:hover>.info,.wfls-table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.wfls-table>thead>tr>td.warning,.wfls-table>thead>tr>th.warning,.wfls-table>thead>tr.warning>td,.wfls-table>thead>tr.warning>th,.wfls-table>tbody>tr>td.warning,.wfls-table>tbody>tr>th.warning,.wfls-table>tbody>tr.warning>td,.wfls-table>tbody>tr.warning>th,.wfls-table>tfoot>tr>td.warning,.wfls-table>tfoot>tr>th.warning,.wfls-table>tfoot>tr.warning>td,.wfls-table>tfoot>tr.warning>th{background-color:#fcf8e3}.wfls-table-hover>tbody>tr>td.warning:hover,.wfls-table-hover>tbody>tr>th.warning:hover,.wfls-table-hover>tbody>tr.warning:hover>td,.wfls-table-hover>tbody>tr:hover>.warning,.wfls-table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.wfls-table>thead>tr>td.danger,.wfls-table>thead>tr>th.danger,.wfls-table>thead>tr.danger>td,.wfls-table>thead>tr.danger>th,.wfls-table>tbody>tr>td.danger,.wfls-table>tbody>tr>th.danger,.wfls-table>tbody>tr.danger>td,.wfls-table>tbody>tr.danger>th,.wfls-table>tfoot>tr>td.danger,.wfls-table>tfoot>tr>th.danger,.wfls-table>tfoot>tr.danger>td,.wfls-table>tfoot>tr.danger>th{background-color:#f2dede}.wfls-table-hover>tbody>tr>td.danger:hover,.wfls-table-hover>tbody>tr>th.danger:hover,.wfls-table-hover>tbody>tr.danger:hover>td,.wfls-table-hover>tbody>tr:hover>.danger,.wfls-table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.wfls-table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width: 767px){.wfls-table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.wfls-table-responsive>.wfls-table{margin-bottom:0}.wfls-table-responsive>.wfls-table>thead>tr>th,.wfls-table-responsive>.wfls-table>thead>tr>td,.wfls-table-responsive>.wfls-table>tbody>tr>th,.wfls-table-responsive>.wfls-table>tbody>tr>td,.wfls-table-responsive>.wfls-table>tfoot>tr>th,.wfls-table-responsive>.wfls-table>tfoot>tr>td{white-space:nowrap}.wfls-table-responsive>.wfls-table-bordered{border:0}.wfls-table-responsive>.wfls-table-bordered>thead>tr>th:first-child,.wfls-table-responsive>.wfls-table-bordered>thead>tr>td:first-child,.wfls-table-responsive>.wfls-table-bordered>tbody>tr>th:first-child,.wfls-table-responsive>.wfls-table-bordered>tbody>tr>td:first-child,.wfls-table-responsive>.wfls-table-bordered>tfoot>tr>th:first-child,.wfls-table-responsive>.wfls-table-bordered>tfoot>tr>td:first-child{border-left:0}.wfls-table-responsive>.wfls-table-bordered>thead>tr>th:last-child,.wfls-table-responsive>.wfls-table-bordered>thead>tr>td:last-child,.wfls-table-responsive>.wfls-table-bordered>tbody>tr>th:last-child,.wfls-table-responsive>.wfls-table-bordered>tbody>tr>td:last-child,.wfls-table-responsive>.wfls-table-bordered>tfoot>tr>th:last-child,.wfls-table-responsive>.wfls-table-bordered>tfoot>tr>td:last-child{border-right:0}.wfls-table-responsive>.wfls-table-bordered>tbody>tr:last-child>th,.wfls-table-responsive>.wfls-table-bordered>tbody>tr:last-child>td,.wfls-table-responsive>.wfls-table-bordered>tfoot>tr:last-child>th,.wfls-table-responsive>.wfls-table-bordered>tfoot>tr:last-child>td{border-bottom:0}}.wfls-sortable{position:relative;padding-right:2rem !important}.wfls-sortable .wfls-sorted-ascending,.wfls-sortable .wfls-sorted-descending{display:none;position:absolute;right:1rem;top:50%;transform:translateY(-50%)}.wfls-sortable.wfls-unsorted:hover .wfls-sorted-ascending{display:block}.wfls-sortable.wfls-unsorted,.wfls-sortable.wfls-sorted-ascending,.wfls-sortable.wfls-sorted-descending{cursor:pointer}.wfls-sortable.wfls-unsorted:hover,.wfls-sortable.wfls-sorted-ascending:hover,.wfls-sortable.wfls-sorted-descending:hover{background-color:#e0e0e0}.wfls-sortable.wfls-sorted-ascending,.wfls-sortable.wfls-sorted-descending{background-color:#e0e0e0}.wfls-sortable.wfls-sorted-ascending .wfls-sorted-ascending{display:block}.wfls-sortable.wfls-sorted-descending .wfls-sorted-descending{display:block}.wfls-nav{margin-bottom:0;padding-left:0;list-style:none}.wfls-nav:before,.wfls-nav:after{content:" ";display:table}.wfls-nav:after{clear:both}.wfls-nav>li{position:relative;display:block}.wfls-nav>li>a{position:relative;display:block;padding:8px 12px}.wfls-nav>li>a:hover,.wfls-nav>li>a:focus{text-decoration:none;background-color:#e2e2e2}.wfls-nav>li.wfls-disabled>a{color:#777}.wfls-nav>li.wfls-disabled>a:hover,.wfls-nav>li.wfls-disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.wfls-nav .wfls-open>a,.wfls-nav .wfls-open>a:hover,.wfls-nav .wfls-open>a:focus{background-color:#e2e2e2;border-color:#00709e}.wfls-nav>li>a>img{max-width:none}.wfls-nav-tabs{border-bottom:1px solid #d0d0d0}.wfls-nav-tabs>li{float:left;margin-bottom:-1px}.wfls-nav-tabs>li>a{margin-right:2px;line-height:1.42857;border:1px solid transparent;border-radius:4px 4px 0 0}.wfls-nav-tabs>li>a:hover{border-color:#e2e2e2 #e2e2e2 #d0d0d0}.wfls-nav-tabs>li.wfls-active>a,.wfls-nav-tabs>li.wfls-active>a:hover,.wfls-nav-tabs>li.wfls-active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.wfls-nav-pills>li{float:left}.wfls-nav-pills>li>a{border-radius:4px;text-decoration:none;position:relative;display:block;padding:8px 12px}.wfls-nav-pills>li>a:hover,.wfls-nav-pills>li>a:focus{text-decoration:none !important;background-color:#e2e2e2}.wfls-nav-pills>li+li{margin-left:2px}.wfls-nav-pills>li.wfls-active>a,.wfls-nav-pills>li.wfls-active>a:hover,.wfls-nav-pills>li.wfls-active>a:focus{color:#fff;background-color:#00709e}.wfls-nav-pills.wfls-nav-pills-bordered>li>a{border:1px solid #e2e2e2}.wfls-nav-pills.wfls-nav-pills-connected>li>a{border-radius:0;border-right-width:0px}.wfls-nav-pills.wfls-nav-pills-connected>li+li{margin-left:0}.wfls-nav-pills.wfls-nav-pills-connected>li.active+li>a{border-left-width:0px}.wfls-nav-pills.wfls-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}.wfls-nav-pills.wfls-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}.wfls-nav-stacked>li{float:none}.wfls-nav-stacked>li+li{margin-top:2px;margin-left:0}.wfls-nav-justified,.wfls-nav-tabs.wfls-nav-justified{width:100%}.wfls-nav-justified>li,.wfls-nav-tabs.wfls-nav-justified>li{float:none}.wfls-nav-justified>li>a,.wfls-nav-tabs.wfls-nav-justified>li>a{text-align:center;margin-bottom:5px}.wfls-nav-justified>.wfls-dropdown .wfls-dropdown-menu{top:auto;left:auto}@media (min-width: 768px){.wfls-nav-justified>li,.wfls-nav-tabs.wfls-nav-justified>li{display:table-cell;width:1%}.wfls-nav-justified>li>a,.wfls-nav-tabs.wfls-nav-justified>li>a{margin-bottom:0}}.wfls-nav-tabs-justified,.wfls-nav-tabs.wfls-nav-justified{border-bottom:0}.wfls-nav-tabs-justified>li>a,.wfls-nav-tabs.wfls-nav-justified>li>a{margin-right:0;border-radius:4px}.wfls-nav-tabs-justified>.wfls-active>a,.wfls-nav-tabs.wfls-nav-justified>.wfls-active>a,.wfls-nav-tabs-justified>.wfls-active>a:hover,.wfls-nav-tabs.wfls-nav-justified>.wfls-active>a:hover,.wfls-nav-tabs-justified>.wfls-active>a:focus,.wfls-nav-tabs.wfls-nav-justified>.wfls-active>a:focus{border:1px solid #ddd}@media (min-width: 768px){.wfls-nav-tabs-justified>li>a,.wfls-nav-tabs.wfls-nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.wfls-nav-tabs-justified>.wfls-active>a,.wfls-nav-tabs.wfls-nav-justified>.wfls-active>a,.wfls-nav-tabs-justified>.wfls-active>a:hover,.wfls-nav-tabs.wfls-nav-justified>.wfls-active>a:hover,.wfls-nav-tabs-justified>.wfls-active>a:focus,.wfls-nav-tabs.wfls-nav-justified>.wfls-active>a:focus{border-bottom-color:#fff}}.wfls-tab-content>.wfls-tab-pane{display:none}.wfls-tab-content>.wfls-active{display:block}.wfls-nav-tabs .wfls-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}.wfls-navbar-brand{float:left;padding:12px 8px;font-size:18px;line-height:20px;margin:10px 0 0 0}.wfls-navbar-brand:hover,.wfls-navbar-brand:focus{text-decoration:none}.wfls-navbar-brand>img{display:block}@media (min-width: 768px){.navbar>.container .wfls-navbar-brand,.navbar>.container-fluid .wfls-navbar-brand{margin-left:-8px}}.wfls-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}.wfls-dropup,.wfls-dropdown{position:relative}.wfls-dropdown-toggle:focus{outline:0}.wfls-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}.wfls-dropdown-menu .wfls-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.wfls-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}.wfls-dropdown-menu>li>a:hover,.wfls-dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.wfls-dropdown-menu>.wfls-active>a,.wfls-dropdown-menu>.wfls-active>a:hover,.wfls-dropdown-menu>.wfls-active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#00709e}.wfls-dropdown-menu>.wfls-disabled>a,.wfls-dropdown-menu>.wfls-disabled>a:hover,.wfls-dropdown-menu>.wfls-disabled>a:focus{color:#777}.wfls-dropdown-menu>.wfls-disabled>a:hover,.wfls-dropdown-menu>.wfls-disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.wfls-open>.wfls-dropdown-menu{display:block}.wfls-open>a{outline:0}.wfls-dropdown-menu-right{left:auto;right:0}.wfls-dropdown-menu-left{left:0;right:auto}.wfls-dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857;color:#777;white-space:nowrap}.wfls-dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.wfls-pull-right>.wfls-dropdown-menu{right:0;left:auto}.wfls-dropup .wfls-caret,.wfls-navbar-fixed-bottom .wfls-dropdown .wfls-caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.wfls-dropup .wfls-dropdown-menu,.wfls-navbar-fixed-bottom .wfls-dropdown .wfls-dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.wfls-navbar-right .wfls-dropdown-menu{right:0;left:auto}.wfls-navbar-right .wfls-dropdown-menu-left{left:0;right:auto}}.wfls-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}table.wfls-dataTable{width:auto;max-width:800px;clear:both;border-collapse:collapse;border-spacing:0}table.wfls-dataTable>thead th,table.wfls-dataTable>tfoot th{font-weight:bold}table.wfls-dataTable>thead th,table.wfls-dataTable>thead td{cursor:pointer;text-align:left;font-size:11px;border:1px solid #ccc;padding:8px 4px 5px 9px;text-transform:uppercase}table.wfls-dataTable>thead th:active,table.wfls-dataTable>thead td:active{outline:none}table.wfls-dataTable>tfoot th,table.wfls-dataTable>tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.wfls-dataTable>thead .sorting,table.wfls-dataTable>thead .sorting_asc,table.wfls-dataTable>thead .sorting_desc{cursor:pointer;*cursor:hand}table.wfls-dataTable>thead .sorting,table.wfls-dataTable>thead .sorting_asc,table.wfls-dataTable>thead .sorting_desc,table.wfls-dataTable>thead .sorting_asc_disabled,table.wfls-dataTable>thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.wfls-dataTable>thead .sorting{background-image:url(../img/sort_both.png)}table.wfls-dataTable>thead .sorting_asc{background-image:url(../img/sort_asc.png)}table.wfls-dataTable>thead .sorting_desc{background-image:url(../img/sort_desc.png)}table.wfls-dataTable>thead .sorting_asc_disabled{background-image:url(../img/sort_asc_disabled.png)}table.wfls-dataTable>thead .sorting_desc_disabled{background-image:url(../img/sort_desc_disabled.png)}table.wfls-dataTable>tbody>tr{background-color:#ffffff}table.wfls-dataTable>tbody>tr.selected{background-color:#B0BED9}table.wfls-dataTable>tbody>tr>th,table.wfls-dataTable>tbody>tr>td{padding:5px 8px}table.wfls-dataTable.row-border>tbody>tr>th,table.wfls-dataTable.row-border>tbody>tr>td,table.wfls-dataTable.display>tbody>tr>th,table.wfls-dataTable.display>tbody>tr>td{border:1px solid #cccccc}table.wfls-dataTable.row-border>tbody>tr:first-child>th,table.wfls-dataTable.row-border>tbody>tr:first-child>td,table.wfls-dataTable.display>tbody>tr:first-child>th,table.wfls-dataTable.display>tbody>tr:first-child>td{border-top:none}table.wfls-dataTable.cell-border>tbody>tr>th,table.wfls-dataTable.cell-border>tbody>tr>td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.wfls-dataTable.cell-border>tbody>tr>th:first-child,table.wfls-dataTable.cell-border>tbody>tr>td:first-child{border-left:1px solid #ddd}table.wfls-dataTable.cell-border>tbody>tr:first-child>th,table.wfls-dataTable.cell-border>tbody>tr:first-child>td{border-top:none}table.wfls-dataTable.stripe>tbody>tr.odd,table.wfls-dataTable.display>tbody>tr.odd{background-color:#f9f9f9}table.wfls-dataTable.stripe>tbody>tr.odd.selected,table.wfls-dataTable.display>tbody>tr.odd.selected{background-color:#acbad4}table.wfls-dataTable.hover>tbody>tr:hover,table.wfls-dataTable.display>tbody>tr:hover{background-color:#f6f6f6}table.wfls-dataTable.hover>tbody>tr:hover.selected,table.wfls-dataTable.display>tbody>tr:hover.selected{background-color:#aab7d1}table.wfls-dataTable.order-column>tbody>tr>.sorting_1,table.wfls-dataTable.order-column>tbody>tr>.sorting_2,table.wfls-dataTable.order-column>tbody>tr>.sorting_3,table.wfls-dataTable.display tbody>tr>.sorting_1,table.wfls-dataTable.display>tbody>tr>.sorting_2,table.wfls-dataTable.display>tbody>tr>.sorting_3{background-color:#fafafa}table.wfls-dataTable.order-column>tbody>tr.selected>.sorting_1,table.wfls-dataTable.order-column>tbody>tr.selected>.sorting_2,table.wfls-dataTable.order-column>tbody>tr.selected>.sorting_3,table.wfls-dataTable.display>tbody>tr.selected>.sorting_1,table.wfls-dataTable.display>tbody>tr.selected>.sorting_2,table.wfls-dataTable.display>tbody>tr.selected>.sorting_3{background-color:#acbad5}table.wfls-dataTable.display>tbody>tr.odd>.sorting_1,table.wfls-dataTable.order-column.stripe>tbody>tr.odd>.sorting_1{background-color:#f1f1f1}table.wfls-dataTable.display>tbody>tr.odd>.sorting_2,table.wfls-dataTable.order-column.stripe>tbody>tr.odd>.sorting_2{background-color:#f3f3f3}table.wfls-dataTable.display>tbody>tr.odd>.sorting_3,table.wfls-dataTable.order-column.stripe>tbody>tr.odd>.sorting_3{background-color:whitesmoke}table.wfls-dataTable.display>tbody>tr.odd.selected>.sorting_1,table.wfls-dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.wfls-dataTable.display>tbody>tr.odd.selected>.sorting_2,table.wfls-dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.wfls-dataTable.display>tbody>tr.odd.selected>.sorting_3,table.wfls-dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.wfls-dataTable.display>tbody>tr.even>.sorting_1,table.wfls-dataTable.order-column.stripe>tbody>tr.even>.sorting_1{background-color:#fafafa}table.wfls-dataTable.display>tbody>tr.even>.sorting_2,table.wfls-dataTable.order-column.stripe>tbody>tr.even>.sorting_2{background-color:#fcfcfc}table.wfls-dataTable.display>tbody>tr.even>.sorting_3,table.wfls-dataTable.order-column.stripe>tbody>tr.even>.sorting_3{background-color:#fefefe}table.wfls-dataTable.display>tbody>tr.even.selected>.sorting_1,table.wfls-dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_1{background-color:#acbad5}table.wfls-dataTable.display>tbody>tr.even.selected>.sorting_2,table.wfls-dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_2{background-color:#aebcd6}table.wfls-dataTable.display>tbody>tr.even.selected>.sorting_3,table.wfls-dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_3{background-color:#afbdd8}table.wfls-dataTable.display>tbody>tr:hover>.sorting_1,table.wfls-dataTable.order-column.hover>tbody>tr:hover>.sorting_1{background-color:#eaeaea}table.wfls-dataTable.display>tbody>tr:hover>.sorting_2,table.wfls-dataTable.order-column.hover>tbody>tr:hover>.sorting_2{background-color:#ececec}table.wfls-dataTable.display>tbody>tr:hover>.sorting_3,table.wfls-dataTable.order-column.hover>tbody>tr:hover>.sorting_3{background-color:#efefef}table.wfls-dataTable.display>tbody>tr:hover.selected>.sorting_1,table.wfls-dataTable.order-column.hover>tbody>tr:hover.selected>.sorting_1{background-color:#a2aec7}table.wfls-dataTable.display>tbody>tr:hover.selected>.sorting_2,table.wfls-dataTable.order-column.hover>tbody>tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.wfls-dataTable.display>tbody>tr:hover.selected>.sorting_3,table.wfls-dataTable.order-column.hover>tbody>tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.wfls-dataTable.no-footer{border-bottom:1px solid #111}table.wfls-dataTable.nowrap th,table.wfls-dataTable.nowrap td{white-space:nowrap}table.wfls-dataTable.compact thead th,table.wfls-dataTable.compact thead td{padding:4px 17px 4px 4px}table.wfls-dataTable.compact tfoot th,table.wfls-dataTable.compact tfoot td{padding:4px}table.wfls-dataTable.compact>tbody>tr>th,table.wfls-dataTable.compact>tbody>tr>td{padding:4px}table.wfls-dataTable th.dt-left,table.wfls-dataTable td.dt-left{text-align:left}table.wfls-dataTable th.dt-center,table.wfls-dataTable td.dt-center,table.wfls-dataTable td.dataTables_empty{text-align:center}table.wfls-dataTable th.dt-right,table.wfls-dataTable td.dt-right{text-align:right}table.wfls-dataTable th.dt-justify,table.wfls-dataTable td.dt-justify{text-align:justify}table.wfls-dataTable th.dt-nowrap,table.wfls-dataTable td.dt-nowrap{white-space:nowrap}table.wfls-dataTable thead th.dt-head-left,table.wfls-dataTable thead td.dt-head-left,table.wfls-dataTable tfoot th.dt-head-left,table.wfls-dataTable tfoot td.dt-head-left{text-align:left}table.wfls-dataTable thead th.dt-head-center,table.wfls-dataTable thead td.dt-head-center,table.wfls-dataTable tfoot th.dt-head-center,table.wfls-dataTable tfoot td.dt-head-center{text-align:center}table.wfls-dataTable thead th.dt-head-right,table.wfls-dataTable thead td.dt-head-right,table.wfls-dataTable tfoot th.dt-head-right,table.wfls-dataTable tfoot td.dt-head-right{text-align:right}table.wfls-dataTable thead th.dt-head-justify,table.wfls-dataTable thead td.dt-head-justify,table.wfls-dataTable tfoot th.dt-head-justify,table.wfls-dataTable tfoot td.dt-head-justify{text-align:justify}table.wfls-dataTable thead th.dt-head-nowrap,table.wfls-dataTable thead td.dt-head-nowrap,table.wfls-dataTable tfoot th.dt-head-nowrap,table.wfls-dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.wfls-dataTable>tbody>tr>th.dt-body-left,table.wfls-dataTable>tbody>tr>td.dt-body-left{text-align:left}table.wfls-dataTable>tbody>tr>th.dt-body-center,table.wfls-dataTable>tbody>tr>td.dt-body-center{text-align:center}table.wfls-dataTable>tbody>tr>th.dt-body-right,table.wfls-dataTable>tbody>tr>td.dt-body-right{text-align:right}table.wfls-dataTable>tbody>tr>th.dt-body-justify,table.wfls-dataTable>tbody>tr>td.dt-body-justify{text-align:justify}table.wfls-dataTable>tbody>tr>th.dt-body-nowrap,table.wfls-dataTable>tbody>tr>td.dt-body-nowrap{white-space:nowrap}table.wfls-dataTable table.dataTable,table.wfls-dataTable th,table.wfls-dataTable td{-webkit-box-sizing:content-box;box-sizing:content-box}.wfls-dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.wfls-dataTables_wrapper .dataTables_length{float:left}.wfls-dataTables_wrapper .dataTables_filter{float:right;text-align:right}.wfls-dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.wfls-dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.wfls-dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.wfls-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}.wfls-dataTables_wrapper .dataTables_paginate .paginate_button.current,.wfls-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%)}.wfls-dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.wfls-dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.wfls-dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.wfls-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%)}.wfls-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}.wfls-dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.wfls-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%)}.wfls-dataTables_wrapper .dataTables_length,.wfls-dataTables_wrapper .dataTables_filter,.wfls-dataTables_wrapper .dataTables_info,.wfls-dataTables_wrapper .dataTables_processing,.wfls-dataTables_wrapper .dataTables_paginate{color:#333}.wfls-dataTables_wrapper .dataTables_scroll{clear:both}.wfls-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.wfls-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th,.wfls-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td{vertical-align:middle}.wfls-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.wfls-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.wfls-dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.wfls-dataTables_wrapper.no-footer div.dataTables_scrollHead table,.wfls-dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.wfls-dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.wfls-dataTables_wrapper .dataTables_info,.wfls-dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.wfls-dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.wfls-dataTables_wrapper .dataTables_length,.wfls-dataTables_wrapper .dataTables_filter{float:none;text-align:center}.wfls-dataTables_wrapper .dataTables_filter{margin-top:0.5em}}.wfls-alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.wfls-alert h4{margin-top:0;color:inherit}.wfls-alert .wfls-alert-link{font-weight:bold}.wfls-alert>p,.wfls-alert>ul{margin-bottom:0}.wfls-alert>p+p{margin-top:5px}.wfls-alert-dismissable,.wfls-alert-dismissible{padding-right:35px}.wfls-alert-dismissable .close,.wfls-alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.wfls-alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.wfls-alert-success hr{border-top-color:#c9e2b3}.wfls-alert-success .alert-link{color:#2b542c}.wfls-alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.wfls-alert-info hr{border-top-color:#a6e1ec}.wfls-alert-info .alert-link{color:#245269}.wfls-alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.wfls-alert-warning hr{border-top-color:#f7e1b5}.wfls-alert-warning .alert-link{color:#66512c}.wfls-alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.wfls-alert-danger hr{border-top-color:#e4b9c0}.wfls-alert-danger .alert-link{color:#843534}#wfls-onboarding-standalone-modal{margin-bottom:1rem}#wfls-onboarding-standalone-modal #wfls-onboarding-standalone-modal-header{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;background-color:#00709e;color:#ffffff;padding:1rem 2rem}#wfls-onboarding-standalone-modal #wfls-onboarding-standalone-modal-header #wfls-onboarding-standalone-modal-dismiss{font-size:1.35rem;color:#ffffff;text-decoration:none}#wfls-onboarding-standalone-modal #wfls-onboarding-standalone-modal-header