From b4212f73cbda51f59ea97506bb638bd9b2242401 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Thu, 18 Jun 2020 16:44:03 +0200 Subject: [PATCH] Proxy: wireframe for https://github.com/opnsense/core/issues/4174 o cleanup default (English) error templates, rename to .html for easier editting. move css to include, which should be imported inline using our scripts. o add frontend code o extend model with template option. --- .../OPNsense/Proxy/Api/TemplateController.php | 93 ++++++++ .../controllers/OPNsense/Proxy/forms/main.xml | 10 + .../mvc/app/models/OPNsense/Proxy/Proxy.xml | 16 ++ .../mvc/app/views/OPNsense/Proxy/index.volt | 138 +++++++++++ .../ERR_ACCESS_DENIED.html | 35 +++ .../ERR_ACL_TIME_QUOTA_EXCEEDED.html | 36 +++ .../ERR_AGENT_CONFIGURE.html | 50 ++++ .../template_error_pages/ERR_AGENT_WPAD.html | 50 ++++ .../ERR_CACHE_ACCESS_DENIED.html | 36 +++ .../ERR_CACHE_MGR_ACCESS_DENIED.html | 36 +++ .../ERR_CANNOT_FORWARD.html | 43 ++++ .../ERR_CONFLICT_HOST.html | 41 ++++ .../ERR_CONNECT_FAIL.html | 38 +++ .../template_error_pages/ERR_DIR_LISTING.html | 39 +++ .../template_error_pages/ERR_DNS_FAIL.html | 40 ++++ .../proxy/template_error_pages/ERR_ESI.html | 40 ++++ .../ERR_FORWARDING_DENIED.html | 36 +++ .../ERR_FTP_DISABLED.html | 36 +++ .../template_error_pages/ERR_FTP_FAILURE.html | 40 ++++ .../ERR_FTP_FORBIDDEN.html | 40 ++++ .../ERR_FTP_NOT_FOUND.html | 42 ++++ .../ERR_FTP_PUT_CREATED.html | 24 ++ .../ERR_FTP_PUT_ERROR.html | 41 ++++ .../ERR_FTP_PUT_MODIFIED.html | 24 ++ .../ERR_FTP_UNAVAILABLE.html | 41 ++++ .../ERR_GATEWAY_FAILURE.html | 37 +++ .../ERR_ICAP_FAILURE.html | 42 ++++ .../template_error_pages/ERR_INVALID_REQ.html | 50 ++++ .../ERR_INVALID_RESP.html | 37 +++ .../template_error_pages/ERR_INVALID_URL.html | 43 ++++ .../ERR_LIFETIME_EXP.html | 35 +++ .../template_error_pages/ERR_NO_RELAY.html | 35 +++ .../ERR_ONLY_IF_CACHED_MISS.html | 35 +++ .../ERR_PRECONDITION_FAILED.html | 37 +++ .../ERR_PROTOCOL_UNKNOWN.html | 35 +++ .../template_error_pages/ERR_READ_ERROR.html | 37 +++ .../ERR_READ_TIMEOUT.html | 37 +++ .../ERR_SECURE_CONNECT_FAIL.html | 43 ++++ .../ERR_SHUTTING_DOWN.html | 31 +++ .../ERR_SOCKET_FAILURE.html | 37 +++ .../template_error_pages/ERR_TOO_BIG.html | 37 +++ .../ERR_UNSUP_HTTPVERSION.html | 35 +++ .../template_error_pages/ERR_UNSUP_REQ.html | 35 +++ .../template_error_pages/ERR_URN_RESOLVE.html | 35 +++ .../template_error_pages/ERR_WRITE_ERROR.html | 37 +++ .../ERR_ZERO_SIZE_OBJECT.html | 35 +++ .../template_error_pages/error-details.txt | 223 ++++++++++++++++++ .../proxy/template_error_pages/errorpage.css | 105 +++++++++ 48 files changed, 2178 insertions(+) create mode 100644 src/opnsense/mvc/app/controllers/OPNsense/Proxy/Api/TemplateController.php create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_ACCESS_DENIED.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_ACL_TIME_QUOTA_EXCEEDED.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_AGENT_CONFIGURE.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_AGENT_WPAD.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_CACHE_ACCESS_DENIED.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_CACHE_MGR_ACCESS_DENIED.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_CANNOT_FORWARD.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_CONFLICT_HOST.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_CONNECT_FAIL.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_DIR_LISTING.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_DNS_FAIL.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_ESI.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_FORWARDING_DENIED.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_DISABLED.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_FAILURE.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_FORBIDDEN.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_NOT_FOUND.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_PUT_CREATED.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_PUT_ERROR.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_PUT_MODIFIED.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_UNAVAILABLE.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_GATEWAY_FAILURE.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_ICAP_FAILURE.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_INVALID_REQ.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_INVALID_RESP.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_INVALID_URL.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_LIFETIME_EXP.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_NO_RELAY.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_ONLY_IF_CACHED_MISS.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_PRECONDITION_FAILED.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_PROTOCOL_UNKNOWN.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_READ_ERROR.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_READ_TIMEOUT.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_SECURE_CONNECT_FAIL.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_SHUTTING_DOWN.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_SOCKET_FAILURE.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_TOO_BIG.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_UNSUP_HTTPVERSION.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_UNSUP_REQ.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_URN_RESOLVE.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_WRITE_ERROR.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/ERR_ZERO_SIZE_OBJECT.html create mode 100644 src/opnsense/scripts/proxy/template_error_pages/error-details.txt create mode 100644 src/opnsense/scripts/proxy/template_error_pages/errorpage.css diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Proxy/Api/TemplateController.php b/src/opnsense/mvc/app/controllers/OPNsense/Proxy/Api/TemplateController.php new file mode 100644 index 000000000..7143d385f --- /dev/null +++ b/src/opnsense/mvc/app/controllers/OPNsense/Proxy/Api/TemplateController.php @@ -0,0 +1,93 @@ +request->isPost() && $this->request->hasPost("content")) { + $this->sessionClose(); + $mdl = $this->getModel(); + $mdl->error_pages->template = $this->request->getPost("content", "striptags"); + $result = $this->validate(); + if (empty($result['validations'])) { + // save config if validated correctly + $this->save(); + $result = array("result" => "saved"); + } else { + $result["result"] = "failed"; + } + return $result; + } else { + return array("result" => "failed"); + } + } + + /** + * reset error_pages template + */ + public function resetAction() + { + if ($this->request->isPost()) { + $mdl = $this->getModel(); + $mdl->error_pages->template = null; + $this->save(); + return array("result" => "saved"); + } + return array("result" => "failed"); + } + + /** + * retrieve error pages template + */ + public function getAction() + { + $mdl = $this->getModel(); + return [ + 'content' => (string)$mdl->error_pages->template + ]; + } +} diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Proxy/forms/main.xml b/src/opnsense/mvc/app/controllers/OPNsense/Proxy/forms/main.xml index 161954f16..ffe073eaf 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Proxy/forms/main.xml +++ b/src/opnsense/mvc/app/controllers/OPNsense/Proxy/forms/main.xml @@ -7,6 +7,16 @@ checkbox Enable or disable the proxy service. + + proxy.general.error_pages + + dropdown + + The proxy error pages can be altered, default layout uses OPNsense content, when Squid is selected + the content for the selected language will be used (standard squid layout), Custom offers the possibility + to upload your own theme content. + + proxy.general.icpPort diff --git a/src/opnsense/mvc/app/models/OPNsense/Proxy/Proxy.xml b/src/opnsense/mvc/app/models/OPNsense/Proxy/Proxy.xml index e5f9c6de2..21e325929 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Proxy/Proxy.xml +++ b/src/opnsense/mvc/app/models/OPNsense/Proxy/Proxy.xml @@ -10,6 +10,15 @@ 0 Y + + N + opnsense + Squid + + OPNsense + Custom + + 1 65535 @@ -735,5 +744,12 @@ + + + diff --git a/src/opnsense/mvc/app/views/OPNsense/Proxy/index.volt b/src/opnsense/mvc/app/views/OPNsense/Proxy/index.volt index 08b454946..f94fb887c 100644 --- a/src/opnsense/mvc/app/views/OPNsense/Proxy/index.volt +++ b/src/opnsense/mvc/app/views/OPNsense/Proxy/index.volt @@ -30,6 +30,15 @@ var data_get_map = {'frm_proxy':"/api/proxy/settings/get"}; + // show/hide error pages tab when applicable + $("#proxy\\.general\\.error_pages").change(function(e){ + if ($(this).val() == 'custom') { + $("#subtab_error_pages").show(); + } else { + $("#subtab_error_pages").hide(); + } + }); + // load initial data mapDataToFormUI(data_get_map).done(function(){ formatTokenizersUI(); @@ -249,6 +258,84 @@ }); + /** + * Error page template actions + */ + $("#error_pages_content_filename").click(function(evt) { + $("#error_pages_content_progress").addClass("fa fa-spinner fa-pulse"); + $("#error_pages_content_icon").hide(); + this.value = null; + }); + $("#error_pages_content_filename").change(function(evt) { + if (evt.target.files[0]) { + var reader = new FileReader(); + reader.onload = function(readerEvt) { + $("#error_pages_content_name").val(evt.target.files[0].name); + $("#error_pages_content").val(btoa(readerEvt.target.result)); + $("#error_pages_content_progress").removeClass("fa fa-spinner fa-pulse"); + $("#error_pages_content_icon").show(); + }; + reader.readAsBinaryString(evt.target.files[0]); + } else { + $("#error_pages_content_progress").removeClass("fa fa-spinner fa-pulse"); + $("#error_pages_content_icon").show(); + } + }); + $("#error_pages_download").click(function(){ + ajaxGet("/api/proxy/template/get", {}, function(data, status){ + if (data.content) { + let a_tag = $('').attr('href','data:application/zip;charset=utf8,' + encodeURIComponent(data.content)) + .attr('download','proxy_template.zip').appendTo('body'); + + a_tag.ready(function() { + if ( window.navigator.msSaveOrOpenBlob && window.Blob ) { + var blob = new Blob( [ output_data ], { type: "application/zip" } ); + navigator.msSaveOrOpenBlob( blob, 'proxy_template.zip' ); + } else { + a_tag.get(0).click(); + } + }); + } + }); + }); + $("#error_pages_upload").click(function(){ + if ($("#error_pages_content").val().length > 2) { + ajaxCall("/api/proxy/template/set", {'content': $("#error_pages_content").val()}, function(data,status) { + if (data['error'] !== undefined) { + // error saving + BootstrapDialog.show({ + type: BootstrapDialog.TYPE_WARNING, + title: "{{ lang._('Error uploading template') }}", + message: data['error'], + draggable: true + }); + } else { + $("#error_pages_content_name").val("{{ lang._('saved') }}"); + } + }); + } + }); + $("#error_pages_reset").click(function(){ + BootstrapDialog.show({ + title: "{{ lang._('Reset custom template') }}", + message: "{{ lang._('Are you sure you want to flush the configured template (back to defaults)?') }}", + type: BootstrapDialog.TYPE_INFO, + draggable: true, + buttons: [{ + label: '', + action: function(sender){ + ajaxCall("/api/proxy/template/reset", {}); + sender.close(); + } + },{ + label: '', + action: function(sender){ + sender.close(); + } + }] + }); + }); + // update history on tab state and implement navigation if(window.location.hash != "") { $('a[href="' + window.location.hash + '"]').click() @@ -283,6 +370,7 @@
  • {{ lang._('Remote Access Control Lists') }}
  • {{ lang._('Support') }}
  • +
  • @@ -461,6 +549,56 @@
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    {{ lang._('Action')}}
    + +
    + +
    + + + +
    +
    + +
    + {{ lang._('Download and upload custom error pages, if no (new) files are provided our defaults are used.')}} +
    +
    {{ partial("layout_partials/base_dialog",['fields':formDialogEditBlacklist,'id':'DialogEditBlacklist','label':lang._('Edit blacklist')])}} diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_ACCESS_DENIED.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_ACCESS_DENIED.html new file mode 100644 index 000000000..7bf62a1a0 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_ACCESS_DENIED.html @@ -0,0 +1,35 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Access Denied.

    +
    + +

    Access control configuration prevents your request from being allowed at this time. Please contact your service provider if you feel this is incorrect.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_ACL_TIME_QUOTA_EXCEEDED.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_ACL_TIME_QUOTA_EXCEEDED.html new file mode 100644 index 000000000..20b66ab7b --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_ACL_TIME_QUOTA_EXCEEDED.html @@ -0,0 +1,36 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Time Quota Exceeded.

    +
    + +

    This proxy limits your time online with a quota. Your time budget is now empty but will be refilled when the configured time period starts again.

    +

    These limits have been established by the Internet Service Provider who operates this cache. Please contact them directly if you feel this is an error.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_AGENT_CONFIGURE.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_AGENT_CONFIGURE.html new file mode 100644 index 000000000..7ca40f935 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_AGENT_CONFIGURE.html @@ -0,0 +1,50 @@ + + + + +Web Browser Configuration + + + + + +
    +

    ERROR

    +

    Web Browser Configuration

    +
    +
    + +
    +

    Your Web Browser configuration needs to be corrected to use this network.

    +
    + +

    How to find these settings in your browser:

    + +
    For Firefox browsers go to:
      +
    • Tools -> Options -> Advanced -> Network -> Connection Settings
    • +
    • In the HTTP proxy box type the proxy name %h and port %b.
    • +
    +
    + +
    For Internet Explorer browsers go to:
      +
    • Tools -> Internet Options -> Connection -> LAN Settings ->Proxy
    • +
    • In the HTTP proxy box type the proxy name %h and port %b.
    • +
    +
    + +
    For Opera browsers go to:
      +
    • Tools -> Preferences -> Advanced -> Network -> Proxy Servers
    • +
    • In the HTTP proxy box type the proxy name %h and port %b.
    • +
    +
    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_AGENT_WPAD.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_AGENT_WPAD.html new file mode 100644 index 000000000..a9b1f142c --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_AGENT_WPAD.html @@ -0,0 +1,50 @@ + + + + +Web Browser Configuration + + + + + +
    +

    ERROR

    +

    Web Browser Configuration

    +
    +
    + +
    +

    Your Web Browser configuration needs to be corrected to use this network.

    +
    + +

    How to find these settings in your browser:

    + +
    For Firefox browsers go to:
      +
    • Tools -> Options -> Advanced -> Network -> Connection Settings
    • +
    • Select Auto-detect proxy settings for this network
    • +
    +
    + +
    For Internet Explorer browsers go to:
      +
    • Tools -> Internet Options -> Connection -> LAN Settings ->Proxy
    • +
    • Select Automatically detect settings
    • +
    +
    + +
    For Opera browsers go to:
      +
    • Tools -> Preferences -> Advanced -> Network -> Proxy Servers
    • +
    • Select Use Automatic proxy configuration
    • +
    +
    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_CACHE_ACCESS_DENIED.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_CACHE_ACCESS_DENIED.html new file mode 100644 index 000000000..bad1df8fc --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_CACHE_ACCESS_DENIED.html @@ -0,0 +1,36 @@ + + + + +ERROR: Cache Access Denied + + + + + +
    +

    ERROR

    +

    Cache Access Denied.

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Cache Access Denied.

    +
    + +

    Sorry, you are not currently allowed to request %U from this cache until you have authenticated yourself.

    + +

    Please contact the cache administrator if you have difficulties authenticating yourself.

    + +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_CACHE_MGR_ACCESS_DENIED.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_CACHE_MGR_ACCESS_DENIED.html new file mode 100644 index 000000000..1113ce402 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_CACHE_MGR_ACCESS_DENIED.html @@ -0,0 +1,36 @@ + + + + +ERROR: Cache Manager Access Denied + + + + + +
    +

    ERROR

    +

    Cache Manager Access Denied.

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Cache Manager Access Denied.

    +
    + +

    Sorry, you are not currently allowed to request %U from this cache manager until you have authenticated yourself.

    + +

    Please contact the cache administrator if you have difficulties authenticating yourself or, if you are the administrator, read Squid documentation on cache manager interface and check cache log for more detailed error messages.

    + +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_CANNOT_FORWARD.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_CANNOT_FORWARD.html new file mode 100644 index 000000000..e7338ac0f --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_CANNOT_FORWARD.html @@ -0,0 +1,43 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Unable to forward this request at this time.

    +
    + +

    This request could not be forwarded to the origin server or to any parent caches.

    + +

    Some possible problems are:

    +
      +
    • An Internet connection needed to access this domains origin servers may be down.
    • +
    • All configured parent caches may be currently unreachable.
    • +
    • The administrator may not allow this cache to make direct connections to origin servers.
    • +
    + +

    Your cache administrator is %w.

    + +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_CONFLICT_HOST.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_CONFLICT_HOST.html new file mode 100644 index 000000000..0f3010c2d --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_CONFLICT_HOST.html @@ -0,0 +1,41 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +
    URI Host Conflict
    +
    + +

    This means the domain name you are trying to access apparently no longer exists on the machine you are requesting it from.

    + +

    Some possible problems are:

    +
      +
    • The domain may have moved very recently. Trying again will resolve that.
    • +
    • The website may require you to use a local country-based version. Using your ISP provided DNS server(s) should resolve that.
    • +
    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_CONNECT_FAIL.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_CONNECT_FAIL.html new file mode 100644 index 000000000..f51a8f364 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_CONNECT_FAIL.html @@ -0,0 +1,38 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Connection to %I failed.

    +
    + +

    The system returned: %E

    + +

    The remote host or network may be down. Please try the request again.

    + +

    Your cache administrator is %w.

    + +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_DIR_LISTING.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_DIR_LISTING.html new file mode 100644 index 000000000..9ad9b4e9c --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_DIR_LISTING.html @@ -0,0 +1,39 @@ + + + + +Directory: %U + + + + + +
    +

    Directory: %U/

    +
    +
    + +
    +

    Directory Content:

    + +
    +
    %z
    +
    + + + + + + + +%g + +
    Parent Directory (Root Directory)
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_DNS_FAIL.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_DNS_FAIL.html new file mode 100644 index 000000000..ca49951cb --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_DNS_FAIL.html @@ -0,0 +1,40 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Unable to determine IP address from host name %H

    +
    + +

    The DNS server returned:

    +
    +
    %z
    +
    + +

    This means that the cache was not able to resolve the hostname presented in the URL. Check if the address is correct.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_ESI.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_ESI.html new file mode 100644 index 000000000..a94081f2f --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_ESI.html @@ -0,0 +1,40 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    ESI Processing failed.

    +
    + +

    The ESI processor returned:

    +
    +
    %Z
    +
    + +

    This means that the surrogate was not able to process the ESI template. Please report this error to the webmaster.

    + +

    Your webmaster is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_FORWARDING_DENIED.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_FORWARDING_DENIED.html new file mode 100644 index 000000000..41648fcd7 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_FORWARDING_DENIED.html @@ -0,0 +1,36 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Forwarding Denied.

    +
    + +

    This cache will not forward your request because it is trying to enforce a sibling relationship. Perhaps the client at %i is a cache which has been misconfigured.

    + +

    Your cache administrator is %w.

    + +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_DISABLED.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_DISABLED.html new file mode 100644 index 000000000..e2f3abde5 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_DISABLED.html @@ -0,0 +1,36 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    FTP is Disabled

    +
    + +

    This cache does not support FTP.

    + +

    Your cache administrator is %w.

    + +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_FAILURE.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_FAILURE.html new file mode 100644 index 000000000..ce27616e2 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_FAILURE.html @@ -0,0 +1,40 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    An FTP protocol error occurred while trying to retrieve the URL: %U

    + +

    Squid sent the following FTP command:

    +
    +
    %f
    +
    + +

    The server responded with:

    +
    +
    %F
    +
    %g
    +
    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_FORBIDDEN.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_FORBIDDEN.html new file mode 100644 index 000000000..3a3a6527f --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_FORBIDDEN.html @@ -0,0 +1,40 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    An FTP authentication failure occurred while trying to retrieve the URL: %U

    + +

    Squid sent the following FTP command:

    +
    +
    %f
    +
    + +

    The server responded with:

    +
    +
    %F
    +
    %g
    +
    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_NOT_FOUND.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_NOT_FOUND.html new file mode 100644 index 000000000..30ff4828b --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_NOT_FOUND.html @@ -0,0 +1,42 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following URL could not be retrieved: %U

    + +

    Squid sent the following FTP command:

    +
    +
    %f
    +
    + +

    The server responded with:

    +
    +
    %F
    +
    %g
    +
    + +

    This might be caused by an FTP URL with an absolute path (which does not comply with RFC 1738). If this is the cause, then the file can be found at %B.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_PUT_CREATED.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_PUT_CREATED.html new file mode 100644 index 000000000..db8ce963c --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_PUT_CREATED.html @@ -0,0 +1,24 @@ + + + + +FTP PUT Successful. + + + + + +
    +

    Operation successful

    +

    File created

    +
    +
    + +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_PUT_ERROR.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_PUT_ERROR.html new file mode 100644 index 000000000..a624851ce --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_PUT_ERROR.html @@ -0,0 +1,41 @@ + + + + +ERROR: FTP upload failed + + + + + +
    +

    ERROR

    +

    FTP PUT upload failed

    +
    +
    + +
    +

    An FTP protocol error occurred while trying to retrieve the URL: %U

    + +

    Squid sent the following FTP command:

    +
    +
    %f
    +
    + +

    The server responded with:

    +
    +
    %F
    +
    + +

    This means that the FTP server may not have permission or space to store the file. Check the path, permissions, diskspace and try again.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_PUT_MODIFIED.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_PUT_MODIFIED.html new file mode 100644 index 000000000..5675f9ec4 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_PUT_MODIFIED.html @@ -0,0 +1,24 @@ + + + + +FTP PUT Successful. + + + + + +
    +

    Operation successful

    +

    File updated

    +
    +
    + +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_UNAVAILABLE.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_UNAVAILABLE.html new file mode 100644 index 000000000..0fd3491dc --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_FTP_UNAVAILABLE.html @@ -0,0 +1,41 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The FTP server was too busy to retrieve the URL: %U

    + +

    Squid sent the following FTP command:

    + +
    +
    %f
    +
    + +

    The server responded with:

    +
    +
    %F
    +
    %g
    +
    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_GATEWAY_FAILURE.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_GATEWAY_FAILURE.html new file mode 100644 index 000000000..ded970524 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_GATEWAY_FAILURE.html @@ -0,0 +1,37 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Gateway Proxy Failure

    +
    + +

    A non-recoverable internal failure or configuration problem prevents this request from being completed.

    + +

    This may be due to limits established by the Internet Service Provider who operates this cache. Please contact them directly for more information.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_ICAP_FAILURE.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_ICAP_FAILURE.html new file mode 100644 index 000000000..89a59a721 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_ICAP_FAILURE.html @@ -0,0 +1,42 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    ICAP protocol error.

    +
    + +

    The system returned: %E

    + +

    This means that some aspect of the ICAP communication failed.

    + +

    Some possible problems are:

    +
      +
    • The ICAP server is not reachable.

    • +
    • An Illegal response was received from the ICAP server.

    • +
    + +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_INVALID_REQ.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_INVALID_REQ.html new file mode 100644 index 000000000..9b1fc62d6 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_INVALID_REQ.html @@ -0,0 +1,50 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    Invalid Request error was encountered while trying to process the request:

    + +
    +
    %R
    +
    + +

    Some possible problems are:

    +
      +
    • Missing or unknown request method.

    • +
    • Missing URL.

    • +
    • Missing HTTP Identifier (HTTP/1.0).

    • +
    • Request is too large.

    • +
    • Content-Length missing for POST or PUT requests.

    • +
    • Illegal character in hostname; underscores are not allowed.

    • +
    • HTTP/1.1 Expect: feature is being asked from an HTTP/1.0 software.

    • +
    + +

    Your cache administrator is %w.

    +
    +
    + + + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_INVALID_RESP.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_INVALID_RESP.html new file mode 100644 index 000000000..239ceb961 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_INVALID_RESP.html @@ -0,0 +1,37 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    Invalid Response error was encountered while trying to process the request:

    + +
    +
    %R
    +
    + +

    The HTTP Response message received from the contacted server could not be understood or was otherwise malformed. Please contact the site operator.

    + +

    Your cache administrator may be able to provide you with more details about the exact nature of the problem if needed.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_INVALID_URL.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_INVALID_URL.html new file mode 100644 index 000000000..baec56aa0 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_INVALID_URL.html @@ -0,0 +1,43 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Invalid URL

    +
    + +

    Some aspect of the requested URL is incorrect.

    + +

    Some possible problems are:

    +
      +
    • Missing or incorrect access protocol (should be http:// or similar)

    • +
    • Missing hostname

    • +
    • Illegal double-escape in the URL-Path

    • +
    • Illegal character in hostname; underscores are not allowed.

    • +
    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_LIFETIME_EXP.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_LIFETIME_EXP.html new file mode 100644 index 000000000..c437e7f73 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_LIFETIME_EXP.html @@ -0,0 +1,35 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Connection Lifetime Expired

    +
    + +

    Squid has terminated the request because it has exceeded the maximum connection lifetime.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_NO_RELAY.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_NO_RELAY.html new file mode 100644 index 000000000..c3df4472d --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_NO_RELAY.html @@ -0,0 +1,35 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    No Wais Relay

    +
    + +

    There is no WAIS Relay host defined for this Cache! Yell at the administrator.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_ONLY_IF_CACHED_MISS.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_ONLY_IF_CACHED_MISS.html new file mode 100644 index 000000000..ce7deb354 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_ONLY_IF_CACHED_MISS.html @@ -0,0 +1,35 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Valid document was not found in the cache and only-if-cached directive was specified.

    +
    + +

    You have issued a request with a only-if-cached cache control directive. The document was not found in the cache, or it required revalidation prohibited by the only-if-cached directive.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_PRECONDITION_FAILED.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_PRECONDITION_FAILED.html new file mode 100644 index 000000000..1391a4c83 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_PRECONDITION_FAILED.html @@ -0,0 +1,37 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Precondition Failed.

    +
    + +

    This means:

    +
    +

    At least one precondition specified by the HTTP client in the request header has failed.

    +
    + +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_PROTOCOL_UNKNOWN.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_PROTOCOL_UNKNOWN.html new file mode 100644 index 000000000..876b0a706 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_PROTOCOL_UNKNOWN.html @@ -0,0 +1,35 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Unsupported Protocol

    +
    + +

    Squid does not support some access protocols. For example, the SSH protocol is currently not supported.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_READ_ERROR.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_READ_ERROR.html new file mode 100644 index 000000000..e7c51ab7a --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_READ_ERROR.html @@ -0,0 +1,37 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Read Error

    +
    + +

    The system returned: %E

    + +

    An error condition occurred while reading data from the network. Please retry your request.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_READ_TIMEOUT.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_READ_TIMEOUT.html new file mode 100644 index 000000000..42021ad66 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_READ_TIMEOUT.html @@ -0,0 +1,37 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Read Timeout

    +
    + +

    The system returned: %E

    + +

    A Timeout occurred while waiting to read data from the network. The network or server may be down or congested. Please retry your request.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_SECURE_CONNECT_FAIL.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_SECURE_CONNECT_FAIL.html new file mode 100644 index 000000000..3270fdf57 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_SECURE_CONNECT_FAIL.html @@ -0,0 +1,43 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Failed to establish a secure connection to %I

    +
    + +
    +

    The system returned:

    +
    +
    %E (TLS code: %x)
    +

    %D

    +
    +
    + +

    This proxy and the remote host failed to negotiate a mutually acceptable security settings for handling your request. It is possible that the remote host does not support secure connections, or the proxy is not satisfied with the host security credentials.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_SHUTTING_DOWN.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_SHUTTING_DOWN.html new file mode 100644 index 000000000..4ecfc82f0 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_SHUTTING_DOWN.html @@ -0,0 +1,31 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +

    This cache is in the process of shutting down and can not service your request at this time. Please retry your request again soon.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_SOCKET_FAILURE.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_SOCKET_FAILURE.html new file mode 100644 index 000000000..a58e7ffa6 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_SOCKET_FAILURE.html @@ -0,0 +1,37 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Socket Failure

    +
    + +

    The system returned: %E

    + +

    Squid is unable to create a TCP socket, presumably due to excessive load. Please retry your request.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_TOO_BIG.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_TOO_BIG.html new file mode 100644 index 000000000..67a59dfa8 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_TOO_BIG.html @@ -0,0 +1,37 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    The request or reply is too large.

    +
    + +

    If you are making a POST or PUT request, then the item you are trying to upload is too large.

    +

    If you are making a GET request, then the item you are trying to download is too large.

    +

    These limits have been established by the Internet Service Provider who operates this cache. Please contact them directly if you feel this is an error.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_UNSUP_HTTPVERSION.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_UNSUP_HTTPVERSION.html new file mode 100644 index 000000000..5dc037b28 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_UNSUP_HTTPVERSION.html @@ -0,0 +1,35 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    Unsupported HTTP version

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Unsupported HTTP version

    +
    + +

    This Squid does not accept the HTTP version you are attempting to use.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_UNSUP_REQ.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_UNSUP_REQ.html new file mode 100644 index 000000000..76a201a3a --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_UNSUP_REQ.html @@ -0,0 +1,35 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Unsupported Request Method and Protocol

    +
    + +

    Squid does not support all request methods for all access protocols. For example, you can not POST a Gopher request.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_URN_RESOLVE.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_URN_RESOLVE.html new file mode 100644 index 000000000..5be422d2f --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_URN_RESOLVE.html @@ -0,0 +1,35 @@ + + + + +ERROR: The requested URN could not be retrieved + + + + + +
    +

    ERROR

    +

    A URL for the requested URN could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URN: %U

    + +
    +

    Cannot Resolve URN

    +
    + +

    Hey, don't expect too much from URNs on %T :)

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_WRITE_ERROR.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_WRITE_ERROR.html new file mode 100644 index 000000000..bf2f2f72b --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_WRITE_ERROR.html @@ -0,0 +1,37 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Write Error

    +
    + +

    The system returned: %E

    + +

    An error condition occurred while writing to the network. Please retry your request.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/ERR_ZERO_SIZE_OBJECT.html b/src/opnsense/scripts/proxy/template_error_pages/ERR_ZERO_SIZE_OBJECT.html new file mode 100644 index 000000000..fc35937c2 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/ERR_ZERO_SIZE_OBJECT.html @@ -0,0 +1,35 @@ + + + + +ERROR: The requested URL could not be retrieved + + + + + +
    +

    ERROR

    +

    The requested URL could not be retrieved

    +
    +
    + +
    +

    The following error was encountered while trying to retrieve the URL: %U

    + +
    +

    Zero Sized Reply

    +
    + +

    Squid did not receive any data for this request.

    + +

    Your cache administrator is %w.

    +
    +
    + +
    + + diff --git a/src/opnsense/scripts/proxy/template_error_pages/error-details.txt b/src/opnsense/scripts/proxy/template_error_pages/error-details.txt new file mode 100644 index 000000000..36006fca4 --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/error-details.txt @@ -0,0 +1,223 @@ +name: SQUID_X509_V_ERR_INFINITE_VALIDATION +detail: "%ssl_error_descr: %ssl_subject" +descr: "Cert validation infinite loop detected" + +name: SQUID_ERR_SSL_HANDSHAKE +detail: "%ssl_error_descr: %ssl_lib_error" +descr: "Handshake with SSL server failed" + +name: SQUID_X509_V_ERR_DOMAIN_MISMATCH +detail: "%ssl_error_descr: %ssl_subject" +descr: "Certificate does not match domainname" + +name: X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT +detail: "SSL Certficate error: certificate issuer (CA) not known: %ssl_ca_name" +descr: "Unable to get issuer certificate" + +name: X509_V_ERR_UNABLE_TO_GET_CRL +detail: "%ssl_error_descr: %ssl_subject" +descr: "Unable to get certificate CRL" + +name: X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE +detail: "%ssl_error_descr: %ssl_subject" +descr: "Unable to decrypt certificate's signature" + +name: X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE +detail: "%ssl_error_descr: %ssl_subject" +descr: "Unable to decrypt CRL's signature" + +name: X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY +detail: "Unable to decode issuer (CA) public key: %ssl_ca_name" +descr: "Unable to decode issuer public key" + +name: X509_V_ERR_CERT_SIGNATURE_FAILURE +detail: "%ssl_error_descr: %ssl_subject" +descr: "Certificate signature failure" + +name: X509_V_ERR_CRL_SIGNATURE_FAILURE +detail: "%ssl_error_descr: %ssl_subject" +descr: "CRL signature failure" + +name: X509_V_ERR_CERT_NOT_YET_VALID +detail: "SSL Certficate is not valid before: %ssl_notbefore" +descr: "Certificate is not yet valid" + +name: X509_V_ERR_CERT_HAS_EXPIRED +detail: "SSL Certificate expired on: %ssl_notafter" +descr: "Certificate has expired" + +name: X509_V_ERR_CRL_NOT_YET_VALID +detail: "%ssl_error_descr: %ssl_subject" +descr: "CRL is not yet valid" + +name: X509_V_ERR_CRL_HAS_EXPIRED +detail: "%ssl_error_descr: %ssl_subject" +descr: "CRL has expired" + +name: X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD +detail: "SSL Certificate has invalid start date (the 'not before' field): %ssl_subject" +descr: "Format error in certificate's notBefore field" + +name: X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD +detail: "SSL Certificate has invalid expiration date (the 'not after' field): %ssl_subject" +descr: "Format error in certificate's notAfter field" + +name: X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD +detail: "%ssl_error_descr: %ssl_subject" +descr: "Format error in CRL's lastUpdate field" + +name: X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD +detail: "%ssl_error_descr: %ssl_subject" +descr: "Format error in CRL's nextUpdate field" + +name: X509_V_ERR_OUT_OF_MEM +detail: "%ssl_error_descr" +descr: "Out of memory" + +name: X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT +detail: "Self-signed SSL Certificate: %ssl_subject" +descr: "Self signed certificate" + +name: X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN +detail: "Self-signed SSL Certificate in chain: %ssl_subject" +descr: "Self signed certificate in certificate chain" + +name: X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY +detail: "SSL Certficate error: certificate issuer (CA) not known: %ssl_ca_name" +descr: "Unable to get local issuer certificate" + +name: X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE +detail: "%ssl_error_descr: %ssl_subject" +descr: "Unable to verify the first certificate" + +name: X509_V_ERR_CERT_CHAIN_TOO_LONG +detail: "%ssl_error_descr: %ssl_subject" +descr: "Certificate chain too long" + +name: X509_V_ERR_CERT_REVOKED +detail: "%ssl_error_descr: %ssl_subject" +descr: "Certificate revoked" + +name: X509_V_ERR_INVALID_CA +detail: "%ssl_error_descr: %ssl_ca_name" +descr: "Invalid CA certificate" + +name: X509_V_ERR_PATH_LENGTH_EXCEEDED +detail: "%ssl_error_descr: %ssl_subject" +descr: "Path length constraint exceeded" + +name: X509_V_ERR_INVALID_PURPOSE +detail: "%ssl_error_descr: %ssl_subject" +descr: "Unsupported certificate purpose" + +name: X509_V_ERR_CERT_UNTRUSTED +detail: "%ssl_error_descr: %ssl_subject" +descr: "Certificate not trusted" + +name: X509_V_ERR_CERT_REJECTED +detail: "%ssl_error_descr: %ssl_subject" +descr: "Certificate rejected" + +name: X509_V_ERR_SUBJECT_ISSUER_MISMATCH +detail: "%ssl_error_descr: %ssl_ca_name" +descr: "Subject issuer mismatch" + +name: X509_V_ERR_AKID_SKID_MISMATCH +detail: "%ssl_error_descr: %ssl_subject" +descr: "Authority and subject key identifier mismatch" + +name: X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH +detail: "%ssl_error_descr: %ssl_ca_name" +descr: "Authority and issuer serial number mismatch" + +name: X509_V_ERR_KEYUSAGE_NO_CERTSIGN +detail: "%ssl_error_descr: %ssl_subject" +descr: "Key usage does not include certificate signing" + +name: X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER +detail: "%ssl_error_descr: %ssl_subject" +descr: "unable to get CRL issuer certificate" + +name: X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION +detail: "%ssl_error_descr: %ssl_subject" +descr: "unhandled critical extension" + +name: X509_V_ERR_KEYUSAGE_NO_CRL_SIGN +detail: "%ssl_error_descr: %ssl_subject" +descr: "key usage does not include CRL signing" + +name: X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION +detail: "%ssl_error_descr: %ssl_subject" +descr: "unhandled critical CRL extension" + +name: X509_V_ERR_INVALID_NON_CA +detail: "%ssl_error_descr: %ssl_subject" +descr: "invalid non-CA certificate (has CA markings)" + +name: X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED +detail: "%ssl_error_descr: %ssl_subject" +descr: "proxy path length constraint exceeded" + +name: X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE +detail: "%ssl_error_descr: %ssl_subject" +descr: "key usage does not include digital signature" + +name: X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED +detail: "%ssl_error_descr: %ssl_subject" +descr: "proxy certificates not allowed, please set the appropriate flag" + +name: X509_V_ERR_INVALID_EXTENSION +detail: "%ssl_error_descr: %ssl_subject" +descr: "invalid or inconsistent certificate extension" + +name: X509_V_ERR_INVALID_POLICY_EXTENSION +detail: "%ssl_error_descr: %ssl_subject" +descr: "invalid or inconsistent certificate policy extension" + +name: X509_V_ERR_NO_EXPLICIT_POLICY +detail: "%ssl_error_descr: %ssl_subject" +descr: "no explicit policy" + +name: X509_V_ERR_DIFFERENT_CRL_SCOPE +detail: "%ssl_error_descr: %ssl_subject" +descr: "Different CRL scope" + +name: X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE +detail: "%ssl_error_descr: %ssl_subject" +descr: "Unsupported extension feature" + +name: X509_V_ERR_UNNESTED_RESOURCE +detail: "%ssl_error_descr: %ssl_subject" +descr: "RFC 3779 resource not subset of parent's resources" + +name: X509_V_ERR_PERMITTED_VIOLATION +detail: "%ssl_error_descr: %ssl_subject" +descr: "permitted subtree violation" + +name: X509_V_ERR_EXCLUDED_VIOLATION +detail: "%ssl_error_descr: %ssl_subject" +descr: "excluded subtree violation" + +name: X509_V_ERR_SUBTREE_MINMAX +detail: "%ssl_error_descr: %ssl_subject" +descr: "name constraints minimum and maximum not supported" + +name: X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE +detail: "%ssl_error_descr: %ssl_subject" +descr: "unsupported name constraint type" + +name: X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX +detail: "%ssl_error_descr: %ssl_subject" +descr: "unsupported or invalid name constraint syntax" + +name: X509_V_ERR_UNSUPPORTED_NAME_SYNTAX +detail: "%ssl_error_descr: %ssl_subject" +descr: "unsupported or invalid name syntax" + +name: X509_V_ERR_CRL_PATH_VALIDATION_ERROR +detail: "%ssl_error_descr: %ssl_subject" +descr: "CRL path validation error" + +name: X509_V_ERR_APPLICATION_VERIFICATION +detail: "%ssl_error_descr: %ssl_subject" +descr: "Application verification failure" diff --git a/src/opnsense/scripts/proxy/template_error_pages/errorpage.css b/src/opnsense/scripts/proxy/template_error_pages/errorpage.css new file mode 100644 index 000000000..01795c9bb --- /dev/null +++ b/src/opnsense/scripts/proxy/template_error_pages/errorpage.css @@ -0,0 +1,105 @@ +/* + * Copyright (C) 1996-2020 The Squid Software Foundation and contributors + * + * Squid software is distributed under GPLv2+ license and includes + * contributions from numerous individuals and organizations. + * Please see the COPYING and CONTRIBUTORS files for details. + */ + +/* + Stylesheet for Squid Error pages + Adapted from design by Free CSS Templates + http://www.freecsstemplates.org + Released for free under a Creative Commons Attribution 2.5 License +*/ + +/* Page basics */ +* { + font-family: verdana, sans-serif; +} + +html body { + margin: 0; + padding: 0; + background: #efefef; + font-size: 12px; + color: #1e1e1e; +} + +/* Page displayed title area */ +#titles { + margin-left: 5px; + padding: 10px; + padding-left: 130px; + + background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDk1IDk4IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zOnNlcmlmPSJodHRwOi8vd3d3LnNlcmlmLmNvbS8iIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MS40MTQyMTsiPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwwLC0wLjAwNDE1NDcxKSI+CiAgICAgICAgPHBhdGggZD0iTTk0Ljc0Nyw5LjAxMUw4Ny40NTcsOS4wMTFMODcuNDU3LDcuNDk1TDEwLjc2OCw3LjQ5NUMxMC40NTYsNy40OTUgMTAuMjEsNy41MzkgOS44OTgsNy42MDZMOS44NzYsNy42MDZMOS40OTcsNy43NEw5LjQzLDcuNzYyTDkuMzg2LDcuNzg1TDkuMzE5LDcuODI5TDkuMDI5LDcuOTg1TDguOTYyLDguMDA3TDguOTYyLDguMDNMOC44MjgsOC4wOTdMOC43MTcsOC4xODZMOC42NzIsOC4yM0w4LjYwNSw4LjI3NUw4LjU2MSw4LjI5N0w4LjU2MSw4LjMyTDguNTE2LDguMzY0TDguNDQ5LDguNDA5TDguNDA1LDguNDUzTDguMzYsOC40OThMOC4yNDksOC42MDlMOC4yMjYsOC42NTRMOC4xNTksOC43MjFMOC4xMTUsOC43NDNMOC4xMzcsOC43NDNMOC4wNyw4LjgxTDguMDQ4LDguODMyTDguMDQ4LDguODU1TDguMDAzLDguODk5TDguMDAzLDguOTIyTDcuOTU5LDguOTY2TDcuOTM2LDkuMDExTDAuMjksOS4wMTFMMC4yOSw4LjQ5OEMxLjQyNywzLjYzOCA1LjcwNywwLjAwNCAxMC43NjgsMC4wMDRMOTQuNzQ3LDAuMDA0TDk0Ljc0Nyw5LjAxMVoiIHN0eWxlPSJmaWxsOnJnYigyMjcsMjI4LDIyOSk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLDAsLTAuMDA0MTU0NzEpIj4KICAgICAgICA8cGF0aCBkPSJNODcuNDU3LDcuNTE3TDk0Ljc0NywzLjU5M0w5NC43NDcsMTEuMDg0TDg3LjQ3OSwxNC45ODVMODcuNDU3LDE0Ljk4NUw4Ny40NTcsNy41MTdaIiBzdHlsZT0iZmlsbDp1cmwoI19MaW5lYXIxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgIDwvZz4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsMCwtMC4wMDQxNTQ3MSkiPgogICAgICAgIDxwYXRoIGQ9Ik0yLjAwNiw0LjY2M0w4LjY3Miw4LjIzTDguNjA1LDguMjc1TDguNTYxLDguMjk3TDguNTYxLDguMzJMOC41MTYsOC4zNjRMOC40NDksOC40MDlMOC40MDUsOC40NTNMOC4zNiw4LjQ5OEw4LjI0OSw4LjYwOUw4LjIyNiw4LjY1NEw4LjE1OSw4LjcyMUw4LjExNSw4Ljc0M0w4LjEzNyw4Ljc0M0w4LjA3LDguODFMOC4wNDgsOC44MzJMOC4wNDgsOC44NTVMOC4wMDMsOC44OTlMOC4wMDMsOC45MjJMNy45NTksOC45NjZMNy44OTIsOS4wNzhMNy44Nyw5LjFMNy44MDMsOS4yMTFMNy43NTgsOS4yNzhMNy43NTgsOS4zTDcuNjAyLDkuNTY4TDcuNjAyLDkuNTlMNy41OCw5LjY1N0w3LjU1Nyw5LjcwMkw3LjUzNSw5Ljc0Nkw3LjUzNSw5Ljc2OUw3LjQwMSwxMC4xOTJDNy40MDEsMTAuMTcgNy4yOSwxMC43NzIgNy4yOSwxMS4wNjJMNy4yOSwxNC45ODVMMCwxMS4wODRMMCwxMS4wNjJDMCw4LjY3NiAwLjczNiw2LjQ2OSAyLjAwNiw0LjY2M1oiIHN0eWxlPSJmaWxsOnVybCgjX0xpbmVhcjIpO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwwLC0wLjAwNDE1NDcxKSI+CiAgICAgICAgPHJlY3QgeD0iMTQuNTgiIHk9IjE0Ljk4NSIgd2lkdGg9IjY1LjU4NyIgaGVpZ2h0PSI3LjQ5MSIgc3R5bGU9ImZpbGw6cmdiKDE0NywxNDYsMTQ2KTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgIDwvZz4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsMCwtMC4wMDQxNTQ3MSkiPgogICAgICAgIDxwYXRoIGQ9Ik0wLDg4LjM3NUw3LjI5LDg4LjM3NUw3LjI5LDg5Ljg2OUw4My45NzksODkuODY5Qzg0LjI5MSw4OS44NjkgODQuNTM3LDg5Ljg0NyA4NC44MjYsODkuNzU3TDg0Ljg0OSw4OS43NTdMODUuMjUsODkuNjI0TDg1LjI5NSw4OS42MDFMODUuMzM5LDg5LjU3OUw4NS40MjgsODkuNTU3TDg1LjY5Niw4OS40MDFMODUuNzYzLDg5LjM1Nkw4NS43ODUsODkuMzU2TDg1Ljg5Niw4OS4yNjdMODYuMDA4LDg5LjJMODYuMDA4LDg5LjE3OEw4Ni4wNzUsODkuMTMzTDg2LjE0Miw4OS4wODlMODYuMTY0LDg5LjA2Nkw4Ni4yMzEsODkuMDIyTDg2LjI5OCw4OC45NTVMODYuMzIsODguOTMzTDg2LjMyLDg4LjkxTDg2LjM2NSw4OC44ODhMODYuNDc2LDg4Ljc3Nkw4Ni40NzYsODguNzU0TDg2LjUyMSw4OC43MzJMODYuNTY1LDg4LjY2NUw4Ni42MSw4OC42Mkw4Ni42NTQsODguNTU0TDg2LjY3Nyw4OC41MzFMODYuNzIxLDg4LjQ2NEw4Ni43NjYsODguMzk3TDg2Ljc4OCw4OC4zOTdMODYuODEsODguMzc1TDk0LjQzNSw4OC4zNzVMOTQuNDM1LDg4Ljg4OEM5My4yOTgsOTMuNzQ4IDg5LjA0LDk3LjM1OSA4My45NzksOTcuMzU5TDAsOTcuMzU5TDAsODkuOTU4TDAsODkuODY5TDAsODguMzc1WiIgc3R5bGU9ImZpbGw6cmdiKDIyNywyMjgsMjI5KTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgIDwvZz4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsMCwtMC4wMDQxNTQ3MSkiPgogICAgICAgIDxwYXRoIGQ9Ik03LjI5LDg5Ljg2OUwwLDkzLjc3TDAsODkuOTU4TDAsODkuODY5TDAsODYuMjhMNy4yNDUsODIuMzc4TDcuMjksODIuMzc4TDcuMjksODkuODY5WiIgc3R5bGU9ImZpbGw6dXJsKCNfTGluZWFyMyk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLDAsLTAuMDA0MTU0NzEpIj4KICAgICAgICA8cGF0aCBkPSJNOTIuNzQxLDkyLjdMODYuMDc1LDg5LjEzM0w4Ni4xNDIsODkuMDg5TDg2LjE2NCw4OS4wNjZMODYuMjMxLDg5LjAyMkw4Ni4yOTgsODguOTU1TDg2LjMyLDg4LjkzM0w4Ni4zMiw4OC45MUw4Ni4zNjUsODguODg4TDg2LjQ3Niw4OC43NzZMODYuNDc2LDg4Ljc1NEw4Ni41MjEsODguNzMyTDg2LjU2NSw4OC42NjVMODYuNjEsODguNjJMODYuNjU0LDg4LjU1NEw4Ni42NzcsODguNTMxTDg2LjcyMSw4OC40NjRMODYuNzY2LDg4LjM5N0w4Ni43ODgsODguMzk3TDg2Ljg1NSw4OC4yODZMODYuOTQ0LDg4LjE1Mkw4Ni45ODksODguMDg1TDg3LjEyMyw4Ny43OTZMODcuMTQ1LDg3Ljc3M0w4Ny4xNjcsODcuNzI5TDg3LjE2Nyw4Ny43MDZMODcuMTg5LDg3LjY2Mkw4Ny4xODksODcuNjM5TDg3LjIxMiw4Ny42MTdMODcuMzQ2LDg3LjE5NEM4Ny4zNDYsODcuMTk0IDg3LjQ1Nyw4Ni41OTIgODcuNDU3LDg2LjMwMkw4Ny40NTcsODIuNDAxTDk0Ljc0Nyw4Ni4yOEw5NC43NDcsODYuMzAyQzk0LjcyNSw4OC42ODcgOTMuOTg5LDkwLjg5NCA5Mi43NDEsOTIuN1oiIHN0eWxlPSJmaWxsOnVybCgjX0xpbmVhcjQpO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwwLC0wLjAwNDE1NDcxKSI+CiAgICAgICAgPHJlY3QgeD0iNy4yOSIgeT0iMjkuOTY2IiB3aWR0aD0iMjguMDIzIiBoZWlnaHQ9IjcuNDkxIiBzdHlsZT0iZmlsbDpyZ2IoMTcwLDE3MSwxNzEpO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwwLC0wLjAwNDE1NDcxKSI+CiAgICAgICAgPHBhdGggZD0iTTIxLjE1NiwzNy40NTdMNy4yOSwzMC4wMTFMNy4yOSwyOS45NjZMMjEuNDAyLDI5Ljk2NkwzNS4zMTMsMzcuNDEyTDM1LjMxMywzNy40NTdMMjEuMTU2LDM3LjQ1N1oiIHN0eWxlPSJmaWxsOnVybCgjX0xpbmVhcjUpO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwwLC0wLjAwNDE1NDcxKSI+CiAgICAgICAgPHJlY3QgeD0iNTkuNDEyIiB5PSIyOS45NjYiIHdpZHRoPSIyOC4wNDUiIGhlaWdodD0iNy40OTEiIHN0eWxlPSJmaWxsOnJnYigxNzAsMTcxLDE3MSk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLDAsLTAuMDA0MTU0NzEpIj4KICAgICAgICA8cGF0aCBkPSJNNzMuNTY4LDM3LjQ1N0w4Ny40NTcsMzAuMDExTDg3LjQ1NywyOS45NjZMNzMuMzIzLDI5Ljk2Nkw1OS40MTIsMzcuNDEyTDU5LjQxMiwzNy40NTdMNzMuNTY4LDM3LjQ1N1oiIHN0eWxlPSJmaWxsOnVybCgjX0xpbmVhcjYpO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwwLC0wLjAwNDE1NDcxKSI+CiAgICAgICAgPHJlY3QgeD0iNTkuNDEyIiB5PSI1OS45MjkiIHdpZHRoPSIyOC4wNDUiIGhlaWdodD0iNy40OTEiIHN0eWxlPSJmaWxsOnJnYigxNzAsMTcxLDE3MSk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLDAsLTAuMDA0MTU0NzEpIj4KICAgICAgICA8cGF0aCBkPSJNNzMuNTY4LDU5LjkyOUw4Ny40NTcsNjcuMzUyTDg3LjQ1Nyw2Ny40MTlMNzMuMzIzLDY3LjQxOUw1OS40MTIsNTkuOTUxTDU5LjQxMiw1OS45MjlMNzMuNTY4LDU5LjkyOVoiIHN0eWxlPSJmaWxsOnVybCgjX0xpbmVhcjcpO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwwLC0wLjAwNDE1NDcxKSI+CiAgICAgICAgPHJlY3QgeD0iNy4yOSIgeT0iNTkuOTI5IiB3aWR0aD0iMjguMDIzIiBoZWlnaHQ9IjcuNDkxIiBzdHlsZT0iZmlsbDpyZ2IoMTcwLDE3MSwxNzEpO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwwLC0wLjAwNDE1NDcxKSI+CiAgICAgICAgPHBhdGggZD0iTTIxLjE1Niw1OS45MjlMNy4yOSw2Ny4zNTJMNy4yOSw2Ny40MTlMMjEuNDAyLDY3LjQxOUwzNS4zMTMsNTkuOTUxTDM1LjMxMyw1OS45MjlMMjEuMTU2LDU5LjkyOVoiIHN0eWxlPSJmaWxsOnVybCgjX0xpbmVhcjgpO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwwLC0wLjAwNDE1NDcxKSI+CiAgICAgICAgPHBhdGggZD0iTTM1LjMxMywzNy40NTdMMCwxOC41NTJMMCwxMS4wNjJMMzUuMzEzLDI5Ljk2NkwzNS4zMTMsMzcuNDU3WiIgc3R5bGU9ImZpbGw6dXJsKCNfTGluZWFyOSk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLDAsLTAuMDA0MTU0NzEpIj4KICAgICAgICA8cGF0aCBkPSJNNTkuNDEyLDM3LjQ1N0w5NC43NDcsMTguNTUyTDk0Ljc0NywxMS4wNjJMNTkuNDEyLDI5Ljk2Nkw1OS40MTIsMzcuNDU3WiIgc3R5bGU9ImZpbGw6dXJsKCNfTGluZWFyMTApO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwwLC0wLjAwNDE1NDcxKSI+CiAgICAgICAgPHJlY3QgeD0iMTQuNzE0IiB5PSI3NC45MSIgd2lkdGg9IjY1LjU4NyIgaGVpZ2h0PSI3LjQ2OCIgc3R5bGU9ImZpbGw6cmdiKDE0NywxNDYsMTQ2KTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgIDwvZz4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsMCwtMC4wMDQxNTQ3MSkiPgogICAgICAgIDxwYXRoIGQ9Ik01OS40MTIsNTkuOTI5TDk0Ljc0Nyw3OC44MTFMOTQuNzQ3LDg2LjMwMkw1OS40MTIsNjcuNDE5TDU5LjQxMiw1OS45MjlaIiBzdHlsZT0iZmlsbDp1cmwoI19MaW5lYXIxMSk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLDAsLTAuMDA0MTU0NzEpIj4KICAgICAgICA8cGF0aCBkPSJNMzUuMzEzLDU5LjkyOUwwLDc4LjgxMUwwLDg2LjMwMkwzNS4zMTMsNjcuNDE5TDM1LjMxMyw1OS45MjlaIiBzdHlsZT0iZmlsbDp1cmwoI19MaW5lYXIxMik7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLDAsLTAuMDA0MTU0NzEpIj4KICAgICAgICA8cGF0aCBkPSJNOTQuNzQ3LDQ0Ljk0OEw3My40MTIsNDQuOTQ4TDgwLjE0NSw0MS4zMzZMODAuMTQ1LDMzLjg0Nkw1OS40MTIsNDQuOTQ4TDU5LjQxMiw1Mi40MzhMNTkuNDM0LDUyLjQzOEw4MC4xNjcsNjMuNTE4TDgwLjE2Nyw1Ni4wMjdMNzMuNDM0LDUyLjQzOEw5NC43NDcsNTIuNDM4TDk0Ljc0Nyw0NC45NDhaIiBzdHlsZT0iZmlsbDpyZ2IoMjE3LDc5LDApO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwwLC0wLjAwNDE1NDcxKSI+CiAgICAgICAgPHBhdGggZD0iTTE0LjU4LDMzLjg0NkwxNC41OCw0MS4zMzZMMjEuMzM1LDQ0Ljk0OEwwLDQ0Ljk0OEwwLDUyLjQzOEwyMS4zMTIsNTIuNDM4TDE0LjU4LDU2LjAyN0wxNC41OCw2My41MThMMzUuMzEzLDUyLjQzOEwzNS4zMTMsNTIuNDE2TDM1LjMxMyw0NC45NDhMMTQuNTgsMzMuODQ2WiIgc3R5bGU9ImZpbGw6cmdiKDIxNyw3OSwwKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgIDwvZz4KICAgIDxkZWZzPgogICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iX0xpbmVhcjEiIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjY1ODQxLDUuODQwNTYsLTUuODQwNTYsMS42NTg0MSw5MC4yNjM1LDYuMzY5MTIpIj48c3RvcCBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYigyMjgsMjI4LDIyOCk7c3RvcC1vcGFjaXR5OjEiLz48c3RvcCBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYigxNjIsMTYyLDE2Mik7c3RvcC1vcGFjaXR5OjEiLz48L2xpbmVhckdyYWRpZW50PgogICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iX0xpbmVhcjIiIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMi4yOTE1NCw1LjgxOTU4LC01LjgxOTU4LC0yLjI5MTU0LDUuNDc2ODYsNi45MTQ1KSI+PHN0b3Agb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoMjI4LDIyOCwyMjgpO3N0b3Atb3BhY2l0eToxIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoMTYyLDE2MiwxNjIpO3N0b3Atb3BhY2l0eToxIi8+PC9saW5lYXJHcmFkaWVudD4KICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Il9MaW5lYXIzIiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTEuNjU4ODUsLTUuODM5MzEsNS44MzkzMSwtMS42NTg4NSw0LjQ3MzEsOTEuMDAyNykiPjxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDIyOCwyMjgsMjI4KTtzdG9wLW9wYWNpdHk6MSIvPjxzdG9wIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDE2MiwxNjIsMTYyKTtzdG9wLW9wYWNpdHk6MSIvPjwvbGluZWFyR3JhZGllbnQ+CiAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPSJfTGluZWFyNCIgeDE9IjAiIHkxPSIwIiB4Mj0iMSIgeTI9IjAiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMjkxMzEsLTUuODE5MjQsNS44MTkyNCwyLjI5MTMxLDg5LjI1OTQsOTAuNDU3NikiPjxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDIyOCwyMjgsMjI4KTtzdG9wLW9wYWNpdHk6MSIvPjxzdG9wIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDE2MiwxNjIsMTYyKTtzdG9wLW9wYWNpdHk6MSIvPjwvbGluZWFyR3JhZGllbnQ+CiAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPSJfTGluZWFyNSIgeDE9IjAiIHkxPSIwIiB4Mj0iMSIgeTI9IjAiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC00Ni4xODUsLTEyLjAxNjgsMTIuMDE2OCwtNDYuMTg1LDQ0LjM5MzcsMzkuNzE1NikiPjxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDE3MCwxNzEsMTcxKTtzdG9wLW9wYWNpdHk6MSIvPjxzdG9wIG9mZnNldD0iMC4xIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoMTcwLDE3MSwxNzEpO3N0b3Atb3BhY2l0eToxIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoNzgsNzgsNzgpO3N0b3Atb3BhY2l0eToxIi8+PC9saW5lYXJHcmFkaWVudD4KICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Il9MaW5lYXI2IiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNDYuMTg2MSwtMTIuMDE1OSwxMi4wMTU5LDQ2LjE4NjEsNTAuMzQyLDM5LjcxNTIpIj48c3RvcCBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYigxNzAsMTcxLDE3MSk7c3RvcC1vcGFjaXR5OjEiLz48c3RvcCBvZmZzZXQ9IjAuMSIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDE3MCwxNzEsMTcxKTtzdG9wLW9wYWNpdHk6MSIvPjxzdG9wIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDc4LDc4LDc4KTtzdG9wLW9wYWNpdHk6MSIvPjwvbGluZWFyR3JhZGllbnQ+CiAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPSJfTGluZWFyNyIgeDE9IjAiIHkxPSIwIiB4Mj0iMSIgeTI9IjAiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDQ2LjE4NTQsMTIuMDE1OSwtMTIuMDE1OSw0Ni4xODU0LDUwLjM0MjUsNTcuNjU2OSkiPjxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDE3MCwxNzEsMTcxKTtzdG9wLW9wYWNpdHk6MSIvPjxzdG9wIG9mZnNldD0iMC4xIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoMTcwLDE3MSwxNzEpO3N0b3Atb3BhY2l0eToxIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoNzgsNzgsNzgpO3N0b3Atb3BhY2l0eToxIi8+PC9saW5lYXJHcmFkaWVudD4KICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Il9MaW5lYXI4IiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTQ2LjE4NDQsMTIuMDE2NiwtMTIuMDE2NiwtNDYuMTg0NCw0NC4zOTM1LDU3LjY1NjQpIj48c3RvcCBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYigxNzAsMTcxLDE3MSk7c3RvcC1vcGFjaXR5OjEiLz48c3RvcCBvZmZzZXQ9IjAuMSIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDE3MCwxNzEsMTcxKTtzdG9wLW9wYWNpdHk6MSIvPjxzdG9wIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDc4LDc4LDc4KTtzdG9wLW9wYWNpdHk6MSIvPjwvbGluZWFyR3JhZGllbnQ+CiAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPSJfTGluZWFyOSIgeDE9IjAiIHkxPSIwIiB4Mj0iMSIgeTI9IjAiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDM1LjMxNTUsMCwwLDM1LjMxNTUsLTAuMDAwMjgzNDY3LDI0LjI1ODcpIj48c3RvcCBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYigyNTQsMjU0LDI1NCk7c3RvcC1vcGFjaXR5OjEiLz48c3RvcCBvZmZzZXQ9IjAuMjMiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYigyNTQsMjU0LDI1NCk7c3RvcC1vcGFjaXR5OjEiLz48c3RvcCBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYigxNzYsMTc2LDE3Nik7c3RvcC1vcGFjaXR5OjEiLz48L2xpbmVhckdyYWRpZW50PgogICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iX0xpbmVhcjEwIiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTM1LjMxNTQsNC4zMjQ4OWUtMTUsLTQuMzI0ODllLTE1LC0zNS4zMTU0LDk0LjczNiwyNC4yNTg3KSI+PHN0b3Agb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoMjU0LDI1NCwyNTQpO3N0b3Atb3BhY2l0eToxIi8+PHN0b3Agb2Zmc2V0PSIwLjIzIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoMjU0LDI1NCwyNTQpO3N0b3Atb3BhY2l0eToxIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoMTc2LDE3NiwxNzYpO3N0b3Atb3BhY2l0eToxIi8+PC9saW5lYXJHcmFkaWVudD4KICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Il9MaW5lYXIxMSIgeDE9IjAiIHkxPSIwIiB4Mj0iMSIgeTI9IjAiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0zNS4zMTU0LDQuMzI0ODllLTE1LC00LjMyNDg5ZS0xNSwtMzUuMzE1NCw5NC43MzYsNzMuMTEzMykiPjxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDI1NCwyNTQsMjU0KTtzdG9wLW9wYWNpdHk6MSIvPjxzdG9wIG9mZnNldD0iMC4yMyIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDI1NCwyNTQsMjU0KTtzdG9wLW9wYWNpdHk6MSIvPjxzdG9wIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDE3NiwxNzYsMTc2KTtzdG9wLW9wYWNpdHk6MSIvPjwvbGluZWFyR3JhZGllbnQ+CiAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPSJfTGluZWFyMTIiIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgzNS4zMTU1LDAsMCwzNS4zMTU1LC0wLjAwMDI4MzQ2Nyw3My4xMTMzKSI+PHN0b3Agb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoMjU0LDI1NCwyNTQpO3N0b3Atb3BhY2l0eToxIi8+PHN0b3Agb2Zmc2V0PSIwLjIzIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoMjU0LDI1NCwyNTQpO3N0b3Atb3BhY2l0eToxIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoMTc2LDE3NiwxNzYpO3N0b3Atb3BhY2l0eToxIi8+PC9saW5lYXJHcmFkaWVudD4KICAgIDwvZGVmcz4KPC9zdmc+Cg==') no-repeat left; +} + +/* initial title */ +#titles h1 { + color: #000000; +} +#titles h2 { + color: #000000; +} + +/* special event: FTP success page titles */ +#titles ftpsuccess { + background-color:#00ff00; + width:100%; +} + +/* Page displayed body content area */ +#content { + padding: 10px; + background: #ffffff; +} + +/* General text */ +p { +} + +/* error brief description */ +#error p { +} + +/* some data which may have caused the problem */ +#data { +} + +/* the error message received from the system or other software */ +#sysmsg { +} + +pre { +} + +/* special event: FTP / Gopher directory listing */ +#dirmsg { + font-family: courier, monospace; + color: black; + font-size: 10pt; +} +#dirlisting { + margin-left: 2%; + margin-right: 2%; +} +#dirlisting tr.entry td.icon,td.filename,td.size,td.date { + border-bottom: groove; +} +#dirlisting td.size { + width: 50px; + text-align: right; + padding-right: 5px; +} + +/* horizontal lines */ +hr { + margin: 0; +} + +/* page displayed footer area */ +#footer { + font-size: 9px; + padding-left: 10px; +}